Имя: Пароль:
1C
1С v8
Структура подчиненности запросом
0 Мистикан
 
04.12.15
11:18
Континент страхование.
Заключается полис (док1), потом по полису происходят изменения создается еще один (док2), потом может быть еще и еще.
Первоначальный полис в последующих хранится в реквизите СтарыйПолис,последующие по хранятся в реквизите ПредыдущийПолис.

ИмяДок   СтарыйПолис    ПредыдущийПолис
Док1
Док2     Док1          
Док3     Док1           Док2
Док4     Док1           Док3

Как запросом собрать эту последовательность в цепочку? Пятницо, 16.11 башка вообще не хочет ничего придумывать (((
1 su_mai
 
04.12.15
11:21
(0) >потом может быть еще и еще.

Кроме рекурсии ничего не подскажу
2 Artful Den
 
04.12.15
11:28
Да, без рекурсии никак
3 aleks_default
 
04.12.15
11:29
критерием отбора
4 mikecool
 
04.12.15
11:30
(3) это если известен корень
5 aleks_default
 
04.12.15
11:37
Ну тогда произвольная иерархия в СКД(если тип документа один)
6 Ildarovich
 
04.12.15
12:43
Вот в этой статье есть решение: http://catalog.mista.ru/public/158512/ . Там приведена функция, которая строит и выполняет запрос. Если ножен только запрос, его можно получить, запустив эту функцию и вставив "Сообщить" в нужное место. В функции только "Пролог" нужно на свой случай переделать, вставив вместо Пролог = "ВЫБРАТЬ Родитель НачалоДуги, Ссылка КонецДуги ПОМЕСТИТЬ ЗамыканияДлины1 ИЗ Справочник.Номенклатура

            | ГДЕ Родитель <> Значение(Справочник.Номенклатура.ПустаяСсылка)

            | ОБЪЕДИНИТЬ ВЫБРАТЬ Ссылка, Ссылка ИЗ Справочник.Номенклатура;";

Пролог = "ВЫБРАТЬ ПредыдущийПолис НачалоДуги, Ссылка КонецДуги ПОМЕСТИТЬ ЗамыканияДлины1 ИЗ Документ.Полис

            | ГДЕ ПредыдущийПолис <> Значение(Документ.Полис.ПустаяСсылка)

            | ОБЪЕДИНИТЬ ВЫБРАТЬ Ссылка, Ссылка ИЗ Документ.Полис;";
7 su_mai
 
04.12.15
14:50
(6) А мне понравилось :) А решал подобную задачу получения таблицы "счет - родитель" по всей иерархии, но использовал вызов запроса в цикле, по тем счетам где родитель не Null.

А если не секрет, от куда пришла идея про транзитивное соединение -непосредственно из математики или еще от куда то?
8 Ildarovich
 
04.12.15
15:16
(7) Транзитивное замыкание - это не идея решения, а элемент формулировки задачи. Конечно, это математический термин.
Собственно решение - это алгоритм матричного умножения. Хотя я до него вроде сам когда-то додумался (в поиске быстрого способа определить достижимые состояния системы с известными связями состояний), алгоритм известный, в википедии он есть.