Как в 1С настроить автоматическую отправку сообщений через регламентные задания?

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

Автоматизация рутинных операций — одна из ключевых задач любого разработчика 1С. Одной из самых частых задач является настройка автоматической рассылки уведомлений, отчетов или уведомлений об ошибках. Для реализации этого механизма в платформе 1С:Предприятие 8.3 используются регламентные задания. В этой статье мы подробно разберем, как пройти путь от создания объекта в метаданных до написания отказоустойчивого кода отправки почты.

Шаг 1. Анализируем архитектуру решения

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

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

  1. Флаг Сервер должен быть установлен.
  2. Флаг Внешнее соединение желательно установить для возможности вызова из других контекстов.
  3. Процедура должна быть экспортной (иметь ключевое слово Экспорт).

Шаг 2. Создание серверного общего модуля

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


Процедура ВыполнитьРассылкуУведомлений() Экспорт
    // Здесь будет логика отправки
    ОтправитьПисьмоАдминистратору("Тест", "Текст сообщения");
КонецПроцедуры

Шаг 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");
    
    // Установка текста
    ТекстПисьма = Сообщение.Тексты.Добавить(Текст);
    ТекстПисьма.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
    
    Попытка
        Почта.Подключиться(Профиль);
        Почта.Послать(Сообщение);
        Почта.Отключиться();
    Исключение
        ЗаписьЖурналаРегистрации("Ошибка рассылки", УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
    КонецПопытки;
КонецПроцедуры

Шаг 4. Настройка регламентного задания в конфигураторе

Теперь, когда программная часть готова, выясним, как связать её с расписанием. Перейдем в дерево метаданных, раздел Общие -> Регламентные задания.

  1. Создадим новое задание с именем РассылкаУведомлений.
  2. В поле Имя метода нажмем на кнопку выбора и найдем нашу процедуру РаботаСПочтойСервер.ВыполнитьРассылкуУведомлений.
  3. Установим флаг Использование.
  4. Настроим Расписание. Например, "каждый день; каждые 3600 секунд", чтобы проверка и отправка происходили раз в час.

Шаг 5. Отладка и мониторинг

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

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

Дополнительные рекомендации

Рассмотрим ситуацию, когда письмо не уходит из-за настроек безопасности почтовых сервисов. Современные провайдеры (Yandex, Mail.ru, Gmail) требуют использования паролей приложений. Обычный пароль от почтового ящика в коде 1С работать не будет. Вам необходимо зайти в настройки безопасности почты, создать пароль для внешнего приложения "1С" и подставить его в Профиль.ПарольSMTP.

Проанализируем также вопрос вложений. Если вам нужно отправить отчет, сначала сформируйте его во временный файл, а затем добавьте во вложения объекта ИнтернетПочтовоеСообщение:


// Пример добавления вложения
ПутьКФайлу = "C:\Reports\MonthlyReport.pdf";
Сообщение.Вложения.Добавить(ПутьКФайлу, "Отчет.pdf");

Таким образом, мы построили надежную систему уведомлений. Помните, что использование Попытка...Исключение при работе с внешними ресурсами (почта, API, файлы) является обязательным стандартом разработки, так как сервер почты может быть временно недоступен.

← На главную