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

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

Многие пользователи и системные администраторы сталкиваются с неприятной ситуацией: после очередного обновления платформы 1С:Предприятие (особенно это стало заметно начиная с версии 8.3.9 и выше) внезапно перестает работать двусторонняя печать (дуплекс). При этом из любых других офисных приложений, таких как Microsoft Word или Excel, документы продолжают печататься с обеих сторон листа без каких-либо нареканий. Попытки изменить настройки в самом драйвере принтера Windows часто не приносят никакого результата — 1С упрямо выводит каждую страницу документа на отдельном листе.

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

Выясняем причину: что изменилось в платформе 1С?

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

Начиная с версии платформы 8.3.9, разработчики компании «1С» кардинально изменили механизм взаимодействия с печатающими устройствами. Был внедрен собственный внутренний обработчик печати табличных документов. Теперь платформа пытается самостоятельно управлять параметрами вывода, включая двустороннюю печать, через специальное свойство табличного документа ДвусторонняяПечать.

Для управления этим поведением в систему было введено системное перечисление ТипДвустороннейПечати, которое может принимать следующие значения:

  1. НеИспользовать — двусторонняя печать принудительно отключается. Этот режим активен по умолчанию, если в конфигурации включен режим совместимости с версией платформы 8.3.8 и ниже.
  2. ИспользоватьНастройкиПринтера — платформа должна считывать настройки дуплекса непосредственно из установленного в Windows драйвера принтера. Это значение устанавливается по умолчанию, если режим совместимости отключен или установлен на уровне 8.2.16 и ниже.
  3. ПереворотВлево — принудительная двусторонняя печать с переворотом страниц по длинной стороне листа (книжная ориентация).
  4. ПереворотВверх — принудительная двусторонняя печать с переворотом по короткой стороне листа (альбомная ориентация).

Казалось бы, значение ИспользоватьНастройкиПринтера должно было решить все проблемы и автоматически подтягивать параметры из операционной системы. Однако на практике этот механизм часто конфликтует со специфическими драйверами принтеров популярных марок, таких как Kyocera, HP, Xerox, Brother, Canon. Платформа 1С просто «не понимает» команды, которые ей возвращает драйвер устройства, считает, что дуплекс отключен, и отправляет каждую страницу как отдельное задание печати.

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

Способы решения для пользователей и бухгалтеров

Если у вас нет прав администратора или доступа к конфигуратору, проблему можно решить непосредственно из пользовательского интерфейса 1С.

Способ 1. Настройка параметров страницы для конкретного документа

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

  1. Откройте нужный документ в 1С (например, «Реализация товаров и услуг» или «Акт выполненных работ») и нажмите кнопку печатной формы, чтобы открыть предварительный просмотр.
  2. В главном меню программы перейдите по пути: Файл — Параметры страницы....
  3. В открывшемся окне найдите поле «Двусторонняя печать». По умолчанию там, скорее всего, установлено значение «Использовать настройки принтера» (которое из-за программного сбоя не работает).
  4. Измените это значение на «Переворот влево» (для стандартных документов) или «Переворот вверх» (если документ имеет альбомную ориентацию).
  5. Нажмите кнопку ОК и отправьте документ на печать.

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

Способ 2. Использование виртуального PDF-принтера

Если принтер категорически отказывается сотрудничать с 1С в режиме дуплекса, можно воспользоваться универсальным «костылем»:

  1. Отправьте документ на печать, выбрав в качестве принтера встроенный виртуальный принтер (например, Microsoft Print to PDF или сторонний бесплатный софт вроде clawPDF, PDFCreator).
  2. Сохраните полученный файл на рабочий стол.
  3. Откройте созданный PDF-документ через обычный интернет-браузер или программу Adobe Acrobat Reader.
  4. Отправьте его на физический принтер, включив двустороннюю печать в настройках программы просмотра. Поскольку PDF-ридеры используют стандартные и отлаженные системные библиотеки Windows для работы со спулером печати, дуплекс отработает корректно в 100% случаев.

Решения для системных администраторов

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

Способ 3. Замена и тонкая настройка драйверов принтера

Практика показывает, что чаще всего сбои с двусторонней печатью в 1С возникают на принтерах марки Kyocera при использовании их фирменных драйверов класса KX Driver. Эти драйверы оптимизированы для сложной верстки и работы с графикой, но их API часто некорректно обрабатывается внутренним транслятором печати 1С.

Для исправления ситуации рекомендуется:

Способ 4. Принудительное закрепление дуплекса в свойствах драйвера Windows

