Как программно сформировать и отправить отчет по e-mail в 1С 8.3?

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

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

Разберем общую схему решения задачи

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

  1. Формирование табличного документа: программное выполнение отчета на базе схемы компоновки данных или макета.
  2. Конвертация в формат PDF: сохранение полученного результата во временный файл для вложения.
  3. Настройка почтового профиля: подготовка параметров ИнтернетПочтовыйПрофиль для подключения к серверу (SMTP).
  4. Отправка сообщения: формирование объекта ИнтернетПочтовоеСообщение и выполнение метода Отправить.

Шаг 1: Программное формирование отчета (СКД)

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

Посмотрим на пример кода, который выполняет программную компоновку:


// Получаем схему из макета отчета
СхемаКомпоновкиДанных = Отчеты.Продажи.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

// Устанавливаем настройки (можно взять настройки по умолчанию)
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

// Передаем параметры, если они необходимы
ПараметрПериод = Настройки.ПараметрыДанных.Элементы.Найти("Период");
ПараметрПериод.Значение = Новый СтандартныйПериод(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата()));
ПараметрПериод.Использование = Истина;

// Инициализируем компоновщик макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);

// Выполняем компоновку данных
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(ИсточникДоступныхНастроекКомпоновкиДанных, МакетКомпоновки);

// Выводим результат в табличный документ
ТабДок = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

Шаг 2: Сохранение результата во временный файл

После того как ТабличныйДокумент сформирован, нам необходимо подготовить его для отправки. Наиболее универсальным форматом для бизнес-отчетов является PDF. Проанализируем, как правильно сохранить файл, чтобы он автоматически удалился после отправки, не засоряя дисковое пространство сервера.

Используем метод ПолучитьИмяВременногоФайла, который гарантирует уникальность имени:


ИмяФайла = ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);

Важный момент: если вы планируете отправлять отчет в формате Excel, достаточно изменить тип на ТипФайлаТабличногоДокумента.XLSX.

Шаг 3: Настройка подключения к почтовому серверу

Для взаимодействия с внешними почтовыми сервисами (такими как Mail.ru, Gmail или корпоративный Exchange) в 1С используется объект ИнтернетПочтовыйПрофиль. Разберем по шагам, какие параметры критически важны для успешной авторизации.

Рассмотрим пример настройки профиля для сервера с использованием защищенного соединения (SSL/TLS):


Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.ПортSMTP = 465;
Профиль.ПользовательSMTP = "robot@mail.ru";
Профиль.ПарольSMTP = "vash_parol_prilozheniya"; // Используйте пароль приложения, а не основной пароль
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоЛокальныйПросмотрСертификатов = Ложь;

Обратите внимание на свойство ИспользоватьSSLSMTP. Для большинства современных сервисов это обязательное требование. Также помните, что многие публичные сервисы требуют создания специального "пароля для внешних приложений" в настройках безопасности почтового ящика.

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

Теперь соберем все компоненты воедино. Создадим объект ИнтернетПочтовоеСообщение, прикрепим к нему наш файл и выполним отправку через объект ИнтернетПочта.

Проанализируем итоговую процедуру отправки:


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

// Заполняем основные поля
Сообщение.Отправитель.Адрес = "robot@mail.ru";
Сообщение.Отправитель.ОтображаемоеИмя = "Робот 1С:Автоматизация";
Сообщение.Тема = "Ежедневный отчет по продажам от " + Формат(ТекущаяДата(), "ДЛФ=D");

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

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

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

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

// Очищаем временный файл
УдалитьФайлы(ИмяФайла);

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

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

Выясним причину возможных задержек: при отправке больших файлов (более 10 Мб) время выполнения метода Отправить() может увеличиться. В таких случаях рекомендуется выносить процесс отправки в отдельное фоновое задание, чтобы не блокировать работу основного сеанса или регламентного процесса.

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

← На главную