Разработка и Конфигурация · 11 мин
Иерархия в 1С: как сделать иерархический справочник
Как создать иерархию в 1С: виды иерархии, настройка справочника, группы и элементы, запросы с ИЕРАРХИЯ, типичные ошибки и FAQ.
Иерархия в 1С — это способ организации данных в виде дерева, где у каждого элемента есть родитель. Чаще всего иерархию создают в справочниках: «Номенклатура» с группами товаров, «Подразделения» с вложенными отделами, «Статьи затрат» с укрупнёнными разделами. Правильно настроенная иерархия упрощает поиск, отчёты и отборы, а ошибки на этапе проектирования потом требуют массовой перестройки данных.
Механизм иерархии встроен в платформу и не требует программирования: достаточно включить нужное свойство у объекта метаданных. Но у платформы есть два разных вида иерархии, и от выбора зависит, как будут храниться данные, какие отборы доступны и как писать запросы. Ниже разобраны оба варианта, пошаговая настройка в конфигураторе, работа с группами в пользовательском режиме и запросы с ключевым словом ИЕРАРХИЯ.
Какие виды иерархии существуют в 1С
Платформа предлагает два вида иерархии, и выбирать между ними нужно до наполнения справочника данными, потому что смена вида на рабочей базе требует переноса элементов и проверки всех ссылок.
Иерархия групп и элементов — классический вариант «папок». Справочник делится на группы (папки) и элементы. Группа может содержать другие группы и элементы, но сама не хранит прикладных данных: нельзя, например, провести документ по группе номенклатуры. Этот вид подходит для номенклатуры, контрагентов, складов.
Иерархия элементов — здесь любой элемент может быть одновременно и родителем, и самостоятельным объектом с данными. Типичный пример — подразделения: у отдела есть начальник, штат и реквизиты, при этом внутри него могут быть вложенные отделы. Этот же вид используется в планах счетов и планах видов расчёта, где субсчёт — полноценный счёт.
Сравнение видов иерархии
Папки только группируют, документы ссылаются на элементы. Подходит для номенклатуры, контрагентов. Ограничение: нельзя использовать группу как объект учёта.
Любой элемент — и узел дерева, и объект с данными. Подходит для подразделений, статей затрат. Ограничение: структура сложнее для пользователей, легко ошибиться с родителем.
Как включить иерархию в конфигураторе
Настройка выполняется в конфигураторе и занимает несколько минут. Перед изменением структуры рабочей базы сделайте резервную копию: изменение свойств объекта метаданных при обновлении конфигурации может потребовать реструктуризации таблиц.
- 1Откройте конфигуратор и найдите нужный справочник в дереве конфигурации.
- 2Откройте палитру свойств объекта (правый клик — Свойства).
- 3Установите флажок «Иерархический» — станет активным поле «Вид иерархии».
- 4Выберите вид: «Иерархия групп и элементов» или «Иерархия элементов».
- 5При необходимости задайте «Ограничение количества уровней» — например, 3 для простого классификатора.
- 6Обновите конфигурацию базы данных (F7) и согласитесь с реструктуризацией.
- 7Откройте справочник в режиме 1С:Предприятие и проверьте появление кнопки создания группы.
После обновления у каждого элемента появляется реквизит «Родитель» (Parent), а у справочника с видом «группы и элементы» — признак «ЭтоГруппа». Именно эти поля платформа использует для построения дерева и для отборов по вложенности.
Свойство «Ограничение количества уровней» стоит задавать осознанно. Жёсткое ограничение защищает от случайного создания бесконечных вложений, но если бизнес-структура вырастет, придётся менять свойство и снова обновлять конфигурацию. Для большинства справочников 3–5 уровней достаточно.
Как создать группы и элементы в режиме предприятия
В пользовательском режиме работа с иерархией сводится к созданию групп и переносу элементов. В справочнике с иерархией групп и элементов в форме списка доступны две кнопки создания: «Создать группу» и «Создать элемент» (в управляемых формах — пункты меню «Создать»).
Перенести элемент в другую группу можно тремя способами: перетаскиванием мышью в дереве, командой «Переместить в группу» из контекстного меню или редактированием поля «Родитель» в карточке элемента. Для массового переноса удобно выделить несколько элементов с зажатой Ctrl и применить «Переместить в группу» ко всем сразу.
Удаление группы с вложенными элементами — частый источник проблем. Платформа либо запретит удаление, либо пометит группу на удаление вместе с содержимым, в зависимости от настроек. Безопасный порядок такой: сначала переместите элементы в другую группу, затем удаляйте пустую. Перед удалением проверьте ссылки через «Ещё — Найти ссылки на объект» (в типовых конфигурациях — через поиск ссылок в сервисных обработках).
Как программно работать с иерархией
Во встроенном языке родитель задаётся свойством Родитель объекта. Создание группы и элемента выглядит так:
НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу();
НоваяГруппа.Наименование = "Электроинструмент";
НоваяГруппа.Записать();
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Наименование = "Дрель ударная";
НовыйЭлемент.Родитель = НоваяГруппа.Ссылка;
НовыйЭлемент.Записать();
Для справочника с иерархией элементов метод СоздатьГруппу() недоступен — создаётся обычный элемент, которому затем другие элементы назначают в качестве родителя. Проверить, является ли ссылка группой, можно через Ссылка.ЭтоГруппа (для вида «группы и элементы»).
Частая задача — проверка, находится ли элемент внутри заданной ветки. Для этого есть метод ПринадлежитЭлементу():
Если ЭлементСсылка.ПринадлежитЭлементу(ГруппаСсылка) Тогда
// элемент лежит внутри группы на любом уровне вложенности
КонецЕсли;
Как отбирать данные по иерархии в запросах
Язык запросов предоставляет оператор В ИЕРАРХИИ, который выбирает элементы, лежащие внутри указанной группы на любом уровне вложенности. Это основной инструмент для отчётов и отборов:
ВЫБРАТЬ
Номенклатура.Ссылка,
Номенклатура.Наименование
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Ссылка В ИЕРАРХИИ(&Группа)
И НЕ Номенклатура.ЭтоГруппа
Для построения дерева в отчёте используется итоговая конструкция ИТОГИ ПО ... ИЕРАРХИЯ — например, ИТОГИ Сумма(Остаток) ПО Склад ИЕРАРХИЯ. Тогда результат запроса можно обойти как дерево с группировками по уровням.
В динамических списках и отборах СКД отбор по вложенности настраивается без кода: в условии отбора для поля ссылки выберите вид сравнения «В иерархии» и укажите группу. Это же условие доступно пользователю в настройках списка в режиме предприятия.
Иерархия в других объектах и типовых конфигурациях
Кроме справочников, иерархию поддерживают планы видов характеристик (только вид «группы и элементы» или «элементы»), планы счетов и планы видов расчёта (только иерархия элементов). Документы, регистры и перечисления иерархии не имеют — там древовидность при необходимости моделируют через реквизит «Родитель» вручную, но платформа такой связью управлять не будет.
В типовых конфигурациях иерархия уже настроена: «Номенклатура», «Контрагенты», «Подразделения», «Статьи расходов» — иерархические из коробки. Менять вид иерархии в типовых объектах не рекомендуется: это усложнит обновление конфигурации и может сломать типовые механизмы, рассчитанные на конкретную структуру.
Как проверить результат настройки
После включения иерархии и наполнения справочника проверьте несколько контрольных точек, чтобы убедиться, что структура работает правильно.
Как проверить результат
Есть кнопка «Создать группу», список отображается деревом с раскрывающимися узлами
Дерево не отображается или группы не создаются — проверьте свойство «Иерархический» и вид иерархии
При выборе группы в дереве показываются элементы всех вложенных уровней
Видны только элементы первого уровня — в отборе используется равенство вместо «В иерархии»
Возвращаются элементы из всех вложенных групп
Пустой результат — проверьте, что параметр передаётся как ссылка на группу, а не строка
Группа недоступна для выбора в документе (вида «группы и элементы»)
Документ проводится по группе — вид иерархии выбран неверно для этой задачи
Если иерархия настроена, но отчёты показывают неполные данные, почти всегда причина в условии отбора: равенство родителю вместо вхождения в иерархию. Проверяйте это в первую очередь.
Что важно запомнить
Иерархия включается свойством «Иерархический» и выбором вида: «группы и элементы» для папок, «элементы» для древовидных объектов с данными. Отборы по вложенности делайте оператором В ИЕРАРХИИ или видом сравнения «В иерархии». Вид иерархии определяйте до наполнения справочника — смена на рабочей базе требует переноса данных и резервной копии.
Частые вопросы
Можно ли сделать иерархию у документа или регистра?
Нет, платформа поддерживает иерархию только у справочников, планов видов характеристик, планов счетов и планов видов расчёта. Для документов древовидность иногда моделируют реквизитом со ссылкой на тот же вид документа, но платформа не будет строить дерево и проверять циклы автоматически — это придётся реализовывать кодом.
Как поменять вид иерархии, если справочник уже заполнен?
Сначала сделайте резервную копию. Затем обработкой перенесите данные: при переходе с «групп и элементов» на «элементы» группы превращаются в обычные элементы, при обратном переходе элементы-родители нужно пересоздать как группы и переподчинить им дочерние элементы. После переноса проверьте все документы и отчёты, ссылающиеся на справочник.
Почему отбор по группе не показывает элементы из вложенных групп?
Используется условие равенства родителю, а оно возвращает только первый уровень. Замените условие на вид сравнения «В иерархии» в настройках отбора или на оператор В ИЕРАРХИИ в запросе — тогда выберутся элементы всех уровней вложенности.
Как ограничить глубину дерева?
В палитре свойств справочника задайте «Ограничение количества уровней» и укажите максимум, например 3. Платформа не даст создать вложенность глубже заданной. Учтите, что уменьшение ограничения на заполненном справочнике не удалит существующие глубокие ветки автоматически.
Чем иерархия отличается от подчинённого справочника?
Иерархия — это связь элемента с родителем внутри одного справочника (дерево). Подчинённый справочник — это отдельный объект, каждый элемент которого привязан к владельцу из другого справочника (например, «Договоры контрагентов» подчинены «Контрагентам»). Это разные механизмы: иерархия строит дерево, подчинение — связь «один ко многим» между объектами.
Можно ли отсортировать элементы внутри групп по-своему?
Стандартной ручной сортировки с произвольным порядком в платформе нет — элементы упорядочиваются по наименованию, коду или другому полю, заданному в свойстве «Основное представление» и настройках сортировки формы. Если нужен произвольный порядок, добавьте числовой реквизит «Порядок» и сортируйте по нему в форме списка или запросе.