В начало

Принудительное завершение бизнес-процесса

 

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

 

Рис. Структура «БизнесПроцесс1» и «Задача1»

 

            Создаем форму бизнес-процесса, размещаем на ней  кнопку «ПрерватьБизнесПроцесс».

Рис. Форма бизнес-процесса

 

            Далее описываем действие кнопки. Создаем запрос, в котором получаем невыполненные задачи, потом обходим их в цикле и устанавливаем флаг «Выполнена = Истина». После этого завершаем бизнес-процесс.

 

Листинг. Модуль формы бизнес-процесса

&НаСервере

Процедура Команда1НаСервере()

             Запрос = Новый Запрос;

             Запрос.Текст =

             "ВЫБРАТЬ

             |         Задача1.Ссылка КАК Ссылка

             |ИЗ

             |         Задача.Задача1 КАК Задача1

             |ГДЕ

                 |           НЕ Задача.Выполнена

             |            И Задача1.БизнесПроцесс = &БизнесПроцесс";

             

             Запрос.УстановитьПараметр("БизнесПроцесс", Объект.Ссылка);                    

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

             Выборка = Результат.Выбрать();

             

             //Завершаем задачи бизнес-процесса

             Пока Выборка.Следующий() Цикл

                         ОбЗад = Выборка.Ссылка.ПолучитьОбъект();

                         ОбЗад.Выполнена = Истина;

                         ОбЗад.Записать();

             КонецЦикла;

             

             //Завершаем бизнес-процесс

             ОбБП = Объект.Ссылка.ПолучитьОбъект();

             ОбБП.Завершен = Истина;

             ОбБП.Записать();

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

 

 &НаКлиенте

Процедура Команда1(Команда)

            Команда1НаСервере();

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

 

&НаСервере

Процедура ОбновитьКартуБП()     

            Попытка

                        ЭтотОбъект.КартаБП = РеквизитФормыВЗначение("Объект").ПолучитьКартуМаршрута();

                        //ЭтотОбъект.КартаБП = Объект.Ссылка.ПолучитьОбъект().ПолучитьКартуМаршрута();

            Исключение

            КонецПопытки;

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

 

 &НаСервере

 Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

             ОбновитьКартуБП();

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

 

&НаСервере

 Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

              ОбновитьКартуБП();

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

 

            Далее протестируем, что получилось. Запускаемся в пользовательском режиме. Стартуем новый бизнес-процесс и не доводим его до конца, а вместо этого нажимаем кнопку «ПрерватьБизнесПроцесс».

Рис. Бизнес-процесс и задачи до принудительного завершения

 

Рис. Бизнес-процесс и задачи после принудительного завершения

 

            Видим, что незавершенные задачи выполнились, а бизнес-процесс завершился.