Перейти к содержимому

Задача в бизнес-процессе - назначение, сроки, ответ участника

Ставим задачу участнику процесса, выбираем ответственного по данным документа и разбираемся, почему процесс останавливается.

Решение

Смотрим запущенные процессы и их текущее состояние:

use Bitrix\Main\Loader;
Loader::includeModule('bizproc');
$res = CBPWorkflowInstance::GetList([], ['MODULE_ID' => 'lists'], false, false,
['ID', 'MODIFIED', 'OWNED_UNTIL', 'WORKFLOW_TEMPLATE_ID']);
while ($row = $res->Fetch()) {
printf("%-36s изменён=%s\n", $row['ID'], $row['MODIFIED']);
}

Каждый запущенный процесс - отдельный экземпляр со своим состоянием. Давняя дата изменения означает, что процесс чего-то ждёт: почти всегда - ответа на задачу.

Смотрим задачи процесса и их адресатов:

$res = CBPTaskService::GetList([], ['WORKFLOW_ID' => $workflowId], false, false,
['ID', 'NAME', 'STATUS', 'USER_ID', 'MODIFIED']);
while ($task = $res->Fetch()) {
printf("%-6s %-30s пользователь=%s\n",
$task['ID'], mb_substr($task['NAME'], 0, 30), $task['USER_ID']);
}

Задача всегда назначена конкретным людям. Задача, назначенная удалённому или отключённому сотруднику, никогда не будет выполнена, и процесс так и останется в этой точке.

Назначаем ответственного по полю документа:

// в дизайнере: получатель = поле документа, а не выбранный вручную сотрудник
// значение поля типа «привязка к пользователю» приходит как user_12
$responsible = $document['PROPERTY_RESPONSIBLE'] ?? null;
// пустое поле означает задачу без адресата: процесс встанет молча

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

Задаём срок и поведение по его истечении:

// в параметрах действия утверждения задаются срок и действие при просрочке
// без срока процесс ждёт ответа неограниченно долго
$timeout = 3 * 24 * 3600; // трое суток на ответ

Срок с автоматическим продолжением по истечении спасает процесс от бесконечного ожидания. Без него одна незакрытая задача останавливает всю цепочку согласования навсегда.

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

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

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

Типичные проблемы

Процесс остановился и ничего не делает.

Он ждёт ответа на задачу. Смотрят, кому она назначена и существует ли этот сотрудник.

Задача назначена, но исполнителя нет в системе.

Ответственный взят из поля документа, а оно пустое или указывает на удалённую запись. Процесс остаётся в этой точке навсегда.

Согласование тянется неделями.

У задачи не задан срок. Без него действие ждёт ответа неограниченно долго.

Участник видит задачу, но не может открыть документ.

У него нет прав на список или элемент. Права проверяются при открытии, а не при назначении задачи.

Процесс не запускается вовсе.

Не выполняется условие автоматического запуска либо шаблон привязан к другому типу документа.

Частые вопросы

Можно ли назначить задачу группе?

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

Как узнать, на каком шаге стоит процесс?

По журналу процесса в карточке документа: там видно последнее выполненное действие. Список задач показывает то же самое со стороны исполнителя.

Что делать с зависшими процессами?

Завершить их принудительно и запустить заново после правки шаблона. Незавершённые экземпляры продолжают жить и после исправления шаблона.

Переназначается ли задача при увольнении?

Нет, она остаётся у прежнего исполнителя. Поэтому ответственных берут из поля документа или из группы, а не указывают поимённо.

Смежное

Первоисточник