Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
15 июл 2025, 19:17

Обратная иерархия

Автор Nosferatu112, 04 июл 2025, 11:37

0 Пользователей и 1 гость просматривают эту тему.

Nosferatu112

Всем доброго времени суток, есть способ узнать что выбранное подразделение входит в какую либо иерархию?
Пример:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Подразделения.Ссылка КАК Ссылка
|ИЗ
| Справочник.Подразделения КАК Подразделения
|ГДЕ
| Подразделения.Ссылка В ИЕРАРХИИ (&Ссылка)";

Запрос.УстановитьПараметр("Ссылка", Объект.Подразделение);
Так мы пишем когда знаем родителя и хотим узнать какие в него входят элементы

А если мне на оборот нужно узнать входит ли выбранное подразделение в родителя, при условии что спр многоуровневый
У родителя есть подчиненый элемент который может являтся родителем для другого подчиненного элемента, и мне нужно узнать самую верхнюю иерархию

sali

чисто теоретически можно задать условие на родителя, пустое оно или нет

Nosferatu112

Думал об этом но если ситуация такая
Подразделение1 родитель подразделения2
Подразделение2 родитель подразделения3
Подразделение3 родитель подразделения4,5,6,7,8
Мне известно подразделение7
И по подразделению7 мне нужно найти что оно принадлежит подразделению1
А по родителю я найду что подразделение7 принадлежит подразделению3

antoneus

Если есть самый верхний родитель и надо узнать, входит ли туда элемент - ПринадлежитЭлементу.
Если просто узнать самого верхнего - цикл по родителю вверх до упора.

sali

Цитата: antoneus от 04 июл 2025, 12:13цикл по родителю вверх до упора.
ага. там уровень вам нужно в цикле уменьшать
что-то типо ....
Для каждого СтрокаТЧ из СтрокиТЧ Цикл 
тТовар=СтрокаТЧ.нОМЕНКЛАТУРА.Родитель;
пока тТовар.Уровень() > 0 Цикл
тТовар = тТовар.Родитель;
КонецЦикла;


fruitella

Nosferatu112, пишешь в запросе упорядочить по Ссылка Иерархия. Получаешь иерархическую структуру, разбираешь рекурсией

Afinogen

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

LexaK

Запросом, примерно так
Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    Спр.Ссылка КАК Ссылка,
            |    Выбор
            |        Когда Спр.Родитель <> (ПустаяСсылка)
            |        и Спр.Родитель.Родитель  = (ПустаяСсылка)
            |        Тогда Спр.Родитель
            |
            |        Когда Спр.Родитель.Родитель <> (ПустаяСсылка)
            |        и Спр.Родитель.Родитель.Родитель  = (ПустаяСсылка)
            |        Тогда Спр.Родитель.Родитель
            |        //и так несколько раз, какая вложенность иерархии
            |
            |        Иначе ""Нет родителя""
            |    Конец как Родитель
            |ИЗ
            |    Справочник.Подразделения КАК Спр
            |ГДЕ
            |    Спр.Ссылка = (&Ссылка)";
       
       
если помогло нажмите: Спасибо!

Afinogen


sali

Afinogen, а как иначе???

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск