При работе в платформе 1С:Предприятие 7.7 часто возникает необходимость автоматизировать выгрузку документов (счетов, актов, накладных) в формат PDF для последующей отправки по электронной почте. Главное ограничение встроенного объекта Таблица заключается в том, что штатный метод Записать() поддерживает только форматы MXL, XLS, HTML, TXT и DBF, а прямой экспорт в PDF отсутствием разработчиками не предусмотрен.
Стандартный вариант с отправкой табличного документа на обычный виртуальный PDF-принтер заставляет пользователя вручную подтверждать сохранение, выбирать папку и нажимать дополнительные кнопки. Разберем, как избавиться от этих лишних шагов и настроить абсолютно прозрачный процесс автоматического формирования PDF-документов.
Наиболее элегантное решение — использование виртуального принтера Bullzip и его COM-объекта Bullzip.PDFPrinterSettings. Это позволяет перед отправкой печатной формы на принтер программно задать путь к итоговому файлу, отключить все диалоговые окна и запретить открытие готового документа.
Рассмотрим пример кода на языке 1С 7.7, где перед печатью таблицы производятся все необходимые настройки драйвера:
// Проверяем наличие COM-объекта виртуального принтера в системе
Попытка
PDFПринтер = СоздатьОбъект("Bullzip.PDFPrinterSettings");
Исключение
Сообщить("Не установлен виртуальный PDF-принтер Bullzip!");
Возврат;
КонецПопытки;
Таб = СоздатьОбъект("Таблица");
// ... Здесь выполняется формирование печатной формы (ИсходнаяТаблица, Секция и т.д.) ...
// Устанавливаем целевой принтер в параметрах страницы
Таб.ПараметрыСтраницы(2,,,5,5,3,3,2,2,1,,"Bullzip PDF Printer");
// Задаем путь сохранения и отключаем интерактивные диалоги
PDFПринтер.SetValue("output", "C:\Export\Счет_на_оплату.pdf");
PDFПринтер.SetValue("ShowSaveAS", "never");
PDFПринтер.SetValue("ShowProgress", "no");
PDFПринтер.SetValue("ShowProgressFinished", "no");
PDFПринтер.SetValue("ShowSettings", "never");
// Отключаем автоматический показ готового PDF после печати
PDFПринтер.SetValue("ShowPDF", "no");
// Запрещаем запрос на перезапись файла при совпадении имен
PDFПринтер.SetValue("ConfirmOverwrite", "no");
// Сохраняем настройки для текущей сессии
PDFПринтер.WriteSettings();
// Выполняем тихую печать без вывода диалога принтера (аргумент 0)
Таб.Напечатать(0);
Проанализируем ключевые параметры, которые передаются через SetValue:
never — полностью скрывает окно «Сохранить как».no — перезаписывает имеющийся файл без вопросов пользователю.Если нет возможности модифицировать программный код для работы с COM-объектом, можно использовать программный продукт PDFCreator (наиболее стабильно в связке с 1С 7.7 работают версии линейки 1.7.x). В настройках профиля этого принтера присутствует встроенный режим Auto-save.
Проанализируем шаги настройки PDFCreator:
Таб.ПараметрыСтраницы(,,,,,,,,,, "PDFCreator").Рассмотрим еще один надежный подход, который позволяет обойтись вовсе без сторонних драйверов печатных платформ. Метод заключается в промежуточном сохранении табличной формы 1С 7.7 в XLS и последующей фоновой конвертации средствами Microsoft Excel.
Посмотрим на пример реализации данного алгоритма:
ВременныйXLS = "C:\Temp\Doc_temp.xls";
ИтоговыйPDF = "C:\Export\Счет.pdf";
// Шаг 1. Сохраняем форму 1С в формат Excel
Таб.Записать(ВременныйXLS, "XLS");
// Шаг 2. Конвертируем XLS в PDF через COM-объект Excel
Попытка
Excel = СоздатьОбъект("Excel.Application");
Excel.DisplayAlerts = 0;
Книга = Excel.Workbooks.Open(ВременныйXLS);
// Вызываем метод экспорта в PDF (тип 0 соответствует xlTypePDF)
Книга.ExportAsFixedFormat(0, ИтоговыйPDF);
Книга.Close(0);
Excel.Quit();
Исключение
Сообщить("Ошибка при конвертации через MS Excel: " + ОписаниеОшибки());
КонецПопытки;
Этот вариант исключает проблемы со сбоями служб печати Windows и отлично подходит для фонового формирования реестров документов.
Выясним важные нюансы, с которыми можно столкнуться при внедрении тихой печати на серверах терминалов:
КаталогПользователя()).