Программное формирование задач на точках маршрута

Механизм бизнес-процессов автоматически формирует задачи по точкам маршрута в соответствии с настройками свойств адресации.
Однако в некоторых случаях встает необходимость программно переопределить стандартное создание задач. Для этого предназначены обработчики ПередСозданиемЗадач() и ПриСозданииЗадач().

Рассмотрим эту возможность на примере бизнес-процесса согласования (см. Демонстрационные конфигурации - Бизнес-процессы - Согласование).

Под согласованием понимается предварительная оценка проекта документа и/или получение согласия на его утверждение.

Бизнес-процесс согласования состоит из трех точек маршрута:

В бизнес-процессе участвует инициатор согласования и рецензенты.

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

После выполнения этой задачи бизнес-процесс завершается.

Так как исполнителей заранее определить нельзя, то в пояснении точек маршрута вписаны строки Инициатор и Рецензенты для того, чтобы сделать карту нагляднее. С этой же целью точке маршрута На согласование установлено свойство Групповая, хотя реально оно не используется механикой бизнес-процесса, т. к. все задачи формируются программно.

Исполнителем первой и последней точки является инициатор бизнес-процесса. Исполнители точки На согласование определяются списком рецензентов, который составляет инициатор.

Формирование задач на точках Определить список рецензентов и Обработать результаты происходит в обработчике ПередФормированиемЗадач() и отличается тем, что в первом случае свойство Сотрудник берется из параметра сеанса, а во втором - из свойства Инициатор бизнес-процесса:

Копировать в буфер обмена
Процедура ОпределитьСписокРецензентовПередСозданиемЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, СтандартнаяОбработка)

    НоваяЗадача = Задачи.Задача.СоздатьЗадачу();
    НоваяЗадача.БизнесПроцесс = ЭтотОбъект.Ссылка;
    НоваяЗадача.ТочкаМаршрута = БизнесПроцессы.Согласование.ТочкиМаршрута.ОпределитьСписокРецензентов;
    НоваяЗадача.Дата = ТекущаяДата();
    НоваяЗадача.Наименование = БизнесПроцессы.Согласование.ТочкиМаршрута.ОпределитьСписокРецензентов.Наименование;
    НоваяЗадача.Сотрудник = ПараметрыСеанса.ТекущийИсполнитель;

    ФормируемыеЗадачи.Добавить(НоваяЗадача);
    СтандартнаяОбработка = Ложь;

КонецПроцедуры

На точке На согласование задачи формируются в обработчике ПриСозданииЗадач путем перебора элементов табличной части Рецензии:

Копировать в буфер обмена
Процедура НаСогласованиеПриСозданииЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ)

    Для Каждого Элемент Из Рецензии Цикл

        НоваяЗадача = Задачи.Задача.СоздатьЗадачу();
        НоваяЗадача.БизнесПроцесс = ЭтотОбъект.Ссылка;
        НоваяЗадача.ТочкаМаршрута = БизнесПроцессы.Согласование.ТочкиМаршрута.НаСогласование;
        НоваяЗадача.Дата = ТекущаяДата();
        НоваяЗадача.Наименование = БизнесПроцессы.Согласование.ТочкиМаршрута.НаСогласование.Наименование;

        НоваяЗадача.Сотрудник = Элемент.Рецензент;
        НоваяЗадача.РольИсполнителя = Элемент.РольИсполнителя;
        НоваяЗадача.Подразделение = Элемент.Подразделение;

        ФормируемыеЗадачи.Добавить(НоваяЗадача);
        НоваяЗадача.Записать();
        Элемент.Задача = НоваяЗадача.Ссылка;

    КонецЦикла;

    Записать();

КонецПроцедуры