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