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

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

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

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

Метод 1. Настройка области расчета ресурса

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

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

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

Метод 2. Использование функции ВычислитьВыражение

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

Рассмотрим пример создания вычисляемого поля для общего итога, который включает в себя и часы, и общие замены сотрудника за весь выбранный период. В списке вычисляемых полей создадим поле ОбщийИтогСЗаменами. В выражении ресурса для этого поля пропишем:


Сумма(КоличествоЧасов) + ВычислитьВыражение("Сумма(Замены)", "Сотрудник", "Общий")

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

Метод 3. Разделение структуры колонок (Фиктивные группировки)

Выясним причину, почему иногда стандартные итоги не подходят. Если пользователю нужно, чтобы колонка «Замены» стояла не в конце отчета после всех дат, а, например, сразу после ФИО сотрудника, нам поможет манипуляция со структурой отчета на закладке «Настройки».

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

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

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

Метод 4. Вывод замен через дополнительные поля

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

Проанализируем ситуацию: у нас есть группировка Сотрудник. Мы можем не добавлять Замены в ресурсы вообще. Вместо этого:

  1. Выберем группировку Сотрудник в настройках отчета.
  2. Перейдем на вкладку «Дополнительные поля».
  3. Добавим поле Замены.
  4. В свойстве «Расположение дополнительных полей» выберем значение «В отдельных колонках».

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

Особенности работы с внешними наборами данных (ТЗ)

При использовании ТаблицыЗначений важно правильно обрабатывать агрегацию. Если в вашей ТЗ на каждую дату для одного сотрудника прописано общее число замен (например, цифра «3» повторяется в пяти строках за разные даты), то обычная Сумма() в ресурсах выдаст 15 (3 * 5).

В такой ситуации в выражении ресурса следует использовать функции Максимум() или Среднее():

Максимум(Замены)

И обязательно указывать расчет только по группировке Сотрудник, как мы рассматривали в первом методе. Если же в ТЗ единица ставится только в тот день, когда замена действительно была, тогда смело используем Сумма().

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


// Ресурс КоличествоЧасов
Выражение: Сумма(КоличествоЧасов)
Рассчитывать по: Период, Сотрудник, ОбщийИтог

// Ресурс Замены
Выражение: Сумма(Замены)
Рассчитывать по: Сотрудник, ОбщийИтог

Такая конфигурация является классической для решения задачи автора и обеспечивает корректное отображение данных в кросс-таблице без лишних дублей в колонках дат.

← На главную