Как программно сформировать отчет в PDF и отправить его по почте в 1С 8.3?

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

В процессе автоматизации бизнес-процессов часто возникает задача автоматической рассылки печатных форм (счетов, актов или отчетов) клиентам или сотрудникам. В системе 1С:Предприятие 8.3 для этого предусмотрены мощные встроенные средства работы с файлами и электронной почтой. В данной статье мы проанализируем ситуацию, когда необходимо без участия пользователя сформировать ТабличныйДокумент, сохранить его в формате PDF на сервере и отправить через системную учетную запись почты.

Этап 1: Формирование табличного документа и сохранение в PDF

Первым делом нам необходимо подготовить сам документ. Как правило, это результат выполнения запроса или сформированная печатная форма. Разберем по шагам процесс конвертации данных в формат PDF. Основным методом здесь является Записать(), который поддерживает различные типы файлов.

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


// Инициализируем табличный документ (например, из макета)
ТабДок = Новый ТабличныйДокумент;
// ... тут должен быть код заполнения ТабДок данными ...

// Получаем имя временного файла во временном хранилище ОС
ПутьКФайлу = ПолучитьИмяВременногоФайла("pdf");

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

Важно помнить, что при работе в клиент-серверном варианте, код сохранения должен выполняться на стороне сервера, чтобы иметь доступ к файловой системе сервера или использовать механизмы временных хранилищ для передачи файла на клиент.

Этап 2: Настройка почтового профиля

Чтобы отправить письмо, системе нужно знать параметры сервера исходящей почты (SMTP). В 1С для этого используется объект ИнтернетПочтовыйПрофиль. Выясним причину, по которой часто возникают ошибки при отправке: обычно это неверно указанные порты или отсутствие флага использования защищенного соединения (SSL).

Проанализируем пример создания профиля для типового почтового сервиса:


Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.ПортSMTP = 465;
Профиль.Пользователь = "sender@mail.ru";
Профиль.Пароль = "ваш_пароль_приложения";
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоЛогинSMTP = Истина;

Обратите внимание, что современные почтовые сервисы требуют использования специальных "паролей приложений" вместо обычных паролей от почтового ящика.

Этап 3: Подготовка сообщения и вложение файла

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

Посмотрим на пример подготовки сообщения:


Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Тема = "Ваш счет на оплату";
Письмо.Отправитель = "sender@mail.ru";
Письмо.Получатели.Добавить("client@example.com");

// Создаем текст письма
ТекстПисьма = Письмо.Тексты.Добавить();
ТекстПисьма.Текст = "Добрый день! Во вложении ваш счет в формате PDF.";
ТекстПисьма.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;

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

В методе Вложения.Добавить() первым параметром передается полный путь к файлу на диске, а вторым — имя файла, которое увидит получатель в письме.

Этап 4: Отправка письма через ИнтернетПочта

Заключительный этап — это установка соединения с сервером и непосредственная передача данных. Для этого используется объект ИнтернетПочта. Рассмотрим подробнее процедуру отправки:


Почта = Новый ИнтернетПочта;
Попытка
    Почта.Подключиться(Профиль);
    Почта.Послать(Письмо);
    Почта.Отключиться();
    Сообщить("Письмо успешно отправлено!");
Исключение
    // В случае ошибки выводим описание проблемы
    Сообщить("Ошибка при отправке: " + ОписаниеОшибки());
    Если Почта.Подключена() Тогда
        Почта.Отключиться();
    КонецЕсли;
КонецПопытки;

Использование блока Попытка...Исключение является критически важным, так как проблемы с интернет-соединением или доступностью почтового сервера могут возникнуть в любой момент. Также не забывайте удалять временный файл с диска после отправки с помощью команды УдалитьФайлы(ПутьКФайлу), чтобы не засорять серверное пространство.

Общие рекомендации и нюансы

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

  1. Для массовой рассылки рекомендуется использовать регламентные задания, чтобы не блокировать работу пользователя.
  2. Если вы используете 1С:ERP, УТ 11 или БП 3.0, лучше использовать встроенную подсистему "Электронная почта" из состава БСП (Библиотеки Стандартных Подсистем). Это позволит использовать уже настроенные в интерфейсе учетные записи.
  3. При формировании PDF через ТабДок.Записать() можно управлять качеством и защитой файла, используя дополнительные параметры метода.

Таким образом, мы рассмотрели полный цикл программной работы с печатными формами и почтовыми сообщениями, что позволяет полностью автоматизировать документооборот с внешними контрагентами.

← На главную