Построение дерева значений с отбром и иерархией
Добрый день!
Есть иерархический справочник с типом иерархии "Иерархия элементов" (в БСП структура предприятия), причем количество уровней иерархии неограничено. У каждого элемента есть реквизит с типом Булево.
Если стоить дерево без отбора получается так:
Строка 0
Строка 1
-Строка 2 = РеквизитБулево
--Строка 3
---Строка 4 - РеквизитБулево
----Строка 5
Строка 6
Строка 7-РеквизитБулево
Как выстроить дерево чтобы было так:
Строка 2 = РеквизитБулево
-Строка 4 - РеквизитБулево
Строка 7-РеквизитБулево
Есть иерархический справочник с типом иерархии "Иерархия элементов" (в БСП структура предприятия), причем количество уровней иерархии неограничено. У каждого элемента есть реквизит с типом Булево.
Если стоить дерево без отбора получается так:
Строка 0
Строка 1
-Строка 2 = РеквизитБулево
--Строка 3
---Строка 4 - РеквизитБулево
----Строка 5
Строка 6
Строка 7-РеквизитБулево
Как выстроить дерево чтобы было так:
Строка 2 = РеквизитБулево
-Строка 4 - РеквизитБулево
Строка 7-РеквизитБулево
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
1) Выбрать запросом структуру иерархии:
Далее рекурсивно обойти результат запроса иерархии и добавить элементы. Что-то типа:
ВЫБРАТЬ
МойСправочник.Ссылка КАК Ссылка,
МойСправочник.Родитель КАК Родитель,
МойСправочник.РеквизитБулево КАК Мойреквизит
ИЗ
Справочник. КАК МойСправочник
УПОРЯДОЧИТЬ ПО
МойСправочник.Родитель
Далее рекурсивно обойти результат запроса иерархии и добавить элементы. Что-то типа:
Процедура ДобавитьВДерво(ВхСтрокаДерева, ТаблицаРезультатЗапроса, Родитель = Неопределено)
Дети = ТаблицаРезультатаЗапроса.НайтиСтроки(Новый Структура("Родитель", Родитель));
Для Каждого СтрДети Из Дети Цикл
Если СтрДети.МойРеквизит = Истина Тогда
ТекСтрокаДерева = ВхСтрокаДерева.Строки.Добавить();
ТекСтрокаДерева.Родитель = Родитель;
ТекСтрокаДерева.Ссылка = СтрДети.Ссылка;
Иначе
ТекСтрокаДерева = ВхСтрокаДерева;
КонецЕсли;
ДобавитьВДерво(ТекСтрокаДерева, ТаблицаРезультатЗапроса, ТекСтрокаДерева.Ссылка);
КонецЦикла;
КонецПроцедуры
МоеДерево = Новый ДеревоЗначений;
ДобавитьВДерво(МоеДерево, ТаблицаРезультатЗапроса);
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот