Как в 1С программно задать определенный принтер для печатной формы и почему не сбрасываются старые настройки?

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

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

Разберем детально механизм работы параметров печати в платформе 1С:Предприятие, выясним причину такого поведения и рассмотрим способы корректной настройки вывода на печать.

Почему не срабатывает условие смены принтера в коде

Проанализируем типовой фрагмент кода, в котором возникает проблема:


ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СЧЕТНАОПЛАТУ_ЗАДАНИЕНАОТБОР";
Если ИмяПользователя() <> "ИвановаИИ" Тогда
    ТабличныйДокумент.ИмяПринтера = "Склад";
КонецЕсли;

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

Если пользователь «ИвановаИИ» хотя бы один раз вывел этот документ на принтер «Склад», платформа намертво сохранила эту связку под указанным ключом параметров. При последующих запусках ветка Если пропускается, свойство ИмяПринтера не переопределяется, и платформа применяет сохраненное значение из параметров печати — то есть снова выводит документ на принтер «Склад».

Порядок инициализации свойств табличного документа

Рассмотрим важное правило установки параметров печати: свойство ИмяПринтера должно заполняться строго после присвоения свойства ИмяПараметровПечати. Если сначала задать ИмяПринтера, а затем указать ИмяПараметровПечати, платформа при чтении ключа настроек из базы перезапишет ваше значение теми параметрами, которые были сохранены в профиле пользователя ранее.

Способы решения проблемы

Разберем по шагам практические варианты решения, которые позволяют гарантированно управлять выбором принтера.

  1. Явный сброс принтера в системное значение по умолчанию:

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

    
    ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СЧЕТНАОПЛАТУ_ЗАДАНИЕНАОТБОР";
    Если ИмяПользователя() <> "ИвановаИИ" Тогда
        ТабличныйДокумент.ИмяПринтера = "Склад";
    Иначе
        ТабличныйДокумент.ИмяПринтера = "";
    КонецЕсли;
    
  2. Разделение ключей параметров печати по пользователям:

    Чтобы индивидуальные настройки пользователей не пересекались и не переопределяли друг друга, рекомендуется формировать динамический ключ параметров печати:

    
    Если ИмяПользователя() = "ИвановаИИ" Тогда
        ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СЧЕТНАОПЛАТУ_ОПЕРАТОР";
        ТабличныйДокумент.ИмяПринтера = "";
    Иначе
        ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СЧЕТНАОПЛАТУ_СКЛАД";
        ТабличныйДокумент.ИмяПринтера = "Склад";
    КонецЕсли;
    

    Либо можно добавлять имя текущего пользователя прямо в суффикс ключа параметров печати: "ПАРАМЕТРЫ_ПЕЧАТИ_..." + "_" + ИмяПользователя().

  3. Программная очистка сохраненных настроек:

    Сбросить привязку сохраненного принтера для конкретного пользователя можно с помощью метода системного хранилища настроек:

    
    КлючОбъекта = "Общее/ПараметрыПечати/ПАРАМЕТРЫ_ПЕЧАТИ_СЧЕТНАОПЛАТУ_ЗАДАНИЕНАОТБОР";
    ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, "", "ИвановаИИ");
    

    После удаления записи платформа при следующем открытии печатной формы подставит системный принтер по умолчанию.

  4. Интерактивный сброс через интерфейс 1С:

    Пользователь может самостоятельно один раз выбрать нужный принтер в диалоге печати (например, через команду предварительного просмотра и настройки параметров страницы). Новое значение автоматически запишется в хранилище системных настроек для текущего ИмяПараметровПечати.

Особенности сетевых и терминальных принтеров (RDP)

При настройке программной печати важно учитывать особенности окружения:

  1. Сетевое имя принтера: для сетевых устройств имя должно указываться в точном сетевом формате (например, \\ServerName\PrinterName) в строгом соответствии с тем, как принтер зарегистрирован в операционной системе.
  2. Терминальные сеансы (RDP): при использовании перенаправления принтеров имя устройства в сеансе пользователя часто содержит суффиксы вида (перенаправлено 2). Жестко прописанное статическое имя принтера в коде в таком случае не будет найдено, и документ уйдет на принтер по умолчанию.
  3. Контекст выполнения: если прямая печать выполняется на стороне сервера (в фоновом задании), принтер должен быть установлен и доступен под учетной записью службы сервера 1С:Предприятия (usr1cv8).
← На главную