К статье
Практический материал

Справочники и Данные · 9 мин

Как сделать справочник иерархическим в 1С

Пошаговая инструкция, как сделать справочник иерархическим в 1С 8.3: виды иерархии, настройка в конфигураторе, программный доступ к родителю и типичные ошибки.

Иерархический справочник в 1С нужен, когда элементы номенклатуры, контрагентов или подразделений логично объединить в группы — например, «Товары → Бытовая техника → Холодильники». Без иерархии список превращается в плоский перечень, в котором сложно искать данные и строить отчёты по группам.

Настройка выполняется в конфигураторе буквально в несколько кликов: у объекта «Справочник» есть свойство «Иерархический», а вид иерархии определяет, могут ли группы содержать данные или служат только папками. Ниже разберём оба варианта, порядок настройки, работу с родителем в коде и типичные ошибки.

Материал ориентирован на платформу 1С:Предприятие 8.3 и подходит как для доработки собственной конфигурации, так и для понимания устройства типовых решений.

Что такое иерархия справочника и когда она нужна

Иерархия — это связь «родитель–потомок» между элементами справочника. У каждого элемента появляется системный реквизит Родитель, ссылающийся на другой элемент того же справочника. На основе этих связей платформа строит дерево в форме списка и позволяет выбирать в запросах всех потомков группы оператором «В ИЕРАРХИИ».

Иерархия оправдана, когда данных много и их нужно группировать: номенклатура по товарным категориям, статьи затрат по видам расходов, контрагенты по регионам или холдингам. Если записей немного и группировка не нужна, иерархия только усложнит ввод данных — пользователю придётся каждый раз выбирать группу.

Виды иерархии: «Список и группы» и «Элементы и группы»

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

Иерархия групп и элементов (список и группы) — классический вариант, как в справочнике «Номенклатура» типовых конфигураций. Справочник делится на группы (папки) и элементы. Группа не может хранить прикладные данные как полноценная позиция: её назначение — объединять элементы. Элемент всегда лежит внутри группы или в корне.

Иерархия элементов — любой элемент может быть родителем другого элемента. Отдельного типа «группа» нет. Так устроен, например, справочник подразделений: каждое подразделение — полноценный объект с данными, и при этом оно может содержать дочерние подразделения.

Сравнение видов иерархии

Список и группы

Подходит для номенклатуры, товаров, статей. Папки только группируют. Ограничение: нельзя хранить данные в группе и использовать её как обычный элемент в документах.

Элементы и группы

Подходит для подразделений, сотрудников по структуре, контрагентов-холдингов. Любой элемент может иметь потомков и при этом участвовать в документах. Ограничение: нет визуального отличия папок, дерево может стать избыточно глубоким.

Пошаговая настройка иерархии в конфигураторе

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

Порядок действий
  1. 1
    Откройте конфигуратор и найдите нужный объект в ветке «Справочники».
  2. 2
    Откройте палитру свойств объекта (правый клик → Свойства).
  3. 3
    Установите свойство «Иерархический» в значение «Да».
  4. 4
    Ниже выберите «Вид иерархии»: «Список и группы» или «Элементы и группы».
  5. 5
    При необходимости задайте «Ограничение количества уровней» (0 — без ограничений).
  6. 6
    Обновите конфигурацию базы данных (F7) и согласитесь на реструктуризацию.
  7. 7
    Откройте справочник в режиме 1С:Предприятие и проверьте, что появилась кнопка создания группы и дерево в форме списка.

После обновления у справочника появляется реквизит «Родитель», а в форме списка — древовидное представление и поле «Группа» при создании элемента. Стандартные формы платформа генерирует автоматически, дорабатывать их обычно не требуется.

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

Работа с родителем в коде и запросах

Во встроенном языке родитель доступен как обычное свойство объекта. При программном создании элемента достаточно присвоить ссылку на группу:

НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();

НовыйЭлемент.Наименование = "Холодильник АТ-120";

НовыйЭлемент.Родитель = ГруппаБытоваяТехника; // ссылка на группу

НовыйЭлемент.Записать();

Для создания группы используется метод СоздатьГруппу() вместо СоздатьЭлемент() — он доступен только при виде иерархии «Список и группы».

В запросах ключевой инструмент — оператор В ИЕРАРХИИ, который выбирает элементы группы со всеми вложенными уровнями:

ВЫБРАТЬ Ссылка, Наименование

ИЗ Справочник.Номенклатура

ГДЕ Ссылка В ИЕРАРХИИ(&Группа)

Ограничение уровней и производительность

