Урок 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-код. Подтвердить выбор. В качестве параметра для процедуры указать системное имя субъекта «Руководитель подразделения».