Процесс - сущность, позволяющая учитывать различные протекающие в организации процессы. Процесс обладает встроенными параметрами:

  • тип;

  • текущий статус и время его установки;

  • время начала;

  • время завершения;

  • исполнители и группы решения;

  • описание;

  • приоритет .

Остальные параметры назначаются с помощью системы параметров для разных типов процессов.

В большинстве ERP систем ближайшим родственным понятием процессу выступает понятие "Задача". Однако, с помощью системы связывания процессов между собой, возможна настройка полноценных бизнес-процессов с подчинёнными задачами.

Новый процесс можно создать в:

  • очереди процессов;

  • на вкладке "Процессы" объекта;

  • как привязанный;

  • при обработке сообщений.

Статусы

Правка статусов производится в оснастке Администрирование / Процессы / Статусы процессов. Статус определяет текущее состояние процесса. Позиция статуса определяет порядок его в списке статусов.

proc status

Кнопка Показать отображает типы процессов, в которых используется статус.

Типы процессов

Правка выполняется в оснастке Администрирование / Процессы / Типы процессов. Типы процессов организованы в древовидный список.

type

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

type prop

В свойствах типа указываются следующие параметры:

  • разрешённые статусы, их порядок в редакторе и возможные переходы между ними;

  • допустимые параметры процесса, их порядок;

  • код (ID) начального и конечных статусов;

  • динамический класс, обрабатывающий события изменения процесса (не обязательно);

  • начальные группы решения, устанавливаемые в процесс с указанием их ролей (не обязательно) ;

  • допустимые для установки в процесс группы решения с указанием их ролей;

  • конфигурация (не обязательно).

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

Конфигурация

В конфигурацию типа процесса могут быть включены блоки основной конфигурации.

Параметры конфигурации типа процесса, поддержанные ядром.

# скрытие в редакторе процесса ссылки полной правки описания
hideDescriptionChange=1
# 0 - hide, 1 (default) - show on tab process messages
#show.tab.messages=1
# отображение в процессе сообщений также и дочерних привязанных процессов
#show.messages.link.process=processMade, processDepend
# empty (default) or 0 - hide, 1 - show on tab process links
#show.tab.links=1
# требования указания обязательного комментария при переводы в статусы
requireChangeCommentStatusIds=<status_ids>
# коды групп исполнителей через запятую, которые можно указать при создании процесса
onCreateSelectGroup=<groupIds>
# шаблон текста при добавлении в описание процесса текста кнопкой "Добавить"
descriptionAddPattern=(${description}\n)[(${time}) (${user})]\t(${text})
# произвольный шаблон времени для добавляемого текста
descriptionAddPattern.timePattern=dd.MM HH:mm

# JSP шаблон для отображения карточки процесса вместо стандартного /WEB-INF/jspf/user/process/process/process.jsp
#processCardJsp=/WEB-INF/jspf/user/process/process/custom/process_jur/zayavka.jsp
# HTML стиль левого и правого блока карточки процесса, по-умолчанию они делятся поровну
#style.processCardLeftBlock=min-width: 500px;
#style.processCardRightBlock=width: 100%

# parameters related to linked processes
# 0 - hide, 1 (default) - show on tab linked processes
#show.tab.links.process=0

# при закрытии процесса проверка закрытости связанных дочерних процессов - down, либо родительских - up, 0 - не проверять никаких
process.close.check.processDepend=up
process.close.check.processMade=down

Где:

  • <status_ids> - коды статусов через запятую;

  • <groupIds> - коды групп через запятую.

Настройки поведения параметров процесса

# при ошибке правки параметров - обновление таблицы с параметрами, необходимо в случае, если при этом другие параметры изменяются динамическим кодом
onErrorChangeParamsReload=1
# требование заполненности параметров перед установкой статуса, одна или несколько записей вида
requireFillParamIdsBeforeStatusSet.<status_to_code>=<param_codes>
# сокрытие параметров в том или ином статусе, одна или несколько записей вида
hideParamIdsInStatus.<status_code>=<param_codes>
# параметры, редактор для которых скрыт в данном типе процесса (заполняются программно)
readonlyParamIds=<param_codes>

Где:

  • <param_code> - код параметра процесса, который должен быть указан при его закрытии, при этом редактор открывается под переключением статуса процесса;

  • <status_to_code> - код статуса, в который переводится процесс;

  • <param_codes> - коды параметров процесса через запятую;

  • <status_code> - код текущего статуса процесса.

