Как быстро программно свернуть/развернуть дерева значений в управляемых формах?
на форму вынесен объект "Дерево значений"
заполняется он запросом, так что порядок и количество уровней может быть различное и довольно большое (несколько тысяч строк)
по кнопкам Ctrl+Shift++ И Ctrl+Shift+- Происходит практически мгновенное разворачивание и сворачивание дерева.
А как эти действия выполнить программно.
Известный мне метод
ИдентификаторСтроки=Строка.ПолучитьИдентификатор();
ДеревоНаФорме.Развернуть(ИдентификаторСтроки);
Для больших объемов дерева оооочень медленно работает.
В идеале разворачивать дерево до N-ого уровня.
заполняется он запросом, так что порядок и количество уровней может быть различное и довольно большое (несколько тысяч строк)
по кнопкам Ctrl+Shift++ И Ctrl+Shift+- Происходит практически мгновенное разворачивание и сворачивание дерева.
А как эти действия выполнить программно.
Известный мне метод
ИдентификаторСтроки=Строка.ПолучитьИдентификатор();
ДеревоНаФорме.Развернуть(ИдентификаторСтроки);
Для больших объемов дерева оооочень медленно работает.
В идеале разворачивать дерево до N-ого уровня.
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Поручик,
Хреново.
Но не понятно почему прошитый в платформе вариант отрабатывать в десятки раз быстрее чем программный.
И нет даже возможности программно вызвать существующий вариант заложенный в платформе.
Других альтернатив, кроме Развернуть() нет.
Хреново.
Но не понятно почему прошитый в платформе вариант отрабатывать в десятки раз быстрее чем программный.
И нет даже возможности программно вызвать существующий вариант заложенный в платформе.
(5) Fatman,
Не всегда срабатывает, лучше делать обход так:
Есть еще вариант программно:
ЭлементыФормы.ИмяВашегоТабличногоПоляДерево.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни
ЭлементыФормы.ИмяВашегоТабличногоПоляДерево.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни
Не всегда срабатывает, лучше делать обход так:
КоллекцияЭлементовДерева=ДеревоНоменклатуры.ПолучитьЭлементы();
Для Каждого Строка Из КоллекцияЭлементовДерева Цикл
ИдентификаторСтроки=Строка.ПолучитьИдентификатор();
Элементы.ДеревоНоменклатуры.Развернуть(ИдентификаторСтроки, Истина);
КонецЦикла;
Используйте для оптимизации следующий код (отключение текущей строки)
// для оптимизации отключаем тек. строку
ИдентификаторТекСтроки = Элементы.ДеревоСправочника.ТекущаяСтрока;
Элементы.ДеревоСправочника.ТекущаяСтрока = Неопределено;
КоллекцияЭлементовДерева = ДеревоСправочника.ПолучитьЭлементы();
//Развернуть дерево
Для Каждого Строка Из КоллекцияЭлементовДерева Цикл
ИдентификаторСтроки = Строка.ПолучитьИдентификатор();
Элементы.ДеревоСправочника.Развернуть(ИдентификаторСтроки, Истина);
КонецЦикла;
// включаем тек. строку
Элементы.ДеревоСправочника.ТекущаяСтрока = ИдентификаторТекСтроки;
// для оптимизации отключаем тек. строку
ИдентификаторТекСтроки = Элементы.ДеревоСправочника.ТекущаяСтрока;
Элементы.ДеревоСправочника.ТекущаяСтрока = Неопределено;
КоллекцияЭлементовДерева = ДеревоСправочника.ПолучитьЭлементы();
//Развернуть дерево
Для Каждого Строка Из КоллекцияЭлементовДерева Цикл
ИдентификаторСтроки = Строка.ПолучитьИдентификатор();
Элементы.ДеревоСправочника.Развернуть(ИдентификаторСтроки, Истина);
КонецЦикла;
// включаем тек. строку
Элементы.ДеревоСправочника.ТекущаяСтрока = ИдентификаторТекСтроки;
(15) Столкнулся с аналогичной проблемой, написал внешнюю компоненту - https://infostart.ru/public/1293938/
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот