В начало

Бизнес-процесс «Парикмахерская»

 

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

Рис. Структура бизнес-процесса «Парикмахерская» и задачи «ЗадачаИсполнителя»

 

            Создаем форму бизнес-процесса, размещаем на форме кнопку.

 

Рис. Форма бизнес-процесса «Парикмахерская»

 

            Создаем карту маршрута.

Рис. Создание карты маршрута бизнес-процесса «Парикмахерская»

            Далее описываем события в модуле формы бизнес-процесса.

 

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

&НаСервере

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

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

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

 

&НаСервере

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

            ОбновитьКартуСервер();

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

 

&НаСервере

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

            ОбновитьКартуСервер();

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

 

//===================

//Кнопка «Стартовать»

//===================

&НаСервере

Процедура СтартоватьНаСервере()

            БП = БизнесПроцессы.Парикмахерская.СоздатьБизнесПроцесс();

            ТМ = БизнесПроцессы.Парикмахерская.ТочкиМаршрута;

            БП.Дата = ТекущаяДата();

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

            БП.Старт(ТМ.Старт);  

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

 

&НаКлиенте

Процедура Стартовать(Команда)

            СтартоватьНаСервере();

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

 

//================================

//Кнопка «Прервать бизнес-процесс»

//================================

&НаСервере

Процедура ПрерватьБизнесПроцессНаСервере()

            //=================================

            //Выполняем невыполненные задачи

            //текущего БП

            //=================================

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

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

                        "ВЫБРАТЬ

                        |          ЗадачаИсполнителя.Ссылка КАК Ссылка

                        |ИЗ

                        |          Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя

                        |ГДЕ

                        |          ЗадачаИсполнителя.БизнесПроцесс = &БизнесПроцесс

                        |          И ЗадачаИсполнителя.Выполнена = ЛОЖЬ";

           

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

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

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

           

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

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

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

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

            КонецЦикла;

           

            //========================

            //Завершаем текущий БП

            //========================

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

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

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

           

            //=============================

            //Создаем новый БП,

            //но уже в другой точке старта

            //=============================

            БП = БизнесПроцессы.Парикмахерская.СоздатьБизнесПроцесс();

            ТМ = БизнесПроцессы.Парикмахерская.ТочкиМаршрута;

            БП.Дата = ТекущаяДата();

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

            БП.Старт(ТМ.ПередумалОднако);

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

 

&НаКлиенте

Процедура ПрерватьБизнесПроцесс(Команда)

            ПрерватьБизнесПроцессНаСервере();

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

 

            Теперь можно протестировать работу. Запускаемся в режиме отладки и проверяем.

           

 

 

Рис. Бизнес-процесс и задачи

 

            Потом нажимаем кнопку «Прервать бизнес процесс».

Рис. Новый бизнес-процесс и задачи

 

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