gifts2017

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

Опубликовал Иван (ivashka) в раздел Программирование - Работа с интерфейсом

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

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

 

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

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

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

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

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

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Яков Коган (Yashazz) 04.10.14 20:37
Я когда такое у себя делаю, ещё добавляю пункт "раскрыть по текущему уровню" - исходя из уровня текущей строки в интерфейсе. Юзверю ведь не всегда удобно увидеть/понять, на каком уровне та или иная ветка.

Ну и естественно, количество уровней определяется динамически, по ходу дела))
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа