Как быстро программно свернуть/развернуть дерева значений в управляемых формах?

1. 21.08.13 17:58 Сейчас в теме
на форму вынесен объект "Дерево значений"

заполняется он запросом, так что порядок и количество уровней может быть различное и довольно большое (несколько тысяч строк)

по кнопкам Ctrl+Shift++ И Ctrl+Shift+- Происходит практически мгновенное разворачивание и сворачивание дерева.

А как эти действия выполнить программно.

Известный мне метод

ИдентификаторСтроки=Строка.ПолучитьИдентификатор();
ДеревоНаФорме.Развернуть(ИдентификаторСтроки);

Для больших объемов дерева оооочень медленно работает.

В идеале разворачивать дерево до N-ого уровня.
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Поручик 4535 21.08.13 23:07 Сейчас в теме
(1) Других альтернатив, кроме Развернуть() нет.
4. AntExec 22.08.13 16:57 Сейчас в теме
(2) Поручик,

Других альтернатив, кроме Развернуть() нет.


Хреново.

Но не понятно почему прошитый в платформе вариант отрабатывать в десятки раз быстрее чем программный.
И нет даже возможности программно вызвать существующий вариант заложенный в платформе.
SP2000; Live; +2 Ответить
10. ture 593 16.05.15 14:32 Сейчас в теме
(1) хожу по каждому узлу и разворачиваю в рекурсии
3. logos 197 22.08.13 11:50 Сейчас в теме
Ну почему же нет? Кто мешает эмулировать нажатие клавиш Ctrl+Shift++ И Ctrl+Shift+-? Например внешней компонентой :)
5. Fatman 10.02.15 12:35 Сейчас в теме
Есть еще вариант программно:
ЭлементыФормы.ИмяВашегоТабличногоПоляДерево.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни
6. Prisian 29.04.15 11:27 Сейчас в теме
(5) Fatman,

Есть еще вариант программно:
ЭлементыФормы.ИмяВашегоТабличногоПоляДерево.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни

Не всегда срабатывает, лучше делать обход так:
КоллекцияЭлементовДерева=ДеревоНоменклатуры.ПолучитьЭлементы();
Для Каждого Строка Из КоллекцияЭлементовДерева Цикл    
    ИдентификаторСтроки=Строка.ПолучитьИдентификатор();
    Элементы.ДеревоНоменклатуры.Развернуть(ИдентификаторСтроки, Истина);
КонецЦикла;
7. Fatman 16.05.15 14:19 Сейчас в теме
Этот метод работает медленно на больших деревьях. см. первый пост
8. Chameleon1980 16.05.15 14:29 Сейчас в теме
9. Chameleon1980 16.05.15 14:30 Сейчас в теме
11. denis_r 12.12.17 12:16 Сейчас в теме
Используйте для оптимизации следующий код (отключение текущей строки)

// для оптимизации отключаем тек. строку
ИдентификаторТекСтроки = Элементы.ДеревоСправочника.ТекущаяСтрока;
Элементы.ДеревоСправочника.ТекущаяСтрока = Неопределено;

КоллекцияЭлементовДерева = ДеревоСправочника.ПолучитьЭлементы();

//Развернуть дерево
Для Каждого Строка Из КоллекцияЭлементовДерева Цикл

ИдентификаторСтроки = Строка.ПолучитьИдентификатор();
Элементы.ДеревоСправочника.Развернуть(ИдентификаторСтроки, Истина);

КонецЦикла;

// включаем тек. строку
Элементы.ДеревоСправочника.ТекущаяСтрока = ИдентификаторТекСтроки;
buy_sale; crypto; +2 Ответить
12. bulpi 187 04.09.18 21:32 Сейчас в теме
(11)
Чуть быстрее, но проблему это не решило. Решил добавлением корневого элемента в дерево. Тогда все дерево мгновенно раскрывается:
Элементы.МоеДерево.Развернуть(0,Истина);
13. bulpi 187 04.09.18 21:57 Сейчас в теме
(11)
П.С.
Увы, мгновенно раскрывается при небольшом числе элементов (до 1000) . А дальше опять плохо.
14. KAV2 126 07.09.20 08:41 Сейчас в теме
(13) Удалось ли в итоге решить проблему?
15. bulpi 187 07.09.20 12:05 Сейчас в теме
16. KAV2 126 15.09.20 09:40 Сейчас в теме
(15) Столкнулся с аналогичной проблемой, написал внешнюю компоненту - https://infostart.ru/public/1293938/
17. bulpi 187 15.09.20 13:51 Сейчас в теме
Оставьте свое сообщение
Вопросы с вознаграждением
Вакансии
Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Программист 1С
Москва
зарплата от 150 000 руб. до 200 000 руб.
Полный день

Ведущий разработчик 1С
Москва
зарплата от 250 000 руб.
Полный день

Руководитель проектов 1С
Москва
зарплата от 200 000 руб.
Полный день

Программист 1С
Москва
зарплата от 150 000 руб.
Полный день