Создание иерархической структуры в отчетах 1С:Предприятие — ключевой навык для аналитиков, бухгалтеров и разработчиков, работающих с большими массивами данных. Без грамотной иерархии даже простой отчет по продажам может превратиться в хаотичный список строк, где невозможно выделить тренды или проблемные зоны. В этой статье разберем не только базовые методы группировки данных, но и нюансы работы с вложенными уровнями, динамическими иерархиями и настройкой отображения в Системе компоновки данных (СКД).

Проблема многих пользователей — непонимание разницы между иерархией элементов справочника (например, номенклатуры с группами и подгруппами) и иерархией в самом отчете (группировка по полям с вложенностью). Мы покажем, как связать эти концепции, избежатьных ошибок при построении дерева отчета и автоматизировать процесс для регулярных задач. Особое внимание уделим динамическому формированию уровней иерархии на основе условий — функции, которая часто остается незамеченной, но существенно экономит время при работе с изменяющимися данными.

1. Типы иерархий в отчетах 1С: когда что использовать

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

  • 📌 Иерархия справочников — когда структура заложена в самих данных (например, группы номенклатуры"Электроника → Телефоны → Смартфоны"). В отчете такие данные отображаются автоматически, если включена опция"Иерархический просмотр".
  • 📊 Группировка по полям — классический способ, когда уровни создаются прямо в настройках отчета (например, сначала по регионам, затем по менеджерам). Подходит для аналитики"на лету".
  • 🔄 Динамическая иерархия — уровни формируются по условиям (например,"показать только группы с оборотом > 1 млн руб."). Требует знания СКД или программирования.

Самая распространенная ошибка — пытаться"втиснуть" все данные в один тип. Например, если у вас справочник номенклатуры уже имеет иерархию, но вы дополнительно группируете его по производителям в отчете, получите двойную вложенность, которая усложнит восприятие. В таких случаях лучше использовать Объединение данных в СКД или создавать отдельные отчеты для разных целей.

📊 Какой тип иерархии вы используете чаще?
Иерархия справочников
Группировка по полям
Динамическая иерархия
Не использую иерархию

2. Пошаговая настройка иерархии через СКД

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

  1. Откройте конструктор отчета:

    Перейдите в раздел Отчеты → [Ваш отчет] → Изменить вариант (или создайте новый). В окне конструктора выберите вкладку Настройки.

  2. Добавьте группировки:

    В дереве настроек найдите раздел Группировки и нажмите Добавить группировку. Укажите поле для первого уровня (например, Контрагент).

  3. Создайте вложенные уровни:

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

  4. Настройте отображение:

    В свойствах каждой группировки установите флаги:

    • 🔹 Иерархия — для отображения дерева;
    • 🔹 Итоги по группировке — если нужны промежуточные суммы;
    • 🔹 Развернуть при выводе — чтобы уровни были видны сразу.

Для проверки корректности структуры используйте кнопку Просмотр в конструкторе. Если уровни отображаются неверно (например, подгруппы"выпадают" из родительских), проверьте:

  • 🔍 Правильность связей между таблицами в запросе;
  • 🔍 Наличие дублирующихся полей в группировках;
  • 🔍 Соответствие типов данных (например, не смешивайте Строка и Число в одном уровне).

Поля группировки заданы в правильном порядке|

Уровни не дублируют данные справочников|

Итоги рассчитываются корректно|

Отчет открывается без ошибок-->

3. Работа с иерархией справочников в отчетах

Если ваши данные уже структурированы в справочниках (например, номенклатура с группами и подгруппами), их можно автоматически перенести в отчет. Для этого:

  1. В конструкторе отчета перейдите на вкладку Наборы данных.
  2. В запросе к базе добавьте поле с иерархической ссылкой. Например, для номенклатуры:
    ВЫБРАТЬ
    

    Номенклатура.Ссылка КАК Номенклатура,

    Номенклатура.ЭтотОбъект.ПолноеНаименование КАК ПолноеНаименование

    ИЗ

    Документ.РеализацияТоваровУслуг КАК Реализация

    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура

    ПО Реализация.Номенклатура = Номенклатура.Ссылка

    Здесь ПолноеНаименование возвращает путь элемента с учетом всех родительских групп (например,"Электроника → Телефоны → iPhone 15").

  3. В настройках отчета добавьте поле ПолноеНаименование в группировку и включите опцию Иерархический просмотр.

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

  • 📁 Создать виртуальную группу (например,"Прочее") и перенести туда все несгруппированные элементы;
  • 🔄 Использовать отбор по уровню вложенности в запросе:
    ГДЕ Номенклатура.ЭтотОбъект.Уровень > 0
