В современной практике автоматизации бизнеса часто возникает задача автоматической рассылки отчетности. Это может быть ежедневный отчет о продажах для руководителя, счета на оплату для клиентов или уведомления для складских работников. В данной статье мы подробно разберем, как реализовать этот механизм программно, используя встроенные возможности платформы 1С:Предприятие 8.3.
Мы проанализируем процесс, состоящий из трех ключевых этапов: настройка почтового профиля, генерация печатной формы (табличного документа) и непосредственная отправка письма с вложением через объект ИнтернетПочта.
Для того чтобы 1С могла отправить электронное письмо, нам необходимо указать параметры сервера исходящей почты (SMTP). Эти параметры хранятся в объекте ИнтернетПочтовыйПрофиль. Рассмотрим, как правильно инициализировать этот объект в коде.
Выясним, какие свойства являются обязательными. Прежде всего, это адрес сервера, порт и данные для аутентификации (логин и пароль). Также важно учитывать требования современных почтовых сервисов (таких как Gmail, Mail.ru или Yandex) к защищенному соединению SSL/TLS.
Разберем пример создания профиля:
Функция ПолучитьПочтовыйПрофиль()
Профиль = Новый ИнтернетПочтовыйПрофиль;
// Укажите настройки вашего SMTP-сервера
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.ПортSMTP = 465;
Профиль.ПользовательSMTP = "robot@mail.ru";
Профиль.ПарольSMTP = "your_strong_password";
// Использование защищенного соединения обязательно для большинства сервисов
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоМетодAuthLogin = Истина;
// Время ожидания сервера в секундах
Профиль.ВремяОжидания = 30;
Возврат Профиль;
КонецФункции
Важно помнить, что при использовании двухфакторной аутентификации в почтовых сервисах необходимо генерировать специальный "пароль для приложений", а не использовать основной пароль от учетной записи. Проанализируем типичную ошибку: если порт указан неверно (например, 25 вместо 465), программа может "зависнуть" на попытке соединения или выдать ошибку тайм-аута.
Следующим шагом нам необходимо получить данные. Обычно отчет в 1С формируется в объект ТабличныйДокумент. Наша задача — вызвать процедуру компоновки данных или программно заполнить макет, а затем сохранить результат во временный файл.
Рассмотрим подробнее процесс работы с временными файлами. Чтобы не загрояжнять диск сервера, мы будем использовать функцию ПолучитьИмяВременногоФайла, которая создает уникальный путь в системной временной папке.
// Предположим, у нас уже есть сформированный ТабличныйДокумент
Процедура СохранитьОтчетВоВременныйФайл(ТабДок, ПутьКФайлу)
// Убедимся, что табличный документ не пустой
Если ТабДок.ВысотаТаблицы = 0 Тогда
ВызватьИсключение "Отчет пуст, отправка отменена.";
КонецЕсли;
// Сохраняем в формате PDF
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);
КонецПроцедуры
Посмотрим на объект ТипФайлаТабличногоДокумента. Платформа поддерживает множество форматов (XLSX, DOCX, HTML, MXL), но PDF является наиболее универсальным для рассылок, так как он гарантирует идентичное отображение документа на любых устройствах и защищает содержимое от случайного редактирования пользователем.
Теперь, когда у нас есть настроенный профиль и файл вложения, перейдем к созданию самого письма. Для этого используется объект ИнтернетПочтовоеСообщение. В нем мы укажем отправителя, получателей, тему и текст письма, а также прикрепим наш PDF-файл.
Проанализируем структуру кода для отправки:
Процедура ОтправитьОтчетНаПочту(АдресПолучателя, ПутьКВложению)
Почта = Новый ИнтернетПочта;
Профиль = ПолучитьПочтовыйПрофиль();
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.ИмяОтправителя = "Автоматическая рассылка 1С";
Письмо.Отправитель.Адрес = "robot@mail.ru";
// Добавляем получателя
Письмо.Получатели.Добавить(АдресПолучателя);
Письмо.Тема = "Ежедневный отчет от " + Формат(ТекущаяДата(), "ДЛФ=D");
// Текст сообщения
Текст = Письмо.Тексты.Добавить();
Текст.Текст = "Добрый день! Во вложении находится сформированный отчет.";
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
// Добавляем вложение
Письмо.Вложения.Добавить(ПутьКВложению, "DailyReport.pdf");
Попытка
Почта.Подключиться(Профиль);
Почта.Послать(Письмо);
Почта.Отключиться();
Сообщить("Письмо успешно отправлено на адрес: " + АдресПолучателя);
Исключение
// Важно закрыть соединение даже при ошибке
Почта.Отключиться();
ЗаписьЖурналаРегистрации("ОтправкаПочты", УровеньЖурналаРегистрации.Ошибка, , , ПодробноеОписаниеОшибки(ИнформацияОбОшибке()));
Сообщить("Ошибка при отправке почты: " + КраткоеОписаниеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
Разберем по шагам работу с методом Послать. Этот метод выполняет передачу данных на сервер. Если в процессе возникнет сетевой сбой или сервер отклонит логин/пароль, сработает блок Исключение. Мы настоятельно рекомендуем использовать ЗаписьЖурналаРегистрации, чтобы системный администратор мог отследить причины недоставки писем без вмешательства в код.
При реализации массовых рассылок или работы в фоновом режиме, стоит обратить внимание на следующие аспекты:
УдалитьФайлы(ПутьКФайлу). Это предотвратит переполнение дискового пространства на сервере 1С.ТабличныйДокумент перед записью.Выясним, как интегрировать это в существующую конфигурацию. Если вы работаете с типовым решением на базе БСП (Библиотека Стандартных Подсистем), задача упрощается. В БСП уже реализованы механизмы работы с почтой, и вам достаточно вызвать программный интерфейс модуля УправлениеЭлектроннойПочтой. Однако понимание низкоуровневой работы с объектом ИнтернетПочта необходимо каждому разработчику для решения нестандартных задач.
Таким образом, мы рассмотрели полный цикл программного взаимодействия с электронной почтой. Данный подход является надежным и масштабируемым, позволяя автоматизировать документооборот любой сложности в среде 1С:Предприятие.