Урок 1. Настройка схем и процедур бизнес-процессов#

Задание 1. Создание элементарной схемы бизнес-процесса#

Создайте схему процесса с одним этапом согласования. Присоедините схему к типу объекта.

Чтобы выполнить задание:

  • Создайте новую схему процесса (Управление бизнес-процессами > Справочники > Схема бизнес-процесса). Укажите ее код и наименование, перейдите в режим редактирования графической схемы.

  • Выделите дорожку «Инициатор» и добавьте новую дорожку.

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

  • Перетащите с панели инструментов на дорожку «Руководитель» блок с типом «Задание», задайте наименование. Выделите новый блок, выберите операцию создания потоков и протяните стрелку к этапу «Окончание процесса». Аналогичным образом направьте поток из состояния** «Начало процесса»** в состояние «Согласование руководителем».

  • Выделите поток, ведущий от этапа согласования к окончанию процесса, и укажите результат (кнопка, которую в своей задаче нажмет пользователь), требуемый для его активации. Отметьте признак «Основной сценарий» на потоках, которые будут считаться умолчательными в случае корректного согласования.

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

  • Завершите работу визуального редактора операцией «Выбор».

  • Перейдите на вкладку «Применяемость к типам документов» и выполните операцию добавления. В открывшемся справочнике найти требуемый тип объекта. В детализации к типу объекта перейдите на вкладку «Документооборот» и убедитесь в том, что существует строка с отмеченным признаком «Используется в ДО». Если такой строки нет, создайте ее, отметьте признак и примените изменения операцией «Сбросить кэш настройки». Подтвердите выбор типа объекта операцией «Выбор».

  • Проверьте схему операцией проверки. На выполнение операции в нижней части экрана появится лог проверки, в котором будет указано, корректно ли соединены состояния, для всех ли потоков указаны требуемые шаблоны задач и результаты. Измените состояние версии на «Действующая» и сохраните изменения.

  • Чтобы пользователи могли видеть прогресс прохождения согласования документа, настройте отображение универсальной закладки «Маршруты». Для этого откройте справочник типов объектов (Настройки > Настройки документации > Типы объектов), найдите требуемый. В разделе «Закладки типа объекта» найдите закладку «Маршруты» и отметьте ее активность. Сохраните изменения, примените изменения операцией «Сбросить кэш настройки».

  • Для проверки откройте документ настроенного типа и запустите процесс документооборота по нему.

  • Для проверки маршрута выполните последовательно все задачи по нему. Доступны два способа:

  • Авторизуйтесь в системе от имени пользователя-исполнителя, выполните задачу, открыв список входящих задач через меню Сервис > Входящие задачи.

  • Перейдите в карточку задачи с закладки «Маршрут» и выполните ее от своего имени, пользуясь привилегиями супер-пользователя.

Задание 2. Настройка субъектов#

Создайте новую версию схемы, предусматривающую согласование также Центром ответственности и Финансовым управлением, согласующие сотрудники которых будут определяться автоматически. Реализуйте возможность отклонения каждой из согласующих инстанций.

Для выполнения задания:

  • Создайте новую версию схемы процесса, скопировав предыдущую. Введите дату начала ее действия и опишите изменения. Переключитесь на редактирование новой версии.

  • С помощью визуального редактора добавьте новых субъектов, новые состояния и переходы.

  • Выделите субъект «Центр ответственности». На вкладке «Настройки субъекта» создайте строку и перейдите в справочник профилей. Выберите один из имеющихся профилей или создайте новый и укажите для него пользователей. В таком случае при активации состояния задачи по нему получат все пользователи, имеющие данный профиль. Если новый сотрудник получит данный профиль, он увидит и ранее направленные на него задачи.

  • Выделите субъект «Финансовое управление». На вкладке «Настройки субъекта» создайте строку и выберите ОФС из справочника. В таком случае при активации состояния задачи по нему получат все сотрудники, числящиеся в ОФС на момент отправки задач.

Задание 3. Настройка процедур для схемы бизнес-процесса#

Реализуйте автоматическую смену состояния документа при его согласовании и отклонении. Определите руководителя инициатора процедурой на основании атрибута «Заявитель» документа.

Для выполнения задания:

  • Выделите этап «Согласование руководителем». Перейдите на вкладку «Процедуры» и создайте новую запись в разделе «Процедуры после старта процесса». Перейдите в справочник и создайте новую процедуру.

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

  • Чтобы не писать процедуру с нуля, можно найти аналогичную и адаптировать ее под требуемый класс. Например, в системе уже доступна процедура «Перевод состояния лота». Для адаптации измените в тексте процедуры все упоминания класса закупки (Prs_Lot) на Prs_Request:

