При переходе на новые релизы конфигурации 1С:Управление торговлей 11.3 пользователи часто сталкиваются со сбоем пакетной печати. При отправке на печать комплекта из нескольких документов (например, товарной накладной и счет-фактуры) с включенной функцией двусторонней печати принтер печатает их сплошным потоком. В результате второй документ начинается на обратной стороне последнего листа первого документа, а не с нового физического листа.
Разберем подробнее причины возникновения этой неполадки и рассмотрим эффективные варианты её устранения.
Проанализируем техническую суть проблемы. Ошибка не связана с настройками конкретного принтера или самой конфигурацией 1С:Управление торговлей. Сбой происходит на уровне технологической платформы «1С:Предприятие» в ветках 8.3.8 и ранних сборках 8.3.9.
При формировании комплекта документов программа использует специализированный объект встроенного языка ПакетОтображаемыхДокументов. Из-за ошибки платформы (официально зарегистрированной фирмой «1С» под номером 10167935) платформа объединяет несколько объектов ТабличныйДокумент в единое задание-поток для драйвера печати без автоматической вставки разрыва физического листа. В результате принтер воспринимает начало следующего документа из пакета как продолжение нечетной страницы предыдущего и выводит его на обороте.
Разработчики «1С» устранили данный сбой на уровне платформы. Самым простым и правильным решением является обновление платформы «1С:Предприятие».
ПакетОтображаемыхДокументов начинает штатно разделять печатные формы по физическим листам.Если быстро обновить платформу не представляется возможным (например, при работе в строгом корпоративном контуре или ограниченном облачном сервисе), разберем альтернативный вариант доработки кода. Вместо применения объекта ПакетОтображаемыхДокументов выполним отправку печатных форм на принтер по отдельности.
Посмотрим на пример реализации цикла отправки сформированных табличных документов:
Для Каждого ТабДок Из МассивПечатныхФорм Цикл
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
КонецЦикла;
В этом случае каждый объект ТабличныйДокумент поступает в спулер операционной системы как самостоятельное задание, благодаря чему принтер завершает печать предыдущего документа и начинает новый с отдельного листа.
Рассмотрим еще один программный метод обхода проблемы. При сборке печатных форм в пакет можно проанализировать количество страниц каждого документа. Если документ имеет нечетное количество страниц, принудительно добавим в конец разделитель.
Проанализируем пример кода с использованием метода ВывестиГоризонтальныйРазделительСтраниц():
Если ТабличныйДокумент.КоличествоСтраниц() % 2 <> 0 Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
После такой обработки каждый документ в пакете будет содержать четное количество страниц, поэтому следующий документ гарантированно начнет печататься с лицевой стороны нового листа бумаги.