Как в СКД «накрыть» одной группировкой другую в шапке отчета вместе с итогами

Программист IT и автоматизация бизнеса
← На главную

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

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

Способ 1: Использование структуры «Таблица»

Проанализируем наиболее правильный с точки зрения архитектуры СКД подход. Если нам нужно, чтобы одна группировка «накрывала» другую в горизонтальной плоскости (в колонках), нам следует использовать элемент Таблица вместо обычного Списка в настройках структуры отчета.

Разберем по шагам, как это настроить:

  1. Перейдем на вкладку Настройки в схеме компоновки данных.
  2. В дереве настроек удалим (или переместим) стандартный «Детальные записи» и добавим элемент Таблица.
  3. В таблице есть две секции: Строки и Колонки. В секцию «Строки» добавим те поля, которые должны идти по вертикали (например, подразделения или сотрудники).
  4. В секцию Колонки добавим иерархию группировок. Сначала добавим поле Категория, а внутри него (как подчиненную группировку) добавим поле ВидРасчета.

Теперь самое важное — как заставить общие итоги по категории встать под ту же шапку. Для этого выделим группировку Категория в колонках и перейдем на вкладку Другие настройки (внизу окна настроек):

  1. Найдем параметр Расположение общих итогов.
  2. Установим значение Конец (или «Начало», если итог нужен перед расшифровкой).

В этом случае система автоматически создаст ячейку-заголовок для Категория, которая будет объединена над всеми колонками ВидРасчета и колонкой «Итого» данной категории. Это самый надежный метод для динамических данных, когда состав видов расчета заранее неизвестен.

Способ 2: Визуальная группировка в «Выбранных полях»

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

Посмотрим на алгоритм действий:

  1. В настройках отчета перейдем на вкладку Выбранные поля.
  2. Нажмем правой кнопкой мыши в любом месте списка выбранных полей и выберем пункт Сгруппировать поля.
  3. В появившемся окне введем заголовок группы — это и будет наша «верхняя шапка» (например, «Начисления»).
  4. Выберем Вариант расположения. Чаще всего используется Горизонтально.
  5. Теперь перетащим в созданную группу поля ВидРасчета и наш ресурс Сумма.

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

Способ 3: Настройка макета оформления

Иногда типовых настроек недостаточно, чтобы шапка выглядела именно так, как требует заказчик. В таких случаях мы используем Макеты. Это позволяет «нарисовать» шапку вручную, сохранив при этом динамическое заполнение данных.

Проанализируем ситуацию: нам нужно объединить ячейки над ресурсом и группировкой. Для этого:

  1. В схеме СКД переходим на вкладку Макеты.
  2. Добавляем новый Макет заголовка группировки.
  3. Выбираем область в табличном документе, которую мы хотим видеть в качестве шапки.
  4. В этой области объединяем ячейки стандартными средствами (правой кнопкой — Объединить).
  5. В параметрах макета указываем связь между ячейками и полями компоновки (например, параметр КатегорияЗаголовок).

При использовании макетов крайне важно правильно указать Имя группировки в настройках. Если группировка в структуре называется ГруппаКатегория, то и макет должен быть привязан именно к этому имени. Тогда СКД при выводе заменит стандартную генерацию шапки на ваш отрисованный шаблон.

Программная корректировка табличного документа

Если состав колонок крайне динамичен, и даже макеты не справляются с правильным объединением, можно прибегнуть к постобработке результата. Рассмотрим пример кода, который можно разместить в модуле объекта отчета в процедуре ПриКомпоновкеРезультата или после вывода процессора вывода:


ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

ПроцессорВывода.Вывести(ПроцессорКомпоновки);

// Поиск и объединение ячеек в шапке
ОбластьШапки = ДокументРезультат.Область(1, 1, 2, ДокументРезультат.ШиринаТаблицы);
// Здесь можно реализовать логику обхода ячеек и вызова метода Объединить()

Однако помните, что программное объединение — это крайняя мера. В 90% случаев задача «накрытия» одной группировки другой решается через структуру Таблица в настройках СКД с включенным параметром Расположение общих итогов: Конец. Это позволяет сохранить высокую производительность отчета и чистоту кода.

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

← На главную