Как программно сохранить печатную форму в PDF в 1С:Бухгалтерия 3.0?

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

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

Базовый метод сохранения табличного документа в PDF

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

Рассмотрим простейший пример сохранения сформированного табличного документа на диск:


// Создаем объект табличного документа
ТабДок = Новый ТабличныйДокумент;

// ... Здесь выполняется заполнение и вывод макета ...

// Сохраняем сформированный документ в файл PDF
ИмяФайла = "C:\My Documents\СчетНаОплату.pdf";
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);

Синтаксис и параметры метода Записать

Проанализируем детально параметры метода Записать() объекта ТабличныйДокумент:

  1. ИмяФайла (обязательный, тип Строка) — полный путь к создаваемому файлу на диске с указанием расширения.
  2. ТипФайлаТаблицы (необязательный, тип ТипФайлаТабличногоДокумента) — формат сохранения. Если параметр не указан, файл сохраняется в стандартном формате MXL. Для сохранения в PDF указываем ТипФайлаТабличногоДокумента.PDF.

Метод доступен на тонком и толстом клиентах, сервере, в веб-клиенте и внешнем соединении. Однако стоит учитывать примечания платформы: при работе на сервере или в веб-клиенте вызов метода выполняет обращение к серверным ресурсам, а картинки формата Metafile при экспорте в PDF не поддерживаются.

Получение печатной формы по ссылке на документ

Выясним, как получить готовый табличный документ, имея только ссылку на объект (например, на документ ДокументСсылка.СчетНаОплатуПокупателю).

В типовых конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как «1С:Бухгалтерия 3.0», формированием печатных форм управляет общий модуль УправлениеПечатью. Это позволяет вызывать печать без изменения конфигурации и снятия с поддержки.

Рассмотрим пример программного вызова формирования печатной формы через типовой механизм БСП:


// Передаваемая ссылка на документ
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаСчет);

// Параметры печати
ПараметрыПечати = Новый Структура;

// Идентификатор макета и менеджер печати
ИдентификаторПечатнойФормы = "СчетЗаказ";
МенеджерПечати = Документы.СчетНаОплатуПокупателю;

// Коллекция для приема результата
КоллекцияПечатныхФорм = УправлениеПечатью.НоваяКоллекцияПечатныхФорм(ИдентификаторПечатнойФормы);

// Формируем печатную форму
УправлениеПечатью.СформироватьПечатныеФормы(
    МенеджерПечати, 
    ИдентификаторПечатнойФормы, 
    МассивОбъектов, 
    ПараметрыПечати, 
    КоллекцияПечатныхФорм
);

// Извлекаем табличный документ из коллекции
ОписаниеПечатнойФормы = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, ИдентификаторПечатнойФормы);
Если ОписаниеПечатнойФормы <> Неопределено Тогда
    ТабДок = ОписаниеПечатнойФормы.ТабличныйДокумент;
    ТабДок.Записать("C:\Temp\Счет.pdf", ТипФайлаТабличногоДокумента.PDF);
КонецЕсли;

Настройка параметров страницы перед экспортом

Чтобы сформированный PDF-файл выглядел аккуратно и данные не обрезались по ширине, рекомендуется перед сохранением настроить параметры отображения табличного документа:


// Включаем автоматический масштаб по ширине страницы
ТабДок.АвтоМасштаб = Истина;

// Устанавливаем ориентацию страницы (Портрет или Ландшафт)
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;

// При необходимости регулируем размеры полей (в миллиметрах)
ТабДок.ПолеСверху = 10;
ТабДок.ПолеСнизу  = 10;
ТабДок.ПолеСлева  = 10;
ТабДок.ПолеСправа = 10;

// Сохраняем в файл
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);

Массовая выгрузка документов за период

Если стоит задача обойти документы за указанный период, сформировать по каждому из них печатную форму и выгрузить во временный каталог (например, для последующей рассылки по E-mail), организуем следующий алгоритм:

  1. Выполняем запрос к базе данных для получения списка ссылок и адресов электронной почты контрагентов.
  2. В цикле формируем печатную форму для каждого документа.
  3. Подготавливаем корректное имя файла, очищая номер документа от спецсимволов, запрещенных в файловой системе (знаки /, \, *, ? и др.).
  4. Сохраняем табличный документ во временный файл через КаталогВременныхФайлов() и отправляем письмо.
  5. После отправки удаляем временный файл с помощью функции УдалитьФайлы().

Важно при работе на сервере: Если сохранение PDF происходит на стороне сервера 1С под управлением Linux, убедитесь, что в операционной системе установлены стандартные шрифты Microsoft (пакет ttf-mscorefonts-installer или аналогичный). При отсутствии шрифтов Arial или Times New Roman сервер может некорректно формировать верстку или генерировать поврежденные PDF-файлы.

← На главную