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