Как программно сохранить ТабличныйДокумент 1С в файл PDF?

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

В процессе работы с системой 1С:Предприятие 8.3 часто возникает необходимость программно сохранять сформированные табличные документы в различных форматах, в том числе в PDF. Это может потребоваться для автоматической отправки отчетов по электронной почте (удобно через инструмент автоматизации рассылок документов из 1С), формирования пакетов документов или разработки внешней печатной формы на БСП 3.1.10. Рассмотрим, как мы можем решить эту задачу эффективно и надежно, учитывая различные условия и версии платформы.

Метод 1: Использование встроенного метода «Записать» для ТабличногоДокумента

Начиная с версии платформы 1С:Предприятие 8.3.10, разработчики значительно упростили процесс сохранения табличных документов в формат PDF, добавив соответствующий тип файла в метод Записать() объекта ТабличныйДокумент. Этот подход является наиболее предпочтительным, поскольку он не требует установки дополнительного программного обеспечения или использования внешних компонентов.

Суть метода: Мы используем метод Записать() объекта ТабличныйДокумент, указывая путь к файлу и тип файла ТипФайлаТабличногоДокумента.PDF.

Пошаговое руководство:

  1. Получение ТабличногоДокумента: Прежде всего, нам потребуется сформированный табличный документ. Это может быть результат работы отчета, печатная форма документа или любой другой объект, представленный типом ТабличныйДокумент.

    
    // Предположим, у нас уже есть сформированный табличный документ
    Перем ТабДок;
    // ... код формирования ТабДок ...
    ТабДок = Новый ТабличныйДокумент;
    // Например, заполним его данными для примера
    ТабДок.ВывестиСекцию("Шапка");
    ТабДок.Область(1,1).Текст = "Это тестовый документ";
    ТабДок.Область(2,1).Текст = "для сохранения в PDF.";
    
  2. Определение пути и имени файла: Нам нужно указать полный путь, по которому будет сохранен PDF-файл. Важно убедиться, что у пользователя или сервера 1С есть права на запись в эту директорию.

    
    ИмяФайлаPDF = КаталогВременныхФайлов() + "МойДокумент.pdf";
    // Или, например, в определенную папку:
    // ИмяФайлаPDF = "C:\Отчеты\МойОтчет_" + Формат(ТекущаяДата(), "ДФ=yyyyMMdd_HHmmss") + ".pdf";
    
  3. Вызов метода Записать(): Теперь мы вызываем метод Записать(), передавая ему имя файла и константу ТипФайлаТабличногоДокумента.PDF.

    
    Попытка
        ТабДок.Записать(ИмяФайлаPDF, ТипФайлаТабличногоДокумента.PDF);
        Сообщить("Табличный документ успешно сохранен в PDF: " + ИмяФайлаPDF);
    Исключение
        Сообщить("Ошибка при сохранении табличного документа в PDF: " + ОписаниеОшибки());
    КонецПопытки;
    

Важные аспекты использования метода «Записать» на сервере и в фоновых заданиях:

Часто требуется сохранять документы в PDF не в интерактивном режиме на клиенте, а на сервере 1С или в рамках фоновых заданий. Рассмотрим, как это работает и на что стоит обратить внимание.

  1. Работа на сервере 1С: Метод ТабличныйДокумент.Записать(..., ТипФайлаТабличногоДокумента.PDF) прекрасно работает и на сервере 1С. После сохранения вы можете реализовать просмотр файлов в управляемой форме 1С для контроля результата.

  2. Права доступа к файловой системе: Это критически важный момент. У пользователя операционной системы, под которым запущен процесс rphost.exe, должны быть права на запись. Если права отсутствуют, мы получим ошибку доступа.

  3. Невидимый режим: Метод Записать() является полностью программным, что делает его идеальным для автоматизации, включая последующее нанесение текстового штампа на PDF документы в пакетном режиме.

Метод 2: Использование COM-соединения с Microsoft Excel или OpenOffice

Если мы работаем с более старыми версиями платформы или если нам требуются специфические возможности, мы можем использовать внешние офисные приложения.

Суть метода: Мы программно создаем экземпляр приложения Excel через COM-соединение, что отчасти напоминает механизмы, которые использует подсистема сохранения данных табличных частей в Excel.

Пошаговое руководство (на примере Microsoft Excel):

  1. Создание COM-объекта Excel:

    
    Перем Excel, КнигаExcel, ЛистExcel;
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Excel.Visible = Ложь; 
    Исключение
        Сообщить("Не удалось создать COM-объект Excel.");
        Возврат;
    КонецПопытки;
    
  2. Выгрузка ТабличногоДокумента в Excel: Сохраняем во временный .xlsx и открываем его в Excel.

    
    ИмяВременногоФайлаXLSX = КаталогВременныхФайлов() + "ВременныйДокумент.xlsx";
    ТабДок.Записать(ИмяВременногоФайлаXLSX, ТипФайлаТабличногоДокумента.XLSX);
    КнигаExcel = Excel.Workbooks.Open(ИмяВременногоФайлаXLSX);
    ЛистExcel = КнигаExcel.Sheets(1);
    
  3. Сохранение в PDF: Используем метод ExportAsFixedFormat().

    
    ИмяФайлаPDF = КаталогВременныхФайлов() + "МойДокумент_черезExcel.pdf";
    ЛистExcel.ExportAsFixedFormat(0, ИмяФайлаPDF, 0, Истина, Истина, , , Ложь);
    

Выбор метода и заключительные рекомендации

Выбор метода зависит от ваших технических условий и версии платформы:

  1. Предпочтительный метод: ТабличныйДокумент.Записать(). Рекомендуется для платформы 8.3.10+, так как он работает быстро и не требует стороннего ПО.

  2. Альтернативный метод: COM-соединение. Необходим для старых версий или сложных манипуляций. В дополнение к офисным инструментам, в некоторых сценариях может быть полезен сторонний инструмент преобразования JPEG в PDF.

Важные моменты при отладке и тестировании:

  1. Проверка прав доступа: Убедитесь в наличии прав у процесса rphost.exe.
  2. Пути к файлам: Используйте только абсолютные пути.
  3. Обработка исключений: Всегда используйте блоки Попытка...Исключение.

Таким образом, использование встроенного метода Записать() объекта ТабличныйДокумент является наиболее современным способом решения задачи. Это позволяет эффективно автоматизировать документооборот, обеспечивая высокую стабильность системы.

← На главную