Как реализовать двустороннюю печать печатных форм Т-10 и Т-10а на одном листе в 1С

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

При автоматизации документооборота кадровой службы часто возникает задача печати двух форм одного документа (например, «Командировка» в 1С:ЗУП 3.1 или 1С:ERP 2.4) на двух стороны одного листа бумаги. Типичный пример — печать командировочного удостоверения по форме Т-10 и служебного задания по форме Т-10а. Основная сложность заключается в том, что стандартная форма Т-10 имеет книжную ориентацию (портрет), а Т-10а — альбомную (ландшафт).

Рассмотрим подробно, с какими ограничениями платформы 1С и оборудования можно столкнуться при решении этой задачи и как правильно реализовать двустороннюю печать.

Ограничения платформы 1С и драйверов печати

Проанализируем технические особенности работы объекта ТабличныйДокумент и взаимодействия с оборудованием:

  1. Единая ориентация для всего документа: Свойство ОриентацияСтраницы (ОриентацияСтраницы.Портрет или ОриентацияСтраницы.Ландшафт) задается для всего объекта ТабличныйДокумент целиком. Платформа 1С не позволяет сделать первую страницу документа книжной, а вторую — альбомной внутри одного и того же табличного документа.
  2. Поведение драйвера принтера: Если формировать два разных табличных документа (один альбомный, другой книжный) и отправлять их на печать последовательно через метод Напечатать(), драйвер принтера воспринимает их как два разных задания печати. В момент смены ориентации страницы принтер принудительно выталкивает текущий лист и начинает печать второго документа на новом физическом листе.

Способ 1. Верстка двух форм в единой ориентации (Рекомендуемый)

Самым надежным и практичным решением является приведение обеих печатных форм к одинаковой ориентации страниц (как правило, книжной). Разберем по шагам, как это реализовать с помощью внешней печатной формы (ВПФ):

  1. Переверстка макета: Внешняя печатная форма создается с двумя макетами или одним общим макетом, где ячейки формы Т-10а скомпонованы под книжную ориентацию (с изменением структуры таблицы или поворотом текста на 90 градусов).
  2. Объединение в один табличный документ: Обе формы последовательно выводятся в один объект ТабличныйДокумент с разделителем страниц.
  3. Управление двусторонней печатью: В коде модуля внешней печатной формы программно включается свойство двусторонней печати.

Рассмотрим пример кода формирования единого табличного документа:


&НаСервере
Функция СформироватьПечатнуюФорму(МассивОбъектов)
    
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.АвтоМасштаб = Истина;
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    
    // Включаем режим двусторонней печати
    ТабДок.ДвусторонняяПечать = ТипДвустороннейПечати.ПереворотВлево;
    
    Для Каждого СсылкаИзМассива Из МассивОбъектов Цикл
        
        // Выводим первую форму (Т-10)
        ВывестиФормуТ10(ТабДок, СсылкаИзМассива);
        
        // Добавляем разделитель страниц
        ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        
        // Выводим вторую форму (Т-10а), сверстанную в портретном формате
        ВывестиФормуТ10а(ТабДок, СсылкаИзМассива);
        
    КонецЦикла;
    
    Возврат ТабДок;
    
КонецФункции

Важный момент: Если форма Т-10 может занимать не одну, а две или более страниц в зависимости от длины данных, перед выводом формы Т-10а необходимо проверить четность текущего количества страниц. Если форма Т-10 заняла четное число страниц (например, 2 страницы), то Т-10а сразу выведется на лицевую сторону следующего листа. Если же Т-10 заняла 1 страницу, разделитель отправит Т-10а на оборотную сторону первого листа.

Способ 2. Использование пакета отображаемых документов

Если изменить верстку макета Т-10а под книжный формат невозможно, и форма должна строго сохранять альбомную ориентацию, можно использовать объект ПакетОтображаемыхДокументов в связке со сторонним софтом для печати PDF.

Выясним, как работает данный подход:

  1. Формируются два отдельных печатных документа: ТабличныйДокумент с книжной ориентацией (Т-10) и ТабличныйДокумент с альбомной ориентацией (Т-10а).
  2. Оба документа сохраняются во временное хранилище и помещаются в ПакетОтображаемыхДокументов.
  3. Пакет сохраняется в единый файл PDF с помощью метода Записать().
  4. Файл PDF отправляется на двустороннюю печать через виртуальный принтер или внешнюю утилиту командной строки, которая умеет корректно поворачивать страницы разной ориентации на одном физическом листе.

ПакетДокументов = Новый ПакетОтображаемыхДокументов;
ПакетДокументов.Состав.Добавить(Новый ОписаниеСодержимогоПакетОтображаемыхДокументов(АдресТабДокТ10));
ПакетДокументов.Состав.Добавить(Новый ОписаниеСодержимогоПакетОтображаемыхДокументов(АдресТабДокТ10а));

ПутьКФайлуPDF = ПолучитьИмяВременногоФайла("pdf");
ПакетДокументов.Записать(ПутьКФайлуPDF, ТипФайлаПакетаОтображаемыхДокументов.PDF);

Способ 3. Пакетный вывод средствами БСП

В типовых конфигурациях 1С:ERP 2.4 и 1С:ЗУП 3.1 подсистема печати Библиотеки Стандартных Подсистем (БСП) поддерживает вывод нескольких печатных форм. В модуле менеджера документа или внешней печатной формы можно зарегистрировать сразу две формы в коллекции команд печати.

При отправке на печать подсистема БСП формирует массив табличных документов и выводит их в единое окно формы печатных документов. Если принтер настроен на двустороннюю печать по умолчанию, пользователю достаточно выбрать обе формы галочками и нажать одну кнопку печати, не выполняя ручных манипуляций с переворотом бумаги.

← На главную