Приветствую Вас ГостьСреда, 15.05.2024, 12:01

Каталог статей


Бизнес-процессы и Задачи

Бизнес-процесс (БП) – это совокупность взаимосвязанных действий, направленных на создание продукта или услуги для потребителей.

В рамках 1С бизнес-процессы предназначены для объединения отдельных операций в цепочки взаимосвязанных действий, приводящих к достижению конкретной цели.

Объект помимо стандартных свойств имеет специфические свойства:

  1. Задачи (на вкладке "Основные") - ссылка на объект типа "Задачи". Обязательное для заполнения. Задача используется бизнес-процессом для формирования заданий по исполнителям или для запуска вложенных процессов.
  2. Привилегированный режим при создании задачи (на вкладке "Права").
  • Если = Истина, то все действия по формированию задач система будет выполнять в привилегированном режиме (на стороне сервера и в файловом режиме). Однако привилегированный режим не будет установлен, если формирование задач выполняется в клиент-серверном варианте на стороне толстого клиента.
  • При создании новых БП свойство установлено во значение Истина, если в свойствах конфигурации указан основной режим запуска - управляемое приложение, и в значение Ложь, если основным режимом запуска указан обычный режим.

Так же БП имеет специфический стандартный реквизит "ВедущаяЗадача". Этот реквизит заполняется если БП является вложенным. В этом случае в этом реквизите будет указана задача, которая запустила это БП. При завершении вложенного БП, "ведущая задача" помечается как выполненная.

Бизнес-процесс описывается с помощью карты маршрута - схематического изображения последовательности действий. Для редактирования карты маршрута в окне редактирования БП на вкладке "Прочие" нужно нажать на кнопку "Карта маршрута".

Элементы карты маршрута:

Продвижение по карте маршрута происходит с помощью вспомогательного объекта «Задача». В каждой точке действия создается одна или несколько задач, и когда все задачи текущей точки завершены, происходит переход к следующей точке карты маршрута.

В бизнес-процессах допускаются следующие типы маршрутизации:

  • Жесткая - БП имеет строгую карту маршрута без условий и параллельных переходов
  • Свободная - Адресаты точки карты маршрута БП не установлены и определяются программно или интерактивно в течении жизненного цикла.
  • Условная - Карта предусматривает проверку условий и переход по соответствующим ветвям.
  • Параллельная - карта предусматривает разделение маршрута на параллельные ветви с возможностью последующего слияния. 

Задача. Задачи предназначены для выдачи и исполнения заданий пользователям Задачи могут применяться самостоятельно или использоваться БП. Задач может быть произвольное количество, но как правило создается одна задача для всех видов БП.

Специфические свойства Задачи:

Адресация (на вкладке Адресация) - может быть назначен непериодический регистр сведений. Измерения регистра сведений задают правила адресации задачи. Как правило для ролевой адресации измерениями являются:

  1. Исполнитель - СправочникСсылка.Пользователи. Выступает в качестве основного реквизита адресации 
  2. РольИсполнителя - СправочникСсылка.РолиИсполнителей. 
  3. Подразделение , рабочая группа и т.д. - добавляются исходя из технологической необходимости.

После заполнения регистра, у пользователей с сопоставленной ролью исполнителя будут отображаться задачи, соответствующие роли, назначенной для точки маршрута.

Текущий исполнитель (на вкладке Адресация) - ссылка на параметр сеанса, в котором будет храниться текущий пользователь.

Реквизиты адресации (на вкладке Адресация) - список реквизитов , который описывает свойства реквизита (тип, индексацию, связь пр типу и т.д.) и связывает его  с измерением регистра сведений (свойство "Измерение адресации").

Основной реквизит адресации (на вкладке Адресация) - один из реквизитов адресации.  В случае его заполнения в него надо будет устанавливать конкретного исполнителя задания. Если исполнитель будет не заполнен, то он будет определяться из регистра сведений.

