Как программно отправить печатную форму документа по электронной почте в 1С 8.3

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

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

Постановка задачи и выбор инструментов

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

  1. Унификация: Программа сама подбирает настройки системной учетной записи.
  2. Безопасность: Все пароли и протоколы шифрования (SSL/TLS) уже настроены в интерфейсе программы пользователем или администратором.
  3. Удобство: БСП берет на себя формирование структуры письма и работу с вложениями.

Шаг 1: Подготовка печатной формы в формате PDF

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


// Получаем табличный документ (например, из функции печати документа)
ТабДок = Документы.СчетНаОплатуПокупателю.ПечатьСчета(СсылкаНаДокумент);

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

В данном примере мы используем метод Записать, указывая формат PDF. Для придания документу законченного вида часто требуется установка штампа или подписи в PDF средствами платформы, что позволяет избежать использования внешних компонент. Важно помнить, что если на сервере 1С не установлены шрифты, PDF может сформироваться некорректно. Всегда проверяйте наличие шрифтов в среде Linux, если сервер работает под этой ОС.

Шаг 2: Настройка параметров письма через БСП

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


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

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

ПараметрыПисьма.Вставить("Вложения", Вложения);

Обратите внимание на объект ДвоичныеДанные. Мы преобразуем файл с диска в поток данных, чтобы система могла корректно обработать его при передаче на почтовый сервер.

Шаг 3: Выбор учетной записи и отправка

Посмотрим на пример финального вызова процедуры отправки. Нам нужно получить ссылку на системную учетную запись. Обычно она настраивается в разделе Администрирование — Настройки почты. Если функционала встроенной почты недостаточно, можно интегрировать полноценный почтовый клиент для стандартных конфигураций (Бухгалтерия, УНФ, ЗУП).


УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты;

Попытка
    УправлениеЭлектроннойПочтой.ОтправитьЭлектронноеПисьмо(УчетнаяЗапись, ПараметрыПисьма);
    Сообщить("Письмо успешно отправлено!");
Исключение
    ЗаписьЖурналаРегистрации("ОтправкаПочты", УровеньЖурналаРегистрации.Ошибка, , , 
        ОписаниеОшибки());
    Сообщить("Не удалось отправить письмо. Проверьте журнал регистрации.");
КонецПопытки;

Метод 2: Работа через объект ИнтернетПочта (без БСП)

Если ваша конфигурация самописная или не использует БСП, проанализируем низкоуровневый способ. Для этого нам понадобятся объекты ИнтернетПочтовыйПрофиль и ИнтернетПочта.

Сначала настроим профиль подключения. Рассмотрим, какие параметры являются критически важными:

  1. АдресСервераSMTP: например, "smtp.mail.ru".
  2. ПортSMTP: обычно 465 для SSL или 587 для TLS.
  3. Пользователь: ваш логин (полный email).
  4. Пароль: пароль приложения (сейчас почтовые сервисы требуют именно его, а не основной пароль).

Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПортSMTP = 465;
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.Пользователь = "sender@yandex.ru";
Профиль.Пароль = "your_app_password";

Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Отправитель.Адрес = "sender@yandex.ru";
Письмо.Тема = "Тестовое письмо";
Письмо.Получатели.Добавить("recipient@gmail.com");

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

Почта = Новый ИнтернетПочта;
Почта.Подключиться(Профиль);
Почта.Послать(Письмо);
Почта.Отключиться();

Анализ возможных ошибок при реализации

Рассмотрим по шагам типичные проблемы, с которыми сталкиваются программисты при внедрении данного кода:

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

← На главную