Соединение таблиц в запросе по условию "В иерархии" с использованием Nested Sets
Реализация метода хранения деревьев Nested Sets в 1С. Использование деревьев Nested Sets для соединения таблиц в запросах по условию «В иерархии».
- Описание
- Подробнее
Описание
В данной статья я расскажу о решении задачи, цель которой в проверке набора записей на сложные (комбинированные) условия вида «в иерархии», с акцентом на производительность решения (т.е. запросы в цикле не используем). Первая часть статьи — это постановка проблемы, вторая — это решение задачи с использованием метода Nested Sets. Если вам не интересны прелюдии, смело переходите ко второй части, там вся суть.
Часть 1. Формулирование проблемы.
Представьте себе задачу: необходимо проверить некоторый набор данных на условие иерархического вхождения его элементов (этого набора) в элементы более высокого уровня (например, группы), вот только групп может быть несколько и выбор той или иной группы также имеет определённые условия.
Чтобы было легче, вот более реальный пример (хотя пример все же выдуман, но для раскрытия темы будет вполне достаточно):
Есть справочник «Номенклатура». Справочник имеет иерархию Групп и элементов, уровень вложенности неограничен (на самом деле не важно, что это будет за иерархия: элементов или групп). Также, для произвольной группировки номенклатуры, имеется справочник «Сегменты номенклатуры». У справочника с сегментами есть табличная часть, где указывается какая номенклатура входит в данный сегмент, причем могут указываться как конкретные позиции номенклатуры, так и группы номенклатуры. Каждому сотруднику предприятия может быть указан один сегмент. Тем самым определяется доступная номенклатура, которую может заказать этот сотрудник. Сотрудники регулярно что-то заказывают, но делают это внесистемно – пишут служебки и относят их ответственному пользователю, который вводит один общий документ, где указывает сотрудников и то, что они заказывают. Документ имеет табличную часть с колонками «Сотрудник», «Номенклатура», «Количество». При проведении документа требуется реализовать проверку, которая убедится, что все заказали только то, что им разрешено.