После того, как настроена адресация, в карте у точек маршрута в разделе "Адресация" добавятся свойства соответствующие реквизитам адресации. Для каждой точки маршрута можно задать пользователя или роль, которым будут назначены задачи данной точки маршрута. Значения выбираются из списка предустановленных. Таким способом настраивается Ролевая адресация.

Так же для каждой точки маршрута настраиваются доступные события

Специфические реквизиты задачи:

  • Выполнена - признак выполнения задачи
  • ТочкаМаршрута - тоска маршрута БП
  • БизнесПроцесс - БП

Каждый элемент карты маршрута имеет свой набор событий. Процедуры событий размещаются в модуле объекта БП.

Условие

Для условия необходимо описать событие "ПроверкаУсловия". В данной процедуре необходимо установить значение для реквизита "Результат". Если Результат = Истина, то маршрут пойдет по ветке "Да", если Результат = Ложь, то по ветке "Нет".

Пример:

Процедура Условие1ПроверкаУсловия(ТочкаМаршрутаБизнесПроцесса, Результат)
    Результат = Не ЭтоПервичныйПрием();
КонецПроцедуры

Выбор.

Для выбора в переменную "Результат" должны быть помещены значения точки выбора варианта.

Пример:

Процедура ПримерВариантаОбработкаВыбораВарианта(ТочкаВыбораВарианта, Результат)
    Если ВидОплаты  = Перечисления.СтатусыДокументов.Новый Тогда
        Результат = ТочкаВыбораВарианта.Варианты.Вариант1;
    ИначеЕсли ВидОплаты  = Перечисления.СтатусыДокументов.Утвержден Тогда
        Результат = ТочкаВыбораВарианта.Варианты.Вариант2;
    ИначеЕсли ВидОплаты  = Перечисления.СтатусыДокументов.Отменен Тогда
        Результат = ТочкаВыбораВарианта.Варианты.Вариант3;        
    КонецЕсли;
КонецПроцедуры

Точка действия (задача).

У точки действия есть реквизит "Групповая". Если он равен Ложь, то переход на следующую точку маршрута выполняется при выполнении задачи одним из пользователей, которому соответствует роль исполнителя. Если "Групповая"  = Истина, то задачи назначаются всем пользователям с соответствующей ролью, и переход на следующую точку маршрута будет выполнен после того, как все эти задачи будут выполнены.

Для точек действия выполняются события как точки маршрута, так и задачи. Например процедуры проверки выполнения есть как у точки маршрута типа "Точка действия", так и у задачи.

При вызове метода объекта задачи ПроверитьВыполнение(), сначала выполняется событие ОбработкаПроверкиВыполнения() у задачи, а потом ОбработкаПроверкиВыполнения() у точки маршрута.

Для каждой точки действия можно установить проверку выполнения. Это можно сделать с помощью отдельных события для каждой точки действия, а можно создать общую процедуру которую назначить всем точкам действия. Например создадим в модуле объекта БП процедуру ОбщаяПередВыполнением(ТочкаМаршрутаБизнесПроцесса, Задача, Отказ) и назначим ей для всех точек действия в событии "Перед выполнением". В эттой процедуре будем вызывать функцию проверки ПроверитьВыполнениеЗадачи(), которая для каждой точки маршрута будет выполнять свою проверку: 

Процедура ОбщаяПередВыполнением(ТочкаМаршрутаБизнесПроцесса, Задача, Отказ)
    Если Не ПроверитьВыполнениеЗадачи(ТочкаМаршрутаБизнесПроцесса, Задача) Тогда
        Сообщить("Не выполнены действия, необходимые для выполнения задачи!", СтатусСообщения.Важное);
        Отказ = Истина;
    КонецЕсли;         
КонецПроцедуры

