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

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

При доработке типовых отчетов (например, Анализ доходов и расходов в 1С:Управление торговлей 11) часто возникает задача вывести дополнительную расчетную строку итогов. Типичный пример — необходимость рассчитать промежуточный финансовый результат или исключить определенные статьи (например, кредиты и расчеты по займам) из итоговой суммы, расположив результат до или после стандартного общего итога.

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

Способ 1. Использование собственных макетов СКД

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

Разберем по шагам настройку макета:

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

Способ 2. Дополнительная группировка в структуре отчета

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

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

Сумма(ВЫБОР 
    КОГДА Статья В (&СписокИсключаемыхСтатей) ТОГДА 0 
    ИНАЧЕ СуммаОборот 
КОНЕЦ)

Способ 3. Формирование синтетической строки в тексте запроса

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

Разберем пример запроса, использующего оператор ОБЪЕДИНИТЬ ВСЕ:


ВЫБРАТЬ
    1 КАК ПорядокСортировки,
    ДоходыРасходы.Статья КАК Статья,
    ДоходыРасходы.Период КАК Период,
    ДоходыРасходы.Сумма КАК Сумма
ИЗ
    РегистрНакопления.ПрочиеДоходы КАК ДоходыРасходы

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    2 КАК ПорядокСортировки,
    "Итог без займов" КАК Статья,
    ДоходыРасходы.Период КАК Период,
    СУММА(ВЫБОР
        КОГДА ДоходыРасходы.Статья В (&СтатьиЗаймов) ТОГДА 0
        ИНАЧЕ ДоходыРасходы.Сумма
    КОНЕЦ) КАК Сумма
ИЗ
    РегистрНакопления.ПрочиеДоходы КАК ДоходыРасходы
СГРУППИРОВАТЬ ПО
    ДоходыРасходы.Период

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

Способ 4. Программная постобработка табличного документа

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

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


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

КонецПроцедуры

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

← На главную