Почему при двусторонней печати пакета документов в 1С следующий документ печатается на обороте предыдущего и как это исправить?

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

При пакетной печати первичных документов (счетов на оплату, УПД, товарных накладных ТОРГ-12, счетов-фактур) пользователи часто сталкиваются с неприятным поведением: при включении двусторонней печати второй документ из списка начинает выводиться на оборотной стороне первого документа, если тот занял всего одну страницу. В результате нарушается целостность комплектов, а распечатанные бланки приходится перепечатывать вручную. Разберем детально, почему возникает такая ситуация и какими способами ее можно устранить.

Причины некорректного поведения двусторонней печати

Проанализируем техническую сторону работы механизма печати пакета документов. В типовых решениях 1С для одновременного вывода нескольких печатных форм используется объект ПакетОтображаемыхДокументов и его метод Напечатать().

Поведение этого механизма менялось в зависимости от версии технологической платформы и установленного режима совместимости конфигурации:

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

В платформе 1С данное поведение было зафиксировано как официальная ошибка с кодом 10167935 («При печати объекта ПакетОтображаемыхДокументов, в случае использования двусторонней печати, разные документы печатаются на одном листе»).

Способ 1. Обновление технологической платформы (основное решение)

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

  1. Выполним обновление технологической платформы 1С:Предприятие 8.3 до релиза 8.3.9.2033 или более актуальных версий (ветки 8.3.10 и выше).
  2. После обновления проверим отправку комплекта документов на принтер с включенной опцией «Двусторонняя печать = Переворот вверх» или «Переворот влево». Каждый документ пакета начнет печататься с нового физического листа.

Способ 2. Программный контроль четности страниц в табличном документе

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

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

Посмотрим на пример реализации такого алгоритма:


Для Каждого ТабДок Из МассивТабличныхДокументов Цикл
    // Проверяем, включена ли двусторонняя печать
    Если ТабДок.ДвусторонняяПечать <> ТипДвустороннейПечати.Нет Тогда
        // Получаем общее количество страниц
        ВсегоСтраниц = ТабДок.КоличествоСтраниц();
        
        // Если страниц нечетное количество, добавляем пустую страницу
        Если ВсегоСтраниц % 2 <> 0 Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
            // Выводим пустую область или пустую строку, чтобы разрыв зафиксировался
            ОбластьПустая = ТабДок.ПолучитьОбласть("ПустаяСтрока");
            Если ОбластьПустая <> Неопределено Тогда
                ТабДок.Вывести(ОбластьПустая);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    
    ПакетДокументов.Состав.Добавить(ТабДок);
КонецЦикла;

Важное ограничение: при использовании данного метода необходимо убедиться, что в настройках драйвера принтера отключена опция пропуска пустых страниц (например, «Skip Blank Pages» или «Пропускать пустые страницы»). Если эта опция активна, процессор принтера проигнорирует пустую страницу и сдвиг документов снова повторится.

Способ 3. Поочередная печать табличных документов в цикле

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

Рассмотрим, как это выглядит в коде:


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

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

Способ 4. Проверка настроек драйвера принтера

Разберем влияние драйверов на обработку очередей печати. Опыт показывает, что разные версии драйверов (PCL 6, PostScript, KX-драйверы для Kyocera) неодинаково обрабатывают логические границы внутри одного составного задания.

Если печать работает некорректно на конкретной модели принтера, выполним следующие действия:

  1. Проверим текущую версию драйвера устройства печати и заменим специализированный драйвер на универсальный (Universal Print Driver) от производителя устройства.
  2. В свойствах принтера на вкладке «Параметры устройства» найдем и отключим оптимизацию заданий печати и пропуск пустых страниц.
← На главную