Почему SMS в 1С:УНФ остаются в статусе «Запланировано» и не отправляются автоматически?

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

В процессе работы с конфигурацией 1С:Управление нашей фирмой (УНФ) версии 1.6.11 на платформе 8.3.16 пользователи часто сталкиваются с ситуацией, когда автоматические уведомления через рабочие процессы не уходят клиентам. Проблема проявляется следующим образом: система исправно создает документ Событие, заполняет шаблон и все необходимые поля, но устанавливает статус «Запланировано». При этом ручная отправка из того же документа проходит успешно. Разберем по шагам, почему это происходит и как настроить систему для корректной работы.

Анализируем механизмы работы очереди сообщений

Для начала проанализируем разницу между отправкой электронных писем и SMS. В системе 1С механизмы почты и SMS-рассылок часто разделены программно. Если для электронной почты может быть установлен флаг «Отправлять письма сразу», то SMS в УНФ практически всегда проходят через очередь. Рассмотрим подробнее, как это работает:

  1. Рабочий процесс инициирует создание документа Событие с типом SMS.
  2. Документ записывается в базу данных со статусом «Запланировано».
  3. Специальное регламентное задание должно подхватить это событие и передать его на шлюз провайдера.

Если статус не меняется на «Завершено», значит, цепочка прерывается на последнем этапе. Выясним причину, проверив регламентные задания.

Проверяем наличие и активность регламентного задания

В старых релизах УНФ (включая 1.6.11) за отправку отвечает задание, которое может называться Отправка SMS или входить в состав общего задания Рассылка сообщений. Посмотрим на список регламентных заданий через раздел «Администрирование — Обслуживание — Регламентные операции». Если вы не находите там нужного задания, проанализируем следующие моменты:

Различие контекста выполнения: Сервер против Клиента

Рассмотрим ситуацию, когда «руками все отправляется», а автоматически — нет. Это классический индикатор проблемы контекста выполнения. Ручная отправка выполняется на стороне клиента (вашего ПК), а автоматическая — на стороне сервера 1С под учетной записью службы (например, USR1CV8).

Проанализируем возможные препятствия на стороне сервера:

  1. Настройки прокси-сервера: Если сервер 1С находится в закрытой сети и требует выхода в интернет через прокси, настройки в браузере пользователя ему не помогут. Необходимо прописать параметры прокси в файле inetcfg.xml на сервере или в константах базы данных.
  2. Брандмауэр и антивирус: Серверная ОС может блокировать исходящие HTTP-запросы к API SMS-провайдеров (порты 80 и 443).
  3. Права доступа: Системный пользователь сервера должен иметь права на чтение справочников настроек SMS и создание записей в журнале регистрации.

Программное решение: принудительный вызов отправки

Если регламентное задание работает, но «не видит» созданные рабочими процессами события, мы имеем дело с багом конкретного релиза. В версии 1.6.11 рабочие процессы могли создавать документ Событие, но не проставлять ему скрытый признак готовности к отправке. Разберем, как это исправить программно.

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


// В процедуре после записи события или в обработчике рабочего процесса
Если ЭтоНовый() И ТипСобытия = Перечисления.ТипыСобытий.SMS Тогда
    // Устанавливаем параметры и вызываем процедуру отправки из общего модуля
    ПараметрыОтправки = СообщенияSMS.ПодготовитьSMSКОтправке(Ссылка);
    Если ПараметрыОтправки.Подготовлено Тогда
        Результат = СообщенияSMS.ОтправитьSMS(ПараметрыОтправки);
        // Если отправка прошла успешно, обновляем статус документа
        Если Результат.Успешно Тогда
            ОбъектСобытие = Ссылка.ПолучитьОбъект();
            ОбъектСобытие.Состояние = Перечисления.СостоянияСобытий.Завершено;
            ОбъектСобытие.ДатаИсполнения = ТекущаяДата();
            ОбъектСобытие.Записать();
        КонецЕсли;
    КонецЕсли;
КонецЕсли;

Использование этого метода позволяет обойти очередь ожидания и заставить систему отправить сообщение немедленно, аналогично тому, как это происходит с электронными письмами. Мы рекомендуем использовать общий модуль СообщенияSMS, так как в нем уже реализованы все необходимые проверки авторизации на шлюзе.

Особенности релиза 1.6.11 и «пустой» контекст

Выясним еще одну причину: в старых релизах при создании события через фоновое задание (которым является рабочий процесс) мог не заполняться реквизит Учетная запись или Настройка SMS. Если в системе настроено несколько провайдеров, фоновое задание «не знает», через какой именно канал отправить сообщение, и оставляет его в очереди.

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

Итоги и рекомендации

Подводя итог, если вы столкнулись со статусом «Запланировано», выполните следующие действия:

  1. Проверьте работу регламентного задания через Консоль заданий.
  2. Убедитесь, что сервер 1С имеет доступ к API провайдера (прокси, порты).
  3. Если обновление конфигурации до актуальной версии невозможно, внедрите программный вызов метода ОтправитьSMS непосредственно в момент создания документа рабочим процессом.

Такой комплексный подход позволит автоматизировать коммуникации с клиентами и избежать «зависания» важных уведомлений в системе.

← На главную