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