HelpF.pro

Как принудительно завершить бизнес-процесс и задачи?

Стандартная механика обеспечивает автоматическое завершение бизнес-процесса, когда он достигает точки завершения и все задачи по нему выполнены.
Однако иногда может потребоваться принудительно завершить бизнес-процесс, не дожидаясь, пока он дойдет до точки завершения.
Для этого необходимо установить свойство Завершен бизнес-процесса равным Истина:
Код 1C v 8.х
     БизнесПроцесс.Завершен = Истина;
    БизнесПроцесс.Записать();   


Далее нужно отметить все задачи по этому бизнес-процессу как выполненные.
1. Отобрать задачи по бизнес-процессу можно с помощью запроса вида:
2. После чего каждой из отобранных задач нужно установить свойство Выполнена равным Истина:
Код 1C v 8.х
 ТекущаяЗадача.Выполнена = Истина;
ТекущаяЗадача.Записать();   


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

Код 1C v 8.х
 Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	ОСН_Задача.Ссылка,
|	ОСН_Задача.Дата,
|	ОСН_Задача.БизнесПроцесс,
|	ОСН_Задача.ТочкаМаршрута,
|	ОСН_Задача.Пользователь,
|	ОСН_Задача.Подразделение,
|	ОСН_Задача.БизнесПроцесс.ДокументДоставки
|ИЗ
|	Задача.ОСН_Задача КАК ОСН_Задача
|ГДЕ
|	ОСН_Задача.БизнесПроцесс.ДокументДоставки = &ДокументДоставки";
Запрос.УстановитьПараметр("ДокументДоставки", ВыбранныйДокумент);

Результат = Запрос.Выполнить();
Выборка = Результат.Выгрузить();

ТекПозиция = 0;	
Для каждого СтрокаЗапроса из Выборка Цикл
	ОбработкаПрерыванияПользователя();
	ТекПозиция = ТекПозиция + 1;
	Состояние("Выполнено " + Окр(ТекПозиция / РезультатТаблица.Количество() * 100) + "%");

//Завешим Задачу
	ОбъектЗадача = СтрокаЗапроса.Ссылка.ПолучитьОбъект();
	ОбъектЗадача.Выполнена = Истина;
	ОбъектЗадача.Записать();
	
//Если необходимо то Завершим и Бизнес Процесс
	БизнесПроцесс = СтрокаЗапроса.БизнесПроцесс.ПолучитьОбъект();
	БизнесПроцесс.Завершен = Истина;
	БизнесПроцесс.Записать();
КонецЦикла;
   



Код 1C v 8.х
 Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	CRM_Задача.Ссылка,
|	CRM_Задача.Дата,
|	CRM_Задача.БизнесПроцесс,
|	CRM_Задача.ТочкаМаршрута,
|	CRM_Задача.Пользователь,
|	CRM_Задача.Подразделение,
|	CRM_Задача.БизнесПроцесс.ДокументДоставки
|ИЗ
|	Задача.CRM_Задача КАК CRM_Задача
|ГДЕ
|	CRM_Задача.Выполнена = ЛОЖЬ
|	И CRM_Задача.Дата < &Дата";
Запрос.УстановитьПараметр("Дата", Дата("07.09.2012 0:00:00"));

Результат = Запрос.Выполнить();
Выборка = Результат.Выгрузить();

ТекПозиция = 0;	
Для каждого СтрокаЗапроса из Выборка Цикл
	ОбработкаПрерыванияПользователя();
	ТекПозиция = ТекПозиция + 1;
	Состояние("Выполнено " + Окр(ТекПозиция / РезультатТаблица.Количество() * 100) + "%");

//Завешим Задачу
ОбъектЗадача = СтрокаЗапроса.Ссылка.ПолучитьОбъект();
ОбъектЗадача.ВыполнитьЗадачу();
	
	//Если необходимо то Завершим и Бизнес Процесс
	Если НЕ СтрокаЗапроса.Ссылка.БизнесПроцесс.Завершен Тогда 
	БизнесПроцесс = СтрокаЗапроса.Ссылка.БизнесПроцесс.ПолучитьОбъект();
	БизнесПроцесс.Завершен = Истина;
	БизнесПроцесс.Записать();
	КонецЕсли;
КонецЦикла;
   

Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq8/view/1255.html