При работе с Системой компоновки данных (СКД) разработчики часто сталкиваются с ограничением стандартного механизма вывода итогов в таблицах. Типичная ситуация: в колонках отчета выведены периоды (например, месяцы), а в конце таблицы необходимо добавить не просто общую сумму, а специфические расчетные показатели, такие как «Среднедневная отгрузка», «Процент отклонения» или «Прогноз до конца года». Стандартные «Общие итоги» не всегда позволяют реализовать сложную логику или добиться нужного визуального оформления.
В этой статье мы подробно разберем, как обойти эти ограничения, добавив свои колонки после группировок периодов, как сделать заголовки этих колонок динамическими и как правильно настроить нумерацию строк внутри группировок.
Рассмотрим ситуацию, когда у нас есть таблица, в колонках которой выбрана группировка по полю ПериодМесяц. Чтобы вывести после всех месяцев свои колонки, нам нужно изменить саму структуру настроек отчета. Вместо того чтобы полагаться на стандартные общие итоги, мы добавим «фиктивную» группировку.
Разберем этот процесс по шагам:
ПериодМесяц), добавим новую группировку. В качестве поля группировки указывать ничего не нужно — оставим поле пустым или создадим «Детальные записи».Таким образом, СКД сначала выведет все колонки по месяцам, а затем — наши дополнительные группировки, которые визуально будут выглядеть как продолжение таблицы.
Часто при добавлении кастомных итогов возникает проблема «двухэтажных» заголовков. Над названием вашего ресурса (например, «Среднее») отображается пустая ячейка или заголовок вышестоящей группировки. Чтобы сделать заголовок лаконичным и объединить ячейки, проанализируем возможности использования макетов.
Рассмотрим вариант с использованием Макета заголовка группировки:
Имя в настройках группировки).Альтернативный метод — использование постобработки в модуле отчета. Проанализируем ситуацию: если нам нужно программно объединить ячейки в уже сформированном документе, мы можем воспользоваться процедурой ПриКомпоновкеРезультата.
Иногда требуется, чтобы заголовок итоговой колонки содержал динамические данные, например: «Среднее за [Название последнего месяца]». Напрямую в схеме это сделать сложно, поэтому мы воспользуемся программным изменением схемы перед выводом отчета.
Посмотрим на пример кода, который можно разместить в модуле отчета:
Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Получаем схему и настройки
Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
// Поиск нужного вычисляемого поля и изменение его заголовка
ПолеСреднее = Схема.ВычисляемыеПоля.Найти("СреднедневнаяОтгрузка");
Если ПолеСреднее <> Неопределено Тогда
КонецПериода = Настройки.ПараметрыДанных.Найти("КонецПериода").Значение;
ПолеСреднее.Заголовок = "Среднедневная отгрузка за " + Формат(КонецПериода, "ДФ='MMMM yy'") + " г.";
КонецЕсли;
// Далее выполняем стандартный вывод
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ДокументРезультат = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Этот метод позволяет гибко управлять метаданными отчета непосредственно перед его формированием, что дает полный контроль над визуальной составляющей.
Выясним причину, по которой стандартное поле НомерПоПорядку не всегда подходит. В сложных иерархических отчетах это поле часто выдает сквозную нумерацию по всему отчету, в то время как нам может потребоваться сброс счетчика для каждой новой группы.
Для решения этой задачи в СКД предусмотрено системное поле НомерВГруппе. Однако, если требуется еще более тонкая настройка (например, нумерация только определенных уровней), проанализируем использование функции ВычислитьВыражение.
В вычисляемом поле можно прописать следующее выражение:
ВычислитьВыражение("Количество(Ссылка)", , "Группировка", "Первая", "Текущая")
Разберем подробнее, как это работает:
Когда мы реализовали свои собственные итоги через дополнительные группировки, стандартные общие итоги СКД могут стать лишними и только загромождать отчет. Чтобы их отключить, выполним следующие действия:
Это позволит полностью убрать стандартную колонку «Итого» и оставить только те расчетные показатели, которые мы настроили вручную.
Используя предложенные методы — создание пустых группировок для кастомных колонок, программную модификацию заголовков и использование функций вычисления выражений — вы сможете создавать отчеты любой сложности, которые будут отвечать самым строгим требованиям пользователей к оформлению и содержанию.