Построение дерева значений с отбром и иерархией

1. Тильчик 03.12.21 08:23 Сейчас в теме
Добрый день!
Есть иерархический справочник с типом иерархии "Иерархия элементов" (в БСП структура предприятия), причем количество уровней иерархии неограничено. У каждого элемента есть реквизит с типом Булево.
Если стоить дерево без отбора получается так:
Строка 0
Строка 1
-Строка 2 = РеквизитБулево
--Строка 3
---Строка 4 - РеквизитБулево
----Строка 5
Строка 6
Строка 7-РеквизитБулево

Как выстроить дерево чтобы было так:
Строка 2 = РеквизитБулево
-Строка 4 - РеквизитБулево
Строка 7-РеквизитБулево
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user790708 03.12.21 11:45 Сейчас в теме
1) Выбрать запросом структуру иерархии:
ВЫБРАТЬ
	МойСправочник.Ссылка КАК Ссылка,
	МойСправочник.Родитель КАК Родитель,
        МойСправочник.РеквизитБулево КАК Мойреквизит
ИЗ
	Справочник. КАК МойСправочник
УПОРЯДОЧИТЬ ПО
	МойСправочник.Родитель



Далее рекурсивно обойти результат запроса иерархии и добавить элементы. Что-то типа:

Процедура ДобавитьВДерво(ВхСтрокаДерева, ТаблицаРезультатЗапроса, Родитель = Неопределено)
    Дети = ТаблицаРезультатаЗапроса.НайтиСтроки(Новый Структура("Родитель", Родитель));
	Для Каждого СтрДети Из Дети Цикл
		Если СтрДети.МойРеквизит = Истина Тогда
        	        ТекСтрокаДерева = ВхСтрокаДерева.Строки.Добавить();		
			ТекСтрокаДерева.Родитель = Родитель;
			ТекСтрокаДерева.Ссылка = СтрДети.Ссылка;
		Иначе 
			ТекСтрокаДерева = ВхСтрокаДерева;
		КонецЕсли;
		ДобавитьВДерво(ТекСтрокаДерева, ТаблицаРезультатЗапроса, ТекСтрокаДерева.Ссылка);
    КонецЦикла;
КонецПроцедуры

МоеДерево = Новый ДеревоЗначений;
ДобавитьВДерво(МоеДерево, ТаблицаРезультатЗапроса);
Показать
3. Тильчик 04.12.21 09:16 Сейчас в теме
Нет, не сработало:( ПРоблема в том, что мой реквизит может быть в разных уровнях, и по родителю не найдешь:(
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот