Как программно сформировать и отправить печатную форму по электронной почте в 1С 8.3

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

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

Общий алгоритм решения задачи

Для реализации данной задачи нам необходимо последовательно выполнить несколько шагов. Мы проанализируем ситуацию и выделим следующие этапы:

  1. Формирование печатной формы в объекте ТабличныйДокумент.
  2. Сохранение полученного документа во временный файл на диске в формате PDF.
  3. Настройка почтового профиля для подключения к SMTP-серверу.
  4. Создание почтового сообщения и прикрепление к нему файла.
  5. Отправка сообщения и очистка временных файлов.

Шаг 1: Формирование табличного документа

Предположим, у нас уже есть функция, которая возвращает заполненный табличный документ. Назовем её СформироватьПечатнуюФормуСчета(). Важно понимать, что для корректного отображения в PDF табличный документ должен быть полностью сформирован в памяти сервера или клиента (в зависимости от места выполнения кода).

Шаг 2: Сохранение во временный файл PDF

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


// Получаем уникальное имя временного файла с расширением pdf
ИмяФайла = ПолучитьИмяВременного Файла("pdf");

// Сформируем документ (условно)
ТабДок = СформироватьПечатнуюФормуСчета(СсылкаНаДокумент);

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

Использование метода ПолучитьИмяВременногоФайла() гарантирует нам, что файл будет создан в системной директории временных файлов, и мы не затрем данные других процессов. Обратите внимание на второй параметр метода Записать() — системное перечисление ТипФайлаТабличногоДокумента.PDF сообщает платформе о необходимости конвертации.

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

Теперь выясним причину, по которой многие сталкиваются с трудностями на этапе отправки — это неверная настройка объекта ИнтернетПочтовыйПрофиль. Нам необходимо указать параметры вашего SMTP-сервера. Проанализируем типичную настройку для почтовых сервисов (например, Gmail, Yandex или Mail.ru):


Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.ПортSMTP = 465;
Профиль.Пользователь = "your_login@mail.ru";
Профиль.Пароль = "your_password";
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.ПовторениеСеансаИМАР; // или ПоУмолчанию
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоSSLSMTP = Истина;

Важно: При использовании современных почтовых сервисов обязательно включайте ИспользоватьSSLSMTP и проверяйте правильность порта (обычно 465 для SSL или 587 для TLS).

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

Рассмотрим процесс создания самого письма. Нам понадобятся объекты ИнтернетПочтовоеСообщение и ИнтернетПочта. Посмотрим на пример кода, объединяющий создание сообщения и прикрепление файла:


Почта = Новый ИнтернетПочта;
Сообщение = Новый ИнтернетПочтовоеСообщение;

// Заполняем основные поля письма
Сообщение.Отправитель.Адрес = "your_login@mail.ru";
Сообщение.Тема = "Счет на оплату №" + СсылкаНаДокумент.Номер;
Сообщение.ТекущаяДата = ТекущаяДата();

// Добавляем получателя
Получатель = Сообщение.Получатели.Добавить("client@example.com");

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

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

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

Шаг 5: Завершение и очистка

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


// Удаляем временный файл после отправки
Попытка
    УдалитьФайлы(ИмяФайла);
Исключение
    // Файл может быть заблокирован, если отправка еще не завершена полностью
КонецПопытки;

Особенности работы в типовых конфигурациях

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

Вместо ручного создания профиля можно использовать справочник УчетныеЗаписиЭлектроннойПочты и программный интерфейс модуля РаботаСПочтовымиСообщениями. Это позволит пользователям самостоятельно настраивать почту в пользовательском режиме без вмешательства программиста в код.

Рекомендации по безопасности и стабильности

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

← На главную