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

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

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

Где находится макет печатной формы счета

В типовых решениях на базе Библиотеки стандартных подсистем (БСП) многие печатные формы вынесены в общие макеты. Печатная форма счета на оплату покупателю расположена в общем макете ОбщийМакет.ПФ_MXL_СчетЗаказ.

Однако напрямую заполнять этот макет вручную через получение областей не рекомендуется, так как это нарушает логику обновлений и усложняет поддержку. В типовой конфигурации правильнее использовать штатные менеджеры печати БСП, которые сами обращаются к нужному макету и корректно заполняют все параметры, реквизиты и факсимиле.

Алгоритм решения задачи

Проанализируем общую схему действий для отправки печатной формы по почте:

  1. Формируем табличный документ печатной формы с помощью вызова процедуры печати из модуля менеджера документа.
  2. Сохраняем полученный ТабличныйДокумент во временный файл на диске (например, в формате PDF).
  3. Формируем почтовое сообщение и прикрепляем сохраненный файл.
  4. Отправляем письмо адресату.
  5. Удаляем временный файл с диска после отправки.

Шаг 1. Программное получение табличного документа печатной формы

Рассмотрим, как вызвать стандартный механизм формирования печатной формы через модуль менеджера документа Документы.СчетНаОплатуПокупателю. Все операции по формированию и сохранению выполняются в контексте &НаСервере.

Посмотрим на пример кода формирования печатной формы счета:


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

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

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

// При необходимости вывода факсимильной подписи и печати организации
ПараметрыПечати = Новый Структура;
ПараметрыПечати.Вставить("СПечатьюИПодписями", Истина);

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

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

Шаг 2. Сохранение табличного документа во временный файл

Для сохранения документа воспользуемся методом ПолучитьИмяВременногоФайла и методом Записать самого табличного документа. Выясним, как это реализовать:


ИмяВременногоФайла = ПолучитьИмяВременногоФайла("pdf");
ТабличныйДокумент.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.PDF);

При необходимости можно использовать и другие форматы выгрузки из системного перечисления: ТипФайлаТабличногоДокумента.XLSX, ТипФайлаТабличногоДокумента.DOCX или ТипФайлаТабличногоДокумента.MXL.

Шаг 3. Отправка письма с вложением через БСП

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


// Подготовим структуру почтового сообщения
ПараметрыПисьма = Новый Структура;
ПараметрыПисьма.Вставить("Кому", "client@example.com");
ПараметрыПисьма.Вставить("Тема", "Счет на оплату № " + СсылкаНаСчет.Номер);
ПараметрыПисьма.Вставить("Тело", "Добрый день! Во вложении направляем счет на оплату.");

// Подготовим массив вложений
Вложения = Новый Массив;
Вложение = Новый Структура;
Вложение.Вставить("ИмяФайла", "Счет_на_оплату_" + СокрЛП(СсылкаНаСчет.Номер) + ".pdf");
Вложение.Вставить("Хранилище", Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяВременногоФайла)));
Вложения.Добавить(Вложение);

ПараметрыПисьма.Вставить("Вложения", Вложения);

// Получаем системную или предопределенную учетную запись почты
УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗапись;

// Отправляем почтовое сообщение
РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма);

// Очищаем временный файл на сервере
УдалитьФайлы(ИмяВременногоФайла);

Альтернативный вариант: отправка через низкоуровневые объекты платформы

Если в вашей базе не настроена подсистема БСП или требуется отправка через прямой интернет-профиль, рассмотрим вариант с использованием объектов платформы ИнтернетПочта, ИнтернетПочтовоеСообщение и ИнтернетПочтовыйПрофиль:


Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Тема = "Счет на оплату";
Письмо.Получатели.Добавить("client@example.com");
Письмо.Тексты.Добавить("Во вложении счет на оплату.", ТипТекстаПочтовогоСообщения.ПростойТекст);

// Добавляем сохраненный файл во вложения
Письмо.Вложения.Добавить(ИмяВременногоФайла, "СчетНаОплату.pdf");

// Настройка подключения к SMTP
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.example.com";
Профиль.ПортSMTP = 465;
Профиль.ПользовательSMTP = "info@example.com";
Профиль.ПарольSMTP = "SecretPassword";
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
Профиль.ИспользоватьSSLSMTP = Истина;

Почта = Новый ИнтернетПочта;
Почта.Подключиться(Профиль);
Почта.Послать(Письмо);
Почта.Отключиться();

// Удаляем временный файл
УдалитьФайлы(ИмяВременногоФайла);

Важные особенности при работе на сервере под управлением Linux

Если сервер «1С:Предприятие» функционирует под управлением ОС Linux, обратите внимание на следующие нюансы:

  1. Для корректного формирования файлов в формате PDF на сервере должны быть установлены шрифты Microsoft TrueType (пакет msttcorefonts или шрифты Liberation). При их отсутствии экспорт в PDF может завершиться ошибкой или исказить текст печатной формы.
  2. Все файловые операции (создание временного файла через ПолучитьИмяВременногоФайла и его удаление через УдалитьФайлы) должны происходить в пределах серверной сессии с достаточными правами на запись во временный каталог ОС.
← На главную