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

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

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

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

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

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

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

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

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

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


Хреново.

Но не понятно почему прошитый в платформе вариант отрабатывать в десятки раз быстрее чем программный.
И нет даже возможности программно вызвать существующий вариант заложенный в платформе.
SP2000; Live; +2 Ответить
10. ture 573 16.05.15 14:32 Сейчас в теме
(1) хожу по каждому узлу и разворачиваю в рекурсии
3. logos 184 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 Сейчас в теме
Используйте для оптимизации следующий код (отключение текущей строки)

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

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

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

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

КонецЦикла;

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