В работе с конфигурацией 1С:Управление нашей фирмой (УНФ) автоматизация коммуникаций с клиентами через СМС является одной из ключевых функций. Часто пользователи сталкиваются с ситуацией, когда настроенные правила рабочих процессов внезапно перестают работать: статусы заказов меняются (например, на «Готово» или «Оплачен»), но сообщения клиентам не уходят. При этом ручная отправка СМС из документа «Событие» продолжает функционировать исправно.
В рамках данной статьи мы подробно разберем внутренние механизмы работы этой функции, выясним, почему «ломается» автоматика, и научимся восстанавливать работоспособность системы рассылок.
Для начала проанализируем, как технически реализована отправка СМС при смене статуса. В отличие от ручного создания события, механизм «Рабочих процессов» работает через очередь заданий. Это означает, что при изменении статуса заказа программа не отправляет СМС мгновенно. Происходит следующая последовательность действий:
ЗаказПокупателя.Обработка правил рабочих процессов.Если автоматика «вдруг» перестала работать, проблема, как правило, кроется на этапах 4 или 5.
Прежде чем переходить к радикальным мерам, проверим стандартные инструменты диагностики. Нам необходимо убедиться, что регламентные задания в принципе выполняются. Перейдем в раздел Администрирование — Обслуживание — Журнал регистрации.
Проанализируем записи за период, когда отправка прекратилась. Нас интересуют события с метаданными РегламентноеЗадание.ОбработкаПравилРабочихПроцессов. Если в журнале отсутствуют записи об успешном завершении этого задания, значит, фоновый процесс либо завис, либо был удален из списка расписаний.
Одной из наиболее частых проблем в версиях УНФ 1.6.14 и смежных является самопроизвольное «исчезновение» или блокировка задания. Проверим список активных заданий:
Обработка правил рабочих процессов.Рассмотрим ситуацию, когда кнопка выполнения задания неактивна, а само правило в интерфейсе рабочих процессов выглядит пустым. Это часто свидетельствует о сбое внутренних идентификаторов (GUID). В таком случае система «теряет» связь между настройкой в интерфейсе и программным кодом, который должен ее обрабатывать.
Если задание отсутствует в списке или не запускается, попробуем выполнить его принудительное пересоздание. Рассмотрим, как это сделать программно или с помощью консоли заданий.
Если у вас есть права администратора и доступ к консоли заданий (внешняя обработка), проверим наличие записи там. Если записи нет, ее необходимо добавить вручную, указав следующие параметры:
РабочиеПроцессы.ОбработатьОчередьСобытий (или аналогичный метод в зависимости от точного релиза).Также проверим настройку в самой конфигурации. Иногда помогает простое «передергивание» функциональной опции. Перейдем в CRM — Еще больше возможностей, найдем флаг «Использовать рабочие процессы», выключим его, сохраним настройки, а затем включим снова. Это инициирует процедуру обновления предопределенных данных.
Если ваша база работает в файловом режиме (без сервера 1С:Предприятие), важно помнить о ключевой особенности: регламентные задания не выполняются сами по себе, если в базе никого нет. Рассмотрим условия их работы:
Если вы недавно переносили базу на другой компьютер или восстанавливали ее из бэкапа, 1С могла заблокировать выполнение всех фоновых задач. При запуске такой базы система спрашивает: «Информационная база перемещена или это копия?». Если был выбран ответ «Это копия», выполнение заданий блокируется автоматически.
Чтобы снять блокировку, выполним следующие шаги:
Если регламентное задание работает, но СМС всё равно не уходят, проанализируем содержимое внутренних регистров. Через меню «Все функции» (или «Функции для технического специалиста») найдем регистр сведений, связанный с очередью рабочих процессов (название может варьироваться, например, ОчередьЗаданийРабочихПроцессов).
Посмотрим на статус записей в этом регистре. Если там накопилось большое количество строк со статусом «Ошибка» или «Выполняется», это может блокировать всю остальную очередь. Разберем алгоритм очистки:
// Пример логики очистки зависших заданий через консоль кода
НаборЗаписей = РегистрыСведений.ОчередьЗаданийРабочихПроцессов.СоздатьНаборЗаписей();
// Установим фильтр по проблемным записям, если необходимо
// НаборЗаписей.Отбор.Состояние.Установить(Перечисления.СостоянияЗаданий.Ошибка);
НаборЗаписей.Записать(); // Очистка набора
После очистки «битых» записей новые события должны начать обрабатываться корректно.
Стоит отметить, что версия 1.6.14, упомянутая в обсуждении, имеет ряд известных недоработок в механизме подписок на события. Если проблема с «пропаданием» задания повторяется регулярно без видимых причин, настоятельно рекомендуем рассмотреть обновление конфигурации до актуальных версий (1.6.15 и выше). В последующих релизах архитектура рабочих процессов была переработана: повышена стабильность фоновых заданий и улучшена диагностика ошибок при отправке через сторонние СМС-шлюзы.