Имя: Пароль:
1C
1С v8
запрос_рекурсия
0 devochka_1c
 
10.12.14
14:22
Добрый день!конфигурация 1С. есть справочник партии. у партии есть реквизит исходная партия (ссылка на элемент справочника партии). получается, что партии с партиями связываются в цепочку через этот реквизит. Мне нужно найти самую первую партию во всей этой цепочке. Каким образом это правильно сделать? я так понимаю, что это рекурсия? имеется ли возможность реализовать запросом?
1 antoneus
 
10.12.14
14:26
тоже долго думал над таким, потом плюнул и сделал через рекурсию.
2 Ненавижу 1С
 
гуру
10.12.14
14:30
можно хранить дополнительный реквизит "начальная партия", который будет рассчитываться ПередЗаписью

но лучше сделать даже не реквизит, а регистр сведений
3 zulu_mix
 
10.12.14
14:32
если известно количество уровней то можно запросом. если нет то динамически собирать запрос
4 Garykom
 
гуру
10.12.14
14:37
(0) у самой первой партии реквизит "исходная партия" пустой - логично?

тогда одним запросом найди все такие партии

и потом присоедини в несколько приемов (по числу уровней вложенности) все "подчиненные" партии
5 Garykom
 
гуру
10.12.14
14:38
(4) т.е. сделай временную таблицу (по сути) где будет список пар "любая партия"-"самая исходная партия"
6 Йохохо
 
10.12.14
14:39
(4) + а потом через Имеющие отфильтруй по нужной партии
7 devochka_1c
 
10.12.14
14:42
(5), (6) а примерчиком не поделитесь подобного?
8 dk
 
10.12.14
14:45
не обязательно рекурсия - просто цикла хватает
Пока Не Партия.Партия.Пустая() Цикл
   Партия = Партия.ПАртия;
конеццикла
9 Dionis Sergeevich
 
10.12.14
14:51
выбрать ссылка
из справочники.партия
где партия = &ПустаяСсылка
И ссылка в иерархии(&НашаПартия)
10 ДенисЧ
 
10.12.14
14:52
(8) to iterate is human to recurse divine
11 dk
 
10.12.14
14:55
))
12 Dionis Sergeevich
 
10.12.14
15:19
(9)не так немного ))
13 Classic
 
10.12.14
15:27
(0)
Они хоть не циклятся?
14 devochka_1c
 
10.12.14
15:57
(13) вероятность не исключена
15 Dionis Sergeevich
 
10.12.14
16:04
(14) Тогда такой запрос не выполнится ни когда
16 GANR
 
10.12.14
16:04
(0) если не известно пиковое количество звеньев в цепочке - то нельзя
17 GANR
 
10.12.14
16:06
+(16) в смысле запросом нельзя - циклом в коде можно
18 Fragster
 
гуру
10.12.14
16:07
вместо реквизита сделать табличную часть и заполнять призаписи
19 Фокусник
 
10.12.14
16:08
(2)+1
(0) лучше один раз "напрячь базу" на запись нужной информации и потом многократно "быстр и легко" её получать, чем при каждом чтении "напрягать базу" на поиск нужной информации ;)
20 Йохохо
 
10.12.14
16:09
(14) как в отношении родитель-потомок может возникнуть цикл?
21 Бубка Гоп
 
10.12.14
16:16
(20) Партия получилась из самой себя. Прям размножение почкованием.
22 DexterMorgan
 
10.12.14
16:54
(19) философский вопрос что лучше)
23 Лефмихалыч
 
10.12.14
17:17
(18) или nested set. Один фиг - при записи колдовать...
24 Ненавижу 1С
 
гуру
11.12.14
00:09
(18) лучше РС всё так
25 ifso
 
11.12.14
00:21
(22) тут философия нервно курит над вводом остатков без возможности указать первичную партию, не ?
26 exwill
 
11.12.14
04:24
(0) У разработчиков 1С под рукой оказалась старая книга по SQL. Хочешь рекурсию запросом - пиши прямой с конструкцией  WITH.