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

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

В процессе разработки на платформе 1С:Предприятие 8.3 часто возникает задача автоматизации рассылки отчетности. Рассмотрим ситуацию, когда нам необходимо сформировать отчет, построенный на базе системы компоновки данных (СКД), сохранить его во внешний файл (например, Excel) и отправить получателю без участия пользователя. Мы подробно разберем, как реализовать этот механизм программно, проанализируем необходимые объекты платформы и инструменты автоматизации, такие как СКДБилдер для упрощения программного создания СКД.

Шаг 1: Получение схемы и настроек компоновки данных

Для начала нам необходимо получить доступ к схеме компоновки данных (СхемаКомпоновкиДанных), которая обычно хранится в макете отчета. Разберем процесс инициализации основных объектов. Если вы разрабатываете сложные отчеты, где используются две разных схемы в одном отчете СКД, важно правильно указать имя макета. Проанализируем код получения настроек:


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

// Получаем настройки по умолчанию или из конкретного варианта
Настройки = СхемаКомпоновки.НастройкиПоУмолчанию;

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

Важно помнить, что НастройкиКомпоновкиДанных определяют, какие поля будут выбраны, какие фильтры применены и как данные будут сгруппированы. Для интерактивной настройки параметров на стороне клиента может быть полезна Пользовательская СКД, которая расширяет стандартные возможности компоновщика.

Шаг 2: Компоновка макета и инициализация процессоров

Теперь рассмотрим процесс преобразования схемы и настроек в готовый макет, который платформа сможет наполнить данными. Для этого используется КомпоновщикМакетаКомпоновкиДанных. Выясним причину, почему этот этап обязателен: макет компоновки — это промежуточное звено, которое учитывает особенности конкретного типа вывода (например, для табличного документа или для коллекции значений).


// Инициализируем компоновщик макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

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


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

Шаг 3: Вывод результата в Табличный документ

Проанализируем ситуацию, когда результатом должен стать визуальный отчет. Мы будем использовать ТабличныйДокумент в качестве "контейнера". Чтобы передать данные из процессора компоновки в таблицу, нам понадобится ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент.


// Создаем результирующий табличный документ
ТабДок = Новый ТабличныйДокумент;

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

// Выводим результат
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

На этом этапе ТабличныйДокумент уже содержит сформированный отчет со всеми итогами и группировками. Мы можем дополнительно настроить его параметры, например, АвтоМасштаб или ОриентацияСтраницы, перед сохранением.

Шаг 4: Сохранение отчета во внешний файл

Чтобы отправить отчет по почте, его необходимо физически сохранить на диске сервера. Рассмотрим сохранение табличных документов в различных форматах, таких как Excel (XLSX) и PDF. Обратите внимание на использование метода Записать() объекта ТабличныйДокумент.


// Определим путь к временному файлу
ПутьКФайлу = КаталогВременныхФайлов() + "Отчет_" + Формат(ТекущаяДата(), "ДФ=yyyyMMddHHmmss") + ".xlsx";

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

Важный момент: если вы работаете в клиент-серверном варианте, помните, что КаталогВременныхФайлов() на сервере — это папка службы 1С. Убедитесь, что у пользователя, под которым запущен сервер 1С, есть права на запись в эту директорию.

Шаг 5: Настройка почтового профиля и отправка сообщения

Разберем финальный этап — программную отправку файла. Для этого в 1С используются объекты ИнтернетПочтовыйПрофиль и ИнтернетПочта. Также можно использовать готовое расширение для отправки почтовых сообщений, которое упрощает интеграцию этого функционала в конфигурацию. Мы должны выполнить настройку почтовых протоколов SMTP и IMAP, создать сообщение и прикрепить наш файл.


// Настраиваем профиль подключения
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.ПортSMTP = 465;
Профиль.Пользователь = "login@mail.ru";
Профиль.Пароль = "your_password";
Профиль.ИспользоватьSSLSMTP = Истина;

// Создаем сообщение
Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Отправитель.Адрес = "login@mail.ru";
Сообщение.Получатели.Добавить("customer@gmail.com");
Сообщение.Тема = "Ежедневный отчет СКД";
Сообщение.Тексты.Добавить("Добрый день! Во вложении сформированный отчет.", ТипТекстаПочтовогоСообщения.ПростойТекст);

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

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

Для более продвинутой автоматизации, например, сохранения входящих отчетов или фильтрации, изучите пример работы с почтовыми вложениями в 1С.

Рекомендации по оптимизации

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

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

Мы рассмотрели полный цикл программной генерации отчета на базе СКД. Этот метод универсален и подходит для большинства современных конфигураций 1С, позволяя автоматизировать регулярную отчетность без привлечения дополнительных внешних утилит.

← На главную