Как настроить автоматическое сохранение печатных форм в PDF без лишних диалогов в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При работе в платформе 1С:Предприятие 7.7 часто возникает необходимость автоматизировать выгрузку документов (счетов, актов, накладных) в формат PDF для последующей отправки по электронной почте. Главное ограничение встроенного объекта Таблица заключается в том, что штатный метод Записать() поддерживает только форматы MXL, XLS, HTML, TXT и DBF, а прямой экспорт в PDF отсутствием разработчиками не предусмотрен.

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

Способ 1. Программное управление виртуальным принтером Bullzip PDF Printer

Наиболее элегантное решение — использование виртуального принтера 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:

  1. output — абсолютный путь к формируемому файлу PDF.
  2. ShowSaveAS со значением never — полностью скрывает окно «Сохранить как».
  3. ShowProgress и ShowSettings — отключают отображение индикаторов процесса и окон настроек.
  4. ConfirmOverwrite со значением no — перезаписывает имеющийся файл без вопросов пользователю.

Способ 2. Использование PDFCreator с функцией автосохранения (Auto-save)

Если нет возможности модифицировать программный код для работы с COM-объектом, можно использовать программный продукт PDFCreator (наиболее стабильно в связке с 1С 7.7 работают версии линейки 1.7.x). В настройках профиля этого принтера присутствует встроенный режим Auto-save.

Проанализируем шаги настройки PDFCreator:

  1. Установите PDFCreator в системе и откройте его параметры.
  2. В разделе профиля печати активируйте галочку «Автосохранение» (Auto-save).
  3. Задайте шаблон пути и имени файла (можно использовать динамические теги, такие как дата, время или имя компьютера).
  4. Настройте поведение после сохранения: отключите открытие файла в просмотрщике и отображение диалогов ошибки.
  5. В 1С 7.7 выберите принтер PDFCreator по умолчанию или укажите его через метод Таб.ПараметрыСтраницы(,,,,,,,,,, "PDFCreator").

Способ 3. Конвертация через Excel.Application без виртуальных принтеров

Рассмотрим еще один надежный подход, который позволяет обойтись вовсе без сторонних драйверов печатных платформ. Метод заключается в промежуточном сохранении табличной формы 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 и отлично подходит для фонового формирования реестров документов.

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

Выясним важные нюансы, с которыми можно столкнуться при внедрении тихой печати на серверах терминалов:

← На главную