В начало

Массовый сдвиг задач БП назад

 

            Есть некий бизнес-процесс «Парикмахерская», для которого необходимо организовать на форме списка массовый сдвиг выделенных бизнес-процессов назад.

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

 

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

 

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

 

Листинг. Отладка запроса в консоле запросов

ВЫБРАТЬ ПЕРВЫЕ 1

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

            ЗадачаИсполнителя.Номер КАК Номер,

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

            ЗадачаИсполнителя.Наименование КАК Наименование,

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

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

ИЗ

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

ГДЕ

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

            И ЗадачаИсполнителя.Выполнена = ИСТИНА

 

УПОРЯДОЧИТЬ ПО

            Дата УБЫВ

 

 

Рис. Результат запроса

 

            Все верно, в данном бизнес-процессе последняя выполненная задача это «Оплата».

            Далее мы размещаем кнопку на форме списка бизнес-процесса и описываем необходимые процедуры для изменения пометки «Выполнена» задачи бизнес-процесса со значения «ИСТИНА» на - «ЛОЖЬ».

 

Листинг. Содержимое модуля формы списка

&НаСервере

Процедура УдалениеЛишнихНевыполненныхЗадач(вхБП, вхЗадача)

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

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

                        "ВЫБРАТЬ

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

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

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

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

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

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

                        |ИЗ

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

                        |ГДЕ

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

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

                        |           И ЗадачаИсполнителя.Ссылка <> &вхЗадача";

           

            Запрос.УстановитьПараметр("БизнесПроцесс", вхБП);

            Запрос.УстановитьПараметр("вхЗадача", вхЗадача);

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

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

           

            Если Выборка.Следующий() Тогда

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

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

                        ОбЗад.Удалить();

            КонецЕсли;

                       

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

 

&НаСервере

Процедура ОтменаВыполненияЗадачиБП(вхБП)

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

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

                        "ВЫБРАТЬ ПЕРВЫЕ 1

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

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

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

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

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

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

                        |ИЗ

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

                        |ГДЕ

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

                        |           И ЗадачаИсполнителя.Выполнена = ИСТИНА

                        |

                        |УПОРЯДОЧИТЬ ПО

                        |           Дата УБЫВ";

           

            Запрос.УстановитьПараметр("БизнесПроцесс", вхБП);

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

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

           

            //Если бизнес-процесс-завершен, то снимаем пометку завершения БП

            Если вхБП.Завершен = Истина Тогда

                        ОбБп = вхБП.ПолучитьОбъект();

                        ОбБп.Завершен = Ложь;

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

            КонецЕсли;  

                       

            Если Выборка.Следующий() Тогда

                        //Снимаем пометку выполнения с задачи

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

                        ОбЗад.Выполнена = Ложь;

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

                       

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

                        УдалениеЛишнихНевыполненныхЗадач(вхБП, Выборка.Ссылка);

            КонецЕсли;

                       

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

 

&НаСервере

Процедура МассовыйСдвигНазадНаСервере(Знач вхМассивСтрок)

            Для Каждого Эл Из вхМассивСтрок Цикл

                        ОтменаВыполненияЗадачиБП(Эл.Ссылка)

            КонецЦикла;

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

 

&НаКлиенте

Процедура МассовыйСдвигНазад(Команда)

            МассовыйСдвигНазадНаСервере(Элементы.Список.ВыделенныеСтроки);

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

 

            Протестируем сдвиг назад бизнес-процесса в пользовательском режиме.

Рис. Форма списка в пользовательском режиме

 

            Все вроде работает: выполнение задач отменяется, лишние невыполненные задачи удаляются.