Как программно настроить двустороннюю и одностороннюю печать документов в 1С

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

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

Ограничения платформы и особенности формирования заданий на печать

Проанализируем механику работы 1С с принтером. Когда мы вызываем метод Напечатать() для каждого отдельного объекта ТабличныйДокумент, платформа формирует в очереди операционной системы самостоятельные независимые задания на печать. Реализовать двустороннюю печать между абсолютно разными заданиями невозможно технически, так как принтер воспринимает каждое задание как отдельный физический документ.

В платформе 1С:Предприятие 8.1 отсутствуют встроенные программные свойства для управления двусторонней печатью прямо из кода. Управление этим режимом полностью передается драйверу устройства. Однако существуют проверенные обходные пути для платформы 8.1, а также штатные механизмы, появившиеся в современных версиях платформы 8.3.

Решение 1. Настройка двух логических принтеров в операционной системе

Это классический и самый надежный вариант для платформы 1С 8.1 и более ранних версий. Суть метода заключается в том, чтобы создать в операционной системе Windows два виртуальных устройства печати, указывающих на один и тот же физический принтер (по одному IP-адресу или локальному порту).

Разберем по шагам, как настроить такую схему:

  1. В операционной системе добавляем два принтера. Например: HP_SingleSide и HP_Duplex.
  2. В свойствах драйвера HP_SingleSide устанавливаем параметр двусторонней печати в положение Выкл (односторонняя печать).
  3. В свойствах драйвера HP_Duplex включаем двустороннюю печать (переворот по длинной или короткой стороне).
  4. В коде 1С перед вызовом печати указываем имя нужного принтера для каждого табличного документа с помощью свойства ИмяПринтера.

Рассмотрим пример кода 1С:


// Печать первого документа на одностороннем принтере
ТабДок1 = Новый ТабличныйДокумент;
Макет1 = ПолучитьМакет("МакетОдин");
ТабДок1.Вывести(Макет1);
ТабДок1.ИмяПринтера = "HP_SingleSide";
ТабДок1.Напечатать();

// Печать второго и третьего документов на двустороннем принтере
ТабДокДвусторонний = Новый ТабличныйДокумент;
Макет2 = ПолучитьМакет("МакетДва");
Макет3 = ПолучитьМакет("МакетТри");

ТабДокДвусторонний.Вывести(Макет2);
ТабДокДвусторонний.ВывестиГоризонтальныйРазделительСтраниц();
ТабДокДвусторонний.Вывести(Макет3);

ТабДокДвусторонний.ИмяПринтера = "HP_Duplex";
ТабДокДвусторонний.Напечатать();

Обратите внимание: для того чтобы документы, отправленные на двусторонний принтер, действительно отпечатались на двух стороны одного листа, их необходимо объединять в один ТабличныйДокумент с использованием метода ВывестиГоризонтальныйРазделительСтраниц().

Решение 2. Использование единого документа с пустыми технологическими страницами

Если принтер по умолчанию настроен на двусторонний режим, но часть страниц нужно отпечатать только с одной стороны, можно применить подход с добавлением пустых страниц.

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

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

Решение 3. Штатное управление двусторонней печатью в 1С:Предприятие 8.3

Начиная с платформы 8.3, у объекта ТабличныйДокумент появилось свойство ДвусторонняяПечать. Оно позволяет управлять режимом печати напрямую из кода 1С без создания дублирующих принтеров в ОС.

Свойство принимает значения системного перечисления ТипДвустороннейПечати:

Посмотрим на пример кода для 1С 8.3:


// Односторонний документ
ТабДокОдносторонний = Новый ТабличныйДокумент;
// Вывод области макета...
ТабДокОдносторонний.ДвусторонняяПечать = ТипДвустороннейПечати.Нет;
ТабДокОдносторонний.Напечатать();

// Двусторонний документ
ТабДокДвусторонний = Новый ТабличныйДокумент;
// Вывод нескольких страниц с разделителями...
ТабДокДвусторонний.ДвусторонняяПечать = ТипДвустороннейПечати.ПереворотВлево;
ТабДокДвусторонний.Напечатать();

Важный нюанс: если в коде используется свойство КлючПараметровПечати, платформа автоматически восстанавливает ранее сохраненные пользовательские настройки печати. Чтобы программная установка двусторонней печати сработала корректно, присваивать значение свойству ДвусторонняяПечать необходимо строго после задания КлючПараметровПечати.


ТабДок.КлючПараметровПечати = "ПараметрыПечати_МояФорма";
// Устанавливаем режим ДвусторонняяПечать ПОСЛЕ ключа
ТабДок.ДвусторонняяПечать = ТипДвустороннейПечати.ПереворотВлево;

Если драйвер конкретного устройства игнорирует команды управления двусторонней печатью из 1С 8.3, рекомендуется обновить драйвер принтера или использовать универсальный драйвер (Universal Print Driver PCL/PostScript).

← На главную