💡

Если в отчете нужно показать только определенный уровень иерархии (например, только группы второго уровня), используйте функцию Уровень в отборе: ГДЕ Номенклатура.ЭтотОбъект.Уровень = 2.

4. Динамическая иерархия: условия и вычисляемые поля

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

Рассмотрим два подхода:

Способ 1: Условные группировки в СКД

В конструкторе отчета:

  1. Создайте вычисляемое поле (вкладка Вычисляемые поля), которое будет определять уровень. Например:
    ЕСЛИ Оборот > 1000000 ТОГДА"Крупные сделки" ИНАЧЕ"Прочие" КОНЕЦЕСЛИ
  2. Добавьте группировку по этому полю. В свойствах группировки установите флаг Условное оформление и настройте цвета для разных категорий.

Способ 2: Программное управление иерархией

Если логика сложнее, чем позволяет СКД, пишите обработчик события ПриКомпоновкеРезультата. Пример кода для разворачивания только"важных" групп:

Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)

Для Каждого Группа Из ДанныеРасшифровки.Группировки Цикл

Если Группа.Поле.Имя ="Оборот" И Группа.Итог > 500000 Тогда

Группа.Развернута = Истина;

КонецЕсли;

КонецЦикла;

КонецПроцедуры

Динамическая иерархия особенно полезна для:

  • 📈 Отчетов с большим количеством данных (разворачиваются только актуальные разделы);
  • 👥 Персонализированных дашбордов (менеджеры видят только свои группы клиентов);
  • 🔍 Аналитики исключений (например, группы с отрицательным остатком).
Как ускорить работу отчета с динамической иерархией?

Используйте индексированные поля в запросах (например, Ссылка вместо Наименование).

Ограничивайте глубину иерархии на уровне запроса с помощью Уровень <= 3.

Кэшируйте результаты вычисляемых полей в временные таблицы, если отчет запускается часто.

5. Оформление иерархии: отступы, цвета, значки

Даже правильно построенная иерархия может быть неудобной, если не продумать визуальное оформление. В есть инструменты для улучшения восприятия:

Элемент оформления Как настроить Пример использования
Отступы В свойствах группировки установите Отступ (в пикселях или символах). Для уровней 1/2/3: 0px / 20px / 40px.
Цвета строк Используйте Условное оформление в настройках отчета. Группы — серый фон, элементы — белый.
Значки Добавьте колонку с вычисляемым полем, возвращающим символ (например,"📁" для групп). ЕСЛИ ЭтоГруппа ТОГДА"📁" ИНАЧЕ"".
Шрифты Настройте Стиль шрифта для разных уровней (жирный для родительских групп). Уровень 1: Жирный, уровень 2: курсив.

Для сложных отчетов рекомендуется создать шаблон оформления и применять его ко всем новым вариантам. Это сэкономит время и обеспечит единообразие. Например, в 1С:ERP или 1С:УТ можно сохранить стиль в файле и загружать его при необходимости.

💡

Используйте не более 3-4 цветов для оформления иерархии. Чрезмерное разнообразие отвлекает от данных и усложняет восприятие.

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

Даже опытные пользователи сталкиваются с проблемами при настройке иерархии. Вот наиболее распространенные ловушки:

⚠️ Внимание: Если в отчете используются данные из разных периодов (например, сравнение текущего и прошлого месяца), убедитесь, что группировки построены по одинаковым полям. Иначе уровни могут"разъехаться", и сравнение станет невозможным.
  • 🔴 Циклические ссылки:

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

  • 🔴 Перегруженность уровней:

    Более 5 уровней вложенности делают отчет нечитаемым. Разбейте данные на несколько отчетов или используйте сводные таблицы.

  • 🔴 Несовпадение типов данных:

    Например, группировка по полю Дата (тип Дата) и НомерДокумента (тип Строка) в одном уровне приведет к ошибке.

