Данный тип этапа требует указания поля из заявки, в котором будет находится текущий пользователь, создающий заявку.
Данный тип этапа требует указания поля из заявки, в котором будет находится текущий пользователь, создающий заявку.
**Предварительная настройка**
Предварительная настройка
^^^^^^^^^^^^^^^^^^^^^^
**Шаг 1.** Возвращаемся в форму заявки
**Шаг 1.** Возвращаемся в форму заявки
...
@@ -94,7 +95,8 @@
...
@@ -94,7 +95,8 @@
В результате этого, поле автоматически будет заполняться учетной записью пользователя, создавшего заявку.
В результате этого, поле автоматически будет заполняться учетной записью пользователя, создавшего заявку.
**Создание этапа маршрута**
Создание этапа маршрута
^^^^^^^^^^^^^^^^^^^^^
**Шаг 1.** В настройках этапа указываем
**Шаг 1.** В настройках этапа указываем
...
@@ -227,4 +229,166 @@ counter_number - код поля "Номер заявки"
...
@@ -227,4 +229,166 @@ counter_number - код поля "Номер заявки"
.. note::
.. note::
Кнопка **«Отправить тестовое письмо»** позволяет проверить работу уведомления прямо из маршрута, отправкой уведомления на почту. (Для этого в приложении должна быть настроена почтовая служба). После нажатия на кнопку система предложит выбрать уже созданную заявку в реестре, для того чтобы отправить письмо на указанную в заявке почту.
Кнопка **«Отправить тестовое письмо»** позволяет проверить работу уведомления прямо из маршрута, отправкой уведомления на почту. (Для этого в приложении должна быть настроена почтовая служба). После нажатия на кнопку система предложит выбрать уже созданную заявку в реестре, для того чтобы отправить письмо на указанную в заявке почту.
Этап 4. Назначение исполнителя
Вход - заявка поступившая менеджеру
Выход - заявка с назначенным по ней исполнителем
Для реализации данного шага, будем использовать тип "Работа по форме"
Назначение исполнителя выполняется менеджером.
Так как конкретный исполнитель может отличаться от заявки к заявке, его необходимо указать вручную в процессе выполнения этапа.
Для начала нам необходимо создать на форме поле, в котором будет указан актуальный менеджерский состав для назначения исполнителя.
Предварительная настройка
^^^^^^^^^^^^^^^^^
**Шаг 1.** Возвращаемся на форму
**Шаг 2.** В скрытой таблице под полем "Автор" добавляем еще одно поле **"Менеджер"** с компонентом **"Объекты Synergy"**
**Шаг 3.** В настройках компонента присваиваем ему код содержащий смысловую нагрузку (например entity_manager) и в настройке "Тип данных" выбираем тип "Пользователь", «Должности» либо «Подразделения».
.. note::
Если мы хотим чтобы заявка на данном этапе падала конкретному человеку – мы прикрепляем к заявке конкретно его учетную запись, выбрав для этого тип данных **«Пользователь»** и выбрав в поле конкретного человека.
Если же, в системе имеется должность, с назначенными на нее пользователями, отвечающими за определенную работу, то используется тип данных **«Должности»**, в котором указывается должность и работа будет падать всем пользователям, состоящим на данной должности.
Если необходимо направлять работу целому подразделению, с вложенными в него должностями, то используется тип данных **«Подразделения»**, тогда работа будет поступать всем людям, состоящим на всех вложенных должностях выбранного подразделения.
**Шаг 4.** Сохраняем форму
Создание этапа маршрута
^^^^^^^^^^^^^^^^^
**Шаг 1.** В редакторе маршрута нажимаем кнопку **"+"** на панели "Действия"
**Шаг 2.** В настройках этапа указываем:
* Тип действия - работа по форме
* Название этапа - назначение исполнителя
* Ответственный - указываем код созданного нами поля с менеджером (например у нас это entity_manager)
* Тип работы - "Работа"
* Включаем настройку "Использовать форму завершения"
.. admonition:: Форма завершения.
Форма завершения — это модальное окно, которое открывается при выполнении работы и определяет, что должен сделать пользователь для завершения этапа.
Существует несколько типов форм завершения:
* Комментарий — результатом является комментарий.
* Файл — результатом является файл (с устройства, из хранилища или из приложений работы).
* Документ — выбор или создание документа, связанного с работой.
* Форма — заполнение отдельной формы (используется в нашем случае).
* Без результата — завершение без результата.
Создание формы завершения
^^^^^^^^^^^^^^^^^^^^
**Шаг 1.** Создаем отдельную форму кликнув правой кнопкой мыши по нужной папке → Добавить → Базовые сущности → Форма.
**Шаг 2.** Задаем форме:
* понятное наименование, отличающее её от основной формы
* понятный код
**Шаг 3.** Добавляем поле для указания исполнителя:
* Наименование - Исполнитель
* компонент «Объекты Synergy»
делаем поле обязательным, так как исполнитель является обязательным участником следующего шага процесса.
**Шаг 4.** Сохраняем форму.
Привязка формы завершения к этапу
^^^^^^^^^^^^^^^
**Шаг 1.** Возвращаемся к настройке этапа "Назначение исполнителя"
**Шаг 2.** В строке **«Форма завершения»** нажимаем кнопку «+».
В открывшемся окне:
* выбираем тип завершения «Форма»;
* задаём код и наименование (для уджобства делаем их аналогичными созданной форме);
* в поле «Форма» выбираем созданную форму.
**Шаг 3.** Сохраняем этап.
.. important::
Если работа направляется на **должность** или **подразделение** необходимо включить настройку: **«Прервать выполнение параллельных этапов после завершения одного из них»**.
Иначе каждому пользователю потребуется выполнить назначение исполнителя, прежде чем маршрут продолжится.
.. admonition:: ПРИМЕЧАНИЕ
Т.к форма завершения является отдельной сущностью, данные, введенные в форму завершения не попадают в основную форму автоматически. Для дальнейшего использования данных, введенных в форму завершения, их нужно перенести в основную форму при помощи отдельного этапа **«Блокирующий процесс»**. Подробно будет описано в этапе 5
Этап 5. Смена статуса заявки
-----------------------------
**Вход** - заявка с назначенным по ней исполнителем
**Выход** - заявка со статусом "в работе"
Смена статуса выполняется автоматически с помощью скрипта интерпретатора, запускаемого этапом маршрута типа **«Блокирующий процесс»**.
.. note:: Скрипт интерпретатора - это программный код на JavaScript внутри системы Synergy, который выполняется без компиляции и позволяет автоматизировать логику работы системы.
Он используется для расчетов, обработки данных форм и карточек, а также для реакции на внутренние события системы.
Скрипт выполняется сразу при запуске или событии и возвращает результат выполнения системе.
Подробнее о том, что такое скрипт интерпретатора можно найти здесь http://rtd.lan.arta.kz/docs/guide/ru/minsky/interpreter.html
Создание скрипт интерпретатора
^^^^^^^^^^^^^^^^^^^^^^^^^^
**Шаг 1.** В дереве приложения выбираем папку для хранения скриптов.
Для удобства это может быть:
* папка integrations,
* либо можно создать отдельную папку block_processes.
**Шаг 2.** Кликаем по папке правой кнопкой мыши → Добавить → Интеграция → Скрипт интерпретатора.
**Шаг 3.** В открывшемся окне редактирования кода указываем:
* Наименование - Система автоматически задаёт базовый префикс ``event.blocking.interpreter``
Необходимо дополнить наименование и код, используя латинские буквы и отражая логику работы скрипта. Например ``event.blocking.interpreter.change.status_work``
* Код - формируется автоматически из наименования
* Описание - добавляется при необходимости для пояснения логики работы скрипта
* Комментарий по умолчанию - обязательная настройка, это сообщение которо система выведет после выполнения скрипта. (например "ОК" или "Статус изменен")
* Авторизация - скрипту для срабатывания необходимы права доступа. Здесь имеется два варианта
* По логину и паролю - понадобится логин и пароль учетной записи с правами администратора
* По ключу - понадобится ключ администратора
**Шаг 4.** Выбираем тип авторизации "По логину и паролю" и указываем учетную запись администратора
.. important:: При смене логина и пароля учетной записи администратора логин и пароль нужно будет обновить во всех скриптах интерпретатора, использующих эту учетную запись
**Шаг 5.** В редактор кода вставляем стандартный скрипт для смены статуса
.. code-block:: javascript
var result = true;
var message = 'Смена значения статуса';
try {
var form = platform.getFormsManager().getFormData(dataUUID);
form.load();
form.setValue('код справочника', 'код значения');
form.save();
} catch (e) {
result = false;
message = e.message;
**Шаг 3.** Вместо слов:
* "код справочника" - указываем код поля в котором находится выпадающий список статусов, например у нас это listbox_status
* "код значения" - значение, на которое должен смениться статус, согласно справочнику у нас это значение 4 ("В работе")
Если все сделано правильно, код будет выглядеть так:
**Шаг 4.** Сохраняем скрипт интерпретатора и возвращаемся к настройке этапа