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

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

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

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

Способ 1. Добавление независимой группировки в структуру отчета

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

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

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

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

Способ 2. Условные ресурсы и расчет по группировкам

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

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

  1. Если поле требует сложного условия, перейдем на закладку Вычисляемые поля и создадим поле с выражением фильтрации:
    
    ВЫБОР 
        КОГДА Организация.Сторонняя = ИСТИНА 
            ТОГДА СуммаОборот 
        ИНАЧЕ 0 
    КОНЕЦ
    
  2. Перейдем на закладку Ресурсы схемы компоновки данных.
  3. Добавим поле в список ресурсов. В колонке Выражение можно сразу написать агрегатную функцию с логическим условием без добавления вычисляемого поля: Сумма(ВЫБОР КОГДА Организация.Сторонняя ТОГДА СуммаОборот ИНАЧЕ 0 КОНЕЦ)
  4. В колонке Рассчитывать по... укажем значение ОбщийИтог или имя той группировки, для которой требуется отображать данные.

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

Способ 3. Переопределение макета подвала в СКД

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

Разберем последовательность действий:

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

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

Способ 4. Программный вывод через процессор компоновки данных

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

Посмотрим на пример программной постобработки:


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

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

← На главную