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