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