Свойство «Ограничение количества уровней» задаёт максимальную глубину дерева. Значение 0 снимает ограничение. На практике глубину стоит ограничивать осознанно: дерево из 8–10 уровней неудобно пользователю и замедляет выбор из иерархических списков.

Для большинства задач достаточно 2–4 уровней: например, «Товары → Категория → Подкатегория». Если бизнес-структура глубже, стоит пересмотреть аналитику — возможно, часть уровней правильнее вынести в отдельный справочник или в дополнительные реквизиты.

Запросы с «В ИЕРАРХИИ» на больших справочниках (сотни тысяч элементов) выполняются заметно дольше обычного сравнения по родителю. Если нужны только прямые потомки группы, сравнение Родитель = &Группа работает быстрее.

Перед массовым переносом элементов по группам удобно сначала создать всю структуру папок, а затем переносить элементы пакетной обработкой через установку реквизита «Родитель». Ручное перетаскивание оправдано только для десятков позиций, не для тысяч.
ПЗ
Практическое замечание

Типичные ошибки и как их избежать

Типичные ошибки
01
Выбор вида «Список и группы», когда данные должны храниться и в родителях: группу нельзя указать в документе как полноценное значение, приходится переделывать структуру.
02
Циклические ссылки при программном переносе: элемент назначен родителем самому себе или своему потомку. Платформа частично контролирует это в интерфейсе, но в коде проверку нужно делать вручную.
03
Использование «В ИЕРАРХИИ» там, где нужны только прямые потомки: в отчёт попадают лишние вложенные элементы, итоги завышаются.
04
Отсутствие отбора помеченных на удаление групп: пустые помеченные папки продолжают отображаться в дереве и путают пользователей.
05
Попытка изменить вид иерархии в рабочей базе без анализа ссылок: элементы-родители, ставшие группами, остаются в старых документах и ломают логику отчётов.

Проверка результата после настройки

Контрольные точки

Как проверить результат

Форма списка справочника
Норма

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

Тревожный признак

Список по-прежнему плоский, кнопки группы нет — свойство «Иерархический» не включено или конфигурация не обновлена

Создание элемента
Норма

В карточке элемента доступно поле «Группа» / «Родитель»

Тревожный признак

Поля родителя нет — проверьте вид иерархии и права пользователя

Запрос «В ИЕРАРХИИ»
Норма

Возвращаются элементы группы со всех вложенных уровней

Тревожный признак

Возвращаются только прямые потомки или пустой результат — проверьте, что передана именно ссылка на группу

Дополнительно стоит открыть несколько типовых отчётов или документов, где используется справочник, и убедиться, что выбор значения работает корректно: при виде «Список и группы» в документах обычно скрывают группы от выбора, чтобы пользователь не подставил папку вместо элемента.

FAQ

Можно ли сделать иерархическим уже заполненный справочник?

Да. Включите свойство «Иерархический» и обновите конфигурацию — существующие элементы окажутся в корне без родителя. Затем распределите их по группам вручную или обработкой. Данные при этом не теряются.

Чем группа отличается от элемента?

Отличие есть только при виде иерархии «Список и группы»: группа — это папка для объединения элементов, она не предназначена для использования в документах как полноценное значение. При виде «Элементы и группы» отдельных групп нет — любой элемент может быть родителем.

Как программно проверить, входит ли элемент в группу с учётом вложенности?

Самый надёжный способ — запрос с оператором «В ИЕРАРХИИ». Альтернатива в коде — метод ПроверитьПринадлежностьЭлементу или цикл по цепочке родителей через свойство «Родитель», но цикл медленнее и требует защиты от зацикливания.

Почему в документе можно выбрать группу, хотя нужна только позиция?

По умолчанию поле ввода показывает и группы, и элементы. В свойствах поля ввода установите «Выбор групп и элементов» в значение «Элементы» — тогда группы будут недоступны для выбора, но останутся видны для навигации по дереву.

Что будет, если удалить группу с элементами?

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

Сколько уровней иерархии поддерживает платформа?

Ограничение задаётся в свойствах справочника; значение 0 означает отсутствие ограничений со стороны настройки. Практический предел определяется удобством работы и скоростью запросов — глубокие деревья неудобны пользователям и замедляют операции «В ИЕРАРХИИ».

Итог

Что важно запомнить

Иерархия включается одним свойством в конфигураторе, но ключевое решение — выбор вида: «Список и группы» для каталогов с папками, «Элементы и группы» для структур, где родитель тоже хранит данные. В коде используйте реквизит «Родитель», в запросах — «В ИЕРАРХИИ», а перед сменой вида иерархии в рабочей базе обязательно делайте резервную копию.