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