1с запрос уровень справочника

Скачать Зеркало

Оператор "В ИЕРАРХИИ" в запросе

Конструкция "В ИЕРАРХИИ" в запросах 1С:Предприятия 8.x позволяет получить подчиненные элементы иерархического объекта конфигурации по заданному отбору. Сегодня в статье рассмотрим пример ее использования, а также действия платформы на стороне СУБД и ее влияние на производительность.

Использование

Рассмотрим простой пример использования конструкции "В ИЕРАРХИИ". При выполнении следующего запроса будут получены подчиненные элементы иерархического справочника "Товары" для переданного значения переменной "Ссылка".

В качестве параметра "&Ссылка" передается ссылка на группу справочника. Пример выполняем на тестовой базе, ссылка для загрузки на которую доступна в конце статьи.

В тестовой базе справочник "Товары" имеет следующие тестовые данные:

Конечно, на изображении показаны не все записи справочника. Скриншот показывает лишь структуру хранения данных в иерархическом справочнике. В таблице справочника хранятся 10 групп верхнего уровня, в каждой из них содержится 5 вложенных групп с 200 элементами в каждой.

Вернемся к тестовому запросу. Передадим в параметр "&Ссылка" ссылку на группу "Группа - 1" (см. скриншот выше). Тогда результат выполнения запроса будет выглядеть следующим образом:

Как мы видим, запрос вернул ссылку на саму верхнюю группу (переданную параметром), а также вложенные группы с находящимися в них элементами. Таким образом, использование конструкции "В ИЕРАРХИИ" позволяет удобным образом получать иерархически подчиненные данные.

Синтаксис языка запросов 1C:Предприятия и классического SQL очень похожи в некоторых моментах. Но для выражения "В ИЕРАРХИИ" нет аналога в языке запросов SQL как, например, для выражения языка запросов платформы "В" есть аналогичный SQL-оператор "IN". Поэтому интересной является работа платформы с СУБД при использовании данного оператора.

За кулисами

Итак, приступим. Для примера будем использовать написанный ранее запрос к справочнику "Товары". Анализировать действия платформы будем для двух ситуация:

  1. В качестве параметра "&Ссылка" передадим группу верхнего уровня "Группа 1" (как это мы сделали ранее).
  2. В параметр передадим ссылку на группу "Группа 1 - 1", вложенную в группу верхнего уровня "Группа 1".

1. Сначала выполняется SQL-запрос на получение ссылки на группу справочника, переданную в качестве параметра, и всех подчиненных ей групп. Результат помещается во временную таблицу '#tt1'.

2. На втором этапе дважды выполняется одинаковый запрос:

Влияние на производительность

Неправильное использование любого оператора в запросе может привести к неоптимальной работе системы. Рассматриваемый оператор "В ИЕРАРХИИ" не исключение. Его нужно применять с осторожностью, поскольку он намного усложняет алгоритм выполнения SQL-запросов к базе и тем самым увеличивает нагрузку на сервер СУБД.

Приведу пример неоптимального запроса, который может привести к названным выше печальным последствиям:

Как можно догадаться, запрос приведет к формированию множества SQL-запросов, что повлечет за собой снижение производительности информационной системы.

Делайте выводы!

Выводы делать Вам. Скажу лишь, что оператор "В ИЕРАРХИИ" используется платформой для системы компоновки данных, когда в условиях отбора присутствуют "В ГРУППЕ", "В ГРУППЕ ИЗ СПИСКА" и прочие. Думаю не стоит объяснять, что при неправильных манипуляциях пользователи могу поставить очень сложный отбор и повысить нагрузку на сервер 1С и СУБД в несколько раз. Давайте изменять настройки только опытным пользователям.

Ну и разумеется, при написании собственных механизмов обращайте внимание на оператор "В ИЕРАРХИИ". Очень удобный с одной стороны, и опасный с другой.



Справочник ляховичского района
Справочник компании онлайн


© 2018