Почему не запускается второй этап комплексного процесса в 1С:Документооборот после успешного согласования первого?

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

Рассмотрим распространенную проблему, с которой сталкиваются администраторы и разработчики при настройке совместной работы в программе 1С:Документооборот 2.1. Сценарий выглядит следующим образом: в системе настроен комплексный процесс со смешанным порядком выполнения. Первый этап — это согласование (без дополнительных условий), которое запускается сразу при старте процесса. Второй этап настроен так, что он должен стартовать только при условии «Если согласовано 1» (то есть после успешного завершения первого шага).

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

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

Анализ проблемы с помощью отладчика

Для начала проанализируем поведение системы изнутри. Если мы попытаемся пройти по шагам выполнение задач в конфигураторе, то обнаружим интересные особенности в логике работы бизнес-процессов.

Заглянем в общий модуль РаботаСКомплекснымиБизнесПроцессамиСервер, найдем процедуру ЗадачаКомплексногоПроцессаПриВыполнении(Источник, Отказ). Здесь разработчики могут столкнуться со следующим условием:


Если Источник.ТочкаМаршрута <> ТочкаМаршрутаВложенныйПроцесс Тогда
    Возврат;
КонецЕсли;

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

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |    ЗадачиДляВыполнения.Задача,
    |    ЗадачиДляВыполнения.Параметры,
    |    ЗадачаИсполнителя.Исполнитель,
    |    ЗадачаИсполнителя.Выполнена,
    |    ЗадачиДляВыполнения.КоличествоПопытокОбработки
    |ИЗ
    |    РегистрСведений.ЗадачиДляВыполнения КАК ЗадачиДляВыполнения
    |    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеБизнесПроцессов КАК ДанныеБизнесПроцессов
    |        ПО ЗадачаИсполнителя.БизнесПроцесс = ДанныеБизнесПроцессов.БизнесПроцесс
    |    ПО ЗадачиДляВыполнения.Задача = ЗадачаИсполнителя.Ссылка
    |ГДЕ
    |    ДанныеБизнесПроцессов.УзелОбмена = &ЭтотУзелОбмена
    |    И ЗадачиДляВыполнения.СостояниеВыполнения = ЗНАЧЕНИЕ(Перечисление.СостоянияЗадачДляВыполнения.ГотоваКВыполнению)
    |    И ЗадачиДляВыполнения.КоличествоПопытокОбработки <= 3
    |    И ДанныеБизнесПроцессов.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Активен)
    |    И ЗадачаИсполнителя.ПометкаУдаления = ЛОЖЬ
    |
    |УПОРЯДОЧИТЬ ПО
    |    ЗадачиДляВыполнения.МоментВремени";

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

Почему же новые записи не попадают в очередь на выполнение? Все дело в использовании фонового режима маршрутизации.

Как работает фоновая маршрутизация комплексных процессов

В крупных информационных системах с высокой нагрузкой мгновенный расчет всех переходов и условий в рамках транзакции пользователя привел бы к серьезным задержкам интерфейса («зависанию» программы при нажатии на кнопку «Согласовано») и взаимным блокировкам в СУБД. Для решения этой проблемы в 1С:Документооборот 2.1 по умолчанию включен асинхронный (фоновый) режим маршрутизации комплексных процессов.

Рассмотрим, как функционирует эта схема:

  1. Когда исполнитель выполняет последнюю задачу текущего этапа, система фиксирует факт выполнения, но не начинает мгновенно рассчитывать условия для следующего этапа.
  2. Вместо этого создается скрытая техническая задача, а информация о необходимости продвижения комплексного процесса записывается в специальный регистр сведений — ОчередьМаршрутизацииКомплексныхПроцессов.
  3. Для пользователя транзакция завершается быстро, и форма закрывается.
  4. Далее на сервере 1С по расписанию срабатывает регламентное задание «Фоновая маршрутизация комплексных процессов».
  5. Это задание считывает записи из очереди маршрутизации, анализирует условия переходов (проверяет результат согласования первого этапа) и при успешном исходе генерирует реальные задачи исполнителям второго этапа, помещая их в регистр ЗадачиДляВыполнения.

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

Решение проблемы «в один клик» для небольших баз

Если в вашей организации документооборот не слишком велик (одновременно работают до 50–100 пользователей), вам может быть гораздо проще и удобнее отказаться от асинхронной обработки и перевести маршрутизацию процессов в синхронный (мгновенный) режим.

Для этого выполним следующие действия:

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

Результат: Теперь расчет всех последующих шагов будет выполняться сразу же в транзакции пользователя при завершении предыдущих задач. Это полностью исключит задержки в продвижении документов по этапам и решит проблему «зависших» процессов.

Где искать ошибки, если фоновую маршрутизацию отключать нельзя?

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

1. Проверка блокировки регламентных заданий на уровне кластера

Это наиболее распространенная причина неполадок в тестовых базах. Когда администраторы восстанавливают копию рабочей базы на тестовом сервере для проведения проверок, они обычно включают флаг «Блокировка регламентных заданий» в консоли администрирования кластера 1С, чтобы тестовая база не отправляла реальные письма и не производила лишних обменов. Если блокировка включена, регламентные задания фоновой маршрутизации никогда не запустятся.

Для исправления ситуации проверьте свойства информационной базы в консоли кластера серверов 1С и убедитесь, что флаг блокировки регламентных заданий снят (или временно снимите его для тестирования процесса).

2. Анализ очереди маршрутизации

Перейдем через «Функции для технического специалиста» в регистр сведений ОчередьМаршрутизацииКомплексныхПроцессов. Посмотрим, присутствуют ли там записи по нашему процессу. Если записи есть, но они не обрабатываются, обратите внимание на колонку с описанием ошибки и количеством попыток. Если при обработке перехода возникла системная или программная ошибка (например, в коде условий маршрутизации или из-за конфликта прав доступа), запись будет помечена ошибочной и обработка приостановится. Устраните причину сбоя и очистите/перезапустите очередь.

3. Проверка статуса регламентных заданий

Убедимся, что в системе активно работают следующие регламентные задания:

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

Что изменилось в 1С:Документооборот 3.0?

Если вы планируете или уже осуществляете переход на новую редакцию 1С:Документооборот 3.0, полезно знать, что архитектура фоновой обработки претерпела значительные изменения. Разработчики отказались от использования разрозненных регистров для фоновой маршрутизации.

В версии 3.0 реализована Единая очередь заданий:

Таким образом, понимание принципов асинхронной работы процессов в 1С:Документооборот позволит вам быстро диагностировать и решать проблемы со стартом этапов как в текущей редакции 2.1, так и при переходе на редакцию 3.0.

← На главную