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

28.03.19

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

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

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

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

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

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

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

 

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

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

 

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

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

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

10000 8000 руб.

02.09.2020    122337    673    389    

716

Начните уже использовать хранилище запросов

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

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

11.10.2023    16198    skovpin_sa    14    

98

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    8847    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

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

2 стартмани

22.08.2023    2077    21    progmaster    7    

3

MS SQL Server: изучаем планы запросов

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

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

20.06.2023    16039    Филин    37    

113

Все консоли запросов для 1С

Запросы Инструментарий разработчика Бесплатно (free)

Список всех популярных обработок.

17.03.2023    35600    kuzyara    84    

179

Идентификатор объекта в запросе. Вы этого хотели?

Запросы Механизмы платформы 1С Платформа 1С v8.3 Запросы Бесплатно (free)

В платформе 8.3.22 появилась возможность получать идентификатор в запросе. Лично я ждал этого давно, но по итогу ждал большего. Что не так?

12.01.2023    39737    dsdred    26    

96
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. TMV 14 28.03.19 16:43 Сейчас в теме
Подумал что запросом, а тут велосипед - низачот.
4. obsfromekb 30 29.03.19 08:21 Сейчас в теме
(1) Запросом и есть, но количество уровней заранее нам неизвестно. Предлагаете в рекурсии формировать текст запроса? Или что?
2. alex15650 211 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 139 01.04.19 15:42 Сейчас в теме
Автор не в курсе что есть ИТОГИ ПО Ссылка ИЕРАРХИЯ?))
8. obsfromekb 30 03.04.19 14:27 Сейчас в теме
(7)
ИТОГИ ПО Ссылка ИЕРАРХИЯ

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