Получение элемента верхнего уровня в запросе.
Здравствуйте. Задача довольно примитивная. Необходимо получить корневое подразделение (подразделение верхнего уровня). Вопрос поднимался уже не раз, но решения так наиболее оптимальное и красивое не удалось найти. Сам использовал работающий, но не совсем универсальный способ, зависящий от уровня вложенности иерархии:
Есть еще и замечательный способ для получения запроса, у которого при выгрузке в ТЗ первый элемент вернул бы корневое подразделение
Но если нас эта информация интересует внутри какого то сложного запроса, то использовать данный метод мы не можем. Отсюда вопрос к гуру 1С, кто всё-таки какой способ применяет, если необходимо получить элемент верхнего уровня.
ВЫБОР
КОГДА ДвижениеТМЦМатериалы.Ссылка.Инициатор.Родитель = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяССылка)
ТОГДА ДвижениеТМЦМатериалы.Ссылка.Инициатор
ИНАЧЕ ВЫБОР
КОГДА ДвижениеТМЦМатериалы.Ссылка.Инициатор.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяССылка)
ТОГДА ДвижениеТМЦМатериалы.Ссылка.Инициатор.Родитель
ИНАЧЕ ВЫБОР
КОГДА ДвижениеТМЦМатериалы.Ссылка.Инициатор.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяССылка)
ТОГДА ДвижениеТМЦ.Ссылка.Инициатор.Родитель.Родитель
ИНАЧЕ ВЫБОР
КОГДА ДвижениеТМЦМатериалы.Ссылка.Инициатор.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяССылка)
ТОГДА ДвижениеТМЦМатериалы.Ссылка.Инициатор.Родитель.Родитель.Родитель
ИНАЧЕ ВЫБОР
КОГДА ДвижениеТМЦМатериалы.Ссылка.Инициатор.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяССылка)
ТОГДА ДвижениеТМЦМатериалы.Ссылка.Инициатор.Родитель.Родитель.Родитель.Родитель
КОНЕЦ
КОНЕЦ
КОНЕЦ
КОНЕЦ
КОНЕЦ
ПоказатьЕсть еще и замечательный способ для получения запроса, у которого при выгрузке в ТЗ первый элемент вернул бы корневое подразделение
ВЫБРАТЬ
ПодразделенияОрганизаций.Ссылка КАК ПодразделениеПоИерархии
ИЗ
Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
ГДЕ
ПодразделенияОрганизаций.Ссылка = &ИнтересующееПодразделение
ИТОГИ ПО
ПодразделениеПоИерархии ТОЛЬКО ИЕРАРХИЯ
Но если нас эта информация интересует внутри какого то сложного запроса, то использовать данный метод мы не можем. Отсюда вопрос к гуру 1С, кто всё-таки какой способ применяет, если необходимо получить элемент верхнего уровня.
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(5) PoZiTiFFF, обсасывалась тема стопицот раз. Если нужно часто получать корневого родителя то необходимо создать соответствующий реквизит. Для существующих элементов заполнить реквизит обработкой, для внось создаваемых/изменяемых сделать автоматическое заполнение данного реквизита.
(6) ZergKRSK, я же и указал, что тема поднималась не раз и я это видел, но ответа на свой вопрос не встретил, создавать доп реквизит и прочее - здорово, конечно, но меня как будто все не слышат или не хотят слышать, поэтому еще раз: получить внутри запроса родителя верхнего уровня нельзя???
Функция НайтиКорень(Элем)
Если НЕ ЗначениеЗаполнено(Элем.Родитель) Тогда
Возврат Элем;
Иначе
Возврат НайтиКорень(Элем.Родитель);
КонецЕсли;
КонецФункции
Показатьтак не пойдет?
(8) ZergKRSK, когда не можешь дать полноценный ответ или уходишь от темы, проще всего перейти на оскорбления, ибо доводы про чукчу я могу и направить в твою сторону, Ты понимаешь, какая цель была? Я просто хочу получить ответ на вопрос, можно или нельзя сделать это в запросе? С использованием доп реквизита нет никаких проблем, но хотелось сделать это именно внутри запроса без дополнительных реквизитов или строк кода по созданию Таблицы значений...
"https://its.1c.ru/db/metod8dev/content/2659/hdoc"
Получение всех родителей элемента
В языке запросов не предусмотрено специальных средств для получения всех родителей элемента. Для выполнения задачи можно воспользоваться иерархическими итогами, однако получение иерархических итогов оптимизировано для построения итогов большого количества записей, и не вполне эффективно для получения родителей одного элемента. Для более эффективного получения всех родительских записей элемента, рекомендуется перебирать в цикле его родителей небольшими порциями. Пример:
Получение всех родителей элемента
В языке запросов не предусмотрено специальных средств для получения всех родителей элемента. Для выполнения задачи можно воспользоваться иерархическими итогами, однако получение иерархических итогов оптимизировано для построения итогов большого количества записей, и не вполне эффективно для получения родителей одного элемента. Для более эффективного получения всех родительских записей элемента, рекомендуется перебирать в цикле его родителей небольшими порциями. Пример:
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот