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