Многие пользователи и системные администраторы сталкиваются с неприятной ситуацией: после очередного обновления платформы «1С:Предприятие 8.3» (особенно часто это начало проявляться начиная с релиза 8.3.9) внезапно перестает работать двусторонняя печать (дуплекс). При этом из других офисных приложений, таких как текстовые редакторы или электронные таблицы, документы печатаются на обеих сторонах листа без каких-либо проблем. В самой же 1С, несмотря на любые настройки в свойствах принтера, каждый лист упорно выводится на отдельном листе бумаги.
В этой статье мы подробно проанализируем причины возникновения этой проблемы, изучим архитектурные изменения в платформе 1С, которые привели к подобному поведению системы, и разберем эффективные практические способы устранения неполадки — от простых пользовательских настроек до программных решений и администрирования операционной системы.
Для того чтобы понять, почему возникла эта проблема, проанализируем, как изменилось взаимодействие платформы 1С с операционной системой Windows и драйверами печатных устройств.
В старых версиях платформы (например, в 1С 7.7 и ранних релизах 8.2) механизмов прямого управления двусторонней печатью на уровне встроенного языка практически не существовало. Платформа формировала печатную форму в виде табличного документа и отправляла ее на печать как стандартный графический объект Windows. Всеми параметрами разметки, включая дуплекс (двустороннюю печать) и разбор по копиям (колларирование), управлял непосредственно драйвер принтера. Пользователю достаточно было один раз настроить свойства принтера в операционной системе, и 1С послушно следовала этим параметрам.
Начиная с версии платформы 8.3, разработчики 1С кардинально изменили этот механизм, внедрив собственное управление двусторонней печатью непосредственно на уровне объекта ТабличныйДокумент. В платформу было добавлено специализированное свойство ДвусторонняяПечать и соответствующее системное перечисление ТипДвустороннейПечати. Это перечисление включает в себя несколько значений:
ИспользоватьНастройкиПринтера — платформа должна считывать параметры дуплекса из настроек драйвера операционной системы;Нет — принудительная односторонняя печать;ПереворотВлево — двусторонняя печать с переворотом листа вдоль длинной стороны (книжная ориентация);ПереворотВверх — двусторонняя печать с переворотом листа вдоль короткой стороны (альбомная ориентация).Главная проблема кроется в значении ИспользоватьНастройкиПринтера. Начиная с релиза платформы 8.3.9, интеграция этого механизма с драйверами многих производителей принтеров (в особенности HP, Kyocera, Canon и Brother) работает крайне нестабильно. Платформа 1С не может корректно считать структуру настроек (DevMode) из драйвера принтера или передает их обратно в искаженном виде. В результате принтер сбрасывает настройки дуплекса по умолчанию и печатает документ в одностороннем режиме.
Помимо общих проблем совместимости драйверов, в платформе 1С:Предприятие зафиксировано несколько специфических зарегистрированных ошибок, о которых полезно знать техническому специалисту:
ПереворотВлево в 1С приводит к тому, что документ начинает печататься в обратном порядке — со второй страницы на первую, из-за чего нарушается хронология листов в пачке.Рассмотрим по шагам все возможные методы решения данной проблемы, начиная от самых простых и заканчивая продвинутыми административными и программными способами.
Если проблема возникает редко или у ограниченного круга пользователей, мы можем решить ее штатными средствами настройки печатных форм. Для этого выполним следующие действия:
Важный нюанс: Платформа 1С сохраняет эти настройки в кэше пользователя индивидуально для каждого идентификатора печатной формы. Это означает, что если вы настроили двустороннюю печать для документа «Реализация товаров и услуг», то для «Счета на оплату» эту процедуру придется повторить отдельно. В дальнейшем система будет помнить этот выбор для данного конкретного пользователя и данной печатной формы.
Если пользователей в компании много, ручная настройка параметров страницы для каждого отчета и документа становится неэффективной. Мы можем автоматизировать этот процесс, написав небольшую доработку в конфигурации или через расширение. Наша задача — принудительно устанавливать тип двусторонней печати на уровне кода перед выводом табличного документа на принтер.
Проанализируем пример кода, который проверяет количество страниц в документе и включает двустороннюю печать только тогда, когда в документе содержится более одного листа. Это позволит сэкономить время печати и избежать холостых прогонов принтера для одностраничных документов:
// Пример программной настройки двусторонней печати
ТабДок = Новый ТабличныйДокумент;
// ... Здесь происходит заполнение и формирование табличного документа ...
// Проверяем количество страниц перед отправкой на печать
КоличествоСтраниц = ТабДок.КоличествоСтраниц();
Если КоличествоСтраниц > 1 Тогда
// Принудительно устанавливаем переворот страницы влево, игнорируя сбойные настройки принтера
ТабДок.ДвусторонняяПечать = ТипДвустороннейПечати.ПереворотВлево;
Иначе
// Для одностраничных документов отключаем двусторонний режим
ТабДок.ДвусторонняяПечать = ТипДвустороннейПечати.Нет;
КонецЕсли;
// Выводим документ на печать или показываем пользователю
ТабДок.Показать("Печать документа");
Этот код гарантированно решает проблему, так как команда ТипДвустороннейПечати.ПереворотВлево передается в подсистему печати Windows явным образом, минуя стадию анализа настроек драйвера по умолчанию. Данный код лучше всего внедрить в общие модули печати конфигурации (например, в процедуру управления печатью перед непосредственным выводом на экран или принтер) с помощью механизма расширений конфигурации, чтобы не снимать основную программу с поддержки.
Для системных администраторов существует отличный способ обойти баг платформы 1С без внесения изменений в программный код и без обучения пользователей тонкостям настройки параметров страницы. Метод заключается в создании двух логических принтеров в системе, указывающих на одно и то же физическое устройство.
Разберем этот процесс по шагам:
Опыт эксплуатации печатной техники совместно с платформой 1С 8.3 показывает, что частота проявления багов двусторонней печати напрямую зависит от версии и типа используемого драйвера принтера. Наиболее проблемными брендами в этом отношении являются Kyocera и Hewlett-Packard.
Проанализируем рекомендации по выбору драйверов для стабильной работы дуплекса в 1С:
Иногда возникает ситуация, когда системный администратор уже обновил драйверы, настроил принтер и проверил программный код, но у конкретного бухгалтера двусторонняя печать все равно не работает. Это происходит из-за того, что платформа 1С сохранила старые некорректные параметры принтера в пользовательском кэше базы данных, и продолжает применять их при формировании печатной формы.
Для решения этой проблемы необходимо очистить сохраненные настройки печатных документов пользователя. Сделаем это по шагам:
После выполнения этой процедуры при первой последующей отправке документа на печать платформа заново считает актуальные параметры из операционной системы и корректно применит настройки дуплекса.
Подводя итог, отметим, что проблема с двусторонней печатью в 1С 8.3 — это комплексная техническая неполадка, лежащая на стыке работы платформы, операционной системы и драйверов оборудования. Сочетание ручной корректировки параметров страницы в программе, перехода на совместимые драйверы (KPDL/PCL6) и, при необходимости, написание несложного программного кода в расширении позволяет навсегда избавить пользователей от рутинных ручных настроек при работе с многостраничными печатными формами.