Как настроить печать PDF-файлов на сервере в регламентном задании 1С?

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

При автоматизации складских и учетных процессов часто возникает задача автоматической печати этикеток, наклеек или накладных в формате PDF без участия пользователя — по расписанию через регламентное задание или в фоновом потоке. При этом разработчики часто сталкиваются с ситуацией, когда интерактивный запуск кода на клиенте успешно отправляет документ на принтер, но при выполнении того же кода на стороне сервера печать не происходит или процесс 1С намертво зависает.

Разберем детально, почему стандартный вызов программ просмотра PDF дает сбой на сервере 1С, и рассмотрим проверенные способы реализации надежной серверной печати.

Причины сбоя печати PDF в фоновом режиме

Проанализируем системные факторы, которые блокируют фоновую печать из серверного контекста 1С:

  1. Изоляция нулевой сессии (Session 0 Isolation): служба сервера 1С:Предприятия (процесс rphost.exe) функционирует в неинтерактивной системной сессии Windows. Программы с графическим интерфейсом (такие как Adobe Acrobat Reader) при запуске в этой сессии не могут инициализировать окна и зависают в ожидании закрытия диалогов лицензии, обновления или подтверждения параметров печати, отобразить которые операционная система не может.
  2. Контекст учетной записи службы: регламентные задания выполняются от имени системного пользователя службы 1С (обычно USR1CV8 или SYSTEM). У этой учетной записи отсутствует загруженный пользовательский профиль, нет доступа к подключенным сетевым принтерам конкретного пользователя и часто отсутствуют права на сетевые очереди.
  3. Ограничения стандартной команды печати Windows: попытка отправить PDF через системную команду print /d:... выполняет прямую передачу байтов в порт (raw print). Если принтер не оснащен встроенным аппаратным интерпретатором PostScript или Direct PDF, он напечатает испорченный текст либо выдаст пустые листы.

Способ 1. Использование консольных утилит для «тихой» печати

Выясним, как обойти ограничения графической оболочки. Для этого вместо тяжелых офисных программ применим легковесные консольные утилиты (CLI), специально разработанные для работы в фоновом режиме без открытия окон (silent mode).

Наиболее популярными и надежными решениями являются утилиты SumatraPDF и PDFtoPrinter. Рассмотрим пример вызова утилиты SumatraPDF из серверного кода 1С:


Процедура ПечатьPDFНаСервере(ПутьКФайлу, ИмяПринтера) Экспорт
    
    // Путь к консольной утилите на сервере
    ПутьКУтилите = "C:\Tools\SumatraPDF\SumatraPDF.exe";
    
    // Формируем параметры тихой печати на указанный принтер
    // Параметр -print-settings позволяет управлять масштабированием (например, "noscale" для этикеток или "fit")
    ПараметрыЗапуска = СтрШаблон("-print-to ""%1"" -silent -print-settings ""noscale"" ""%2""", ИмяПринтера, ПутьКФайлу);
    
    СтрокаКоманды = СтрШаблон("""%1"" %2", ПутьКУтилите, ПараметрыЗапуска);
    
    WshShell = Новый COMОбъект("WScript.Shell");
    КодВозврата = WshShell.Run(СтрокаКоманды, 0, Истина);
    
    Если КодВозврата <> 0 Тогда
        ЗаписьЖурналаРегистрации("Печать PDF", УровеньЖурналаРегистрации.Ошибка,,, 
            СтрШаблон("Ошибка печати файла %1. Код возврата: %2", ПутьКФайлу, КодВозврата));
    КонецЕсли;
    
КонецПроцедуры

Настройка принтера и форматов бумаги на сервере

Если принтер печатает этикетку формата A6 на стандартном листе A4 или сбивает границы, необходимо правильно сконфигурировать системные параметры печати на самом сервере 1С:

  1. Установка локального принтера через TCP/IP: сетевые принтеры вида \\Сервер\Принтер привязаны к пользовательской сессии. На сервере 1С принтер должен быть установлен как локальный с созданием стандартного порта Standard TCP/IP Port. Это гарантирует доступность очереди печати учетной записи USR1CV8.
  2. Настройка параметров по умолчанию (Printing Defaults): настройки, заданные через обычный пункт «Настройка печати», применяются только к текущему интерактивному пользователю. Для фоновых заданий параметры формата бумаги (A6, термоэтикетка и т.д.) необходимо задать в меню: Свойства принтера → вкладка «Дополнительно» → кнопка «Умолчания» (Printing Defaults).
  3. Проверка прав доступа: на вкладке «Безопасность» свойств принтера необходимо явно предоставить учетной записи USR1CV8 права «Печать» и «Управление документами».

Способ 2. Архитектурный паттерн «Агент печати»

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

  1. Серверное регламентное задание формирует PDF-документ (например, через метод табличного документа Записать()) и сохраняет его во временную таблицу базы данных или сетевой каталог со статусом «К печати».
  2. На рабочем месте пользователя (клиентском ПК), к которому физически подключен принтер, запускается сеанс 1С или служебный обработчик.
  3. Клиентский сеанс с заданной периодичностью считывает очередь заданий и отправляет файлы на локальный принтер в стандартном интерактивном контексте пользователя.
← На главную