Код 1C v 8.2 УП &НаСервере
Процедура ЗафиксироватьВыполнениеНаСервере()
ЗадачаОбъект = Задача. Ссылка. ПолучитьОбъект( ) ;
ЗадачаОбъект. ВыполнитьЗадачу( ) ;
КонецПроцедуры
Код 1C v 8.х ТекстВопроса = "Задача будет завершена. Продолжить?" ;
ОтветНаВопрос = Вопрос( ТекстВопроса, РежимДиалогаВопрос. ОКОтмена, , КодВозвратаДиалога. ОК) ;
Если ОтветНаВопрос = КодВозвратаДиалога. ОК Тогда
ВыполнитьЗадачуИнтерактивно( ) ;
ЗаписатьВФорме( ) ;
Если ТипЗнч( БизнесПроцесс) = Тип( "БизнесПроцессСсылка.CRM_Поручение" )
И ( ТочкаМаршрута. Имя = "Контроль" ) Тогда
БизнесПроцессЗадачи = ЗадачаОбъект. БизнесПроцесс. ПолучитьОбъект( ) ;
БизнесПроцессЗадачи. КачествоВыполнения = ЭлементыФормы. Оценка. Значение;
БизнесПроцессЗадачи. Записать( ) ;
КонецЕсли ;
Закрыть( ) ;
КонецЕсли ;
Стандартная механика обеспечивает автоматическое завершение бизнес-процесса, когда он достигает точки завершения и все задачи по нему выполнены.
Однако иногда может потребоваться принудительно завершить бизнес-процесс, не дожидаясь, пока он дойдет до точки завершения.
Для этого необходимо установить свойство Завершен бизнес-процесса равным Истина:
Код 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 ) + "%" ) ;
ОбъектЗадача = СтрокаЗапроса. Ссылка. ПолучитьОбъект( ) ;
ОбъектЗадача. ВыполнитьЗадачу( ) ;
Если НЕ СтрокаЗапроса. Ссылка. БизнесПроцесс. Завершен Тогда
БизнесПроцесс = СтрокаЗапроса. Ссылка. БизнесПроцесс. ПолучитьОбъект( ) ;
БизнесПроцесс. Завершен = Истина ;
БизнесПроцесс. Записать( ) ;
КонецЕсли ;
КонецЦикла ;