В процессе автоматизации бизнес-процессов часто возникает задача автоматической рассылки документов контрагентам. Это может быть отправка счетов на оплату, актов сверки или отчетов для руководства. В данной статье мы проанализируем ситуацию, когда необходимо программно сформировать печатную форму, сохранить ее во временный файл и отправить получателю через встроенные механизмы 1С.
Прежде чем отправить письмо, нам необходимо подготовить вложение. Как правило, это объект типа ТабличныйДокумент. Рассмотрим подробнее, как преобразовать его в файл формата PDF, который является стандартом для обмена документами.
Для сохранения документа мы используем метод Записать(). Важно правильно указать путь во временном хранилище, чтобы не возникло проблем с правами доступа на сервере. Разберем по шагам процесс создания временного файла:
// Получаем печатную форму документа (функция Печать возвращает ТабличныйДокумент)
ТабДок = Документы.СчетНаОплатуПокупателю.Печать(СсылкаНаДокумент);
// Формируем уникальное имя временного файла
ИмяФайла = ПолучитьИмяВременногоФайла("pdf");
// Сохраняем табличный документ в файл PDF
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
Выясним причину, почему стоит использовать именно ПолучитьИмяВременногоФайла(). Этот метод гарантирует, что имя файла будет уникальным, а сам файл будет создан в каталоге, разрешенном для записи текущему пользователю операционной системы, под которым запущен сеанс 1С или служба сервера.
Для взаимодействия с почтовым сервером в 1С используется объект ИнтернетПочтовыйПрофиль. Посмотрим на пример настройки профиля для работы с распространенными почтовыми сервисами. Обратите внимание, что современные серверы требуют использования защищенного соединения SSL.
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПортSMTP = 465;
Профиль.Пользователь = "your_email@yandex.ru";
Профиль.Пароль = "your_app_password"; // Используйте пароль приложения!
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоМетодAuthLogin = Истина;
Проанализируем ситуацию с безопасностью: большинство почтовых провайдеров (Yandex, Mail.ru, Gmail) больше не позволяют использовать основной пароль от почты для сторонних программ. Вам необходимо создать специальный "Пароль приложения" в настройках безопасности вашего почтового ящика, иначе попытка подключения завершится ошибкой аутентификации.
Теперь, когда у нас есть файл и профиль, перейдем к формированию самого письма. Объект ИнтернетПочтовоеСообщение позволяет задать тему, текст, список получателей и прикрепить вложения. Рассмотрим подробнее, как это реализовать в коде:
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Тема = "Счет на оплату №" + СсылкаНаДокумент.Номер;
Письмо.Отправитель.Адрес = "your_email@yandex.ru";
Письмо.Отправитель.ОтображаемоеИмя = "Наша Организация";
// Добавляем получателя
НовыйПолучатель = Письмо.Получатели.Добавить();
НовыйПолучатель.Адрес = "client_email@example.com";
// Текст письма
Текст = Письмо.Тексты.Добавить();
Текст.Текст = "Добрый день! Во вложении ваш счет на оплату.";
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
// Добавляем вложение
Письмо.Вложения.Добавить(ИмяФайла, "Счет_" + СсылкаНаДокумент.Номер + ".pdf");
Важный момент: при добавлении вложения вторым параметром можно указать понятное имя файла, которое увидит клиент. Это повышает лояльность и удобство работы с вашими документами.
Заключительным этапом является отправка сформированного пакета. Для этого мы используем объект ИнтернетПочта. Посмотрим, как правильно организовать отправку с обработкой возможных исключений.
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль);
Почта.Послать(Письмо);
Сообщить("Письмо успешно отправлено!");
Исключение
Сообщить("Ошибка при отправке: " + ОписаниеОшибки());
КонецПопытки;
Почта.Отключиться();
// Удаляем временный файл после отправки
УдалитьФайлы(ИмяФайла);
Разберем по шагам завершающие действия:
Отключиться(), чтобы освободить ресурсы и корректно закрыть сессию с сервером.Попытка...Исключение, так как проблемы с интернетом или недоступность почтового сервера — частое явление.УдалитьФайлы(), чтобы не забивать дисковое пространство сервера лишним мусором.Если ваша конфигурация построена на базе БСП (например, 1С:ERP, 1С:Управление торговлей или 1С:Бухгалтерия), процесс можно значительно упростить. В БСП предусмотрен механизм УправлениеЭлектроннойПочтой, который берет на себя большинство рутинных операций.
Проанализируем ситуацию использования БСП: в этом случае настройки почты хранятся в справочнике УчетныеЗаписиЭлектроннойПочты, а отправка выполняется одной строкой кода. Это позволяет пользователю самостоятельно менять пароли и настройки серверов в интерфейсе программы без привлечения программиста для правки кода.
// Пример для БСП
ПараметрыОтправки = Новый Структура;
ПараметрыОтправки.Вставить("Кому", "client@example.com");
ПараметрыОтправки.Вставить("Тема", "Счет на оплату");
ПараметрыОтправки.Вставить("Тело", "Здравствуйте! Направляем вам счет.");
Вложения = Новый СписокЗначений;
Вложения.Добавить(Новый Структура("Хранилище, Наименование", Новый ХранилищеЗначения(ДвоичныеДанныеФайла), "Счет.pdf"));
ПараметрыОтправки.Вставить("Вложения", Вложения);
РаботаСПочтой.ОтправитьПисьмо(УчетнаяЗапись, ПараметрыОтправки);
Таким образом, мы рассмотрели как низкоуровневый способ работы с объектами ИнтернетПочта, так и более современный подход с использованием БСП. Выбор метода зависит от ваших задач и используемой конфигурации.