var idProc = Bpm_PrStateApi.getProcessId(idpPrState);
var ropProc = Bpm_ProcessApi.load(idProc);
var idDoc = Bpm_PrDocApi.getProcDocByPrState(idpPrState);
var svState = param;
var s = "select b.id from Prs_Lot b where b.gid ='"+idDoc+"'";
var l = sql(s).asList();
var idvClass = Prs_LotApi.idClass();
var idvClassState = Btk_ClassStateApi.findByNameAndIdClass(svState, idvClass, 0B);
for (w:l) {
  var rop = Prs_LotApi.load(w.id);
  Prs_LotApi.setidState(rop, idvClassState);
}
  • Найдите в справочнике типов объекта требуемый и зафиксируйте системные имена используемых состояний для того, чтобы использовать их в качестве параметров.

Системное имя

Наименование

PRS_Annulled

Аннулировано

PRS_Forming

Формируется

PRS_Hold

Направлено

Coordinating

Согласуется

PRS_Confirmed

Утверждено

  • Укажите состояние «Согласуется» (Coordinating) как параметр для процедуры на этапе «Согласование руководителем».

  • Выделите этап «Документ согласован» и выберите для него из справочника процедур только что созданную процедуру смены состояния. В качестве параметра указать состояние PRS_Confirmed.

  • Аналогичным образом укажите перевод состояния документа в «Аннулирован» при активации этапа «Документ отклонен».

Далее будет описано заполнение субъекта «Руководитель подразделения» автоматически на основании атрибутов документа. Для этого:

  • Определите, на основании каких атрибутов документа определять пользователя. Документ содержит атрибут «Заявитель» — ссылка на ОФС. Запись ОФС содержит атрибут «Руководитель» — ссылка на требуемое физическое лицо.

  • Напишите SQL-запрос, который будет возвращать ID физ.лица — получателя задачи — на основании gid исходной заявки на потребность:

select coalesce (p.iduser,0) as iduser
from Prs_Request r
join bs_ofstructure o on o.id = r.idofstructure
join bs_employee e on e.id = o.idemployee
join bs_person p on e.idperson=p.id
where r.gid = '72951/1706'
  • Найти аналогичную процедуру «Заполнение куратора договора»:

var idProc = Bpm_PrStateApi.getProcessId(idpPrState);
var svSubj = param;
var idvDoc = Bpm_PrDocApi.getProcDocByPrState(idpPrState);
var ropProc = Bpm_ProcessApi.load(idProc);
var ropTargetOpt = Bpm_PrSubjectApi.getByPSSubject(ropProc, svSubj);
var ropTarget = ropTargetOpt.get();
var s = `select coalesce (u.iduser,0) as iduser
from cnt_contract r
join bs_employee e on r.IDCURATOREMPLOYEE=e.id
join bs_person u on e.idperson = u.id
where r.gid =  '` + idvDoc + `'`;	
var l = sql(s).asList();
for (w:l) {
   if (w.iduser == 0)  {raise("Внимание! Для договора не указан куратор.");}
   Bpm_PrSubjUserApi.register(ropTarget, w.iduser, 0B, 0B);
}

SQL запрос необходимо заменить на написанный ранее, чтобы получился следующий результат:

var idProc = Bpm_PrStateApi.getProcessId(idpPrState);
var svSubj = param;
var idvDoc = Bpm_PrDocApi.getProcDocByPrState(idpPrState);
var ropProc = Bpm_ProcessApi.load(idProc);
var ropTargetOpt = Bpm_PrSubjectApi.getByPSSubject(ropProc, svSubj);
var ropTarget = ropTargetOpt.get();
var s = `select coalesce (p.iduser,0) as iduser
from Prs_Request r
join bs_ofstructure o on o.id = r.idofstructure
join bs_employee e on e.id = o.idemployee
join bs_person p on e.idperson=p.id
where r.gid =  '` + idvDoc + `'`;	
var l = sql(s).asList();
for (w:l) {
   if (w.iduser == 0)  {raise("Внимание! Не удалось найти руководителя ОФС-заявителя!");}
   Bpm_PrSubjUserApi.register(ropTarget, w.iduser, 0B, 0B);
}
  • Для состояния «Начало процесса» на вкладке «Процедуры» создайте строку, откройте справочник процедур, создайте новую и вставить в нее JEXL-код. Подтвердите выбор. В качестве параметра для процедуры укажите системное имя субъекта «Руководитель подразделения».