Как рассчитать итоги по вычисляемым полям и вывести их в шапку отчета СКД?

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

При разработке отчетов в системе компоновки данных (СКД) разработчики часто сталкиваются с задачей: в запросе вычисляется сложный показатель по условию (например, через конструкцию ВЫБОР КОГДА ... ТОГДА), и требуется не просто получить детальные записи, но и подсчитать общую сумму по этому показателю, выведя ее не внизу таблицы, а в шапке отчета над основными данными.

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

Причина отсутствия итогов по вычисляемым полям

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

Посмотрим на пример поля из запроса:


ВЫБРАТЬ
    Документы.Партнер КАК Партнер,
    Документы.КрайнийДокумент КАК КрайнийДокумент,
    Документы.КрайняяДата КАК КрайняяДата,
    ВЫБОР
        КОГДА Документы.КрайнийДокумент ЕСТЬ NULL ТОГДА 1
        КОГДА Документы.КрайняяДата < Документы.НачалоНедели 
            И Документы.КрайнийДокумент.ИнтекоДатаСледующегоШага >= Документы.НачалоНедели ТОГДА
            ВЫБОР
                КОГДА Документы.КрайнийДокумент.ИнтекоДатаСледующегоШага < Документы.КонецНедели ТОГДА 1
                ИНАЧЕ 0
            КОНЕЦ
        ИНАЧЕ 0
    КОНЕЦ КАК НаЭтойНеделе
ИЗ
    Документы КАК Документы

Способ 1. Объявление ресурса и штатный вывод итогов в начале отчета

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

  1. Перейдем на вкладку «Ресурсы» схемы компоновки данных.
  2. Добавим поле НаЭтойНеделе.
  3. В колонке «Выражение» укажем стандартную агрегатную функцию: Сумма(НаЭтойНеделе). Если поле может содержать значения NULL, выражение безопаснее записать как Сумма(ЕстьNull(НаЭтойНеделе, 0)).
  4. Перейдем на вкладку «Настройки» и выберем корневой элемент «Отчет».
  5. В нижней панели перейдем на вкладку «Другие настройки».
  6. Найдем параметр «Расположение общих итогов по вертикали» и установим его значение в «Начало» (или «Начало и конец», если итоги нужны и сверху, и снизу).
  7. Убедимся, что на вкладке «Выбранные поля» включено Автополе или ресурс НаЭтойНеделе добавлен в список вручную.

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

Способ 2. Использование группировки с типом «Дополнительная информация»

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

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

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

Способ 3. Пользовательские поля и язык выражений СКД

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

Для этого создадим пользовательское поле на вкладке «Настройки»:

  1. Перейдем на вкладку «Пользовательские поля» и добавим «Новое поле-выражение».
  2. В поле «Выражение итоговых записей» пропишем формулу расчета. Если требуется агрегация массива значений по группировке, используем специализированные функции языка выражений СКД:

"Всего задач на этой неделе: " + Строка(Сумма(ВычислитьВыражениеСГруппировкойМассив("НаЭтойНеделе", "Партнер")))

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

Способ 4. Использование макетов оформления СКД

Если требуется строго фиксированное расположение ячеек (например, утвержденная печатная форма с итоговыми показателями в шапке), используем вкладку «Макеты»:

  1. Перейдем на вкладку «Макеты» и добавим «Макет заголовка группировки» для корневого отчета.
  2. Оформим шапку в виде ячеек табличного документа.
  3. В нужной ячейке укажем тип заполнения «Параметр» (например, ИтогНаНеделе).
  4. В таблице параметров макета свяжем параметр с выражением СКД: ВычислитьВыражение("Сумма(НаЭтойНеделе)", ""), где пустая строка во втором параметре указывает на расчет по всей выборке отчета.

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

← На главную