Почему 1С запоминает чужой принтер при печати документов и как это исправить

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

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

Проанализируем механизм сохранения параметров печати в 1С

Чтобы понять, почему происходит такой сбой, расследуем внутренний механизм работы объекта ТабличныйДокумент с принтерами в платформах 1С 8.3.

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

Способ 1. Программное разделение ключей печати по рабочим станциям

Наиболее надежным решением является динамическое добавление имени компьютера в свойство КлючПараметровПечати при формировании печатной формы. Это предотвратит перезапись параметров печати между разными физическими ПК.

Рассмотрим пример кода при формировании табличного документа:


ТабличныйДокумент = Новый ТабличныйДокумент;
// Динамически формируем уникальный ключ печати для каждого ПК
ТабличныйДокумент.КлючПараметровПечати = "ПараметрыПечати_АктСверки_" + ИмяКомпьютера();

Благодаря этому для каждой рабочей станции 1С будет создавать отдельную запись в ХранилищеСистемныхНастроек, исключая пересечение имен сетевых принтеров.

Способ 2. Явный сброс имени принтера перед вызовом печати

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

Разберем пример обработки перед выводом на печать:


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

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

Способ 3. Очистка системных настроек печати пользователей

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

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

Ограничения и особенности работы платформы

Посмотрим на важные особенности, о которых необходимо помнить при настройке печати в 1С:Предприятие 8.3:

← На главную