Посмотрим на пример настройки принтера на уровне операционной системы. Если платформа 1С при значении ИспользоватьНастройкиПринтера не может прочитать динамические настройки из диалогового окна печати, мы можем зафиксировать их жестко в свойствах самого устройства:

  1. Перейдите в Панель управления — Устройства и принтеры.
  2. Кликните правой кнопкой мыши по нужному принтеру и выберите пункт «Свойства принтера» (не путать с «Настройка печати»).
  3. Перейдите на вкладку «Параметры устройства» (Device Settings).
  4. Найдите пункт, отвечающий за дуплексный модуль (Duplex Unit), и убедитесь, что там принудительно установлено значение «Установлено» (Installed), а не «Авто».
  5. Затем вернитесь, нажмите правой кнопкой на принтер и выберите «Настройка печати». Во вкладке основных настроек укажите двустороннюю печать по умолчанию (например, «Переворот по длинной стороне»). Сохраните изменения.

Способ 5. Очистка кэша настроек печати пользователя в 1С

Если настройки принтера были изменены, но 1С продолжает печатать по-старому, это означает, что в базе данных закешировались старые некорректные параметры страницы для данного пользователя. Чтобы исправить это, выполните очистку кэша:

  1. В пользовательском режиме 1С перейдите в раздел Администрирование — Настройки пользователей и прав — Персональные настройки пользователей (путь может немного отличаться в зависимости от конфигурации).
  2. Найдите пункт «Очистка настроек пользователей».
  3. Выберите проблемного пользователя и в списке настроек найдите те, которые связаны с принтерами и параметрами печати табличных документов.
  4. Удалите эти настройки. При следующем открытии печатной формы 1С заново считает конфигурацию принтера из операционной системы.

Способ 6. Создание двух копий одного физического принтера

Если бухгалтеру или менеджеру приходится постоянно переключаться между односторонней и двусторонней печатью, а заходить каждый раз в параметры страницы неудобно, можно применить классический админский метод «двух принтеров»:

  1. Установите в операционной системе один и тот же физический принтер дважды.
  2. Переименуйте их так, чтобы пользователю было сразу все понятно. Например: Kyocera_Odnostoronnaya и Kyocera_DUPLEX.
  3. В свойствах принтера Kyocera_DUPLEX на уровне драйвера Windows жестко и навсегда включите двустороннюю печать. В свойствах Kyocera_Odnostoronnaya — отключите её.
  4. Теперь в 1С при отправке документа на печать пользователю достаточно будет просто выбрать нужный принтер из списка. Платформа корректно передаст задание на выбранное виртуальное устройство, и печать отработает должным образом.

Способ 7. Разрядность платформы 1С

Проанализируем еще одну неочевидную техническую деталь. Замечено, что проблемы с передачей параметров печати в драйвер принтера значительно чаще возникают при использовании 64-разрядного клиента 1С:Предприятие (64-bit). Если вы используете x64 версию тонкого или толстого клиента и столкнулись с системным сбоем дуплекса, попробуйте установить стандартную 32-разрядную (x86) версию платформы 1С. В большинстве случаев это решает проблемы несовместимости с драйверами печати.

Решения для разработчиков 1С (программный метод)

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

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


// Создаем объект табличного документа
ТабДок = Новый ТабличныйДокумент;

// Заполняем макет и выводим области
// ... (код заполнения документа)

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

// Показываем документ пользователю
ТабДок.Показать("Печать документа");

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

Проблема пакетной печати и ее решение

При реализации программного управления двусторонней печатью разработчики часто сталкиваются с крайне неприятным сопутствующим багом платформы при пакетной печати (когда несколько документов выводятся на печать в один прием).

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

Чтобы избежать этой проблемы, проанализируем ситуацию и применим правильный алгоритм обхода. Существует два надежных метода:

Метод А. Использование объекта ПакетОтображаемыхДокументов

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


Пакет = Новый ПакетОтображаемыхДокументов;

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

ЭлементПакета1 = Пакет.Состав.Добавить();
ЭлементПакета1.Данные = ТабДок1;

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

ЭлементПакета2 = Пакет.Состав.Добавить();
ЭлементПакета2.Данные = ТабДок2;

// Отправляем пакет на печать. Платформа сама разделит документы,
// и каждый новый документ начнется с нового физического листа!
Пакет.Напечатать();

Метод Б. Программное добавление пустых страниц

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

Выясним, как это реализовать программно:


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

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

Заключение

Изменение механизма работы с принтерами в платформе 1С:Предприятие начиная с версии 8.3.9 доставило немало хлопот пользователям и администраторам. Тем не менее, как мы сегодня убедились, эта проблема не является неразрешимой.

В зависимости от вашей роли в компании и уровня доступа к системе, вы можете использовать как простые обходные пути (настройка параметров страницы непосредственно в 1С, создание виртуальных принтеров), так и профессиональные административные и программные методы решения. Надеемся, что наше руководство помогло вам вернуть удобство двусторонней печати в вашей ежедневной работе!

← На главную