Как программно сформировать и отправить печатную форму в формате PDF по почте из 1С 8.3

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

В процессе автоматизации бизнес-процессов часто возникает необходимость автоматизировать рутинные операции, такие как отправка счетов, актов или заказов клиентам напрямую из системы 1С. В данной статье мы подробно проанализируем процесс программного формирования печатной формы, её конвертации в универсальный формат PDF и последующей отправки через электронную почту. Мы разберем каждый этап: от подготовки табличного документа до работы с почтовым протоколом SMTP.

Этап 1: Формирование табличного документа

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

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


Функция СформироватьПечатнуюФормуСчета(СсылкаНаДокумент)
    Менеджер = Документы.СчетНаОплатуПокупателю;
    ТабДок = Менеджер.Печать(СсылкаНаДокумент);
    Возврат ТабДок;
КонецФункции

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

Этап 2: Сохранение печатной формы в формате PDF

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

Разберем по шагам, как выполнить сохранение во временное хранилище. Для этого мы воспользуемся методом Записать() объекта ТабличныйДокумент. Обратите внимание на использование функции ПолучитьИмяВременногоФайла(), которая позволяет избежать конфликтов имен при одновременной работе нескольких пользователей.


// Определяем путь ко второму временному файлу
ИмяФайла = ПолучитьИмяВременногоФайла("pdf");

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

В данном примере параметр ТипФайлаТабличногоДокумента.PDF указывает системе на необходимость конвертации. Выясним причину, почему стоит использовать именно этот метод: он встроен в платформу начиная с версии 8.2.13 и не требует установки сторонних PDF-принтеров на сервере, что значительно упрощает администрирование системы.

Этап 3: Настройка почтового профиля

Для отправки письма нам понадобится настроенный объект ИнтернетПочтовыйПрофиль. В нем хранятся параметры подключения к вашему почтовому серверу (SMTP). Рассмотрим, какие свойства являются критически важными для успешного соединения.

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


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

Важный момент: если вы используете публичные сервисы (Gmail, Mail.ru, Яндекс), убедитесь, что в настройках почтового ящика разрешен доступ для сторонних приложений и создан специальный "пароль приложения", так как обычный пароль от аккаунта может не подойти из-за требований безопасности.

Этап 4: Создание и отправка почтового сообщения

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

Рассмотрим совместную работу этих объектов в коде:


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

// Заполняем основные поля письма
Сообщение.Отправитель.Адрес = "your_email@mail.ru";
Сообщение.Отправитель.ОтображаемоеИмя = "Ваша Организация";
Сообщение.Тема = "Счет на оплату по заказу";
Сообщение.Тексты.Добавить("Добрый день! Во вложении ваш счет.", ТипТекстаПочтовогоСообщения.ПростойТекст);

// Добавляем получателя
Получатель = Сообщение.Получатели.Добавить();
Получатель.Адрес = "client@example.com";

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

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

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

Этап 5: Оптимизация и очистка ресурсов

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

Разберем, как правильно завершить процедуру:


// Удаляем временный файл после отправки
Попытка
    УдалитьФайлы(ИмяФайла);
Исключение
    // Файл может быть занят другим процессом, просто игнорируем или пишем в лог
КонецПопытки;

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

Резюме и практические советы

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

  1. Всегда выполняйте формирование и отправку на стороне сервера. Это обеспечит высокую производительность и отсутствие лишнего трафика между клиентом и сервером.
  2. Для конвертации используйте встроенные средства 1С (ТипФайлаТабличногоДокумента.PDF).
  3. Не храните пароли от почты прямо в коде. Используйте константы или защищенные хранилища настроек.
  4. Если планируется массовая рассылка (более 10-20 писем за раз), рассмотрите возможность выноса этого процесса в фоновое задание. Это позволит пользователю продолжать работу, не дожидаясь окончания отправки всех сообщений.
  5. Тщательно проверяйте корректность заполнения адреса отправителя. Многие SMTP-серверы блокируют письма, если адрес отправителя в объекте сообщения не совпадает с адресом учетной записи в профиле.

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

← На главную