Автоматизация печати документов напрямую с сервера 1С — задача, с которой сталкивается практически каждый разработчик. Часто для этой цели используется вызов внешних консольных утилит через Wscript.Shell. Однако при работе в серверной среде (особенно на Windows Server) процесс может неожиданно зависать, оставляя «висящие» задачи в диспетчере и блокируя дальнейшую печать. Давайте разберем, как диагностировать эту проблему и какие есть альтернативные решения для повышения отказоустойчивости.
Прежде чем менять инструмент, попробуем выяснить, почему PDFtoPrinter.exe перестает отвечать. Основная трудность заключается в том, что при ошибке утилита не оставляет записей в логах 1С. Чтобы «заставить» её говорить, воспользуемся режимом отладки:
PDFtoPrinter.exe в PDFtoPrinter-debug.exe (или создайте копию с таким именем)./debug к строке запуска.Зачастую выясняется, что проблема кроется в правах доступа к принтеру, конфликте версий PDF-документов или попытках графического интерфейса открыться в неинтерактивной сессии сервера.
Если диагностика не выявила критических проблем, а зависания продолжаются, рекомендуем сменить утилиту на SumatraPDF. Она считается значительно более стабильной для серверных задач благодаря встроенному ключу -print-to, который корректно работает в фоновом режиме.
Для реализации этого решения обновите ваш код в 1С. Рассмотрим наиболее стабильный вариант вызова:
// Создаем COM-объект для взаимодействия с системой
Shell = Новый COMОбъект("WScript.Shell");
// Формируем строку запуска с явным указанием принтера и файла
// Обратите внимание на кавычки для путей с пробелами
СтрокаКоманды = "SumatraPDF.exe -print-to """ + Принтер + """ """ + ИмяФайла + """";
// Запускаем процесс
Shell.Run(СтрокаКоманды, 0, Истина);
Даже с надежным инструментом печать на сервере требует правильной организации. Давайте внедрим следующие правила, чтобы исключить простои:
taskkill через определенный тайм-аут..bat) для запуска печати, всегда перенаправляйте поток ошибок в текстовый файл. Это делается добавлением в конец строки запуска конструкции >> log.txt 2>&1. Так вы всегда сможете прочитать причину сбоя, не воспроизводя ситуацию вручную.\\Server\Printer, попробуйте установить принтер локально на сервер 1С через Standard TCP/IP Port. Это избавит вас от зависимости от сетевой службы браузера и проблем с авторизацией сетевых дисков.Печать из 1С — это сложный процесс взаимодействия с драйверами принтеров и ОС Windows. Если ваш текущий метод дает сбои, начните с отладки вывода ошибок. В большинстве случаев переход на SumatraPDF и вынос печати в отдельную очередь позволяют добиться практически 100% стабильности работы. Разбирайтесь с каждым сбоем как с уникальным кейсом: смотрите логи, проверяйте права учетной записи, под которой работает служба 1С:Предприятие, и старайтесь минимизировать количество «тяжелых» процессов, запускаемых параллельно.