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