Если вы работаете с 1С:Предприятие 8.3 и сталкиваетесь с необходимостью анализировать данные, организованные в виде древовидной структуры, то без механизма иерархического просмотра не обойтись. Этот инструмент позволяет не просто просматривать списки, а видеть их в контексте подчинённости — будь то справочники с иерархией (например, номенклатура по группам), планы видов характеристик или даже документы, связанные родительско-дочерними отношениями.
На первый взгляд, иерархический просмотр кажется простой функцией, но его возможности выходят далеко за рамки базового отображения дерева. Он интегрирован в платформу на уровне языка запросов, конфигуратора и управляемых форм, что делает его универсальным решением для задач от бухгалтерского учёта до складской логистики. Однако многие пользователи и даже разработчики используют лишь малую часть его потенциала, не подозревая, как он может упростить работу с большими объёмами данных.
В этой статье мы разберём не только техническую сторону механизма, но и практические сценарии его применения — от настройки отчётов до оптимизации производительности. Особое внимание уделим скрытым возможностям иерархического просмотра, которые редко документируются, но способны сэкономить часы рутинной работы.
Что такое иерархический просмотр в 1С 8.3
Иерархический просмотр — это механизм платформы 1С:Предприятие, позволяющий отображать и анализировать данные, организованные в виде дерева (иерархии). В отличие от плоских списков, где каждая запись существует сама по себе, здесь элементы связаны отношениями «родитель-потомок». Классический пример — справочник Номенклатура, где товары группируются по категориям (например, «Электроника → Телефоны → Смартфоны»).
Технически иерархический просмотр реализован на нескольких уровнях:
- 📌 Уровень данных: иерархия хранится в самих объектах метаданных (справочниках, планах видов характеристик) через поля
РодительилиЭтоГруппа. - 🔍 Уровень запросов: в языке запросов есть специальные конструкции (
ИЕРАРХИЯ,ПОДЧИНЕННЫЕ), позволяющие извлекать данные с учётом иерархии. - 🖥️ Уровень интерфейса: в управляемых формах и отчётах поддерживается визуализация дерева (разворачиваемые узлы, отступы, значки групп).
Важно понимать, что иерархический просмотр — это не просто «красивое отображение». Он влияет на:
- 📊 Логику отчётов: например, в отчёте «Обороты по номенклатуре» можно увидеть сводные данные по группам товаров.
- ⚡ Производительность: неправильная настройка иерархии может замедлить работу системы при больших объёмах данных.
- 🔗 Интеграцию: при обмене данными между базами иерархические структуры требуют особого подхода.
Где применяется иерархический просмотр: практические примеры
Механизм иерархического просмотра используется во многих стандартных и кастомизированных решениях на платформе 1С. Рассмотрим наиболее распространённые сценарии:
1. Справочники с иерархией
- 📦 Номенклатура: группировка товаров по категориям (например, «Мебель → Столы → Офисные столы»). Позволяет быстро находить нужные позиции и анализировать продажи по группам.
- 👥 Контрагенты: иерархия по холдингам, филиалам или типам (например, «Поставщики → Оптовые поставщики»).
- 🏢 Организации: структурирование по юридическим лицам и обособленным подразделениям.
2. Планы видов характеристик (ПВХ)
Используются для классификации объектов по произвольным признакам. Например, в 1С:ERP или 1С:Управление торговлей можно создать иерархический ПВХ «Свойства товаров» с группами «Технические характеристики», «Маркетинговые атрибуты» и т.д.
3. Документы с подчинением
Реже, но встречается в конфигурациях, где документы связаны между собой. Например, в 1С:Бухгалтерии платежное поручение может быть «подчинено» счёту-фактуре, а в 1С:ЗУП — приказ о приёме на работу связан с личной карточкой сотрудника.
4. Отчёты и аналитика
Иерархический просмотр позволяет строить отчёты с автоматическим подсчётом итогов по группам. Например, в отчёте «Валовая прибыль» можно увидеть прибыль не только по каждому товару, но и по всей группе «Бытовая техника».
Если в отчёте нужно показать только верхний уровень иерархии (без разворачивания), используйте параметр УровеньИерархии = 1 в настройках отбора. Это ускорит формирование отчёта для больших справочников.
Как настроить иерархический просмотр в справочниках
Чтобы включить иерархический просмотр для справочника, необходимо выполнить несколько шагов в Конфигураторе:
Откройте справочник в режиме редактирования (например,
Номенклатура).Перейдите на закладку
Иерархия.Установите флажок
Иерархический справочник.Выберите тип иерархии:
Иерархия элементов— классический вариант (группы и элементы).Иерархия групп и элементов— группы могут содержать как элементы, так и другие группы.
Сохраните изменения и обновите конфигурацию базы данных.
- 🔄 Автоматическое разворачивание узлов при открытии формы (в настройках формы списка).
- 📌 Фильтрацию по уровню иерархии (например, показать только группы первого уровня).
- 🔍 Поиск с учётом иерархии (настройка в параметрах поиска).
- Права доступа пользователя (возможно, нет прав на просмотр групп).
- Настройки формы списка (в некоторых конфигурациях иерархия скрыта по умолчанию).
- Наличие групп в справочнике (если все элементы — первого уровня, дерево будет плоским).
- 🔹 Производительность: запросы с
ИЕРАРХИЯмогут быть ресурсоёмкими. Для больших справочников используйте отбор по уровням или ограничивайте глубину вложенности. - 🔹 Рекурсия: если нужно получить все уровни вложенности (например, «прапрадедушки» элемента), используйте рекурсивные запросы или временные таблицы.
- 🔹 Права доступа: в запросе учитываются права пользователя. Если у него нет доступа к определённой группе, подчинённые элементы тоже не будут показаны.
- 🔹 Настройки формы: в некоторых конфигурациях иерархия скрыта по умолчанию. Откройте форму списка в Конфигураторе и найдите свойство
ИерархическийПросмотр. - 🔹 Права доступа: пользователь может не иметь прав на просмотр групп. Проверьте роли в
Администрирование → Пользователи. - 🔹 Тип иерархии: если в справочнике установлена
Иерархия элементов, а вы пытаетесь создать группы групп, это не сработает. - 🔹 Ограничьте глубину вложенности с помощью условия
ГДЕ УРОВЕНЬИЕРАРХИИ(Ссылка) <= 3. - 🔹 Используйте временные таблицы для промежуточных расчётов.
- 🔹 Перестройте индексы на поле
Родитель. - 🔹 Выгружайте данные вместе с иерархией (в правилах обмена должен быть обработан справочник целиком).
- 🔹 Проверяйте целостность ссылок после загрузки с помощью обработки
Поиск и исправление ссылок. - 🔹 Используйте уникальные идентификаторы (например,
GUID) для сопоставления элементов. - 🔹 Настройки группировок: в схеме компоновки данных должна быть включена группировка по иерархическому полю.
- 🔹 Параметры отчёта: иногда итоги отключены в настройках пользовательского варианта отчёта.
- 🔹 Источник данных: если запрос не возвращает группы (например, из-за отбора
ЭТОГРУППА = ЛОЖЬ), итоги не будут рассчитаны. - 🔹 Разбить иерархию на несколько справочников (например, «Категории товаров» и «Подкатегории»).
- 🔹 Использовать дополнительные реквизиты для классификации (например, «Тип товара» вместо глубокой вложенности).
- 🔹 Поле
Родительпроиндексировано. - 🔹 Поле
ЭтоГруппатоже имеет индекс (если часто используется в отборах). - 🔹 Кэшировать её в регистре сведений и обновлять по расписанию.
- 🔹 Использовать планы обмена для распределённой синхронизации иерархии между базами.
- 🔹 Отключите автоматическое разворачивание всех узлов (настройка
АвтоРазвернутьУзлы = Ложь). - 🔹 Используйте динамический список вместо обычного для больших справочников.
- 🔹 Настройте отложенную загрузку данных (например, подгружать подчинённые элементы только при разворачивании узла).
- 🔹 Использование виртуальных таблиц (например,
Справочник.Номенклатура.Иерархия). - 🔹 Замену иерархии на дополнительные реквизиты с классификацией (например, «Категория1», «Категория2» вместо вложенности).
После этого в пользовательском режиме (1С:Предприятие) справочник будет отображаться как дерево. Например, в форме списка номенклатуры появится колонка с отступами, обозначающими уровень вложенности, а группы будут отмечены специальным значком (обычно папкой 📁).
Для удобства работы можно настроить:
☑️ Настройка иерархического справочника
Если после настройки иерархия не отображается, проверьте:
Что делать, если иерархия отображается неправильно?
Если группы и элементы перемешаны или отступы не соответствуют уровню вложенности, проверьте поле Родитель в таблице справочника. Возможно, ссылки на родительские элементы повреждены. В этом случае поможет обработка "Поиск и исправление ссылок" или ручное исправление через запрос.
Иерархический просмотр в запросах 1С: синтаксис и примеры
Одним из самых мощных инструментов работы с иерархией в 1С являются запросы. С помощью конструкции ИЕРАРХИЯ можно извлекать данные с учётом подчинённости, а также рассчитывать агрегированные показатели по группам.
Базовый синтаксис:
ВЫБРАТЬ
Справочник.Номенклатура.Ссылка КАК Ссылка,
Справочник.Номенклатура.Наименование КАК Наименование,
Справочник.Номенклатура.ЭтоГруппа КАК ЭтоГруппа
ИЗ
Справочник.Номенклатура КАК Справочник.Номенклатура
ГДЕ
Справочник.Номенклатура.ПометкаУдаления = ЛОЖЬ
УПОРЯДОЧИТЬ ПО
ИЕРАРХИЯ
Этот запрос вернёт все элементы справочника Номенклатура, упорядоченные по иерархии. Группы будут идти перед своими подчинёнными элементами.
Более сложный пример — выборка только групп с подсчётом количества подчинённых элементов:
ВЫБРАТЬ
Группы.Ссылка КАК Группа,
Группы.Наименование КАК НаименованиеГруппы,
(ВЫБРАТЬ КОЛИЧЕСТВО(DISTINCT Подчиненные.Ссылка)
ИЗ Справочник.Номенклатура КАК Подчиненные
ГДЕ Подчиненные.Родитель = Группы.Ссылка) КАК КоличествоПодчиненных
ИЗ
Справочник.Номенклатура КАК Группы
ГДЕ
Группы.ЭтоГруппа = ИСТИНА
И Группы.ПометкаУдаления = ЛОЖЬ
УПОРЯДОЧИТЬ ПО
ИЕРАРХИЯ
Для работы с подчинёнными элементами используется конструкция ПОДЧИНЕННЫЕ:
ВЫБРАТЬ
Родитель.Наименование КАК Родитель,
Подчиненный.Наименование КАК Подчиненный
ИЗ
Справочник.Номенклатура КАК Родитель
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Подчиненный
ПО Подчиненный.Родитель = Родитель.Ссылка
ГДЕ
Родитель.ЭтоГруппа = ИСТИНА
Этот запрос вернёт пары «родитель — подчинённый элемент» для всех групп в справочнике.
Конструкция ИЕРАРХИЯ в запросах не только упорядочивает данные, но и оптимизирует их выборку. При её использовании платформа 1С автоматически строит эффективный план выполнения, что особенно важно для больших справочников (10 000+ записей).
При работе с иерархическими запросами учитывайте:
Как ускорить иерархические запросы?
Для ускорения запросов с ИЕРАРХИЯ создайте индекс по полю Родитель в таблице справочника. В Конфигураторе это делается через меню Администрирование → Поддержка и обслуживание → Тестирование и исправление → Перестроение индексов.
Типичные ошибки при работе с иерархическим просмотром
Даже опытные пользователи и разработчики иногда сталкиваются с проблемами при работе с иерархией в 1С. Рассмотрим наиболее распространённые ошибки и способы их решения.
1. «Иерархия не отображается в форме списка»
Если после настройки справочник остаётся плоским (без отступов и значков групп), проверьте:
2. «Запрос с ИЕРАРХИЯ работает слишком долго»
Иерархические запросы могут тормозить на больших объёмах данных. Чтобы ускорить их:
3. «При переносе данных иерархия сломалась»
При обмене данными между базами или выгрузке/загрузке через XML связи «родитель-потомок» могут нарушиться. Чтобы этого избежать:
4. «В отчёте не считаются итоги по группам»
Если в отчёте с иерархией не показываются сводные данные по группам, проверьте:
Если в отчёте нужно показать итоги только по группам, а не по всем элементам, добавьте в запрос условие ГДЕ ЭтоГруппа = ИСТИНА и используйте агрегатные функции (СУММА, КОЛИЧЕСТВО) с группировкой по родительским элементам.
Оптимизация производительности при работе с большими иерархиями
Иерархические структуры с тысячами элементов могут значительно замедлять работу 1С. Вот несколько способов оптимизации:
1. Ограничение глубины иерархии
Если в справочнике более 5 уровней вложенности, рассмотрите возможность:
2. Индексирование полей
Для ускорения запросов с ИЕРАРХИЯ убедитесь, что:
3. Кэширование иерархии
Если иерархия редко меняется, можно:
4. Оптимизация форм
В управляемых формах:
5. Альтернативные подходы
Если иерархический просмотр критично замедляет работу, рассмотрите:
| Проблема | Причина | Решение |
|---|---|---|
| Медленная загрузка формы списка | Большое количество групп и элементов | Использовать динамический список и отложенную загрузку |
| Долгое формирование отчёта | Рекурсивные запросы по глубокой иерархии | Ограничить уровень вложенности или использовать кэш |
| Ошибки при обмене данными | Нарушение ссылок «родитель-потомок» | Проверять целостность ссылок после загрузки |
| Неправильные итоги в отчёте | Неверная группировка по иерархическому полю | Проверить схему компоновки данных |
Если справочник содержит более 10 000 элементов с иерархией глубиной 4+ уровней, рассмотрите возможность денормализации данных. Например, можно хранить путь к элементу в виде строки (например, "1.2.5.8") и использовать его для быстрого поиска без рекурсивных запросов.
Иерархический просмотр в отчётах: настройка и примеры
Одним из самых востребованных применений иерархического просмотра является построение отчётов с группировкой данных по иерархическим справочникам. Рассмотрим, как это реализовать на примере отчёта «Обороты по номенклатуре».
Шаг 1: Создание схемы компоновки данных
В Конфигураторе:
- Создайте новый отчёт или откройте существующий (например,
ОборотыПоНоменклатуре). - В схеме компоновки данных добавьте набор данных — запрос с иерархией:
ВЫБРАТЬНоменклатура.Ссылка КАК Номенклатура,
Номенклатура.Наименование КАК Наименование,
Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
СУММА(Документ.Товары.Количество) КАК Количество
ИЗ
Документ.РеализацияТоваровУслуг КАК Документ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Товары КАК Документ.Товары
ПО Документ.Ссылка = Документ.Товары.Ссылка
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
ПО Документ.Товары.Номенклатура = Номенклатура.Ссылка
СГРУППИРОВАТЬ ПО
Номенклатура.Ссылка,
Номенклатура.Наименование,
Номенклатура.ЭтоГруппа
УПОРЯДОЧИТЬ ПО
ИЕРАРХИЯ Номенклатура.Ссылка
- В настройках группировки укажите поле
Номенклатуракак иерархическое. - Настройте отображение итогов по группам в параметрах компоновки.
Шаг 2: Настройка пользовательского варианта отчёта
В пользовательском режиме (1С:Предприятие):
- 🔹 Откройте отчёт и выберите вариант с иерархией.
- 🔹 В настройках отчёта включите опцию «Показывать итоги по группам».
- 🔹 При необходимости добавьте отбор по уровню иерархии (например, показать только группы 1-2 уровня).
Шаг 3: Оптимизация отчёта
Для ускорения формирования отчёта:
- 🔹 Используйте виртуальные таблицы вместо прямых запросов к документам.
- 🔹 Ограничивайте период формирования отчёта.
- 🔹 Настройте кэширование результатов (если отчёт запускается часто с одинаковыми параметрами).
Пример отчёта с иерархией по контрагентам (группировка по холдингам):
ВЫБРАТЬ
Контрагенты.Ссылка КАК Контрагент,
Контрагенты.Наименование КАК Наименование,
Контрагенты.ЭтоГруппа КАК ЭтоГруппа,
СУММА(Документ.СуммаДокумента) КАК Сумма
ИЗ
Документ.ПоступлениеТоваровУслуг КАК Документ
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО Документ.Контрагент = Контрагенты.Ссылка
СГРУППИРОВАТЬ ПО
Контрагенты.Ссылка,
Контрагенты.Наименование,
Контрагенты.ЭтоГруппа
УПОРЯДОЧИТЬ ПО
ИЕРАРХИЯ Контрагенты.Ссылка
Как показать в отчёте только группы без элементов?
Добавьте в запрос условие ГДЕ Контрагенты.ЭтоГруппа = ИСТИНА. Тогда в отчёте будут только холдинги и филиалы, без конечных контрагентов. Итоги будут рассчитаны по группам.
Иерархический просмотр в управляемых формах: тонкости настройки
В управляемых формах 1С иерархический просмотр настраивается через свойства элементов формы. Рассмотрим ключевые моменты на примере формы списка справочника.
1. Настройка табличного поля
Чтобы таблица отображала иерархию:
- 🔹 В Конфигураторе откройте форму списка справочника (например,
Справочник.Номенклатура.ФормаСписка). - 🔹 Найдите элемент
ТабличноеПоле(обычно называетсяСписок). - 🔹 В свойствах табличного поля установите:
ИерархическийПросмотр = ИстинаАвтоРазвернутьУзлы = Ложь(для больших справочников)
2. Добавление команд для работы с иерархией
Пользователям часто нужны команды для управления иерархией прямо из формы. Добавьте в форму:
- 🔹 Команду «Развернуть все»:
Процедура РазвернутьВсе(Команда)Элементы.Список.РазвернутьВсеУзлы();
КонецПроцедуры
- 🔹 Команду «Свернуть все»:
Процедура СвернутьВсе(Команда)Элементы.Список.СвернутьВсеУзлы();
КонецПроцедуры
- 🔹 Команду «Показать только группы» (фильтрация):
Процедура ПоказатьТолькоГруппы(Команда)Элементы.Список.Отбор.ЭтоГруппа.Установить(Истина);
Элементы.Список.ПрименитьОтбор();
КонецПроцедуры
3. Настройка отображения узлов
Для улучшения визуального восприятия:
- 🔹 Настройте
КартинкуУзлаиКартинкуЛистав свойствах табличного поля (например, папка 📁 для групп и документ 📄 для элементов). - 🔹 Установите
ЦветФонаУзладля выделения групп. - 🔹 Используйте
ОтступУзладля визуального разделения уровней (например,ОтступУзла = 20).
4. Динамическое обновление иерархии
Если иерархия меняется в процессе работы (например, при перемещении элементов), обновите отображение: