Разберем распространенную проблему, с которой сталкиваются разработчики при переходе или работе на платформе 1С:Предприятие 8.3. Предположим, для конкретной печатной формы в коде задается вывод на специальный принтер (например, принтер этикеток или чеков). Однако после отправки этого документа на печать все последующие стандартные печатные формы пользователя неожиданно начинают отправляться на тот же специальный принтер, игнорируя системный принтер по умолчанию.
Проанализируем причину такого поведения платформы и рассмотрим проверенные способы решения этой задачи.
В отличие от платформы 1С 8.2, версия 1С 8.3 иначе обрабатывает текущие настройки печати в рамках сеанса пользователя. Основные причины зафиксированного поведения:
ТабличныйДокумент программно заполнено свойство ИмяПринтера, платформа 1С 8.3 запоминает его как текущий принтер сеанса. Если для последующих табличных документов свойство ИмяПринтера явно не задано, система подставляет последний использованный принтер текущего сеанса, вместо того чтобы запрашивать данные у операционной системы.Самым правильным решением при формировании печатных форм является привязка настроек к конкретному типу документа или печатной формы. Для этого используются свойства ИмяПараметровПечати и КлючПараметровПечати объекта ТабличныйДокумент.
Рассмотрим пример кода при формировании специальной печатной формы:
ТабДок = Новый ТабличныйДокумент;
// Указываем уникальное имя параметров печати для специальной формы
ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СпецФорма_Этикетка";
ТабДок.ИмяПринтера = "Zebra_Printer";
ТабДок.Напечатать();
Для всех остальных стандартных печатных форм в вашей конфигурации также должно быть заполнено свойство ИмяПараметровПечати со своим уникальным идентификатором:
ТабДокСтандартный = Новый ТабличныйДокумент;
ТабДокСтандартный.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Накладная_ТОРГ12";
// ИмяПринтера НЕ заполняем — платформа будет использовать принтер по умолчанию для этой формы
Благодаря этому платформа 1С будет хранить настройки печати изолированно для каждого типа документа и не станет применять принтер спецформы к обычным накладным или отчетам.
Если в конфигурации используется множественная печать или модифицируются стандартные механизмы вывода, можно перед печатью обычных форм принудительно очищать свойство ИмяПринтера. Передача пустой строки заставляет платформу обратиться к операционной системе за системным принтером по умолчанию.
// Перед отправкой обычного документа на печать:
ТабДокумент.ИмяПринтера = "";
Это сбрасывает привязку к принтеру сеанса, зафиксированному предыдущим вызовом спецформы.
Если проблема вызвана поведением операционной системы на рабочих местах пользователей, выполните следующие шаги:
Если нежелательный принтер уже зафиксировался в кэше настроек конкретного пользователя, следует очистить сохраненные параметры печати табличных документов:
Применяя указанные методы — разделение параметров печати через ИмяПараметровПечати и своевременную очистку свойства ИмяПринтера — вы обеспечите стабильную и корректную печать документов на нужные устройства без сбоев в работе пользователей.