Получить связанные значения через неизвесноское количетсво связуемых

1. whiteo 13.02.19 11:22 Сейчас в теме
Приветствую коллеги,
возникла задача, построить на СКД отчет который бы из Регистра сведений выбрал данные связанные между собой через промежуточные записи.
Связка может выглядит следующим образом.
Объект1 связан с Объектом2 через неизвестное количество подобъектов, известны типы Объектов, типы подобъектов могут быть разные, но выяснить и составить список значений в принципе реально.
Так же есть и такие случаи что Объект1 связан с Обьектом2 и Обьектом3 и т.д. так же через неизвестное количество подобъектов.
Все эти цепочки нужно вывести в отчет

Пример: Объект1 - подобъект1 ; подобъект1 - подобъект2 ; подобъект2 - подобъект3 ; подобъект3 - подобъект4 ; подобъект4 - Объект2
Пример2: Объект1 - подобъект1 ; подобъект1 - подобъект2 ; подобъект2 - Объект2; Объект2- подобъект3 ; подобъект3 - Объект3

Пробовал сделать через ВТ но т.к. впереди от Обьекта1 до ОбьектаХ неизвестное количество промежутков, решение не правильное.
Прикрепленные файлы:
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. killitch 30 13.02.19 11:41 Сейчас в теме
У вас рекурсивный вызов намечается, запросы такого не умеют. Чисто средствами СКД, думаю, не получится.
3. whiteo 13.02.19 11:42 Сейчас в теме
(2)ну по сути дела да, это и будет рекурсия :(
5. dhurricane 13.02.19 12:23 Сейчас в теме
(3) На самом деле СКД умеет работать с подобной рекурсией. Попробуйте поискать материал на тему произвольной иерархии данных в СКД.
6. vasgius 13.02.19 12:56 Сейчас в теме
(5)
все правильно, нужно смотреть в сторону построения произвольной иерархии детальных записей
7. killitch 30 13.02.19 13:20 Сейчас в теме
(6)При неизвестном количестве промежуточных звеньев в цепи между объектами, статичными настройками СКД, даже произвольными, думаю не удастся добиться приемлемого результата. Только если ограничить искусственно количество рассматриваемых связей.
8. dhurricane 13.02.19 13:25 Сейчас в теме
(7) О каком ограничении связей идет речь?
9. killitch 30 13.02.19 13:33 Сейчас в теме
(8)Например рассматривать не более 10 связей, соот-но, там где их больше для получения результата, будут некорректны, зато остальные отработают.
Но это, с точки зрения получения правильного результата, ошибочное направление.
10. dhurricane 13.02.19 13:44 Сейчас в теме
(9) Если Вы про связи между наборами данных, то в приведенной выше ссылке она одна. При любом уровне вложенности данных иерархии.
11. whiteo 13.02.19 13:50 Сейчас в теме
(10)
Регистр имеет всего 2 основных реквизита по которым идут операции
ВЫБРАТЬ 
        РСДляОтчета.ИсточникОбъект КАК ИсточникОбъект,
        РСДляОтчета.ПолучательОбъект КАК ПолучательОбъект
ИЗ
	РегистрСведений.РСДляОтчета.СрезПоследних() КАК РСДляОтчета


не понял каким образом достичь нужной цели через связи наборов?
14. dhurricane 13.02.19 14:05 Сейчас в теме
(11) Уточните, все данные берутся из одного источника? И объекты, и подобъекты?
19. whiteo 13.02.19 14:19 Сейчас в теме
(14)Да, данные берутся из 1 регистра и оба реквизита = справочники.ОбъектДляОтчета
20. dhurricane 13.02.19 14:24 Сейчас в теме
(19) Тогда очень похоже, что информация по ссылке в (6) - то, что Вам нужно. Поищите еще информацию по произвольной иерархии в СКД, т.к. примером по ссылке рассматриваются не все возможные случаи.

К сожалению, могу только советовать, где копать, т.к. описание Вашей задачи очень абстрактное. Если разберетесь с произвольной иерархией в СКД, но не сможете ее применить, то описывайте Вашу задачу полностью с конкретикой. Будем смотреть, как решать.
killitch; +1 Ответить
12. killitch 30 13.02.19 13:50 Сейчас в теме
(10)
Пример: Объект1 - подобъект1 ; подобъект1 - подобъект2 ; подобъект2 - подобъект3 ; подобъект3 - подобъект4 ; подобъект4 - Объект2
Пример2: Объект1 - подобъект1 ; подобъект1 - подобъект2 ; подобъект2 - Объект2; Объект2- подобъект3 ; подобъект3 - Объект3

Каждая пара получается своим набором данных, если я правильно понял.
Для примера1 и примера 2 разное количество наборов. В СКД статичные связи наборов. Или избыточно прописывать максимально возможное количество или забить на СКД.
Я другого варианта не вижу. Предложите?
13. whiteo 13.02.19 13:54 Сейчас в теме
(12)максимальное возможное количество может быть от 2 до ∞ :(
15. killitch 30 13.02.19 14:05 Сейчас в теме
(13)Да, поэтому и говорю, что только рекурсия спасет, а она в СКД не возможна. Ну по крайней мере я о ней ничего не знаю. И буду рад и признателен тому, кто просветит на эту тему, т.к. весьма часто встречаются задачи похожей логики. Часто это связано с неправильной организацией хранения данных.
17. vasgius 13.02.19 14:09 Сейчас в теме
18. killitch 30 13.02.19 14:15 Сейчас в теме
16. dhurricane 13.02.19 14:07 Сейчас в теме
(12) Не все правильно поняли. Взгляните еще раз на пример по приведенной ссылке. Там набор данных связан сам с собой. Один раз. Потом взгляните на картинку с результатом. Там есть данные до третьего уровня вложенности.
4. killitch 30 13.02.19 11:43 Сейчас в теме
Я на днях разматывал партию готовой продукции до первичного сырья, так вот только с рекурсивными функциями, больше ничего не придумал.
21. ildarovich 7867 14.02.19 15:04 Сейчас в теме
Должно подойти решение из вот этой статьи: Транзитивное замыкание запросом. Есть еще несколько статей у меня в профиле, развивающие эту тему.
Только обратите внимание: в исходной статье предлагается не запрос, а функция, строящая текст запроса. Это, наверное, может смущать.
На деле можно сразу записать запрос под эту задачу по приведенному принципу.
В комментариях к статье это объясняется.
Оставьте свое сообщение

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