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

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

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

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

Постановка задачи на практическом примере

Представим, что у нас есть три ресурса: Ресурс1, Ресурс2 и Ресурс3. Нам необходимо спроектировать отчет таким образом, чтобы:

  1. В детальных строках (на уровне номенклатуры или документов) Ресурс1 отображал свои собственные исходные значения (например, 100, 200, 4952).
  2. В строке общего итога по колонке Ресурс1 вместо стандартного суммирования детальных записей выводилась сумма итоговых значений двух других колонок: Итог(Ресурс2) + Итог(Ресурс3) (например, 48 + 5300 = 5348).

Давайте пошагово проанализируем различные варианты реализации этой логики в СКД.

Способ 1. Настройка выражения ресурса по группировкам

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

Рассмотрим по шагам процесс настройки:

  1. Откроем схему компоновки данных и перейдем на вкладку Ресурсы.
  2. Добавим наше поле Ресурс1 в список ресурсов первый раз:
    • В колонке «Выражение» укажем стандартную агрегатную функцию для детальных строк: Сумма(Ресурс1).
    • В колонке «Рассчитывать по…» снимем все флажки и выберем только наши детальные группировки (например, Номенклатура или Склад). Обязательно снимем флажок с общего итога.
  3. Добавим поле Ресурс1 в список ресурсов второй раз:
    • В колонке «Выражение» напишем нашу специальную формулу для расчета итога: Сумма(Ресурс2) + Сумма(Ресурс3).
    • В колонке «Рассчитывать по…» выберем значение <Общий итог> (и, если необходимо, вышестоящие группировки, в которых должен применяться этот расчет).

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

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

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

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

Пример формулы в поле «Выражение» на вкладке «Ресурсы»:


Сумма(ВычислитьВыражениеСГруппировкойМассив("Сумма(Ресурс2) + Сумма(Ресурс3)", "Номенклатура"))

Проанализируем, как СКД обрабатывает это выражение:

  1. Система находит все детальные записи внутри группировки Номенклатура.
  2. Для каждой строки группировки вычисляется локальное выражение Сумма(Ресурс2) + Сумма(Ресурс3).
  3. Все полученные результаты упаковываются во временный массив.
  4. Внешняя функция Сумма() складывает все элементы этого массива и выводит финальный результат в качестве итога.

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

Способ 3. Использование пользовательских полей в режиме «1С:Предприятие»

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

Рассмотрим пошаговый алгоритм настройки:

  1. Откроем настройки отчета в режиме «1С:Предприятие» и перейдем в расширенный режим настройки.
  2. Перейдем на вкладку Пользовательские поля и добавим новое Поле-выражение.
  3. В открывшемся окне настроим два ключевых свойства:
    • Выражение детальных записей: указываем имя нашего исходного поля (например, Ресурс1). Это позволит сохранить оригинальные значения в строках.
    • Выражение итогов: пишем формулу расчета суммы других ресурсов: Сумма(Ресурс2) + Сумма(Ресурс3).
  4. На вкладке «Выбранные поля» заменим стандартный Ресурс1 на наше созданное пользовательское поле.

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

Способ 4. Использование вычисляемых полей с пустым выражением

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

Реализуем этот подход следующим образом:

  1. Перейдем на вкладку Вычисляемые поля схемы компоновки данных.
  2. Добавим новое поле, назовем его, например, ИтоговыйПоказатель. Поле «Выражение» оставим пустым (или укажем в нем значение 0 или Null).
  3. Перейдем на вкладку Ресурсы и добавим созданное поле ИтоговыйПоказатель в список ресурсов.
  4. В колонке «Выражение» напишем формулу: Сумма(Ресурс2) + Сумма(Ресурс3).
  5. В колонке «Рассчитывать по…» укажем только те группировки, где этот итог должен отображаться (например, <Общий итог>).

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

Резюме

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

← На главную