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