Автоматизация рутинных операций — одна из ключевых задач любого разработчика 1С. Одной из самых частых задач является настройка автоматической рассылки уведомлений, отчетов или уведомлений об ошибках. Для реализации этого механизма в платформе 1С:Предприятие 8.3 используются регламентные задания. В этой статье мы подробно разберем, как пройти путь от создания объекта в метаданных до написания отказоустойчивого кода отправки почты.
Прежде чем приступать к написанию кода, проанализируем, как работает механизм регламентных заданий. Регламентное задание — это объект метаданных, который определяет расписание и связь с процедурой, которую необходимо выполнить. Однако само задание не содержит программного кода. Весь исполняемый код должен быть вынесен в Общий модуль.
Важно помнить, что регламентные задания выполняются на стороне сервера. Это означает, что общий модуль, в котором будет располагаться наша процедура, должен обладать следующими свойствами:
Экспорт).Рассмотрим процесс создания модуля. Назовем его РаботаСПочтойСервер. Проанализируем настройки: в свойствах модуля убедимся, что галочка "Сервер" активна. Внутри модуля напишем каркас нашей процедуры:
Процедура ВыполнитьРассылкуУведомлений() Экспорт
// Здесь будет логика отправки
ОтправитьПисьмоАдминистратору("Тест", "Текст сообщения");
КонецПроцедуры
Разберем подробнее, как программно отправить электронное письмо, используя встроенные средства 1С. Для этого нам понадобятся объекты ИнтернетПочтовыйПрофиль и ИнтернетПочта. Посмотрим на пример функции, которая настраивает подключение:
Функция СформироватьПочтовыйПрофиль()
Профиль = Новый ИнтернетПочтовыйПрофиль;
// Укажите настройки вашего сервера
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.ПортSMTP = 465;
Профиль.ПользовательSMTP = "your_email@mail.ru";
Профиль.ПарольSMTP = "your_password";
// Настройка безопасного соединения
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоМетодAuthLogin = Истина;
Возврат Профиль;
КонецФункции
Теперь проанализируем процесс формирования самого письма. Нам нужно создать объект ИнтернетПочтовоеСообщение, заполнить отправителя, получателя и текст. После этого мы используем метод Подключиться и Послать.
Процедура ОтправитьПисьмоАдминистратору(Тема, Текст)
Почта = Новый ИнтернетПочта;
Профиль = СформироватьПочтовыйПрофиль();
Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Отправитель.Адрес = "your_email@mail.ru";
Сообщение.Тема = Тема;
// Добавление получателя
Получатель = Сообщение.Получатели.Добавить("admin@company.com");
// Установка текста
ТекстПисьма = Сообщение.Тексты.Добавить(Текст);
ТекстПисьма.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
Попытка
Почта.Подключиться(Профиль);
Почта.Послать(Сообщение);
Почта.Отключиться();
Исключение
ЗаписьЖурналаРегистрации("Ошибка рассылки", УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
Теперь, когда программная часть готова, выясним, как связать её с расписанием. Перейдем в дерево метаданных, раздел Общие -> Регламентные задания.
РассылкаУведомлений.РаботаСПочтойСервер.ВыполнитьРассылкуУведомлений.Выясним важный нюанс: регламентные задания в файловой базе и в клиент-серверном варианте работают по-разному. В клиент-серверном варианте за запуск отвечает менеджер кластера. В файловом варианте для работы заданий должен быть запущен отдельный сеанс 1С, который будет выступать в роли "планировщика" (хотя в современных версиях платформы 8.3 это происходит автоматически в выделенном фоновом процессе).
Для проверки работы мы рекомендуем использовать типовую обработку Консоль регламентных заданий (она входит в состав БСП или может быть скачана отдельно). С её помощью можно принудительно запустить задание и посмотреть, не возникло ли ошибок. Также всегда проверяйте ЖурналРегистрации, так как именно туда записываются системные ошибки, если фоновое задание "упало" до выполнения кода.
Рассмотрим ситуацию, когда письмо не уходит из-за настроек безопасности почтовых сервисов. Современные провайдеры (Yandex, Mail.ru, Gmail) требуют использования паролей приложений. Обычный пароль от почтового ящика в коде 1С работать не будет. Вам необходимо зайти в настройки безопасности почты, создать пароль для внешнего приложения "1С" и подставить его в Профиль.ПарольSMTP.
Проанализируем также вопрос вложений. Если вам нужно отправить отчет, сначала сформируйте его во временный файл, а затем добавьте во вложения объекта ИнтернетПочтовоеСообщение:
// Пример добавления вложения
ПутьКФайлу = "C:\Reports\MonthlyReport.pdf";
Сообщение.Вложения.Добавить(ПутьКФайлу, "Отчет.pdf");
Таким образом, мы построили надежную систему уведомлений. Помните, что использование Попытка...Исключение при работе с внешними ресурсами (почта, API, файлы) является обязательным стандартом разработки, так как сервер почты может быть временно недоступен.