Функция ПроверитьВыполнениеЗадачи(ТочкаМаршрутаБизнесПроцесса, Задача)
    
    БП = Задача.БизнесПроцесс;
    Результат = Ложь;
    Если ТочкаМаршрутаБизнесПроцесса = БизнесПроцессы.ПриемНовогоСотрудника.ТочкиМаршрута.ВводПервичныхДанныхФизлица Тогда
        Если ЗначениеЗаполнено(БП.ФизЛицо) И ЗначениеЗаполнено(БП.Сотрудник) Тогда
            Результат = ЗначениеЗаполнено(БП.ФизЛицо.ДатаРождения) И ЗначениеЗаполнено(БП.ФизЛицо.Пол);
        КонецЕсли;
    ИначеЕсли ТочкаМаршрутаБизнесПроцесса = БизнесПроцессы.ПриемНовогоСотрудника.ТочкиМаршрута.ВводПриемаНаРаботу Тогда
        Результат = ЗначениеЗаполнено(БП.ПриемНаРаботу);
    ИначеЕсли ТочкаМаршрутаБизнесПроцесса = БизнесПроцессы.ПриемНовогоСотрудника.ТочкиМаршрута.УтверждениеПриемаНаРаботу Тогда
        ДокПрием = БП.ПриемНаРаботу;
        Результат = ЗначениеЗаполнено(ДокПрием.Оклад) И ДокПрием.Статус = Перечисления.СтатусыДокументов.Утвержден;
    КонецЕсли;
    
    Возврат Результат;
    
КонецФункции

Назначить исполнителя.

Задачу выполняет конкретный исполнитель и это можно зафиксировать в методе ПередВыполнением() модуля объекта задачи.

Процедура ПередВыполнением(Отказ)
    Исполнитель = ПараметрыСеанса.ТекущийПользователь;
КонецПроцедуры

! Не забываем дать права на параметр сеанса ТекущийПользователь, иначе при выполнении этого кода будет выходить ошибка, а так же в форме списка задач исполнителя

Установить наименование задачи.

При создании задачи её наименование становится равным наименованию точки маршрута. Чтобы в списке задач можно было различать задачи, можно установить их наименование в момент создания задач в БП. Например для БП "Прием сотрудника на работу" требуется различать задачи для разных сотрудников. Для этого в модуле объекта БП напишем процедуры:

Процедура ОбщаяПриСозданииЗадач(ТочкаМаршрута, ФормируемыеЗадачи, Отказ)
    Для каждого НоваяЗадача из ФОрмируемыеЗадачи Цикл
        УстановитьНаименованиеЗадачи(ТочкаМаршрута, НоваяЗадача)    
    КонецЦикла;
КонецПроцедуры  

Процедура УстановитьНаименованиеЗадачи(ТочкаМаршрута, Задача)
    Задача.Наименование = ТочкаМаршрута.НаименованиеЗадачи + " " + СокрЛП(ФизЛицо.Наименование);
КонецПроцедуры                                                                                  

Процедуру ОбщаяПриСозданииЗадач() устанавливаем для события "При создании задачи" для всех точек действия маршрута

Отображение списка задач.

Для отображения списка задач используется форма списка объекта "Задачи". В этой форме отображаются все задачи, как назначенные текущему пользователю, так и задачи для других пользователей. Для того, чтобы в списке отображались только задачи для текущего пользователя надо с форме списка, у основного реквизита "Список" в свойстве "ОсновнаяТаблица" установить значение "Задача.ЗадачаИсполнителя.ЗадачиПоИсполнителю".

Чтобы отображались только актуальные задачи (не удаленные и не выполненные), надо в настройках списка настроит отбор:

Визуализация хода исполнения БП

На форме БП можно разместить отображение хода выполнения БП. Для этого используется реквизит формы типа "ГрафическаяСхема"

Для того, чтобы получить текущее состояние хода исполнения БП надо воспользоваться методом БП ПолучитьКартуМаршрута().

Процедуру получения карты маршрута надо вызывать при открытии формы (ПриЧтенииНаСервере) и после записи БП (ПослеЗаписиНаСервере), для обновления текущего статуса.

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    ОбновитьКартуМаршрута();
КонецПроцедуры
 

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

Последовательности действий

При старте БП

При вызове метода ВыполнитьЗадачу()

В момент перехода на новую точку маршрута

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

Например, если в событии ПередСозданиемЗадач не будет создано задач, то БП перейдет к следующей точке маршрута:

Процедура УтверждениеСчетаПередСозданиемЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, СтандартнаяОбработка)

    Если НеНужноУтверждать() Тогда 
        СтандартнаяОбработка = Ложь;
    КонецЕсли; 

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

Проверка выполнения задачи

 

При переходе на точку маршрута вида Вложенный бизнес-процесс

Ручное управление

Управление БП.

Специфические реквизиты:

Стартован - определяет, что по БП запущен старт.

Для корректного старта БП используется метод Старт(). При его выполнении заполняется реквизит Стартован = Истина, происходит продвижение по карте маршрута и формируется массив задач. Вслучае, если БП имеет несколько точек старта, то необходимо указать в параметре конкретную точку старта.

Завершен - определяет завершение процесса. Ручная установка может использоваться для прерывания хода БП или для исключения его из списка активных.

Если вручную установить Завершен = Истина, то БП будет считаться завершенным, даже если есть связанные с ним невыполненные задачи.  Выполнение таких задач не приведет к продвижению БП по маршруту. Для корректного завершения БП требуется установить реквизит Выполнена = Истина для всех задач БП.

Если установить "Завершен" = Истина для нестартованного БП, то стартовать его в дальнейшем будет невозможно.

Если у завершенного БТ установить "Завершен" = Ложь, то у него останутся выполненные задачи и стартовать его повторно станет невозможно.

Чтобы вернуть БП на нужную точку маршрута надо у нужных задач снять признак выполнения.

У Задачи есть стандартный реквизит "Выполнена". Если установит его вручную, то это не приведет к продвижению БП дальше по маршруту. при этом так же не будут выполнены обработчики событий ПередВыполнением() и ПриВыполнении() у задачи и у соответствующей точки маршрута. БП в этом случае остановиться: он не будет завершен и у него не будет движения по маршруту.

Снятие признака "Выполнена" может привести к появлению параллельного потока в незавершенном БП. Когда исправленная задача будет выполнена, будет создана следующая  задача по маршруту, в результате появятся 2 задачи для следующей точки по маршруту. БП будет закончен тогда, когда все задачи в обоих потоках будут выполнены.

Если снять признак "Выполнена" у задачи для завершенного БП, то задача будет видна как невыполненная, но продвижение далее по маршруту не будет.

Если удалить невыполненные задачи незавершенного БП, то он может остановиться: он будет незавершен и по нему не будет ни одной невыполненной задачи. При этом на карте маршрута удаленные задачи могут отображаться как выполненные.

Удаление всех задач для незавершенного БП переводит его в статус нестартованного.

Ручное добавление задач завершенного БП приведет к тому, что БП будет считаться завершенным и выполнение этой задачи не приведет к продвижению по маршруту.

Ручное добавление задачи к нестартованному БП приведет к тому, что БП получит статус стартованного и выполнение этой задачи приведет к продвижению по карте маршрута.

Ручное добавление задачи к стартованному незавершенному БП приведет к распараллеливанию ПБ.

Корректное выполнение задачи происходит при вызове метода ВыполнитьЗадачу(). При этом отрабатываются все события и БП оповещается о выполнении задачи. Если все необходимые условия выполнены, то будет осуществлен переход на следующую точку маршрута.

Основа для статьи взята из источника https://xn----1-bedvffifm4g.xn--p1ai/news/2017-03-02-business-processes-practice/

Примеры программирования

Программное формирование задач на точках маршрута

Переопределяем стандартное  создание задач. Для этого используем событие ПередСозданиемЗадач() точки маршрута. В нем создаем задачу, заполняем реквизиты задачи и добавляем созданную задачу в массив ФормируемыеЗадачи. Массив ФормируемыепЗадачи состоит из записей типа ЗадачаОбъект, а не ЗадачаСсылка, поэтому созданную задачу можно не записывать.

Для того, чтобы параллельно не создалась ещё одна аналогичная задача, устанавливаем параметр СтандартнаяОбработкат = Ложь.

