Как программно сформировать печатную форму в PDF и отправить её по e-mail?

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

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

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

Шаг 1: Получение и подготовка табличного документа

Прежде всего, нам необходимо получить объект типа ТабличныйДокумент. В типовых конфигурациях (таких как БП 3.0, УТ 11 или ERP) для этого обычно используются экспортные процедуры в менеджерах документов или специализированные функции печати. Проанализируем стандартный подход к формированию печатной формы.

Рассмотрим пример, где мы вызываем процедуру печати и получаем готовый макет, заполненный данными из информационной базы:


// Получаем менеджер объекта (например, документа СчетНаОплатуПокупателю)
Менеджер = Документы.СчетНаОплатуПокупателю;
// Вызываем метод печати, который возвращает ТабличныйДокумент
ТабДок = Менеджер.Печать(МассивОбъектов, ОбъектыПечати, "СчетНаОплату");

Важно убедиться, что ТабличныйДокумент сформирован корректно. Мы можем настроить параметры отображения, такие как масштаб или ориентация страницы, перед тем как переходить к сохранению. Для обеспечения качественного отображения в PDF рекомендуется установить свойство АвтоМасштаб в значение Истина.

Шаг 2: Конвертация табличного документа в PDF

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

Для генерации уникального пути к файлу воспользуемся функцией ПолучитьИмяВременногоФайла(). Выясним причину использования именно этой функции: она гарантирует отсутствие конфликтов имен при одновременной работе нескольких пользователей.


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

Обратите внимание, что метод Записать() выполняется на стороне сервера. Если вы работаете в клиент-серверном варианте, файл будет создан в файловой системе сервера приложений 1С.

Шаг 3: Настройка почтового профиля (SMTP)

Чтобы отправить письмо, необходимо сообщить системе параметры вашего почтового сервера. Для этого используется объект ИнтернетПочтовыйПрофиль. Нам потребуется указать адрес SMTP-сервера, порт, логин и пароль. В современных реалиях большинство почтовых сервисов (таких как Mail.ru, Yandex или Gmail) требуют обязательного использования защищенного соединения SSL или TLS.

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


Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.ПортSMTP = 465;
Профиль.ПользовательSMTP = "your_email@mail.ru";
Профиль.ПарольSMTP = "your_app_password"; // Используйте пароль приложения!
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоМетодAuthLogin = Истина;
Профиль.Таймаут = 60;

Важный момент: если вы используете публичные почтовые сервисы, обычный пароль от почты может не подойти. Потребуется создать специальный «Пароль для приложений» в личном кабинете почтового сервиса.

Шаг 4: Формирование сообщения и вложение файла

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

Разберем процесс добавления вложения по шагам:

  1. Создаем экземпляр сообщения.
  2. Добавляем адрес отправителя (должен совпадать с логином в профиле).
  3. Добавляем адрес получателя через коллекцию Получатели.
  4. Инициализируем объект Вложение, передавая в него путь к созданному PDF-файлу.

Письмо = Новый ИнтернетСообщение;
Письмо.Отправитель.Адрес = "your_email@mail.ru";
Письмо.Отправитель.ОтображаемоеИмя = "ООО 'Наша Компания'";
Письмо.Тема = "Счет на оплату по вашему заказу";

// Добавление получателя
НовыйПолучатель = Письмо.Получатели.Добавить("client@example.com");

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

// Прикрепление файла
ДанныеВложения = Новый ДвоичныеДанные(ПутьКФайлу);
Письмо.Вложения.Добавить(ДанныеВложения, "Счет_на_оплату.pdf");

Шаг 5: Отправка через объект ИнтернетПочта

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


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

Использование Библиотеки Стандартных Подсистем (БСП)

Если ваша конфигурация построена на базе БСП (что является стандартом для современных решений 1С), задачу можно значительно упростить. В БСП существует подсистема «Работа с почтовыми сообщениями», которая берет на себя все сложности с настройкой SSL, кодировками и временными файлами.

Рассмотрим, как это выглядит при использовании методов БСП:


// Подготовка параметров письма
ПараметрыПисьма = Новый Структура;
ПараметрыПисьма.Вставить("Кому", "client@example.com");
ПараметрыПисьма.Вставить("Тема", "Счет на оплату");
ПараметрыПисьма.Вставить("Тело", "Здравствуйте! Сформированный счет во вложении.");

// Подготовка вложения
Вложения = Новый Массив;
СтруктураВложения = Новый Структура;
СтруктураВложения.Вставить("Представление", "Счет.pdf");
СтруктураВложения.Вставить("Данные", Новый ДвоичныеДанные(ПутьКФайлу));
Вложения.Добавить(СтруктураВложения);
ПараметрыПисьма.Вставить("Вложения", Вложения);

// Отправка через стандартный механизм БСП
РаботаСПочтой.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма);

Преимущество данного метода заключается в том, что все настройки учетных записей почты хранятся в стандартном справочнике УчетныеЗаписиЭлектроннойПочты, и пользователю не нужно лезть в код для их изменения.

Завершение и очистка ресурсов

Не забывайте удалять временные файлы после отправки. Хотя операционная система со временем очищает папку временных файлов, хорошим тоном программирования является явное удаление файла после завершения работы с ним с помощью команды УдалитьФайлы(ПутьКФайлу).

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

← На главную