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

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

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

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

Этап 1: Создание и настройка почтового профиля

Для того чтобы 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), программа может "зависнуть" на попытке соединения или выдать ошибку тайм-аута.

Этап 2: Программное формирование отчета и сохранение в PDF

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

Рассмотрим подробнее процесс работы с временными файлами. Чтобы не загрояжнять диск сервера, мы будем использовать функцию ПолучитьИмяВременногоФайла, которая создает уникальный путь в системной временной папке.


// Предположим, у нас уже есть сформированный ТабличныйДокумент
Процедура СохранитьОтчетВоВременныйФайл(ТабДок, ПутьКФайлу)
    // Убедимся, что табличный документ не пустой
    Если ТабДок.ВысотаТаблицы = 0 Тогда
        ВызватьИсключение "Отчет пуст, отправка отменена.";
    КонецЕсли;

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

Посмотрим на объект ТипФайлаТабличногоДокумента. Платформа поддерживает множество форматов (XLSX, DOCX, HTML, MXL), но PDF является наиболее универсальным для рассылок, так как он гарантирует идентичное отображение документа на любых устройствах и защищает содержимое от случайного редактирования пользователем.

Этап 3: Формирование сообщения и отправка через ИнтернетПочта

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

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


Процедура ОтправитьОтчетНаПочту(АдресПолучателя, ПутьКВложению)
    
    Почта = Новый ИнтернетПочта;
    Профиль = ПолучитьПочтовыйПрофиль();
    
    Письмо = Новый ИнтернетПочтовоеСообщение;
    Письмо.ИмяОтправителя = "Автоматическая рассылка 1С";
    Письмо.Отправитель.Адрес = "robot@mail.ru";
    
    // Добавляем получателя
    Письмо.Получатели.Добавить(АдресПолучателя);
    
    Письмо.Тема = "Ежедневный отчет от " + Формат(ТекущаяДата(), "ДЛФ=D");
    
    // Текст сообщения
    Текст = Письмо.Тексты.Добавить();
    Текст.Текст = "Добрый день! Во вложении находится сформированный отчет.";
    Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
    
    // Добавляем вложение
    Письмо.Вложения.Добавить(ПутьКВложению, "DailyReport.pdf");
    
    Попытка
        Почта.Подключиться(Профиль);
        Почта.Послать(Письмо);
        Почта.Отключиться();
        Сообщить("Письмо успешно отправлено на адрес: " + АдресПолучателя);
    Исключение
        // Важно закрыть соединение даже при ошибке
        Почта.Отключиться();
        ЗаписьЖурналаРегистрации("ОтправкаПочты", УровеньЖурналаРегистрации.Ошибка, , , ПодробноеОписаниеОшибки(ИнформацияОбОшибке()));
        Сообщить("Ошибка при отправке почты: " + КраткоеОписаниеОшибки(ИнформацияОбОшибке()));
    КонецПопытки;
    
КонецПроцедуры

Разберем по шагам работу с методом Послать. Этот метод выполняет передачу данных на сервер. Если в процессе возникнет сетевой сбой или сервер отклонит логин/пароль, сработает блок Исключение. Мы настоятельно рекомендуем использовать ЗаписьЖурналаРегистрации, чтобы системный администратор мог отследить причины недоставки писем без вмешательства в код.

Дополнительные рекомендации по оптимизации

При реализации массовых рассылок или работы в фоновом режиме, стоит обратить внимание на следующие аспекты:

  1. Очистка временных файлов: После успешной (или неуспешной) отправки обязательно удаляйте файл с диска, используя команду УдалитьФайлы(ПутьКФайлу). Это предотвратит переполнение дискового пространства на сервере 1С.
  2. Фоновое выполнение: Отправка почты — операция длительная (зависит от скорости интернета и размера вложения). Лучше всего выносить этот процесс в фоновое задание, чтобы пользователь не ждал окончания отправки, удерживая форму открытой.
  3. Безопасность: Не храните пароли от почты прямо в коде. Используйте для этого защищенные константы, параметры сеанса или справочники с ограниченным доступом. В идеале — используйте системную учетную запись, настроенную в типовых конфигурациях (БСП).
  4. Размер вложений: PDF-файлы могут быть объемными, если в отчете много картинок или сложных диаграмм. Используйте методы сжатия или оптимизируйте ТабличныйДокумент перед записью.

Выясним, как интегрировать это в существующую конфигурацию. Если вы работаете с типовым решением на базе БСП (Библиотека Стандартных Подсистем), задача упрощается. В БСП уже реализованы механизмы работы с почтой, и вам достаточно вызвать программный интерфейс модуля УправлениеЭлектроннойПочтой. Однако понимание низкоуровневой работы с объектом ИнтернетПочта необходимо каждому разработчику для решения нестандартных задач.

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

← На главную