Капитально об программе 1С 8.0-8.3-8.4, 7.7

Запрос В ИЕРАРХИИ

Данный условный оператор запросов 1С рассмотрен отдельно, так как за видимой простотой скрываются некоторые особенности его использования.

Предназначение

В системе объектов 1С:Предприятия ключевое место занимают справочники, бухгалтерские счета (в меньшей степени с планы видов характеристик), главной особенностью которых является иерархическая структура.

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

Стоит заметить, что это не новый функционал — появился он еще до 7.7. Например в 6.0 максимум могло быть 3 уровней иерархии.

В 8.0 появилась не только иерархия групп, но и иерархия элементов.

Данный функционал не является, чем то сложным — просто у каждого такого элемента, группы появляется свойство «Родитель», т.е. таблицы имеет ту же двумерную структуру:

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

Простой пример:

ВЫБРАТЬ
    Ссылка,
    Родитель
ИЗ     
    Справочник.Контрагенты
ГДЕ
    Ссылка В ИЕРАРХИИ (&НекаяГруппа)
 

Получим подчиненные счета из плана счетов для предопределенного элемента

ВЫБРАТЬ
    Хозрасчетный.Ссылка
ИЗ
    ПланСчетов.Хозрасчетный КАК Хозрасчетный
ГДЕ
    Хозрасчетный.Ссылка В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Материалы))

Что происходит в реальности

Система преобразует такую команду в цепочку запросов, что негативно сказывается на производительности.
Использование данной команды для больших справочников не рекомендуется, особенно в явных условиях виртуальных таблиц (вложенные более оптимальные).
Если справочник имеет заранее известную вложенность, то использование цепочки соединений, может быть более оправдано для таких запросов, но является не универсальным и «некрасивым».

Следует организовывать алгоритм так, чтобы подобные запросы запросы производились редко, не циклично, по возможности «кешировались».

Дополнительная информация

В конструкторе запроса задается на вкладке условия:

В отчетах СКД и в механизмах отбора системы/отчетов существует аналог:

 

Если в качестве параметра передать пустую ссылку, то данный запрос выдаст все элементы (истина),  это следует иметь ввиду

ВЫБРАТЬ
    Ссылка,
    Родитель
ИЗ
    Справочник.Контрагенты
ГДЕ
    Ссылка В ИЕРАРХИИ
    (Значение(Справочник.Контрагенты.ПустаяСсылка))

Эту особенность можно использовать в фильтрах, т.е. если значение не выбрано  считается, что фильтр не действует.

Вот такой полезный, удобный, но особенный условный оператор «В ИЕРАРХИИ()».