Как в СКД вывести строку или подписи после отчета в ПриКомпоновкеРезультата?

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

При разработке отчетов на базе схемы компоновки данных часто возникает задача добавить в самый конец документа блок с подписями ответственных лиц (например, «Составил: Должность ________ ФИО») или итоговый комментарий. Если попытаться вывести область макета в обработчике ПриКомпоновкеРезультата напрямую в ДокументРезультат, строка часто оказывается в самом верху отчета над шапкой. Разберем, почему так происходит и как правильно вывести данные строго после отчета.

Выясним причину: почему вывод происходит в начало отчета

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

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

Способ 1. Программная компоновка с отключением стандартной обработки

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

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

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


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

Способ 2. Реализация через макет подвала в СКД без кода

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

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

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

Способ 3. Дополнительный набор данных-запрос

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

Посмотрим, как настроить этот вариант:

  1. В схеме компоновки добавляем набор данных с запросом:
    
    ВЫБРАТЬ
    	"Составил: " + &ДолжностьСоставителя + " ______________ " + &ФИОСоставителя КАК СтрокаПодписи
    
  2. На вкладке «Настройки» добавляем в конец структуры группировку по полю СтрокаПодписи.
  3. При компоновке платформа выведет эту группировку последней строкой сформированного отчета.

Способ 4. Использование нижнего колонтитула

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


ДокументРезультат.НижнийКолонтитул.Выводить = Истина;
ДокументРезультат.НижнийКолонтитул.ТекстСлева = "Составил: Бухгалтер ______________ Иванов И.И.";

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

← На главную