gifts2017

Показать определенный уровень Дерева значений на управляемой форме.

Опубликовал Игорь Steelvan (Steelvan) в раздел Программирование - Практика программирования

Данный пример кода показывает, как на управляемой форме можно программным путем настраивать отображаемый уровень дерева значений.
Это было написано для удобства работы пользователей, что бы не нажимать на все крестики до нужного уровня, а просто нажать одну кнопку.

Данный пример кода показывает, как на управляемой форме можно программным путем настраивать отображаемый уровень дерева значений.
Это было написано для удобства работы пользователей, что бы не нажимать на все крестики до нужного уровня, а просто нажать одну кнопку.

Данный код добавляется в модуль любой формы, где есть элемент с типом ДеревоЗначений.

Описание реквизитов, используемых в коде:

ДеревоДокументов - Данные формы дерево. Данные лежащего на поле элемента.

 

//Событие формы
// Отсюда передается интересующий уровень.
// Собственно - сама кнопка
&НаКлиенте
Процедура Команда4Уровень(Команда)

    ПоказатьУровеньДерева(4);

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

&НаКлиенте
Процедура ПоказатьУровеньДерева(чНужныйУровеньДерева)

    спзСтрокиДереваДляСортировки = Новый СписокЗначений;
    ЭлементыДерева = ДеревоДокументов.ПолучитьЭлементы();
    РазобратьДеревоДокументовНаСтроки(ЭлементыДерева, 0, спзСтрокиДереваДляСортировки);

    СвернутьСтрокиДереваДокументов(спзСтрокиДереваДляСортировки, чНужныйУровеньДерева);

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


// В связи с особенностью сворачивания дерева на форме, сворачивать можно только от самых нижних уровней.

// Дерево значений разбиваем на строки, сортируем и начинаем сворачивать от самого нижнего уровня.
// Данный подход позволяет реализовать на клиенте метод Уровень() Дерева значений, доступный только на сервере.

&НаКлиенте
Процедура РазобратьДеревоДокументовНаСтроки(ЭлементыДерева, чПредУровень, спзСтрокиДереваДляСортировки)

    чТекУровень = чПредУровень + 1;

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

КонецПроцедуры
// Сортировка, свертка от нижнего уровня. Раскрытие до нужного уровня.

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

    спзСтрокиДереваДляСортировки.СортироватьПоЗначению(НаправлениеСортировки.Убыв);

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

    Для каждого ТекСтрокаспзСтрокиДереваДляСортировки из спзСтрокиДереваДляСортировки Цикл
        Если ТекСтрокаспзСтрокиДереваДляСортировки.Значение <= чНужныйУровеньДерева тогда
            Элементы.ДеревоДокументов.Развернуть(ТекСтрокаспзСтрокиДереваДляСортировки.Представление);
        КонецЕсли;
    КонецЦикла;

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

См. также

Автор запретил комментарии