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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Основные типы иерархии в 1С

Прежде чем принимать решение, важно понимать, что платформа предлагает два принципиально разных типа иерархии. Выбор между ними зависит от бизнес-логики объекта:

  1. Иерархия групп и элементов: Это классическая древовидная структура с «папками». Группа в данном случае является чисто техническим объектом — контейнером. Вы не можете выбрать группу там, где требуется конкретное значение (например, нельзя продать товар «Папка Бытовая техника», можно только конкретный «Пылесос»).
  2. Иерархия элементов: Здесь каждый узел дерева сам является полноценным элементом. Это критично для таких справочников, как Подразделения или СтатьиЗатрат. Например, «Цех №1» может иметь подчиненный узел «Участок сборки», но оба они являются подразделениями и могут указываться в документах.

Когда иерархия необходима: 100% сценарии

Рассмотрим ситуации, когда использование стандартного механизма иерархии оправдано и даже необходимо:

1. Объект по своей природе является деревом. Если структура данных изначально подразумевает подчиненность (родитель — потомок), иерархия неизбежна. Самый яркий пример — справочник Подразделения. Организационная структура компании — это дерево, где отделы входят в управления, а те — в департаменты.

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


ВЫБРАТЬ
    ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
    ХозрасчетныйОстатки.СуммаОстаток КАК Сумма
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, , Субконто1 В ИЕРАРХИИ (&ГруппаНоменклатуры)) КАК ХозрасчетныйОстатки

3. Специфические отраслевые требования. Проанализируем пример со справочником «Дети» в детском саду. Здесь структура (Группа «Гномики», Группа «Колокольчики») является основой учета. Начисления, табели и отчеты строятся строго по этим группам. В таком случае плоский справочник создаст колоссальные неудобства для пользователей.

Использование иерархии для «Архива» и чистоты данных

Часто иерархию используют как способ борьбы с «мусором». Если жизненный цикл элементов короток (например, разовые начисления или старые контрагенты), программисты создают папку «Архив» или «Не использовать». Это позволяет:

Хотя этот метод популярен, разберем и альтернативу: в современных конфигурациях чаще используют реквизит НеИспользуется (булево), а скрытие элементов реализуется через настройки Динамического списка с отбором.

Аргументы против иерархии: почему это «пережиток прошлого»?

Существует мнение, что в интерфейсе «Такси» иерархические справочники становятся менее востребованными. Рассмотрим причины:

  1. Неэффективный поиск. Современный пользователь привык к поисковой строке (как в Google). Вместо того чтобы открывать пять вложенных папок, проще набрать часть наименования.
  2. Проблема «одного родителя». Элемент иерархического справочника может принадлежать только одной группе. Но что если товар — это и «Подарочный набор», и «Косметика» одновременно? Иерархия здесь бессильна, и на помощь приходят дополнительные реквизиты или категории.
  3. Проблема «Ивановых и Петровых». Как было отмечено в профессиональных дискуссиях, у каждого пользователя может быть свое видение «правильной» структуры папок. Навязывание одной жесткой иерархии в метаданных часто приводит к конфликтам между отделами.

Технические нюансы и производительность

Проанализируем ситуацию с точки зрения системного программиста. Использование иерархии влияет на несколько аспектов:

Ограничение вложенности. Платформа 1С ограничивает глубину дерева 25 уровнями. Для большинства задач этого достаточно, но для сложных инженерных справочников это может стать препятствием.

Механизм RLS (права доступа). Если в системе настроено ограничение доступа на уровне записей (RLS) по группам справочника, это может существенно замедлить работу. Проверка условия В ИЕРАРХИИ в SQL-запросе — это тяжелая операция, требующая обхода индексов. Если справочник содержит сотни тысяч элементов, открытие списка пользователем с ограниченными правами может занять значительное время.

Индексация. Поле Родитель всегда индексируется. Однако любое перемещение элемента между группами вызывает обновление индексов, что в высоконагруженных системах может приводить к избыточным блокировкам таблиц.

Современная альтернатива: Виртуальная иерархия

Вместо того чтобы ставить галочку «Иерархия» в конфигураторе, рассмотрим возможность создания плоского справочника с использованием возможностей Динамического списка. Мы можем сгруппировать данные по любому реквизиту (например, по Виду номенклатуры или Производителю) прямо в форме списка. Это дает пользователю ощущение работы с папками, но сохраняет гибкость плоской структуры.

Также эффективным методом является использование Дополнительных реквизитов и сведений. Это позволяет строить отчеты в разрезе множества классификаторов одновременно, что невозможно при жесткой привязке к одной «папке-родителю».

Пошаговый алгоритм принятия решения

Чтобы окончательно определиться, выполним следующие шаги:

  1. Выясним тип данных: Если это структура (штатное расписание, дерево задач), выбираем иерархию элементов.
  2. Проверим требования к отчетам: Нужно ли бухгалтеру видеть остатки «по папке»? Если да, и это единственный способ группировки — включаем иерархию групп.
  3. Оценим объем данных: Если в справочнике будут миллионы записей и сложный RLS, стараемся избегать физической иерархии в пользу плоской структуры с индексированными реквизитами-классификаторами.
  4. Применим правило «Золотой середины»: Если уверенности нет — делайте плоский справочник. Добавить реквизит для группировки или настроить динамический список можно всегда, а вот переделывать иерархический справочник в плоский на работающей базе с данными — задача трудоемкая и рискованная.

Резюмируем: Иерархия — это мощный инструмент визуализации и агрегации, но использовать его нужно только тогда, когда структура данных сама диктует древовидную модель. В остальных случаях современные возможности интерфейса 1С позволяют обойтись более гибкими и производительными методами.

← На главную