В процессе автоматизации бизнес-процессов часто возникает задача автоматической отправки документов (счетов, актов, накладных) клиентам. В этой статье мы подробно разберем, как программно преобразовать печатную форму в формат PDF и отправить её через электронную почту, используя встроенные механизмы платформы 1С:Предприятие 8.3.
Для реализации данной задачи нам необходимо последовательно выполнить несколько шагов. Мы проанализируем ситуацию и выделим следующие этапы:
ТабличныйДокумент.Предположим, у нас уже есть функция, которая возвращает заполненный табличный документ. Назовем её СформироватьПечатнуюФормуСчета(). Важно понимать, что для корректного отображения в PDF табличный документ должен быть полностью сформирован в памяти сервера или клиента (в зависимости от места выполнения кода).
Рассмотрим подробнее, как преобразовать ТабличныйДокумент в файл. Для этого мы используем метод Записать(). Крайне важно использовать уникальные имена файлов, чтобы избежать конфликтов при одновременной работе нескольких пользователей. Разберем пример кода:
// Получаем уникальное имя временного файла с расширением pdf
ИмяФайла = ПолучитьИмяВременного Файла("pdf");
// Сформируем документ (условно)
ТабДок = СформироватьПечатнуюФормуСчета(СсылкаНаДокумент);
// Записываем документ в файл
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
Использование метода ПолучитьИмяВременногоФайла() гарантирует нам, что файл будет создан в системной директории временных файлов, и мы не затрем данные других процессов. Обратите внимание на второй параметр метода Записать() — системное перечисление ТипФайлаТабличногоДокумента.PDF сообщает платформе о необходимости конвертации.
Теперь выясним причину, по которой многие сталкиваются с трудностями на этапе отправки — это неверная настройка объекта ИнтернетПочтовыйПрофиль. Нам необходимо указать параметры вашего 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).
Рассмотрим процесс создания самого письма. Нам понадобятся объекты ИнтернетПочтовоеСообщение и ИнтернетПочта. Посмотрим на пример кода, объединяющий создание сообщения и прикрепление файла:
Почта = Новый ИнтернетПочта;
Сообщение = Новый ИнтернетПочтовоеСообщение;
// Заполняем основные поля письма
Сообщение.Отправитель.Адрес = "your_login@mail.ru";
Сообщение.Тема = "Счет на оплату №" + СсылкаНаДокумент.Номер;
Сообщение.ТекущаяДата = ТекущаяДата();
// Добавляем получателя
Получатель = Сообщение.Получатели.Добавить("client@example.com");
// Создаем текст письма
Текст = Сообщение.Тексты.Добавить();
Текст.Текст = "Добрый день! Во вложении ваш счет на оплату.";
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
// Прикрепляем сформированный ранее PDF файл
Сообщение.Вложения.Добавить(ИмяФайла, "СчетНаОплату.pdf");
Попытка
Почта.Подключиться(Профиль);
Почта.Послать(Сообщение);
Почта.Отключиться();
Сообщить("Письмо успешно отправлено!");
Исключение
Сообщить("Ошибка при отправке: " + ОписаниеОшибки());
КонецПопытки;
После того как письмо отправлено, необходимо позаботиться о чистоте системы. Проанализируем ситуацию: если мы будем постоянно генерировать временные файлы и не удалять их, дисковое пространство сервера быстро закончится. Используем процедуру УдалитьФайлы().
// Удаляем временный файл после отправки
Попытка
УдалитьФайлы(ИмяФайла);
Исключение
// Файл может быть заблокирован, если отправка еще не завершена полностью
КонецПопытки;
Если вы работаете в современных конфигурациях на базе БСП (Библиотека стандартных подсистем), таких как 1С:ERP, 1С:Комплексная автоматизация или 1С:Управление торговлей, процедуру можно значительно упростить. В БСП существуют готовые механизмы для работы с почтой.
Вместо ручного создания профиля можно использовать справочник УчетныеЗаписиЭлектроннойПочты и программный интерфейс модуля РаботаСПочтовымиСообщениями. Это позволит пользователям самостоятельно настраивать почту в пользовательском режиме без вмешательства программиста в код.
Попытка...Исключение при вызове метода Подключиться() и Послать(), так как сетевые ошибки и проблемы с авторизацией случаются часто.РегламентныеЗадания. Это позволит основному потоку программы не "зависать" в ожидании ответа от почтового сервера.ТабличныйДокумент перед записью.Таким образом, мы по шагам разобрали универсальный способ программной отправки документов. Следуя этой инструкции, вы сможете внедрить автоматическую рассылку любых печатных форм в вашу информационную систему на базе 1С.