При разработке отчетов на базе системы компоновки данных (СКД) с табличной структурой часто возникает ситуация: в строках и колонках выводятся несколько ресурсов (например, Количество и Время), но общий горизонтальный итог требуется только по одному из них. По умолчанию генератор СКД формирует итоговые колонки сразу для всех ресурсов, добавленных в отчет.
Рассмотрим, почему типовые настройки не всегда дают нужный результат, и разберем работающие способы решения этой задачи.
Прежде чем перейти к рабочим решениям, выясним причину, по которой стандартные приемы часто не срабатывают:
NULL), сохраняя саму сетку таблицы неизменной.0.01 может вызывать визуальные артефакты, некорректное поведение границ ячеек и сбои при экспорте отчета в Excel.Самый чистый способ, не требующий рисования макетов и написания программного кода, заключается в ручном формировании итоговой колонки нужного состава рядом с динамической группировкой по датам. Разберем этот процесс по шагам:
ДатаМесяца, добавим новую группировку без указания полей — «<Детальные записи>».Количество).Итого.В результате СКД сформирует динамические колонки по датам со всеми ресурсами, а в конце таблицы выведет фиксированную колонку с заголовком «Итого», содержащую только выбранный ресурс.
Если требуется сохранить сложную верстку шапки или настроить индивидуальное визуальное оформление, воспользуемся вкладкой «Макеты».
Рассмотрим особенности назначения макетов для колоночных итогов в таблице:
ДатаМесяца) и укажем тип макета: «Общий итог подвал» (или «Общий итог заголовок» в зависимости от структуры).Время выводить не нужно, в области макета задаем ячейку только для поля Количество, объединяя область на необходимую высоту строки или ширину колонки.Количество.В случаях, когда отчет формируется программно через модуль отчета или форму, можно удалить лишнюю колонку напрямую из результирующего табличного документа после завершения компоновки.
Посмотрим на пример кода в процедуре ПриКомпоновкеРезультата:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Стандартное формирование отчета в ТабличныйДокумент
СкомпоноватьРезультат(ДокументРезультат, ДанныеРасшифровки);
// Поиск области итоговой колонки по заголовку
ОбластьИтога = ДокументРезультат.НайтиТекст("Время", , , , Истина);
Пока ОбластьИтога <> Неопределено Цикл
// Проверяем, что найденная колонка относится к секции итогов
НомерКолонки = ОбластьИтога.Лево;
// Удаляем лишнюю колонку со смещением по горизонтали
ОбластьДляУдаления = ДокументРезультат.Область(, НомерКолонки, , НомерКолонки);
ДокументРезультат.УдалитьОбласть(ОбластьДляУдаления, ТипСмещенияТабличногоДокумента.ПоГоризонтали);
// Ищем следующее вхождение при наличии нескольких секций
ОбластьИтога = ДокументРезультат.НайтиТекст("Время", ОбластьДляУдаления, , , Истина);
КонецЦикла;
КонецПроцедуры
Такой подход обеспечивает полный контроль над итоговым печатным видом документа, не усложняя исходную схему компоновки лишними макетами.