Иерархия справочника Сверху Вниз. Получаем произвольное количество родителей "верхнего" уровня

28.03.19

Разработка - Универсальные функции

Иерархия справочника Сверху Вниз. Функция для получения произвольного количества родителей "верхнего" уровня. На примере справочника "Номенклатура".

Доброго времени суток!

Часто при формировании отчетов необходимо вывести информацию по справочнику в разрезе иерархии, но работать с таким отчетом не всегда удобно, т.к. уровень вложенности различных элементов справочника может значительно отличаться. Для формирования отчетов по справочнику "Номенклатура" я разработал функцию, позволяющую рекурсивно получить таблицу значений с произвольным количеством родителей элементов справочника.

Возможно, что кому-то это пригодится и сэкономит некоторое количество времени.

Спасибо за внимание :)

P.S. советы/замечания по реализации алгоритма приветствуются в комментариях.

 

upd (29.03.2019): По совету из комментариев добавил версию без рекурсии, она работает в несколько раз быстрее. Тем не менее версия с рекурсией определенно имеет право на жизнь, т.к. в такой функции можно помимо получения иерархии добавить любые арифметические операции, вызовы сторонних функций и т.д. Код является более читабельным и "удобоваримым".

 
 Рекурсия
 
 Запрос
 
 Пример итогового запроса

 

Функция справочник рекурсия иерархия родитель

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159657    875    399    

862

Запросы Программист Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    5198    XilDen    36    

80

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    20238    dimanich70    81    

145

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    19352    skovpin_sa    15    

105

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14774    YA_418728146    7    

166

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3593    57    progmaster    8    

4

Запросы HighLoad оптимизация Программист Запросы Бесплатно (free)

Многие знают, что для ускорения работы запроса нужно «изучить план». При этом сам план обычно обескураживает: куча разноцветных иконок и стрелочек; ничего не понятно, но очень интересно! Аналитик производительности Александр Денисов на конференции Infostart Event 2021 Moscow Premiere рассказал, как выполняется план запроса и что нужно сделать, чтобы с его помощью находить проблемы производительности.

20.06.2023    28239    Филин    37    

118
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. TMV 14 28.03.19 16:43 Сейчас в теме
Подумал что запросом, а тут велосипед - низачот.
4. obsfromekb 30 29.03.19 08:21 Сейчас в теме
(1) Запросом и есть, но количество уровней заранее нам неизвестно. Предлагаете в рекурсии формировать текст запроса? Или что?
2. alex15650 212 28.03.19 17:48 Сейчас в теме
Да здравствуют запросы в цикле! ))
3. obsfromekb 30 29.03.19 08:20 Сейчас в теме
(2) в реализации 1 запрос для всех элементов справочника на 1 уровень вложенности.
Что Вы предлагаете?
9. obsfromekb 30 03.04.19 14:32 Сейчас в теме
(6) Интересная реализация по ссылке, но в публикации на момент Вашего комментария уже была другая, на основе динамического формирования пакетного запроса. Не берусь утверждать что сработает быстрее, нужно тестировать. В любом случае, думаю, что будет близко.
К тому же в реализации по ссылке функция возвращает несколько иную информацию (только 1 родитель). Безусловно, её можно доработать под конкретные нужды, но с учетом того как именно формируется запрос, сделать это будет просто не для каждого. С моей же функцией разберётся любой, т.к. нужное количество родителей можно получить просто задав параметр функции.
10. dhurricane 03.04.19 14:41 Сейчас в теме
(9) Зависит от объема оперируемых данных и уровня вложенности справочника.

В реализации по ссылке для получения родителей, например, 8-го уровня вложенности будет сгенерировано 3 запроса пакета, у Вас - все 8.
11. obsfromekb 30 03.04.19 15:25 Сейчас в теме
(10) Я не настаиваю, что мой запрос быстрее, нужно замерять, возможно, что это не так. В моём запросе больше уровней вложенности, зато используются только левые соединения, а каждый следующий запрос обрабатывает таблицу с меньшим количеством строк.
В любом случае, спасибо за ссылку, к сожалению не нашел её вовремя. Если будет свободное время, то сопоставлю со своим методом и приложу информацию здесь.
5. obsfromekb 30 29.03.19 11:18 Сейчас в теме
Добавил вариант реализации запросом, скорость возросла в несколько раз, но код стал плохо читаемым.
7. timm00 142 01.04.19 15:42 Сейчас в теме
Автор не в курсе что есть ИТОГИ ПО Ссылка ИЕРАРХИЯ?))
8. obsfromekb 30 03.04.19 14:27 Сейчас в теме
(7)
ИТОГИ ПО Ссылка ИЕРАРХИЯ

Держите в курсе... Особенно что касается производительности, хотя и результаты запроса могут Вас удивить.
Оставьте свое сообщение