Создание иерархической структуры в отчетах 1С:Предприятие — ключевой навык для аналитиков, бухгалтеров и разработчиков, работающих с большими массивами данных. Без грамотной иерархии даже простой отчет по продажам может превратиться в хаотичный список строк, где невозможно выделить тренды или проблемные зоны. В этой статье разберем не только базовые методы группировки данных, но и нюансы работы с вложенными уровнями, динамическими иерархиями и настройкой отображения в Системе компоновки данных (СКД).
Проблема многих пользователей — непонимание разницы между иерархией элементов справочника (например, номенклатуры с группами и подгруппами) и иерархией в самом отчете (группировка по полям с вложенностью). Мы покажем, как связать эти концепции, избежатьных ошибок при построении дерева отчета и автоматизировать процесс для регулярных задач. Особое внимание уделим динамическому формированию уровней иерархии на основе условий — функции, которая часто остается незамеченной, но существенно экономит время при работе с изменяющимися данными.
1. Типы иерархий в отчетах 1С: когда что использовать
Прежде чем настраивать структуру, определитесь с типом иерархии. В 1С их условно делят на три категории, каждая из которых решает свои задачи:
- 📌 Иерархия справочников — когда структура заложена в самих данных (например, группы номенклатуры"Электроника → Телефоны → Смартфоны"). В отчете такие данные отображаются автоматически, если включена опция"Иерархический просмотр".
- 📊 Группировка по полям — классический способ, когда уровни создаются прямо в настройках отчета (например, сначала по регионам, затем по менеджерам). Подходит для аналитики"на лету".
- 🔄 Динамическая иерархия — уровни формируются по условиям (например,"показать только группы с оборотом > 1 млн руб."). Требует знания СКД или программирования.
Самая распространенная ошибка — пытаться"втиснуть" все данные в один тип. Например, если у вас справочник номенклатуры уже имеет иерархию, но вы дополнительно группируете его по производителям в отчете, получите двойную вложенность, которая усложнит восприятие. В таких случаях лучше использовать Объединение данных в СКД или создавать отдельные отчеты для разных целей.
2. Пошаговая настройка иерархии через СКД
Рассмотрим процесс на примере Системы компоновки данных (СКД), которая доступна в большинстве конфигураций 1С:Предприятие 8.3. Этот метод универсален и подходит для отчетов любого типа — от простых ведомостей до сложных аналитических дашбордов.
- Откройте конструктор отчета:
Перейдите в раздел
Отчеты → [Ваш отчет] → Изменить вариант(или создайте новый). В окне конструктора выберите вкладкуНастройки. - Добавьте группировки:
В дереве настроек найдите раздел
Группировкии нажмитеДобавить группировку. Укажите поле для первого уровня (например,Контрагент). - Создайте вложенные уровни:
Выделите созданную группировку и снова нажмите
Добавить группировку— это будет второй уровень (например,Договор). Повторите для третьего уровня (например,ДокументРасчетов). - Настройте отображение:
В свойствах каждой группировки установите флаги:
- 🔹
Иерархия— для отображения дерева; - 🔹
Итоги по группировке— если нужны промежуточные суммы; - 🔹
Развернуть при выводе— чтобы уровни были видны сразу.
- 🔹
Для проверки корректности структуры используйте кнопку Просмотр в конструкторе. Если уровни отображаются неверно (например, подгруппы"выпадают" из родительских), проверьте:
- 🔍 Правильность связей между таблицами в запросе;
- 🔍 Наличие дублирующихся полей в группировках;
- 🔍 Соответствие типов данных (например, не смешивайте
СтрокаиЧислов одном уровне).
Поля группировки заданы в правильном порядке|
Уровни не дублируют данные справочников|
Итоги рассчитываются корректно|
Отчет открывается без ошибок-->
3. Работа с иерархией справочников в отчетах
Если ваши данные уже структурированы в справочниках (например, номенклатура с группами и подгруппами), их можно автоматически перенести в отчет. Для этого:
- В конструкторе отчета перейдите на вкладку
Наборы данных. - В запросе к базе добавьте поле с иерархической ссылкой. Например, для номенклатуры:
ВЫБРАТЬНоменклатура.Ссылка КАК Номенклатура,
Номенклатура.ЭтотОбъект.ПолноеНаименование КАК ПолноеНаименование
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
ПО Реализация.Номенклатура = Номенклатура.Ссылка
Здесь
ПолноеНаименованиевозвращает путь элемента с учетом всех родительских групп (например,"Электроника → Телефоны → iPhone 15"). - В настройках отчета добавьте поле
ПолноеНаименованиев группировку и включите опциюИерархический просмотр.
Важный нюанс: если в справочнике есть элементы без родительских групп (так называемые"корневые"), они будут отображаться на верхнем уровне. Чтобы избежать хаоса, рекомендуется:
- 📁 Создать виртуальную группу (например,"Прочее") и перенести туда все несгруппированные элементы;
- 🔄 Использовать отбор по уровню вложенности в запросе:
ГДЕ Номенклатура.ЭтотОбъект.Уровень > 0
Если в отчете нужно показать только определенный уровень иерархии (например, только группы второго уровня), используйте функцию Уровень в отборе: ГДЕ Номенклатура.ЭтотОбъект.Уровень = 2.
4. Динамическая иерархия: условия и вычисляемые поля
Статическая иерархия подходит не всегда. Например, если вам нужно показать только те группы номенклатуры, по которым был оборот за последний месяц, или развернуть уровни в зависимости от прав пользователя. В таких случаях поможет динамическое формирование структуры.
Рассмотрим два подхода:
Способ 1: Условные группировки в СКД
В конструкторе отчета:
- Создайте вычисляемое поле (вкладка
Вычисляемые поля), которое будет определять уровень. Например:ЕСЛИ Оборот > 1000000 ТОГДА"Крупные сделки" ИНАЧЕ"Прочие" КОНЕЦЕСЛИ - Добавьте группировку по этому полю. В свойствах группировки установите флаг
Условное оформлениеи настройте цвета для разных категорий.
Способ 2: Программное управление иерархией
Если логика сложнее, чем позволяет СКД, пишите обработчик события ПриКомпоновкеРезультата. Пример кода для разворачивания только"важных" групп:
Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
Для Каждого Группа Из ДанныеРасшифровки.Группировки Цикл
Если Группа.Поле.Имя ="Оборот" И Группа.Итог > 500000 Тогда
Группа.Развернута = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Динамическая иерархия особенно полезна для:
- 📈 Отчетов с большим количеством данных (разворачиваются только актуальные разделы);
- 👥 Персонализированных дашбордов (менеджеры видят только свои группы клиентов);
- 🔍 Аналитики исключений (например, группы с отрицательным остатком).
Как ускорить работу отчета с динамической иерархией?
Используйте индексированные поля в запросах (например, Ссылка вместо Наименование).
Ограничивайте глубину иерархии на уровне запроса с помощью Уровень <= 3.
Кэшируйте результаты вычисляемых полей в временные таблицы, если отчет запускается часто.
5. Оформление иерархии: отступы, цвета, значки
Даже правильно построенная иерархия может быть неудобной, если не продумать визуальное оформление. В 1С есть инструменты для улучшения восприятия:
| Элемент оформления | Как настроить | Пример использования |
|---|---|---|
| Отступы | В свойствах группировки установите Отступ (в пикселях или символах). |
Для уровней 1/2/3: 0px / 20px / 40px. |
| Цвета строк | Используйте Условное оформление в настройках отчета. |
Группы — серый фон, элементы — белый. |
| Значки | Добавьте колонку с вычисляемым полем, возвращающим символ (например,"📁" для групп). | ЕСЛИ ЭтоГруппа ТОГДА"📁" ИНАЧЕ"". |
| Шрифты | Настройте Стиль шрифта для разных уровней (жирный для родительских групп). |
Уровень 1: Жирный, уровень 2: курсив. |
Для сложных отчетов рекомендуется создать шаблон оформления и применять его ко всем новым вариантам. Это сэкономит время и обеспечит единообразие. Например, в 1С:ERP или 1С:УТ можно сохранить стиль в файле и загружать его при необходимости.
Используйте не более 3-4 цветов для оформления иерархии. Чрезмерное разнообразие отвлекает от данных и усложняет восприятие.
6. Типичные ошибки и как их избежать
Даже опытные пользователи 1С сталкиваются с проблемами при настройке иерархии. Вот наиболее распространенные ловушки:
⚠️ Внимание: Если в отчете используются данные из разных периодов (например, сравнение текущего и прошлого месяца), убедитесь, что группировки построены по одинаковым полям. Иначе уровни могут"разъехаться", и сравнение станет невозможным.
- 🔴 Циклические ссылки:
Возникают, если в справочнике элемент ссылается сам на себя или на своего потомка. Проверьте иерархию справочника через
Все функции → Проверить иерархию. - 🔴 Перегруженность уровней:
Более 5 уровней вложенности делают отчет нечитаемым. Разбейте данные на несколько отчетов или используйте сводные таблицы.
- 🔴 Несовпадение типов данных:
Например, группировка по полю
Дата(типДата) иНомерДокумента(типСтрока) в одном уровне приведет к ошибке.
Еще одна частая проблема — медленная работа отчета при глубокой иерархии. Чтобы ускорить выполнение:
- 🚀 Используйте
ИНДЕКСИРОВАТЬ ПОв запросах для полей, по которым строится иерархия; - 🚀 Ограничивайте период данных (например, вместо"за все время" берите"за последний год");
- 🚀 Отключайте ненужные итоги в свойствах группировок.
Как найти"тяжелые" группировки?
Включите Протокол выполнения запроса в настройках отчета. Группировки, на которые тратится больше 1 секунды, стоит оптимизировать.
7. Примеры готовых решений для разных задач
Разберем конкретные кейсы, которые часто встречаются на практике.
Пример 1: Иерархический отчет по продажам с группировкой по менеджерам и клиентам
Задача: Показать продажи с группировкой по менеджерам, внутри — по клиентам, а внутри клиентов — по документам.
Решение:
- Создайте запрос с полями:
Менеджер,Клиент,Документ,Сумма. - В СКД добавьте группировки в порядке:
Менеджер → Клиент → Документ. - Для поля
Менеджервключите опциюИтоги по группировке.
Пример 2: Дерево номенклатуры с остатками по складам
Задача: Показать структуру номенклатуры (группы и элементы) с остатками на каждом складе.
Решение:
- В запросе используйте
Номенклатура.ЭтотОбъект.ПолноеНаименованиеиОстаткиТоваров.Количество. - Сгруппируйте данные по
ПолноеНаименование(иерархия) иСклад. - Добавьте вычисляемое поле для отображения значка группы:
ЕСЛИ Номенклатура.ЭтотОбъект.ЭтоГруппа ТОГДА"📁" ИНАЧЕ"📦"
Пример 3: Динамическая иерархия по регионам с фильтром по обороту
Задача: Показать регионы только с оборотом > 10 млн руб., внутри — города с оборотом > 1 млн руб.
Решение:
- Создайте вычисляемые поля для уровней:
РегионУровень = ЕСЛИ ОборотПоРегиону > 10000000 ТОГДА"Регион" ИНАЧЕ"" - Добавьте отбор по этим полям в настройках отчета.
- Используйте
Условное оформление, чтобы выделить цветом регионы с оборотом > 50 млн руб.
FAQ: Ответы на частые вопросы
Как сделать, чтобы в отчете сначала шли группы, а потом элементы?
В настройках группировки в СКД установите сортировку по полю ЭтоГруппа по убыванию. Или используйте выражение:
ПОРЯДОК ЕСЛИ Номенклатура.ЭтотОбъект.ЭтоГруппа ТОГДА 0 ИНАЧЕ 1 КОНЕЦ УБЫВ
Почему в отчете не отображается иерархия справочника?
Проверьте:
- Включена ли опция
Иерархический просмотрв настройках группировки; - Корректно ли указано поле с иерархической ссылкой (должно быть
СсылкаилиПолноеНаименование); - Нет ли отбора, который исключает родительские элементы (например,
ГДЕ Уровень = 1).
Как экспортировать иерархический отчет в Excel с сохранением структуры?
Используйте формат Excel (с иерархией) при экспорте. Если такой опции нет:
- Экспортируйте в
Excelс включенной опциейСохранять макет; - Вручную настройте группировку строк в Excel через
Данные → Группировать.
Для автоматического экспорта с иерархией напишите обработку на встроенном языке.
Можно ли в одном отчете совместить иерархию справочника и группировку по датам?
Да, но нужно учитывать порядок группировок. Например:
- Первый уровень —
Год(группировка по полю); - Второй уровень —
Номенклатура.ПолноеНаименование(иерархия справочника); - Третий уровень —
Месяц(группировка по полю).
В этом случае данные будут сгруппированы сначала по годам, затем внутри каждого года — по иерархии номенклатуры, а внутри групп номенклатуры — по месяцам.
Как сделать, чтобы при разворачивании группы отчет не подгружал данные заново?
Эта проблема характерна для больших отчетов. Решения:
- 🔹 Используйте
Кэширование данныхв настройках варианта отчета; - 🔹 Настройте
Ленивую загрузку(если поддерживается конфигурацией); - 🔹 Разбейте отчет на несколько более мелких (например, по кварталам).