Имя: Пароль:
1C
1С v8
Как получить родителя первого уровня элемента справочника ДоговорыКонтрагентов в консоли
0 ladah61669
 
13.10.22
17:28
Как получить родителя первого уровня элемента справочника ДоговорыКонтрагентов в консоли запросов?
1 ladah61669
 
13.10.22
17:31
Например имеются два элемента
1. Доп.соглашение к дог.1(Договор1)
2. Доп.соглашение к субдог.2(СубДоговор2)(Договор2)
Как получить Договор1 и Договор2?
2 mistеr
 
13.10.22
18:39
Один из тех немногих случаев, когда за запрос в цикле по рукам не бьют. :)
3 mistеr
 
13.10.22
18:40
Другой способ — итоги по иерархии.
4 Philix
 
13.10.22
18:59
Еще можно уболтать заказчика на ограничение количества уровней иерархии. После этого задача становится решаемой путем конечного  количества вложений конструкций типа Выбор Когда Договор.Родитель is null тогда Договор когда Договор.Родитель.Родитель is null Тогда Договор.Родитель

Но за разименовывание полей через несколько точек тоже могут применить линейку к конечностям. :)
5 ladah61669
 
13.10.22
19:01
(2) Есть доступ только к консоли запросов, а там циклы не получиться использовать...
6 ladah61669
 
13.10.22
19:02
(4) Нашел такой способ, однако через такой конструкцию (ВЫБОР) возвращает пустоту...
ВЫБРАТЬ
    ДоговорыКонтрагентов.Ссылка КАК ДоговорыКонтрагентов,
    ВЫБОР
        КОГДА ДоговорыКонтрагентов.Родитель ЕСТЬ NULL
            ТОГДА ДоговорыКонтрагентов.Ссылка
        КОГДА ДоговорыКонтрагентов.Родитель.Родитель ЕСТЬ NULL
            ТОГДА ДоговорыКонтрагентов.Родитель.Ссылка
        КОГДА ДоговорыКонтрагентов.Родитель.Родитель.Родитель ЕСТЬ NULL
            ТОГДА ДоговорыКонтрагентов.Родитель.Родитель.Ссылка
        КОГДА ДоговорыКонтрагентов.Родитель.Родитель.Родитель.Родитель ЕСТЬ NULL
            ТОГДА ДоговорыКонтрагентов.Родитель.Родитель.Родитель.Ссылка
        КОГДА ДоговорыКонтрагентов.Родитель.Родитель.Родитель.Родитель.Родитель ЕСТЬ NULL
            ТОГДА ДоговорыКонтрагентов.Родитель.Родитель.Родитель.Родитель.Ссылка
        ИНАЧЕ "УПС"
    КОНЕЦ КАК Поле222,
    ДоговорыКонтрагентов.Ссылка,
    ДоговорыКонтрагентов.Родитель.Ссылка,
    ДоговорыКонтрагентов.Родитель.Родитель.Ссылка,
    ДоговорыКонтрагентов.Родитель.Родитель.Родитель.Ссылка,
    ДоговорыКонтрагентов.Родитель.Родитель.Родитель.Родитель.Ссылка
ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
    ДоговорыКонтрагентов.Код В ("000048390", "000048915", "000036747")
7 Philix
 
13.10.22
19:38
(6) Я чутка ступил. У любого элемента иерархического справочника есть Родитель и он не null, а пустая ссылка соответствующего вида. Как следствие сравнивать надо не is null, а со ЗНАЧЕНИЕ(Справочник.Договорыконтрагентов.ПустаяСсылка) и все работает.

примерно так:

ВЫБРАТЬ
    ДоговорыКонтрагентов.Ссылка КАК Ссылка,
    ВЫБОР
        КОГДА ДоговорыКонтрагентов.Родитель = ЗНАЧЕНИЕ(Справочник.Договорыконтрагентов.ПустаяСсылка)
            ТОГДА ДоговорыКонтрагентов.Ссылка
        КОГДА ДоговорыКонтрагентов.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Договорыконтрагентов.ПустаяСсылка)
            ТОГДА ДоговорыКонтрагентов.Родитель
        КОГДА ДоговорыКонтрагентов.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Договорыконтрагентов.ПустаяСсылка)
            ТОГДА ДоговорыКонтрагентов.Родитель.Родитель
    КОНЕЦ КАК Родитель1Уровня
ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
8 FIXXXL
 
13.10.22
19:56
(5) используй консоль с постобработкой результата запроса
9 ladah61669
 
14.10.22
09:59
(8) Это как
10 ladah61669
 
14.10.22
10:37
(7) Спасибо Philix, выручил. Все получилось.
11 lexushka
 
14.10.22
11:59
я делал новый регистр и при записи рекурсией помешал нужное мне значение в него
в запросе (7) это до тех пор пока уровень вложенности ожидаемый, а станет больше и привет
12 АнализДанных
 
14.10.22
16:17
(0) Самый производительный и правильный способ - это использовать транзитивное замыкание. Здесь есть хорошее описание и код: https://infostart.ru/1c/articles/158512/
Из минусов сложнее код получается. Альтернативный вариант указан в (7)
13 FIXXXL
 
14.10.22
18:24
(9) поищи, консолей много разных :)