Как вывести текстовый подвал в отчете СКД один раз в конце?

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

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

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

Почему макет подвала дублируется или не отображается

Выясним причину ошибки в логике работы СКД:

  1. Тип макета «Подвал» всегда привязан к конкретной строке группировки. СКД обрабатывает его как завершение каждой отдельной группы. Если макет назначен группировке верхнего уровня, он будет послушно выводиться после окончания записей по каждой организации.
  2. Тип макета «Общий итог подвал» зависит от настроек расчета итогов отчета. Если в параметрах Расположение итогов или Расположение общих итогов по вертикали установлено значение Нет, платформа полностью пропускает отрисовку строки общего итога, а значит, игнорирует и соответствующий макет.

Способ 1. Программный вывод подвала в процедуре ПриКомпоновкеРезультата

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

Для этого в объект отчета добавляется отдельный табличный макет (например, с именем МакетПодвала), в котором оформляется область с именем Подвал. Затем в модуле объекта отчета переопределяется стандартная обработка компоновки данных.

Посмотрим на пример кода в процедуре ПриКомпоновкеРезультата:


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

Разберем важные нюансы этого подхода:

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

Способ 2. Вывод подвала через служебную группировку в схеме СКД

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

Разберем по шагам правильную настройку схемы:

  1. Перейдем на вкладку Настройки в структуре отчета. На самом верхнем уровне (на том же уровне, где расположена основная таблица или группировка данных, но строго под ней) добавим новую пустую группировку без указания полей.
  2. Установим для созданной группировки системное имя в контекстном меню, например ПодвалОтчета.
  3. Настроим свойства этой группировки:
    1. На вкладке Выбранные поля снимем флажок с поля Авто, чтобы список выбранных полей остался абсолютно пустым.
    2. На вкладке Другие настройки укажем параметр Макет оформления в значение Без оформления, чтобы платформа не накладывала стандартную рамку ячеек.
    3. В параметре Количество записей укажем значение 0 (либо выберем вариант использования группировки Дополнительная информация).
  4. Перейдем на вкладку Макеты:
    1. Нажмем кнопку Добавить макет группировки.
    2. В поле Имя группировки укажем имя нашей служебной группировки — ПодвалОтчета.
    3. В поле Тип макета обязательно выберем Заголовок. Тип «Заголовок» выводится ровно один раз при входе в группировку даже в том случае, если количество выводимых записей равно нулю. Если установить тип «Подвал», пустая группировка будет опущена генератором отчета.
    4. В таблице макета выделим нужный диапазон строк, оформим текст, подписи и линии расшифровки.

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

← На главную