В процессе разработки часто возникает необходимость автоматизировать выгрузку документов в файл: например, сформировать счета на оплату или акты за период и отправить их контрагентам по электронной почте. Рассмотрим, как программно получить печатную форму документа в 1С:Бухгалтерия 3.0 и сохранить ее в формате PDF.
Для сохранения печатной формы в файл платформа 1С:Предприятие предоставляет встроенный метод Записать() объекта ТабличныйДокумент. Чтобы выгрузить документ именно в формате PDF, необходимо вторым параметром передать значение системного перечисления ТипФайлаТабличногоДокумента.PDF.
Рассмотрим простейший пример сохранения сформированного табличного документа на диск:
// Создаем объект табличного документа
ТабДок = Новый ТабличныйДокумент;
// ... Здесь выполняется заполнение и вывод макета ...
// Сохраняем сформированный документ в файл PDF
ИмяФайла = "C:\My Documents\СчетНаОплату.pdf";
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
Проанализируем детально параметры метода Записать() объекта ТабличныйДокумент:
Строка) — полный путь к создаваемому файлу на диске с указанием расширения.ТипФайлаТабличногоДокумента) — формат сохранения. Если параметр не указан, файл сохраняется в стандартном формате MXL. Для сохранения в PDF указываем ТипФайлаТабличногоДокумента.PDF.Метод доступен на тонком и толстом клиентах, сервере, в веб-клиенте и внешнем соединении. Однако стоит учитывать примечания платформы: при работе на сервере или в веб-клиенте вызов метода выполняет обращение к серверным ресурсам, а картинки формата Metafile при экспорте в PDF не поддерживаются.
Выясним, как получить готовый табличный документ, имея только ссылку на объект (например, на документ ДокументСсылка.СчетНаОплатуПокупателю).
В типовых конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как «1С:Бухгалтерия 3.0», формированием печатных форм управляет общий модуль УправлениеПечатью. Это позволяет вызывать печать без изменения конфигурации и снятия с поддержки.
Рассмотрим пример программного вызова формирования печатной формы через типовой механизм БСП:
// Передаваемая ссылка на документ
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаСчет);
// Параметры печати
ПараметрыПечати = Новый Структура;
// Идентификатор макета и менеджер печати
ИдентификаторПечатнойФормы = "СчетЗаказ";
МенеджерПечати = Документы.СчетНаОплатуПокупателю;
// Коллекция для приема результата
КоллекцияПечатныхФорм = УправлениеПечатью.НоваяКоллекцияПечатныхФорм(ИдентификаторПечатнойФормы);
// Формируем печатную форму
УправлениеПечатью.СформироватьПечатныеФормы(
МенеджерПечати,
ИдентификаторПечатнойФормы,
МассивОбъектов,
ПараметрыПечати,
КоллекцияПечатныхФорм
);
// Извлекаем табличный документ из коллекции
ОписаниеПечатнойФормы = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, ИдентификаторПечатнойФормы);
Если ОписаниеПечатнойФормы <> Неопределено Тогда
ТабДок = ОписаниеПечатнойФормы.ТабличныйДокумент;
ТабДок.Записать("C:\Temp\Счет.pdf", ТипФайлаТабличногоДокумента.PDF);
КонецЕсли;
Чтобы сформированный PDF-файл выглядел аккуратно и данные не обрезались по ширине, рекомендуется перед сохранением настроить параметры отображения табличного документа:
// Включаем автоматический масштаб по ширине страницы
ТабДок.АвтоМасштаб = Истина;
// Устанавливаем ориентацию страницы (Портрет или Ландшафт)
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
// При необходимости регулируем размеры полей (в миллиметрах)
ТабДок.ПолеСверху = 10;
ТабДок.ПолеСнизу = 10;
ТабДок.ПолеСлева = 10;
ТабДок.ПолеСправа = 10;
// Сохраняем в файл
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);
Если стоит задача обойти документы за указанный период, сформировать по каждому из них печатную форму и выгрузить во временный каталог (например, для последующей рассылки по E-mail), организуем следующий алгоритм:
/, \, *, ? и др.).КаталогВременныхФайлов() и отправляем письмо.УдалитьФайлы().Важно при работе на сервере: Если сохранение PDF происходит на стороне сервера 1С под управлением Linux, убедитесь, что в операционной системе установлены стандартные шрифты Microsoft (пакет ttf-mscorefonts-installer или аналогичный). При отсутствии шрифтов Arial или Times New Roman сервер может некорректно формировать верстку или генерировать поврежденные PDF-файлы.