Для настройки отображения параметра в зависимости от гибкой проверки условия одно или несколько правил:

# отображение параметра, только если выполняется JEXL выражение
showParam.<paramId>.checkExpression=<JEXL_EXPR>

Где:

  • <paramId> - код параметра;

  • <JEXL_EXPR> - JEXL выражение.

В JEXL процессор передаются следующие объекты для вызова функций:

Ограничение количества исполнителей по группам

Одно или несколько правил вида:

executorRestriction.<n>.groupId=<groupId>
executorRestriction.<n>.maxCount=<maxCount>

Где:

  • <n> - порядковый числовой номер правила;

  • <groupId> - код группы пользователей;

  • <maxCount> - максимальное число исполнителей из данной группы на процессе.

Просматриваются все правила в порядке их номеров.

Настройка левой области карточки процесса

Для настройки отображения левой области карточки процесса в конфигурацию типа добавляются одна или несколько конструкций вида:

processCard.<id>.mode=<modes>
processCard.<id>.components=<components>

Где:

  • <id> - порядковый номер правила;

  • <modes> - список через запятую режимов отображения карточки процесса, допустимые значения:

    • card - просмотр карточки с открытием в буфере,

    • linked - просмотр карточки процесса, привязанного к другому процессу с открытием в правой области первого процесса;

  • <components> - через запятую компоненты левого блока, либо произвольные JSP файлы, позволяющие кастомизировать карту процесса; допустимые стандартные блоки: header, status, description, executors, links, params.

На снимке ниже подписаны соответствующие блоки левого блока карточки процесса.

card config

Пример:

processCard.1.mode=card
processCard.1.components=header;jsp:/WEB-INF/jspf/user/process/process/custom/process_stp/contract_process_count.jsp;status;description;executors;params

Переменная в конфигурации типа процесса:

# * (default) - allow creation as linked in any object
#create.in.objectTypes=<типы объектов через запятую>
create.in.copyParams=перечень пар <с параметра>:<на параметр>, разделённых точкой с запятой
#
# открывать (1), не открывать (0), открывать мастером (wizard) вкладку с созданным привязанным процессом
create.in.<тип объекта>.openCreated=1

Разрешает создание процесса с привязанным данным объектом во вкладке Процессы объекта (ниже на скриншоте). Копирование параметров поддерживается только для объектов, использующих стандартную систему параметров системы. Типы объектов ядра:

  • customer - контрагент.

Типы объектов плагинов описаны в документации плагинов:

Пример. Возможность создания процесса с привязкой контрагента, копированием параметра с кодами 1 и 5 в контрагента в параметры процесса с кодами 3 и 6 соответственно:

create.in.objectTypes=customer
create.in.copyParams=1:3;5:6

Описание процесса

Макрос описаний процесса позволяет сгенерировать текст для заголовка вкладки процесса или для перечня процессов. Для генерации описаний в конфигурацию типа процесса добавляются записи вида:

processReference.<n>.objectTypes=<objectTypes>
processReference.<n>.stringExpression=<macros>

Где:

  • <n> - порядковый номер записи;

  • <objectTypes> - области, где используется данный макрос через запятую, перечень областей см. далее;

  • <macros> - JEXL выражение, передаваемые объекты см. далее.

Перечень областей:

  • customer - вкладка Процессы контрагента;

  • processCard - заголовок вкладки процесса;

  • linkedProcessList - список процессов к которым привязан данный процесс;

  • linkProcessList - список процессов, привязанных к данному;

  • open.processCard - process card in open interface.

В JEXL процессор передаются объекты:

Кроме того доступны переменные устанавливаемые в ru.bgcrm.servlet.filter.SetRequestParamsFilter.

Retrieving parameters may be quite expensive.

Пример конфигурации для генерации описания списке процессов контрагента из адреса и перечня услуг и на вкладке процесса из наименования контрагента и адреса:

processReference.1.objectTypes=customer
processReference.1.stringExpression=u.toString(processParam.addressValues(90, 'fromStreet')) + " : " + u.toString(processParam.listValueTitles(238))
processReference.2.objectTypes=processCard
processReference.2.stringExpression="Запрос док. ОИО: " + u.escapeXml(u.toString(processLink:linkTitles("customer"))) + "<br/>" + u.escapeXml(u.toString( processParam.addressValues(90, 'fromStreet'))) + "&nbsp;"

Пример вывода исполнителей процесса в описании. Выводится в связанных процессах контрагентов и договорах биллинга bitel.

processReference.1.objectTypes=customer,contract:bitel
processReference.1.stringExpression=<<END
   result = process.getDescription();
   result += "<br><b>" + u.getObjectTitles(u.getObjectList(ctxUserList, process.getExecutorIds())) + "</b>";
   return result;
END

Как выглядит в интерфейсе.

conf title
conf description

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

processReference.1.objectTypes=processCard
processReference.1.stringExpression="<span class='title'>#" + process.getId() +  " " + process.getTypeTitle() + " " +  "</span><span>" + u.escapeXml(process.getDescription())  + "</span>"

При закрытии в буфер, данный процесс будет выглядеть следующим образом:

conf title buffer

Карточка процесса

Карточка процесса открывается в буфере объектов и позволяет редактировать свойства уже созданного процесса.

card

В левой области расположены блоки редактирования свойства процесса и ссылки для их редактирования, настроенные для типа процесса параметры. Вид левого блока можно настроить в конфигурации типа процесса.

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

В правой области отображаются связанные с процессом данные, например связанные процессы, либо различные расширения, предоставляемые плагинами.

Удаление и слияние

Ссылка [X] слева от типа процесса вызывает меню с операциями Удаление и Слияние. Обе операции уничтожают текущий процесс, вторая предварительно переносит все сообщения и описание из него в целевой.

Группы решения и исполнители

Каждый процесс может выполняться одним или несколькими подразделениями (группами). При этом группа выступает в процессе в той или иной роли. По-умолчанию в системе определена одна роль с кодом 0 - "Выполнение" процесса. Список ролей может быть дополнен в конфигурации. Примерами ролей могут быть: "Инициация", "Продажа", "Согласование" и т.п. У каждой роли должен быть свой уникальный код.

На снимке ниже одна группа выполняет процесс в роли "Выполнение", другая "Инициация".

card groups

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

Executors Swap

eswap operation performs swapping executors placed with two different groups and roles. On the screen below Kernel Executors and Karl Marx will be exchanged.

executor swap

Отображение привязок в карточке процесса задаётся переменной в конфигурации типа процесса. К процессу могут быть привязаны различные объекты. Например: контрагенты, договоры.

link

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

object process

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

Данный способ, однако, вызывает значительную дополнительную нагрузку на БД при выводе списка и не позволяет гибко настраивать отображаемые столбцы. Вместо стандартного списка может быть отображена очередь процессов с фильтром по данному объекту. В конфигурации очереди могут быть определены столбцы и сортировки с явным значением value.

queue

Данная функция включается в конфигурации:

<objectType>.processes.queue=<queueId>

Где:

  • <objectType> - тип привязанного объекта, например customer или contract:<billingId>;

  • <queueId> - код очереди процессов.

Например:

customer.processes.queue=12
contract:bitel.processes.queue=11

Создание процесса

С помощью настройки в конфигурации типа процесса возможно разрешение создания процессов определённого типа прямо из данной вкладки.

Linked Processes

You can see the feature enabled and sample configurations in Demo System, process description Kernel Process Link.

The feature can be configured process type properties configuration.

About

Связи между процессами носят всегда направленный характер.

To distinguish those, we name sometimes a Parent process as Linked and a Child as Link.

Relations might have three types.

Where:

  • Link - simple reference from one process to another, no additional logic has been added;

  • Made - процессы B и C является частями процесса A, который может быть закрыт только после закрытия B и C;

  • Depend - процесс C зависит от процесса B и может быть закрыт только после закрытия B.

Tab

На скриншоте ниже в верхней таблице указаны процессы, к которым привязан данный (родительские для него), в нижней - привязанные к данному процессу (дочерние). Добавление привязок производится только в родительском процессе.

tab

Рассмотрим отображаемые на снимке экрана области В таблице 1 отображаются процессы, которые ссылаются на текущий процесс. В таблице 2 - те процессы, на которые ссылается текущий процесс. Краткое описание, выводящееся в таблице привязанных процессов, вид левого блока карточки процесса возможно настроить в конфигурации типа.

Карточка привязанного процесса может быть открыта прямо на вкладке привязок кликом по строке таблицы. При этом открывается только левая часть карточки процесса с основными свойствами.

open in

Clicking on the add link opens adding link editor.

add

Add Existing Process Link

Выпадающий список 3 - позволяет выбрать метод отношейний для привязки к текущему другого процесса, открытого в буфере.

After the relation type choice is taken the table with available processes is shown.

available

On the top area presented processed, opened in buffer. Below those selected so-called available processed, configured in process type using the following blocks.

<linkDirection>.available.{@inc:cnt}.link.types=<linkTypes>
<linkDirection>.available.{@cnt}.filter.process.types=<processTypes>
<linkDirection>.available.{@cnt}.filter.process.open=<openOrClose>
<linkDirection>.available.{@cnt}.filter.process.statuses=<statuses>

Where:

  • <linkDirection> - link for child links, linked for parent ones;

  • <linkTypes> - optional comma separated list of allowed relation types: processMade, processDepend, processLink;

  • <processTypes> - optional comma separated list with allowed process IDs;

  • <openOrClose> - optional 1 or 0 for selecting only open or closed processes;

  • <statuses> - optional comma separated list of allowed process status IDs.

Example for available parent and child processes:

linked.available.{@inc:cnt}.link.types=processDepend
linked.available.{@cnt}.filter.process.types=17
linked.available.{@cnt}.filter.process.open=1
linked.available.{@cnt}.filter.process.statuses=2,10

link.available.{@inc:cnt}.link.types=processMade,processLink
link.available.{@cnt}.filter.process.types=19

There are may be many such rules for link and linked available processes. Any of them will be selected sequentially.

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

Выпадающий список 4 - позволяет создать child процесс и привязать к данному процессу. Содержимое списка определяется записями в конфигурации типа процесса вида:

processCreateLink.<n>.title=<title>
processCreateLink.<n>.processTypeId=<typeId>
processCreateLink.<n>.linkType=<linkType>
# необязательные параметры
#processCreateLink.<n>.checkExpression=<expression>
#processCreateLink.<n>.checkErrorMessage=<expressionError>
# copy process parameters
#processCreateLink.<n>.copyParams=<copyRules>
# copy process links
#processCreateLink.<n>.copyLinks=<copyLinks>

Где:

  • <n> - порядковый номер записи;

  • <title> - наименование для списка;

  • <linkType> - тип связи: processLink - ссылается, processMade - порождён, processDepend - зависит;

  • <typeId> - код типа создаваемого процесса;

  • <expression> - JEXL expression, when returns false - the combo-box item is displayed strikethrough;

  • <exressionError> - error message shown on attempt to use a disabled item;

  • <copyRules> - через запятую коды копирующихся с текущего на создаваемый параметров, либо пары <from>:<to> - кодов однотипных параметров с какого на какой необходимо копировать;

  • <copyLinks> - копирование привязок на процесс, 1 - копировать все привязки, возможно ограничение по маске типов объектов, например: contract%, customer%.

В JEXL процессор передаются объекты:

Пример конфигурации. Создаётся ссылаемый процесс с кодом типа 9244, запись отображается в списке только если значение параметра с кодом 227 равно 1.

processCreateLink.1.title=Авария
processCreateLink.1.processTypeId=9244
# processLink - ссылается, processMade - порождён
processCreateLink.1.linkType=processLink
processCreateLink.1.checkExpression=processParam.getParamValue(227) == 1
processCreateLink.1.copyParams=48,46,150,151
processCreateLink.1.copyLinks=1

Рекомендации к применению

Использование связанных процессов рекомендуется в случае, когда существующие иные разделения не позволяют учитывать всю информацию.

Существующие методы организации данных о бизнес-процессах:

Процесс

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

Сообщения

Любой информационный обмен в рамках процесса. Параметров мало: тип, направление, адрес противоположной стороны. Входящие - исходящие звонки, письма, сообщения форума, HelpDesk а. Здесь же в дальнейшем будут сохраняться и встречи (как в классическом календаре Outlook). Это протокол обмена информацией, сообщения не изменяются после отправки.

Задача

Отложенное действие по процессу. Например, напомнить менеджеру сделать звонок. Или дублировать периодический процесс.

Связанный процесс

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

Разделять процессы следует в случае, если вложенные процессы:

  • Исполняются параллельно с другими дочерними либо с основным процессом. Если процесс просто последовательно меняет состояния - лучше добавить статусов. Исполняется несколькими исполнителями или группами - добавить групп решения либо ролей.

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