Рекурсия в запросе

1. AnatolPopov 173 16.05.23 06:43 Сейчас в теме
Есть справочник Укладки.
В нем есть табличная часть, состоящая из строк:

Контейнер, ВложеннаяУкладка, КоличествоУкладок

ВложеннаяУкладка - элемент того же справочника.

Во вложенной укладке, в свою очередь, тоже могут быть вложенные укладки, и так далее.
Экземпляры одной и той же вложенной укладки могут находиться на разных ветках дерева и даже в разных строках в одном контейнере, причем в любом количестве.
О зацикливании вложенности можно не беспокоиться, она всячески предотвращается.

Так вот, очень хочется в запросе для отчета получить плоский список, содержащий все вложенные укладки, оказавшиеся в одном дереве, причем с указанием количества вхождений каждой.
То есть должны быть строки:

ВложеннаяУкладка, КоличествоУкладок

И никакой иерархии.
Как сделать иерархию через связь наборов данных, я знаю, но в ней будет бардак с количеством.
А вот как без бардака все найти и посчитать?
Процедурным языком это делается просто, но не хочется вкорячивать в отчет такое решение.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. glek 120 16.05.23 07:56 Сейчас в теме
(1) Здесь, на ИС попадалась статья что-то типа "Транзиктивное замыкание в запросе". Мож поможет.
AnatolPopov; +1 Ответить
8. AnatolPopov 173 16.05.23 11:28 Сейчас в теме
(5)
Транзиктивное замыкание в запросе

Да, нашел https://infostart.ru/1c/articles/158512/ и по ссылке оттуда еще https://forum.infostart.ru/forum9/topic35991/#message395140
Есть над чем подумать.
Спасибо ;)
2. acces969 362 16.05.23 07:14 Сейчас в теме
Похожее попадалось на практике, решения не нашел. В итоге вывел два способа. Первый - проверять на null долгие цепочки Родитель.Родитель.Родитель... Это плохо.
Второй способ, это делать объединение запросов к различным уровням вложенности. Тогда не придется прыгать по точкам, но реализовать сложнее, и не во всех случаях поможет
3. ISP 16.05.23 07:15 Сейчас в теме
Если в запросе, то можно попробовать через условия связи. Сделать связь по какому-нибудь полю "УровеньВложенности" с условием ">".
Если смотреть в строну СКД, то использовать вложенные схемы.
Может и получится.
4. starjevschik 16.05.23 07:37 Сейчас в теме
В запросе можно, если назначить максимальный уровень вложенности и сделать запрос с таким количеством соединений.
6. nomad_irk 76 16.05.23 08:16 Сейчас в теме
(4).....или нужного количества объединений/пакетный запрос с нужным количеством запросов
7. Said-We 16.05.23 11:07 Сейчас в теме
(1) Если не 1С, то рекурсивные запросы короткие и не сложные.
with vt_dec as
	(sel ect
		0 as a
	uni on all
	sel ect
		t.a+1 as a
	fr om
		vt_dec as t
	where
		t.a+1 <=9
	)
Показать
Оставьте свое сообщение

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