Автоматизация печати документов — одна из частых задач, с которой сталкиваются разработчики 1С. Когда возникает необходимость отправить PDF-файл на принтер «в тихом режиме», стандартных средств платформы для прямого вывода на печать без участия пользователя бывает недостаточно. В этой статье мы разберем наиболее эффективные подходы к решению этой задачи.
Одним из самых быстрых способов, доступных для клиентской части 1С, является использование возможностей Shell через COMОбъект. Этот метод позволяет задействовать встроенные в ОС инструменты для обработки файлов с расширением PDF.
Рассмотрим пример реализации:
Shell = Новый COMОбъект("Shell.Application");
// Использование команды printto позволяет указать конкретный принтер
Shell.ShellExecute(ИмяФайла, """" + ИмяПринтера + """", "", "printto", 0);
Обратите внимание: Параметр printto отправляет файл напрямую на указанный принтер. Число 0 в последнем аргументе скрывает окно приложения, обеспечивая «тихую» печать.
Для серверных процессов или задач, где критична стабильность и отсутствие «зависших» окон графических приложений, использование консольных утилит является наиболее профессиональным решением. Одной из таких утилит является pdftoprinter.exe. Она позволяет передавать команды напрямую драйверу принтера.
Разберем, как интегрировать этот инструмент в код 1С:
// Формируем командную строку с путем к файлу и именем принтера
СтрокаКоманды = "pdftoprinter.exe """ + ИмяФайла + """ ""НазваниеВашегоПринтера""";
// Выполняем запуск приложения
КодВозврата = 0;
ЗапуститьПриложение(СтрокаКоманды, "C:\ПутьКПапкеСУтилитой\", Истина, КодВозврата);
Преимущество этого метода заключается в том, что печать происходит быстро и не требует наличия открытого Adobe Reader или аналогичного ПО на сервере. Параметр Истина в методе ЗапуститьПриложение заставляет 1С ждать завершения процесса печати, что позволяет корректно обрабатывать последовательные очереди документов.
Начиная с версии платформы 8.3.22, разработчики 1С представили встроенный объект ДокументPDF. Этот инструмент значительно упрощает работу с содержимым PDF внутри самой конфигурации.
Мы можем использовать данный объект для:
Хотя сам объект ДокументPDF предназначен в первую очередь для работы с данными, в связке с временными файлами он позволяет реализовывать сложные сценарии, например, печать отдельных страниц или объединение нескольких файлов в один пакет перед отправкой на принтер.
Чтобы ваша система печати работала надежно, придерживайтесь следующих правил:
ShellExecute или запуск GUI-приложений на серверной стороне часто ограничены политиками безопасности Windows. Для серверных регламентных заданий используйте только консольные утилиты.pdftoprinter) малейшая ошибка в названии приведет к сбою задачи.Подводя итог, можно сказать, что выбор способа зависит от вашей среды выполнения. Для простых клиентских задач достаточно метода ShellExecute. Для корпоративных систем, требующих высокой отказоустойчивости, используйте консольные инструменты, вызываемые через ЗапуститьПриложение. Сочетание этих методов с возможностями объекта ДокументPDF позволит вам создать гибкую и эффективную систему управления печатью PDF в 1С.