В процессе автоматизации бизнес-процессов часто возникает задача автоматической рассылки документов (счетов, актов, заказов) клиентам. Помимо разовой отправки, может потребоваться рассылка отчетов и сохранение файлов на сервере по заданному расписанию. В этой статье мы проанализируем наиболее эффективные способы программной отправки сообщений, разберем работу с Библиотекой Стандартных Подсистем (БСП) и посмотрим на практические примеры кода, которые помогут вам внедрить этот функционал в любую современную конфигурацию.
Прежде всего, нам необходимо определиться, какой механизм будет использоваться. В современных решениях на платформе 1С:Предприятие 8.3 (таких как ERP, УТ 11, БП 3.0) основным инструментом является БСП. Разберем по шагам, почему использование встроенных функций БСП предпочтительнее прямой работы с объектом ИнтернетПочта:
Рассмотрим ситуацию, когда нам нужно отправить «Счет на оплату». Первым делом мы должны получить табличный документ и сохранить его во временный файл. Если вам требуется гибкость в создании макетов без программирования, обратите внимание на конструктор печатных форм для объектов базы 1С. Проанализируем пример кода, который выполняет эту задачу:
// Получаем табличный документ (например, из функции печати документа)
ТабДок = Документы.СчетНаОплатуПокупателю.ПечатьСчета(СсылкаНаДокумент);
// Формируем уникальное имя временного файла
ИмяФайла = ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
В данном примере мы используем метод Записать, указывая формат PDF. Для придания документу законченного вида часто требуется установка штампа или подписи в PDF средствами платформы, что позволяет избежать использования внешних компонент. Важно помнить, что если на сервере 1С не установлены шрифты, PDF может сформироваться некорректно. Всегда проверяйте наличие шрифтов в среде Linux, если сервер работает под этой ОС.
Теперь выясним причину, по которой многие разработчики выбирают функцию УправлениеЭлектроннойПочтой.ОтправитьЭлектронноеПисьмо. Этот метод позволяет передать структуру параметров, что делает код читаемым и легко масштабируемым. Разберем подробнее структуру этого процесса (для Бухгалтерии предприятия также может быть полезна настройка вариантов адресов для отправки копий исходящих писем):
ПараметрыПисьма = Новый Структура;
ПараметрыПисьма.Вставить("Кому", "client@example.com");
ПараметрыПисьма.Вставить("Тема", "Счет на оплату №" + СсылкаНаДокумент.Номер);
ПараметрыПисьма.Вставить("Тело", "Добрый день! Во вложении ваш счет.");
// Подготовка вложения
Вложения = Новый СписокЗначений;
Вложения.Добавить(Новый Структура("Хранилище, ИмяФайлаВоВложении",
Новый ДвоичныеДанные(ИмяФайла), "Счет_" + СсылкаНаДокумент.Номер + ".pdf"));
ПараметрыПисьма.Вставить("Вложения", Вложения);
Обратите внимание на объект ДвоичныеДанные. Мы преобразуем файл с диска в поток данных, чтобы система могла корректно обработать его при передаче на почтовый сервер.
Посмотрим на пример финального вызова процедуры отправки. Нам нужно получить ссылку на системную учетную запись. Обычно она настраивается в разделе Администрирование — Настройки почты. Если функционала встроенной почты недостаточно, можно интегрировать полноценный почтовый клиент для стандартных конфигураций (Бухгалтерия, УНФ, ЗУП).
УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты;
Попытка
УправлениеЭлектроннойПочтой.ОтправитьЭлектронноеПисьмо(УчетнаяЗапись, ПараметрыПисьма);
Сообщить("Письмо успешно отправлено!");
Исключение
ЗаписьЖурналаРегистрации("ОтправкаПочты", УровеньЖурналаРегистрации.Ошибка, , ,
ОписаниеОшибки());
Сообщить("Не удалось отправить письмо. Проверьте журнал регистрации.");
КонецПопытки;
Если ваша конфигурация самописная или не использует БСП, проанализируем низкоуровневый способ. Для этого нам понадобятся объекты ИнтернетПочтовыйПрофиль и ИнтернетПочта.
Сначала настроим профиль подключения. Рассмотрим, какие параметры являются критически важными:
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.yandex.ru";
Профиль.ПортSMTP = 465;
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.Пользователь = "sender@yandex.ru";
Профиль.Пароль = "your_app_password";
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Отправитель.Адрес = "sender@yandex.ru";
Письмо.Тема = "Тестовое письмо";
Письмо.Получатели.Добавить("recipient@gmail.com");
// Добавление вложения
ТекстТемы = "Счет.pdf";
ДанныеВложения = Новый ДвоичныеДанные(ИмяФайла);
Письмо.Вложения.Добавить(ДанныеВложения, ТекстТемы);
Почта = Новый ИнтернетПочта;
Почта.Подключиться(Профиль);
Почта.Послать(Письмо);
Почта.Отключиться();
Рассмотрим по шагам типичные проблемы, с которыми сталкиваются программисты при внедрении данного кода:
telnet до сервера почты.ДвоичныеДанные.Подведем итог: Для стабильной работы в типовых конфигурациях 1С всегда используйте методы БСП. Это гарантирует, что при обновлении платформы или конфигурации ваш механизм рассылки продолжит работать корректно. Мы проанализировали два подхода, и выбор остается за вами в зависимости от архитектуры вашей информационной базы.