Свернуть с учетом уровня дерево значений на управляемой форме

Набор процедур, которые сворачивают дерево значений на управляемой форме до определенного уровня

Ниже представлен блок процедур, для реализации данного механизма, пояснения см. в коментах

 

//Обрабочика команды формы
&НаКлиенте
Процедура Уровень4(Команда)
ПоказатьУровеньДерева(4);
КонецПроцедуры

//Основная процедура свертки до уровня
//Уровень -число, номер уровня, до которого сворачиваем
&НаКлиенте
Процедура ПоказатьУровеньДерева(Уровень)
//предворительно сворачиваем дерево,
//т.к. если свернуть верхний уровень,
//вложенные останутся неизменными
СвернутьДерево(ДеревоЗначений);

//разварачиваем
//ДеревоЗначений — дерево которое сворачиваем
//Уровень — число
РазвернутьДерево(ДеревоЗначений,Уровень);
КонецПроцедуры

//Сворачивает дерево
//Дерево -дерево значений
&НаКлиенте
Процедура СвернутьДерево(Дерево)
Для Каждого Строка Из Дерево.ПолучитьЭлементы() Цикл
ИдентификаторСтроки=Строка.ПолучитьИдентификатор();
//рекурсивно вызываем эту же процедуру,
//что бы предварительно свернуть все подчиненные уровни
СвернутьДерево(Строка);

Элементы.ДеревоЗначений.Свернуть(ИдентификаторСтроки);
КонецЦикла;
КонецПроцедуры

&НаКлиенте
//Разворачивает дерево
//Дерево -дерево значений
//Уровень — число, передаем значение (не переменную),
//что бы при рекурсивном вызове значение переменной сохранялось
Процедура РазвернутьДерево(Дерево,знач Уровень)
Уровень=Уровень-1;
Для Каждого Строка Из Дерево.ПолучитьЭлементы() Цикл

Если Уровень>=0 Тогда
ИдентификаторСтроки=Строка.ПолучитьИдентификатор();
Элементы.ДеревоЗначений.Развернуть(ИдентификаторСтроки);
//рекурсивно вызываем эту же процедуру,
//что бы развернуть все подчиненные уровни
РазвернутьДерево(Строка,Уровень);
КонецЕсли;
КонецЦикла;
КонецПроцедуры

1 Comment

  1. Yashazz

    Я когда такое у себя делаю, ещё добавляю пункт «раскрыть по текущему уровню» — исходя из уровня текущей строки в интерфейсе. Юзверю ведь не всегда удобно увидеть/понять, на каком уровне та или иная ветка.

    Ну и естественно, количество уровней определяется динамически, по ходу дела))

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *