Свернуть-развернуть дерево на форме (обычные формы)
Есть база на основе УТ 10.3
В ней обработка. В обработке дерево с товарами и кучей колонок. В дереве много расчетов при получении данных и при выводе строки.
К дереву есть кнопки свернуть/развернуть. Вот так
В общем оно работает, но 1с на каждое сворачивание пытается вывести дерево в форму, вызывает все обработчики и в результате это дело работает нереально долго. Само по себе дерево нормально шевелится, пользователи работают без особых тормозов.
Вопрос: как сделать, чтобы при сворачивании форма обновлялась только один раз? Или, может быть, это все можно сделать как-то совсем по-другому, намного лучше?
В ней обработка. В обработке дерево с товарами и кучей колонок. В дереве много расчетов при получении данных и при выводе строки.
К дереву есть кнопки свернуть/развернуть. Вот так
Процедура КоманднаяПанельНоменклатураСвернутьДерево(Кнопка)
СвернутьСтрокиДерева(ДеревоТоваров);
КонецПроцедуры
Процедура СвернутьСтрокиДерева(СтрокаДерева)
Для Каждого Строка Из СтрокаДерева.Строки Цикл
ЭлементыФормы.ДеревоТоваров.Свернуть(Строка);
СвернутьСтрокиДерева(Строка);
КонецЦикла;
КонецПроцедуры
ПоказатьВ общем оно работает, но 1с на каждое сворачивание пытается вывести дерево в форму, вызывает все обработчики и в результате это дело работает нереально долго. Само по себе дерево нормально шевелится, пользователи работают без особых тормозов.
Вопрос: как сделать, чтобы при сворачивании форма обновлялась только один раз? Или, может быть, это все можно сделать как-то совсем по-другому, намного лучше?
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)Как вариант - добавьте переменную в форму, ЭтоСворачиваниеДерева.
И в процедуре ПриПолученииДанных и ПриВыводеСтроки в начало добавьте проверку
Процедура КоманднаяПанельНоменклатураСвернутьДерево(Кнопка)
ЭтоСворачиваниеДерева = Истина;
СвернутьСтрокиДерева(ДеревоТоваров);
ЭтоСворачиваниеДерева = Ложь;
КонецПроцедуры
И в процедуре ПриПолученииДанных и ПриВыводеСтроки в начало добавьте проверку
Если ЭтоСворачиваниеДерева = Истина Тогда
Возврат;
КонецЕсли;
еще как вариант, в обычных формах можно использовать "горячие" комбинации клавишь
их так же можно отправлять в форму с помощью Sendkey
Ctrl+Shit+[+] - все развернуть
Ctrl+Shit+[-] - все свернуть
Попробуйте по кнопке послать такие комбинации на форму
(наверняка системный механизм быстрее отработает)
их так же можно отправлять в форму с помощью Sendkey
Ctrl+Shit+[+] - все развернуть
Ctrl+Shit+[-] - все свернуть
Попробуйте по кнопке послать такие комбинации на форму
(наверняка системный механизм быстрее отработает)
(4) упс, а программно и не получилось (и не у меня одного, сочетания CTRL + Shift вместе не работают)
но получилось свернуть/развернуть с помощью реквизита6 НачальноеОтображениеДерева
вот пример, посмотрите может примените к своему дереву
(без цикла, без рекурсии)
но получилось свернуть/развернуть с помощью реквизита6 НачальноеОтображениеДерева
вот пример, посмотрите может примените к своему дереву
(без цикла, без рекурсии)
Прикрепленные файлы:
ВнешняяОбработкаДЗ_Свернуть.epf
Исследования меня привели к самому быстрому методу:
Внимание! важна последовательность строк кода)
Элементы.Дерево.Видимость = Ложь;
Элементы.Дерево.Отображение = ОтображениеТаблицы.Список;
ЭтаФорма.ОбновитьОтображениеДанных(Элементы.Дерево);
Элементы.Дерево.Видимость = Истина;
Элементы.Дерево.Отображение = ОтображениеТаблицы.Дерево;
Внимание! важна последовательность строк кода)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот