Имя: Пароль:
1C
 
Дерево значений на форме УФ. Как ускорить операции свернуть и развернуть?
0 spiller26
 
01.10.20
11:05
Есть дерево значений на форме (1 Уровень вложения, данных много). При сворачивании и разворачивании делается ну очень долго. Как ускорить процесс?

https://prnt.sc/ur31cr

&НаКлиенте
Процедура РаскрытьВсеВетки(Команда)
    СтрокиДерева = ДеревоОстатков.ПолучитьЭлементы();
    Для Каждого ТекущаяСтрока Из СтрокиДерева Цикл
        Элементы.ДеревоОстатков.Развернуть(ТекущаяСтрока.ПолучитьИдентификатор(), Истина);
    КонецЦикла;
КонецПроцедуры
1 spiller26
 
01.10.20
11:28
короче болты.
2 polosov
 
01.10.20
11:30
Да, болты. Дерево довольно проблемная коллекция.
3 lEvGl
 
гуру
01.10.20
11:34
а зачем это программно делать
4 lEvGl
 
гуру
01.10.20
11:35
ctrl + shift + + развернуть все
ctrl + shift + - свернуть все
должны быть и еще штатные варианты
5 oslokot
 
01.10.20
11:41
Иногда помогает такой лайфхак, но на сервере и не во всех случаях


    // Развернуть все узлы дерева
    Элементы.ДеревоРабот.НачальноеОтображениеДерева = НачальноеОтображениеДерева.НеРаскрывать;
    Элементы.ДеревоРабот.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;

6 spiller26
 
01.10.20
11:49
(5) Попытался сделать так.
Смотрю скорость выполнения

&НаКлиенте
Процедура РазвернутьДерево()
    
    //СтрокиДерева = ДеревоОстатков.ПолучитьЭлементы();
    //Для Каждого ТекущаяСтрока Из СтрокиДерева Цикл
    //    Элементы.ДеревоОстатков.Развернуть(ТекущаяСтрока.ПолучитьИдентификатор(), Ложь);
    //КонецЦикла;
    
    ДеревоНаСервере();
    Если Элементы.ДеревоОстатков.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВерхнийУровень Тогда
        Элементы.ДеревоОстатков.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
    Иначе
        Элементы.ДеревоОстатков.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВерхнийУровень;
    КонецЕсли;    

    
КонецПроцедуры    

&НаСервере
Процедура ДеревоНаСервере()
    
    тДерево = РеквизитФормыВЗначение("ДеревоОстатков");
    ЗначениеВРеквизитФормы(тДерево, "ДеревоОстатков");
    
КонецПроцедуры
7 Мойдодыр
 
01.10.20
11:50
ссылки отображаются в дереве?
замени их на представления, а сами ссылки скрой
8 spiller26
 
01.10.20
11:52
(7) Ссылки не отображаются, только представления.
9 lEvGl
 
гуру
01.10.20
11:53
а чем хоткей не подходит
10 spiller26
 
01.10.20
11:56
(9) бухам нужна кнопка
11 lEvGl
 
гуру
01.10.20
11:58
нарисуй на форме красными буквами комбинации, если это важный вопрос
12 spiller26
 
01.10.20
12:04
Файловая база (копия): Формирование на сервере дерева ~1 минута
Полное раскрытие дерева на клиенте:
Если код = (6) - ~2 минуты.
Если код = (0) - ~4 минуты.
13 Мойдодыр
 
01.10.20
12:08
а если разворачивать без подчиненных?
14 acht
 
01.10.20
12:17
(12) Перебрать рекурсивно от листьев к корню и открыть каждую подветку снизу без подчиненых?
15 spiller26
 
01.10.20
13:36
(13) ~4 (Элементы.ДеревоОстатков.Развернуть(ТекущаяСтрока.ПолучитьИдентификатор(), Ложь);)
(12) На клиенте?
16 Cyberhawk
 
01.10.20
13:39
Используй дин. список с настроенной группировкой, будет то же дерево, но с порционностью.
Тем более тебе там интерактивное редактирование в строках не требуется.
17 spiller26
 
01.10.20
13:44
(16) Динамический не получиться, т.к. нужно редактировать некоторые данные.
18 Cyberhawk
 
01.10.20
13:59
(17) Получится, просто для редактирования придется немного попотеть.
С большим деревом же ты обречен делать порционность самостоятельно, это куда геморнее чем ДС с редактированием.