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