Как вывести свои горизонтальные итоги в СКД после колонок с периодами и настроить их оформление

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

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

Добавление произвольных колонок в структуру таблицы

Рассмотрим ситуацию, когда у нас есть таблица, в колонках которой выбрана группировка по полю ПериодМесяц. Чтобы вывести после всех месяцев свои колонки, нам нужно изменить саму структуру настроек отчета. Вместо того чтобы полагаться на стандартные общие итоги, мы добавим «фиктивную» группировку.

Разберем этот процесс по шагам:

  1. Перейдем на вкладку «Настройки» в схеме компоновки данных.
  2. В структуре отчета найдем нашу таблицу и перейдем к иерархии колонок.
  3. После группировки, отвечающей за периоды (например, ПериодМесяц), добавим новую группировку. В качестве поля группировки указывать ничего не нужно — оставим поле пустым или создадим «Детальные записи».
  4. Для этой новой «пустой» группировки на вкладке «Выбранные поля» снимем флажок «Использовать родительские настройки» и укажем только те ресурсы (поля), которые должны выводиться как итоги.
  5. Если нам нужно вывести несколько разных итоговых колонок с разными расчетами, мы можем добавить несколько таких группировок подряд или одну группировку с несколькими ресурсами внутри.

Таким образом, СКД сначала выведет все колонки по месяцам, а затем — наши дополнительные группировки, которые визуально будут выглядеть как продолжение таблицы.

Устранение лишних уровней в заголовках колонок

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

Рассмотрим вариант с использованием Макета заголовка группировки:

  1. На вкладке «Макеты» добавим новый макет заголовка группировки.
  2. Укажем имя группировки, которое мы предварительно задали для нашей «итоговой» колонки (свойство Имя в настройках группировки).
  3. В табличном документе макета оформим область из одной или нескольких ячеек так, как должен выглядеть заголовок.
  4. Параметры макета позволят нам вывести в заголовок любой текст или даже значение из параметров отчета.

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

Динамическое изменение заголовка колонки программно

Иногда требуется, чтобы заголовок итоговой колонки содержал динамические данные, например: «Среднее за [Название последнего месяца]». Напрямую в схеме это сделать сложно, поэтому мы воспользуемся программным изменением схемы перед выводом отчета.

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


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

Этот метод позволяет гибко управлять метаданными отчета непосредственно перед его формированием, что дает полный контроль над визуальной составляющей.

Нумерация строк внутри группировок

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

Для решения этой задачи в СКД предусмотрено системное поле НомерВГруппе. Однако, если требуется еще более тонкая настройка (например, нумерация только определенных уровней), проанализируем использование функции ВычислитьВыражение.

В вычисляемом поле можно прописать следующее выражение:

ВычислитьВыражение("Количество(Ссылка)", , "Группировка", "Первая", "Текущая")

Разберем подробнее, как это работает:

Скрытие лишних стандартных итогов

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

  1. В настройках отчета перейдем на вкладку «Другие настройки».
  2. Найдем параметр «Расположение общих итогов по горизонтали».
  3. Установим значение «Нет».

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

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

← На главную