Еще одна частая проблема — медленная работа отчета при глубокой иерархии. Чтобы ускорить выполнение:

  • 🚀 Используйте ИНДЕКСИРОВАТЬ ПО в запросах для полей, по которым строится иерархия;
  • 🚀 Ограничивайте период данных (например, вместо"за все время" берите"за последний год");
  • 🚀 Отключайте ненужные итоги в свойствах группировок.
Как найти"тяжелые" группировки?

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

7. Примеры готовых решений для разных задач

Разберем конкретные кейсы, которые часто встречаются на практике.

Пример 1: Иерархический отчет по продажам с группировкой по менеджерам и клиентам

Задача: Показать продажи с группировкой по менеджерам, внутри — по клиентам, а внутри клиентов — по документам.

Решение:

  1. Создайте запрос с полями: Менеджер, Клиент, Документ, Сумма.
  2. В СКД добавьте группировки в порядке: Менеджер → Клиент → Документ.
  3. Для поля Менеджер включите опцию Итоги по группировке.

Пример 2: Дерево номенклатуры с остатками по складам

Задача: Показать структуру номенклатуры (группы и элементы) с остатками на каждом складе.

Решение:

  1. В запросе используйте Номенклатура.ЭтотОбъект.ПолноеНаименование и ОстаткиТоваров.Количество.
  2. Сгруппируйте данные по ПолноеНаименование (иерархия) и Склад.
  3. Добавьте вычисляемое поле для отображения значка группы:
    ЕСЛИ Номенклатура.ЭтотОбъект.ЭтоГруппа ТОГДА"📁" ИНАЧЕ"📦"

Пример 3: Динамическая иерархия по регионам с фильтром по обороту

Задача: Показать регионы только с оборотом > 10 млн руб., внутри — города с оборотом > 1 млн руб.

Решение:

  1. Создайте вычисляемые поля для уровней:
    РегионУровень = ЕСЛИ ОборотПоРегиону > 10000000 ТОГДА"Регион" ИНАЧЕ""
  2. Добавьте отбор по этим полям в настройках отчета.
  3. Используйте Условное оформление, чтобы выделить цветом регионы с оборотом > 50 млн руб.

FAQ: Ответы на частые вопросы

Как сделать, чтобы в отчете сначала шли группы, а потом элементы?

В настройках группировки в СКД установите сортировку по полю ЭтоГруппа по убыванию. Или используйте выражение:

ПОРЯДОК ЕСЛИ Номенклатура.ЭтотОбъект.ЭтоГруппа ТОГДА 0 ИНАЧЕ 1 КОНЕЦ УБЫВ
Почему в отчете не отображается иерархия справочника?

Проверьте:

  1. Включена ли опция Иерархический просмотр в настройках группировки;
  2. Корректно ли указано поле с иерархической ссылкой (должно быть Ссылка или ПолноеНаименование);
  3. Нет ли отбора, который исключает родительские элементы (например, ГДЕ Уровень = 1).
Как экспортировать иерархический отчет в Excel с сохранением структуры?

Используйте формат Excel (с иерархией) при экспорте. Если такой опции нет:

  1. Экспортируйте в Excel с включенной опцией Сохранять макет;
  2. Вручную настройте группировку строк в Excel через Данные → Группировать.

Для автоматического экспорта с иерархией напишите обработку на встроенном языке.

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

Да, но нужно учитывать порядок группировок. Например:

  1. Первый уровень — Год (группировка по полю);
  2. Второй уровень — Номенклатура.ПолноеНаименование (иерархия справочника);
  3. Третий уровень — Месяц (группировка по полю).

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

Как сделать, чтобы при разворачивании группы отчет не подгружал данные заново?

Эта проблема характерна для больших отчетов. Решения:

  • 🔹 Используйте Кэширование данных в настройках варианта отчета;
  • 🔹 Настройте Ленивую загрузку (если поддерживается конфигурацией);
  • 🔹 Разбейте отчет на несколько более мелких (например, по кварталам).