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

  • тип;

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

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

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

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

  • описание;

  • приоритет.

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

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

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

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

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

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

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

Статусы

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

proc status

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

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

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

type

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

type prop

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

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

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

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

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

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

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

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

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

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

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

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

# скрытие в редакторе процесса ссылки полной правки описания
hideDescriptionChange=1
# сокрытие (0) либо отображение 1 (на вкладке) сообщений, связанных с процессом
processShowMessages=1
# сокрытие (0) либо отображение 1 (на вкладке) процесса
processShowLinks=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%
#
# параметры поведения связанных процессов
# отображение вкладки
#processShowProcessLinks=1
# 0 - сокрытие привязки процессов из буфера обмена
#processCreateLinkModeSelect=0
# при закрытии процесса проверка закрытости дочерних зависимостей - down, либо родительских - up, 0 - не проверять никаких
#processDependCloseCheckDirection=down

Где:

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

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

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

# при ошибке правки параметров - обновление таблицы с параметрами, необходимо в случае, если при этом другие параметры изменяются динамическим кодом
onErrorChangeParamsReload=1
# код параметра - категории, который должен быть указан перед переводом процесса в конечный статус
categoryParamId=<param_code>
# требование заполненности параметров перед установкой статуса, одна или несколько записей вида
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

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

create.in.objectTypes=<типы объектов через запятую>
create.in.copyParams=перечень пар <с параметра>:<на параметр>, разделённых точкой с запятой
# открывать (1) либо не открывать (0) вкладку с созданным привязанным процессом
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 - список процессов, привязанных к данному.

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

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

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

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.2.objectTypes=processCard
processReference.2.stringExpression="<span class='title'>#" + process.getId() +  " " + process.getTypeTitle() + " " +  "</span><span>" + u.escapeXml( process.getDescription() )  + "</span>"

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

conf title buffer

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

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

card

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

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

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

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

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

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

card groups

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

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

link

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

У привязанных объектов процессы к ним относящиеся отображаются на вкладке "Процессы".

object process

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

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

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

  • Ссылается (processLink) - простая ссылка одного процесса на другой;

  • Порождён (processMade) - указание, что ссылаемый процесс создан из данного процесса;

  • Зависит (processDepend) - процесс не может быть закрыт пока не закрыты все процессы зависимые от него, либо от которых он зависит, настраивается опцией конфигурации типа процесса.

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

  • processShowProcessLinks=1 - отображение в карточке процесса вкладки со связями процесса с другими процессами;

  • processCreateLinkModeSelect=0 - скрыть редактор привязки к процессу произвольных открытых процессов (цифра 3 на снимке далее).

i0060

Рассмотрим отображаемые на снимке экрана области В таблице 1 отображаются процессы, которые ссылаются на текущий процесс.
В таблице 2 - те процессы, на которые ссылается текущий процесс.

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

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

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

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

processCreateLink.<n>.title=<title>
processCreateLink.<n>.processTypeId=<typeId>
processCreateLink.<n>.linkType=<linkType>
# необязательные параметры
#processCreateLink.<n>.checkExpression=<expression>
#processCreateLink.<n>.copyParams=<copyRules>
# копирование привязок
#processCreateLink.<n>.copyLinks=<copyLinks>

Где:

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

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

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

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

  • <expression> - JEXL выражение, позволяющее показывать пункт списка в зависимости от условий;

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

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

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

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

processShowProcessLinks=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

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

i0125

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

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

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

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

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

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

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

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

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

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

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