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

  • тип;

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

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

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

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

  • описание;

  • приоритет.

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

В большинстве 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
#processCreateLinkModeSelect=1
#

Где:

  • <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=1 - привязка к процессу произвольных открытых процессов (цифра 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).
    Это протокол обмена информацией, сообщения не изменяются после отправки.

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

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

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

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

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