Почему не отправляются СМС через регламентное задание в 1С:Управление торговлей 11?

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

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

1. Проанализируем контекст исполнения кода

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

Разберем основные требования к коду для регламентного задания:

  1. Тип использования: Для внешней обработки, подключаемой в справочник «Дополнительные отчеты и обработки», должен быть выбран тип ВызовСерверногоМетода.
  2. Отсутствие интерактивности: На сервере недоступны любые команды, требующие взаимодействия с пользователем: Предупреждение(), Вопрос(), ОткрытьФорму(). Если в коде отправки СМС затесалось хотя бы одно Сообщить() (без проверки на серверный контекст), выполнение задания может прерваться.
  3. Доступ к метаданным: Убедитесь, что все процедуры и функции, отвечающие за формирование текста СМС и обращение к API провайдера, находятся в модуле объекта обработки или в серверных общих модулях.

2. Выясним причину отсутствия доступа в интернет

Часто проблема кроется не в коде 1С, а в системных настройках. Рассмотрим ситуацию: ваш компьютер имеет прямой выход в интернет, а сервер 1С находится в закрытом контуре или работает через прокси-сервер.

Проанализируем следующие моменты:

  1. Права учетной записи сервера: Регламентные задания выполняются под системной учетной записью (например, USR1CV8). У этой записи может не быть прав на использование сетевых ресурсов или выход за пределы локальной сети.
  2. Настройки прокси: Если в вашей организации используется прокси-сервер, настройки, заданные в вашем браузере, не подтянутся автоматически на сервер. Необходимо либо прописать настройки прокси в файле inetcfg.xml на сервере 1С, либо явно инициализировать объект ИнтернетПрокси в коде.

Пример инициализации прокси в коде:


Прокси = Новый ИнтернетПрокси;
Прокси.Установить("http", "192.168.1.1", 8080, "Логин", "Пароль");
HTTPСоединение = Новый HTTPСоединение("api.sms-pro.ru",,,, Прокси);

3. Организуем правильную обработку ошибок

Одной из самых больших ошибок разработчиков является использование пустых блоков Попытка...Исключение. В регламентном задании вы не увидите сообщение об ошибке на экране. Если код «споткнулся», задание просто завершится с неочевидным статусом.

Посмотрим, как правильно собирать информацию об ошибках. Вместо пустого исключения обязательно используем ЗаписьЖурналаРегистрации(). Это позволит нам зайти в журнал регистрации и увидеть реальную причину сбоя.

Рассмотрим пример правильной обработки:


Процедура ОтправитьСМСНаСервере()
    Попытка
        // Ваш код отправки СМС
        // ...
    Исключение
        ТекстОшибки = ИнформацияОбОшибке().Описание;
        ЗаписьЖурналаРегистрации("ОтправкаСМС", 
            УровеньЖурналаРегистрации.Ошибка, 
            , 
            , 
            "Произошла ошибка при отправке: " + ТекстОшибки);
    КонецПопытки;
КонецПроцедуры

Используя метод ОписаниеОшибки() или ИнформацияОбОшибке(), мы получим детальный стек вызовов, который укажет, на какой именно строке кода или методе HTTP-соединения произошел отказ.

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

Выяснить причину сбоя «вслепую» сложно. Разберем шаги для эффективной отладки:

  1. Консоль заданий: Используйте стандартную обработку «Консоль регламентных заданий». В ней можно увидеть время последнего запуска, количество попыток и состояние (Завершено, Ошибка).
  2. Отладка фоновых заданий: В конфигураторе включите возможность отладки фоновых заданий (меню Отладка -> Настройка отладки -> Флажок "Фоновые задания"). После этого установите точку останова в модуле вашей обработки. При запуске регламентного задания конфигуратор «поймает» серверный сеанс, и вы сможете пройтись по коду пошагово.
  3. Параметры сеанса: Помните, что в регламентном задании многие параметры сеанса (например, ТекущийПользователь) могут быть не заполнены. Если ваша логика опирается на настройки конкретного пользователя, перепишите ее так, чтобы данные брались из констант или справочников.

5. Архитектурный подход к отправке сообщений

В современных конфигурациях, таких как УТ 11, построенных на базе БСП (Библиотеки стандартных подсистем), рекомендуется использовать штатные механизмы.

Рассмотрим более надежную схему:

Резюме: Если регламентное задание не отправляет СМС, первым делом проверьте доступ сервера к внешним URL, оберните код в ЗаписьЖурналаРегистрации и убедитесь, что в коде нет обращений к клиентскому контексту. Использование Попытка...Исключение с записью подробностей в журнал — это не просто хороший тон, а единственный способ выживания кода в серверной среде.

← На главную