Свернуть-развернуть дерево на форме (обычные формы)

1. starjevschik 15.09.22 11:30 Сейчас в теме
Есть база на основе УТ 10.3
В ней обработка. В обработке дерево с товарами и кучей колонок. В дереве много расчетов при получении данных и при выводе строки.
К дереву есть кнопки свернуть/развернуть. Вот так

Процедура КоманднаяПанельНоменклатураСвернутьДерево(Кнопка)
	СвернутьСтрокиДерева(ДеревоТоваров);
КонецПроцедуры

Процедура СвернутьСтрокиДерева(СтрокаДерева)
	Для Каждого Строка Из СтрокаДерева.Строки Цикл
		ЭлементыФормы.ДеревоТоваров.Свернуть(Строка);
		СвернутьСтрокиДерева(Строка);
	КонецЦикла;
КонецПроцедуры
Показать

В общем оно работает, но 1с на каждое сворачивание пытается вывести дерево в форму, вызывает все обработчики и в результате это дело работает нереально долго. Само по себе дерево нормально шевелится, пользователи работают без особых тормозов.
Вопрос: как сделать, чтобы при сворачивании форма обновлялась только один раз? Или, может быть, это все можно сделать как-то совсем по-другому, намного лучше?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. Sashares 34 15.09.22 12:49 Сейчас в теме
(1)Как вариант - добавьте переменную в форму, ЭтоСворачиваниеДерева.

Процедура КоманднаяПанельНоменклатураСвернутьДерево(Кнопка)
ЭтоСворачиваниеДерева = Истина;
    СвернутьСтрокиДерева(ДеревоТоваров);
ЭтоСворачиваниеДерева = Ложь;
КонецПроцедуры


И в процедуре ПриПолученииДанных и ПриВыводеСтроки в начало добавьте проверку
Если ЭтоСворачиваниеДерева = Истина Тогда
Возврат;
КонецЕсли;
8. starjevschik 15.09.22 13:16 Сейчас в теме
(6) да, тоже так думал, в принципе реальный вариант, но как-то нетехнологично. Глобальные переменные, фу. Но если ничего другого не придумается, то так сделаю
9. Sashares 34 15.09.22 14:42 Сейчас в теме
(8)Почему глобальные, переменная модуля формы.
2. soft_wind 15.09.22 11:57 Сейчас в теме
а зачем рекурсивно все строчки сворачиваете?
для пользователя будет достаточно только верхний уровень свернуть!
3. soft_wind 15.09.22 12:12 Сейчас в теме
еще как вариант, в обычных формах можно использовать "горячие" комбинации клавишь
их так же можно отправлять в форму с помощью Sendkey
Ctrl+Shit+[+] - все развернуть
Ctrl+Shit+[-] - все свернуть

Попробуйте по кнопке послать такие комбинации на форму
(наверняка системный механизм быстрее отработает)
starjevschik; +1 Ответить
4. starjevschik 15.09.22 12:28 Сейчас в теме
(3) круто, а как это дело вызвать программно?
7. kuzev 47 15.09.22 13:00 Сейчас в теме
5. soft_wind 15.09.22 12:31 Сейчас в теме
10. soft_wind 15.09.22 14:49 Сейчас в теме
(4) упс, а программно и не получилось (и не у меня одного, сочетания CTRL + Shift вместе не работают)

но получилось свернуть/развернуть с помощью реквизита6 НачальноеОтображениеДерева

вот пример, посмотрите может примените к своему дереву
(без цикла, без рекурсии)
Прикрепленные файлы:
ВнешняяОбработкаДЗ_Свернуть.epf
starjevschik; +1 Ответить
11. starjevschik 15.09.22 15:37 Сейчас в теме
(10) спасибо, попробую на рабочей базе, может так быстрее будет, надо на всех данных попробовать.
12. Anton11 28.03.24 16:41 Сейчас в теме
Исследования меня привели к самому быстрому методу:

Элементы.Дерево.Видимость = Ложь;
Элементы.Дерево.Отображение = ОтображениеТаблицы.Список;
ЭтаФорма.ОбновитьОтображениеДанных(Элементы.Дерево);
Элементы.Дерево.Видимость = Истина;
Элементы.Дерево.Отображение = ОтображениеТаблицы.Дерево;


Внимание! важна последовательность строк кода)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот