При работе с конфигурацией 1С:Документооборот (1С:ДО) начинающие разработчики и администраторы часто сталкиваются с ситуацией: бизнес-процесс (например, «Исполнение» или «Согласование») создан и запущен, однако в списке задач исполнителей пусто, а консоль запросов показывает нулевой результат в таблице Задача.ЗадачаИсполнителя. При этом в самой карточке процесса может висеть статус: «Процесс находится в очереди для запуска». Разберем детально механизмы работы бизнес-процессов в этой системе и выясним, почему задачи не создаются мгновенно.
В отличие от более простых конфигураций, в 1С:Документооборот реализована модель отложенного старта. Это сделано для того, чтобы тяжелые операции по расчету прав доступа и формированию цепочек задач не блокировали работу пользователя (интерфейс). Рассмотрим, как это работает изнутри:
БизнесПроцесс.Исполнение) и записывает его в базу.Задача.ЗадачаИсполнителя, данных действительно не будет.Проанализируем причину, по которой процесс может «зависнуть» в очереди на несколько дней. Основным механизмом, который обрабатывает очередь и превращает бизнес-процесс в реальные задачи для сотрудников, является регламентное задание Старт процессов. Если регламентные и фоновые задания в базе остановлены (например, при копировании базы на тестовый сервер или из-за настроек консоли кластера), автоматического формирования задач не произойдет. Для отслеживания подобных ситуаций пригодится отчет для контроля зависших процессов.
Для решения проблемы выполним следующие шаги:
Старт процессов.Как только задание отработает, оно прочитает записи из очереди, инициализирует бизнес-процесс и создаст соответствующие записи в таблицах задач. Только после этого консоль запросов покажет данные в Задача.ЗадачаИсполнителя.
Иногда возникает ситуация: задачи физически созданы в базе (запрос их видит), но пользователь под своими правами их не находит. Выясним причину этого поведения. В 1С:ДО используется уникальная система дескрипторов доступа. В отличие от типовых конфигураций (ERP, ЗУП), где RLS работает по простым измерениям (Организация, Склад), в Документообороте права рассчитываются динамически для каждого объекта.
За расчет прав отвечает фоновое задание Обновление прав доступа. Пока оно не рассчитает, кто является автором, исполнителем или участником рабочей группы, задача может оставаться невидимой. Это важный нюанс: задачи в 1С:ДО неразрывно связаны с правами доступа, которые обновляются асинхронно. Для исправления проблем с правами доступа пригодится обработка для восстановления прав доступа.
Рассмотрим техническую сторону вопроса, упомянутую опытными разработчиками. В 1С:Документооборот цепочка событий при записи задачи крайне специфична. Посмотрим на логику выполнения задачи:
При нажатии кнопки «Выполнено» в одной транзакции происходит:
Согласован.Важный совет: Если вы планируете писать собственные обработчики (подписки на события) для задач, делайте их максимально «легкими». Ошибка в коде подписки или блокировка таблицы в этот момент приведет к откату всей транзакции, и задача останется невыполненной, а процесс — «зависшим».
Сравним идеологию работы с задачами в разных системах. В типовых решениях (УТ, ERP) задачи часто носят вспомогательный характер. В 1С:Документооборот это центральный объект управления. Основные отличия:
Справочник.Пользователи, а Справочник.РолиИсполнителей. При этом в метаданных поле Исполнитель будет пустым, а поиск задачи должен идти по связке роли и объектов адресации (например, «Бухгалтер» по «Организации А»).Если вам необходимо программно инициировать старт процесса, минуя очередь (например, в целях отладки), можно воспользоваться методами объектов бизнес-процессов. Однако в типовом функционале рекомендуется использовать штатный механизм старта. Разберем пример логики, которая происходит «под капотом» при обработке очереди:
// Пример упрощенной логики старта бизнес-процесса
БизнесПроцессОбъект = Справочники.ВнутренниеДокументы.СоздатьПроцесс(ВыбранныйДокумент);
БизнесПроцессОбъект.Дата = ТекущаяДата();
БизнесПроцессОбъект.Записать();
// Вместо немедленного старта, ДО помещает его в очередь
// Для немедленного старта (не рекомендуется для массовых операций):
БизнесПроцессОбъект.Стартовать();
Подведем итог: если вы не видите задач в 1С:Документооборот, в первую очередь проверьте Регламентные задания. Без работающих заданий Старт процессов и Обновление прав доступа система фактически «замирает», оставляя созданные процессы в состоянии бесконечного ожидания в очереди.