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

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

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

По умолчанию, если на вкладке Ресурсы задать выражение только для значения ОбщийИтог или оставить поле Рассчитывать по... пустым, платформа применяет указанное агрегатное выражение ко всем итогам без разделения направлений. Разберем по шагам, как настроить раздельный расчет штатным функционалом СКД и альтернативными способами.

Проанализируем механику работы СКД: в кросс-таблице ячейка итога по горизонтали вычисляется в контексте группировки строк (например, Группа), итог по вертикали — в контексте группировки колонок (например, Период), а правый нижний угол — в контексте общего пересечения ОбщийИтог.

Способ 1. Штатная настройка ресурса для разных измерений на вкладке «Ресурсы»

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

Рассмотрим пошаговую настройку для таблицы со строками Группа и колонками Период:

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

Способ 2. Использование контекстных функций языка выражений СКД

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

  1. ВычислитьВыражение("Выражение", "Группа") — позволяет выполнить расчет формулы строго в контексте указанной группировки строк.
  2. ВычислитьВыражениеСГруппировкойМассив("Сумма(Поле)", "Период") — собирает значения вдоль колонок периода в массив, к которому затем можно применить внешнюю агрегатную функцию.

Посмотрим на пример вычисления среднего значения по колонкам строки через массив:

Среднее(ВычислитьВыражениеСГруппировкойМассив("Сумма(СуммаОборот)", "Период"))

Способ 3. Отключение общих итогов и добавление дополнительной группировки

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

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

Особенности и ограничения платформы

Разберем важные нюансы, которые необходимо учитывать при настройке:

  1. Иерархические группировки: если группировка строк выводится с иерархией, в поле Рассчитывать по... для корректного расчета промежуточных папок необходимо отдельно указать поле с суффиксом иерархии (например, ГруппаИерархия).
  2. Влияние отборов: при наличии в отчете жесткого отбора на равенство по полю группировки СКД может применить общий расчет ко всем уровням, игнорируя раздельные настройки по полям. В таких случаях надежнее использовать вариант с отдельной структурой колонок (Способ 3).
← На главную