Процедура ОпределитьСписокРецензентовПередСозданиемЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, СтандартнаяОбработка)

    НоваяЗадача = Задачи.Задача.СоздатьЗадачу();
    НоваяЗадача.БизнесПроцесс = ЭтотОбъект.Ссылка;
    НоваяЗадача.ТочкаМаршрута = БизнесПроцессы.Согласование.ТочкиМаршрута.ОпределитьСписокРецензентов;
    НоваяЗадача.Дата = ТекущаяДата();
    НоваяЗадача.Наименование = БизнесПроцессы.Согласование.ТочкиМаршрута.ОпределитьСписокРецензентов.Наименование;
    НоваяЗадача.Сотрудник = ПараметрыСеанса.ТекущийИсполнитель;

    ФормируемыеЗадачи.Добавить(НоваяЗадача);
    СтандартнаяОбработка = Ложь;

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

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

 

Пример создания нескольких параллельных процессов внутри вложенного БП:

Процедура ПередСозданиемВложенныхБизнесПроцессов(ТочкаМаршрутаБизнесПроцесса, ФормируемыеБизнесПроцессы, Отказ)

            БизнесПроцесс1 = БизнесПроцессы.ПодготовкаРабочегоМеста.СоздатьБизнесПроцесс();
            // Настройка бизнес-процесса БизнесПроцесс1
            ФормируемыеБизнесПроцессы.Добавить(БизнесПроцесс1);

            БизнесПроцесс2 = БизнесПроцессы.Инструктаж.СоздатьБизнесПроцесс();
            // Настройка бизнес-процесса БизнесПроцесс2
            ФормируемыеБизнесПроцессы.Добавить(БизнесПроцесс2);

            БизнесПроцесс3 = БизнесПроцессы.ПодготовкаОборудования.СоздатьБизнесПроцесс();
            // Настройка бизнес-процесса БизнесПроцесс3
            ФормируемыеБизнесПроцессы.Добавить(БизнесПроцесс3);

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

Пример запуска нужной обработки в зависимости от точки маршрута из списка задач

На форме списка задач отслеживаем событие Выбор для элемента динамического списка. По выбранному элементу получаем ссылку на задачу. Далее на сервере определяем имя точки маршрута и состояние задачи. По полученным данным определяем, какую обработку надо запустить

&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    ПараметрыЗадачи = ОпределитьПараметрыЗадачи(ВыбраннаяСтрока);
    НазваниеТочкиМаршрута = ПараметрыЗадачи.НазваниеТочкиМаршрута;
    
    Если НазваниеТочкиМаршрута = "ТочкаОбработки1" Тогда
        Если НЕ ПараметрыЗадачи.Выполнена Тогда
            Обрбаотка1(ВыбраннаяСтрока);
        Иначе     
            СтандартнаяОбработка = Истина;
        КонецЕсли;  
    ИначеЕсли  НазваниеТочкиМаршрута = "ВводДанныхКонтрагента" Тогда 
        Если НЕ ПараметрыЗадачи.Выполнена Тогда
            ВыбратьКонтрагента(ВыбраннаяСтрока);
        Иначе     
            СтандартнаяОбработка = Истина;
        КонецЕсли;
    Иначе
          //    
    КонецЕсли;    
    
    Элементы.Список.Обновить();
    
КонецПроцедуры

&НаСервере
Функция ОпределитьПараметрыЗадачи(ЗадачаСсылка)
    Перем Результат;             
    Результат = Новый Структура("НазваниеТочкиМаршрута, Выполнена");    
    Результат.НазваниеТочкиМаршрута = ЗадачаСсылка.ТочкаМаршрута.Имя;    
    Результат.Выполнена = ЗадачаСсылка.Выполнена;   
    Возврат Результат;
КонецФункции 

 

 

 

Категория: Объекты конфигурации и типы данных | Добавил: leshic (28.03.2022)
Просмотров: 1037 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Вход на сайт
Поиск
Категории раздела
СКД [48]
Регистры [7]
Формы [41]
Администрирование [35]
Запросы [10]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [29]
Статистика

Онлайн всего: 2
Гостей: 2
Пользователей: 0