В начало

Отбор по текущему этапу БП

 

            Нужно сделать на форме списка бизнес-процессов отбор по текущему этапу.

 

            Добавляем элементы на форму списка.

Рис. Элементы формы списка бизнес-процесса

 

            Этапы бизнес-процесса хранятся в регистре сведений.

 

Рис. Регистр сведений «CRM_ТекущиеЭтапыБизнесПроцессов»

 

            Точки маршрутов находятся в справочнике.

Рис. Справочник «CRM_ТочкиМаршрутов»

 

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

&НаСервереБезКонтекста

Функция СписокЭтаповБПдляОтбора()

 

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

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

            "ВЫБРАТЬ

            |           CRM_ТочкиМаршрутов.Ссылка КАК Ссылка,

            |           CRM_ТочкиМаршрутов.Наименование КАК Наименование,

            |           CRM_ТочкиМаршрутов.Владелец КАК Владелец,

            |           CRM_ТочкиМаршрутов.Вид КАК Вид

            |ИЗ

            |           Справочник.CRM_ТочкиМаршрутов КАК CRM_ТочкиМаршрутов

            |ГДЕ

            |           CRM_ТочкиМаршрутов.Владелец.Наименование = ""Судебная работа 2022""

            |           И CRM_ТочкиМаршрутов.ПометкаУдаления = ЛОЖЬ

            |           И CRM_ТочкиМаршрутов.Вид = ЗНАЧЕНИЕ(Перечисление.CRM_ВидыТочекМаршрута.Действие)";

           

           

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

            Выгрузка = Результат.Выгрузить().ВыгрузитьКолонку("Ссылка");        

           

            СЗ = Новый СписокЗначений;      

            СЗ.ЗагрузитьЗначения(Выгрузка);

           

            Возврат СЗ;

           

КонецФункции

                       

&НаКлиенте

Процедура ТекущийЭтап1НачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)

            СтандартнаяОбработка = Ложь;

           

           

            ПФ = Новый Структура;     

            НК = Новый НастройкиКомпоновкиДанных;     

           

            Отбор = НК.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));      

            Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");

            Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;         

            Отбор.ПравоеЗначение = СписокЭтаповБПдляОтбора();      

            Отбор.Использование = Истина;  

            Отбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;

                       

            ПФ.Вставить("ФиксированныеНастройки", НК);           

            ОткрытьФорму("Справочник.CRM_ТочкиМаршрутов.ФормаВыбора", ПФ, ЭтаФорма.Элементы.ТекущийЭтап1);  

           

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

 

 

&НаСервереБезКонтекста

Функция СписокБПдляОтбора(Знач СсылкаНаТекЭтап)

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

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

                        "ВЫБРАТЬ РАЗЛИЧНЫЕ

                        |           CRM_БизнесПроцесс.Ссылка КАК Ссылка,

                        |           CRM_ТекущиеЭтапыБизнесПроцессов.ТекущийЭтап КАК ТекущийЭтап

                        |ИЗ

                        |           РегистрСведений.CRM_ТекущиеЭтапыБизнесПроцессов КАК CRM_ТекущиеЭтапыБизнесПроцессов

                        |                       ЛЕВОЕ СОЕДИНЕНИЕ БизнесПроцесс.CRM_БизнесПроцесс КАК CRM_БизнесПроцесс

                        |                       ПО CRM_ТекущиеЭтапыБизнесПроцессов.Объект = CRM_БизнесПроцесс.Ссылка

                        |ГДЕ

                        |           CRM_ТекущиеЭтапыБизнесПроцессов.ТекущийЭтап = &ТекущийЭтап";

           

            Запрос.УстановитьПараметр("ТекущийЭтап", СсылкаНаТекЭтап.Наименование);

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

    Выгрузка = Результат.Выгрузить().ВыгрузитьКолонку("Ссылка");

 

            СЗ = Новый СписокЗначений;

    СЗ.ЗагрузитьЗначения(Выгрузка);

 

            Возврат СЗ;

КонецФункции

 

&НаКлиенте

Процедура ОтборПоТекущемуЭтапу()

 

            Список.КомпоновщикНастроек.Настройки.Отбор.Элементы.Очистить();

           

            Если ЭтаФорма.ТекущийЭтапИспользование И

                        ЗначениеЗаполнено(ЭтотОбъект.ТекущийЭтап) Тогда 

                       

                        //ОтборПоНомеруИП = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));//Ошибка

                        ОтборТекЭтапу = Список.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 

                       

                        ОтборТекЭтапу.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");        

                        ОтборТекЭтапу.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;

                        ОтборТекЭтапу.ПравоеЗначение = СписокБПдляОтбора(ЭтотОбъект.ТекущийЭтап);                   

                        ОтборТекЭтапу.Использование = Истина;

                        ОтборТекЭтапу.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; 

                       

                        Элементы.Список.Обновить();

            КонецЕсли;

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

 

&НаКлиенте

Процедура ТекущийЭтап1ПриИзменении(Элемент)

           

            Если ЗначениеЗаполнено(ЭтотОбъект.ТекущийЭтап) Тогда

                        ЭтотОбъект.ТекущийЭтапИспользование = Истина;                 

            КонецЕсли;                                        

 

            ОтборПоТекущемуЭтапу();

 

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

 

&НаКлиенте

Процедура ТекущийЭтапИспользованиеПриИзменении(Элемент)

            ОтборПоТекущемуЭтапу();

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

 

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

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