# Настройка шаблонов маршрутов

## Общие сведения

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

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

Чтобы настроить маршруты для документов, необходимо в группе "Управление процессами" выбрать пункт "Шаблоны маршрутов".

Откроется реестр шаблонов маршрутов.

![Пример реестра шаблонов маршрутов](./media/registry.png){: .zoom}

В столбце "Филиалы" отображается на каких филиалах используется шаблон маршрутов.

## Копирование шаблона маршрута

Для дублирования существующего документа необходимо отметить этот документ в реестре и нажать кнопку "Копировать" на верхней панели инструментов.

![Копировать](media/copy.png)

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

![Сорг](media/Corg.png)

![Скопированный маршрут](media/copyRoute.png)

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

![Копирование](media/copyToCorg.png)

![Сорг](media/CopiedCorg.png)

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

![Corg](media/Corg2.png)

![Corg](media/Corg4.png)

![Corg](media/corg3.png)

## Привязка к организации

Для привязки / открепления шаблона маршрута к организации необходимо отметить этот документ в реестре и нажать кнопку "Привязка к организации" на верхней панели инструментов.

![Привязка](media/privaz.png)

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

![Сорг](media/privaz2.png)

## Создание нового шаблона маршрута

Для создания нового шаблона маршрута необходимо нажать на кнопку <img src="../media/create.png" alt="Создать">.

Откроется форма для создания нового шаблона.

![Создание нового шаблона маршрута](./media/formInit.png){: .zoom}

В документе необходимо заполнить следующие поля:

- **Наименование:** – это пользовательское наименование шаблона, т.е. то название маршрута, которое пользователь видит при нажатии на кнопку "Создать маршрут".

- **Тип документа** – перечень типов карточек СЭД, для которых действует шаблон, может принимать несколько значений.

- **Табличная часть** – заполняется участниками шаблона маршрута документа.

- **Филиал:** – по умолчанию заполняется той организацией, в которой создается шаблон. Поле необходимо в случае холдинговых организаций.

Поля, не требующие обязательного заполнения:

- **Период действия** – задает период действия шаблона. Если период не задан, то шаблон действует бессрочно.

- **Логины | Пользователи** – задает список пользователей, способных создать такой шаблон маршрута в документе.

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

- **Подтип документа** - указывает на то, для какого подтипа документа действует шаблон. Если подтип не указан, то шаблон маршрута действует для всех подтипов документа.

- **Роли приложения** – задает список ролей, хотя бы одной из которых должен обладать пользователь, чтобы создать такой шаблон маршрута в документе.

- **Настройки этапа инициирования** в данном блоке заполняются условия по времени на обработку для инициатора документа.
   
**Инициатор является участником** – при включении данной опции инициатор документа автоматически добавляется в первый этап маршрута. При выключенной опции инициатор будет отсутствовать в маршруте документа.

**Время на обработку, дней:** - устанавливается срок обработки документа в рабочих днях согласно производственному календарю (по умолчанию - два рабочих дня).

**Время на обработку, часов:** - устанавливается срок обработки документа в рабочих часах согласно производственному календарю (по умолчанию - два рабочих часа).

- **Жесткий маршрут** – при включении данной опции данный маршрут становится не редактируемым для всех. Т.е. текущий участник маршрута не может вставлять или удалять согласующих в маршрут.

- **Новые элементы без действия:** – при включении данной опции в маршрут можно будет добавлять этапы без заполнения всех участников.

- **Длительность в часах:** – при включении данной опции в маршрут можно будет определять сроки отправки документов по маршруту в днях и часах согласно производственному календарю, для этого в табличной части появится столбец *Часов*.

- **Количество дней этапа инициатора:** - указывается количество рабочих дней согласно производственному календарю для обработки документа инициатору (по умолчанию 2 рабочих дня).

- **Скрывать оповещение об одном участнике маршрута** - при включении данной опции в маршрут, в случае, если в маршруте только один участник, не будет выводиться системное предупреждение о том, что маршрут не содержит других участников

![Системное предупреждение](./media/image1.png)

**Действие первого участника:** - Если включена опция **Инициатор является участником**, то можно задать инициатору действие, которое ему потребуется выполнить на первом этапе, при помощи поля Действие первого  участника. По умолчанию таким действием является "Инициатор (запустить маршрут)".

**Разрешенный статус первого участника:** - Данная опция распространяется только на первого участника маршрута. Если данное значение не задано - то у первого участника при нажатии на кнопку "Отправить" будет выходить набор допустимых статусов для назначенного действия, которые заданы в [настройках документа](../Настройка документов/Настройка документов.md). Если значение задано - то у первого участника при нажатии на кнопку "Отправить" будет выходить на выбор только указанный в настройках статус.

!!! warning
    Все расчеты проводятся по рабочим часам согласно производственному календарю, которые указываются в глобальных настройках.

    ![Время](media/time.png)

**Окно подтверждения** -  Данная опция распространяется на каждого участника маршрута. Если данное значение не задано - то у каждого участника, при нажатии на кнопку "Отправить" будет выходить окно с набором допустимых статусов и возможностью дополнить документ комментарием. Если значение задано - то у каждого участника при нажатии на кнопку "Отправить" будет выходить на выбор только указанный в настройках статус:

* **Все (показывать в полном виде)** - показывается окно в полном виде;
* **Только комментарии** - показывается только окно для комментариев к документу;
* **Не показывать, если статус допускает** - при согласовании документа окно не показывается. В случае несогласования документа при отправке будет показываться окно для комментариев к документу.

!!! note
    В случае если необходимо для каждого этапа настроить индивидуальный статус, то нужно заполнить [столбец "Окно подтверждения"](#столбец_окно_подтверждения) в табличной части. Необходимо обратить внимание в случае заполнения только опции "Окно подтверждения", указанный статус распространяется на каждого участника маршрута. Если в табличной части для каждого статуса указаны разные статусы, то отображаться будут они, в независимости от того какой статус выбран в опции.

Далее необходимо заполнить табличную часть. В качестве примера создадим шаблон следующего вида:

**1 этап**

- Инициатор документа

**2 этап**

- Смирнов А.А. – согласовать
- Денежная Е.К. – согласовать

**3 этап**

- Елизарьева Е.А. – согласовать

На втором этапе согласование параллельное.

Для того, чтобы инициатор в 1 этапе определялся автоматически, в документе шаблона маршрута включается опция (ставится галочка в поле) "Инициатор является участником".

В табличной части начинаем заполнение со второго этапа. Чтобы добавить новый этап необходимо нажать на кнопку <img src="../media/stageDown.png" alt="+ Этап">. Количество участников в добавленном этапе зависит от числа, указанного в поле справа от этой кнопки, по умолчанию – 1.

В маршруте после проделанных действий добавятся минимум 2 пустые строки: одна с номером этапа, вторая и далее – для указания новых участников маршрута.

![Добавленные пустые строки](./media/newStr.png){: .zoom}

В поле "Наименование этапа" можно внести название этапа в поле справа от номера этапа.

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

Столбец **И/ИЛИ** означает тип завершения этапа:

- Если необходимо, чтобы на этапе все участники выполнили порученное действие, необходимо указать **И**.

- Если необходимо, чтобы на этапе порученное действие выполнил хотя бы один участник, необходимо указать **ИЛИ**.

По умолчанию задается тип завершения **И**. Тип завершения **ИЛИ**, как правило, необходим на этапах регистрации с несколькими регистраторами.

![Заполнен первый участник второго этапа](./media/secondStageFirstPart.png){: .zoom}

!!! note
    В данной таблице номера этапов начинаются с 1. Но при выборе этого шаблона в документе номера этапов автоматически пересчитаются, т.е. данный этап станет вторым (2).

Чтобы в этап добавить нового участника, необходимо выделить строку с первым этапом и нажать на кнопку <img src="../media/participant.png" alt="+ Участник">.

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

![Заполнен второй участник второго этапа](./media/secondStageFull.png){: .zoom}

По аналогии в маршрут добавляется этап. Для этого необходимо нажать на кнопку ![новый этап](media/newEtap.png).

![Пример заполненного документа "Шаблон маршрута"](./media/thirdStageFull.png){: .zoom}

Для того чтобы удалить участника или этап необходимо выделить соответствующий элемент (строку с номером этапа или участником) и нажать на кнопку <img src="../media/deleteButton.png" alt="Удалить">.

#### Столбец "Служебное наименование из конструктора"

Используется в случае, когда заранее неизвестно какой именно участник будет участвовать в маршруте, но его выбор зависит от реквизитов создаваемого документа. В этом случае в [конструкторе документов](../Конструктор документов/Конструктор документов.md) в дополнительном атрибуте необходимо указать тип атрибута и служебное наименование. Например в подтипе "Документы о приеме на работу" заполняется атрибут "Работник" со служебным наименованием **#worker1#**.

![Конструктор](media/konstruktor.png){: .zoom}

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

![Шаблон](media/shablon.png){: .zoom}

Впоследствии при создании маршрута в подтипе "Документы о приеме на работу" будет автоматически определяться участник, которого указали в атрибуте в карточке документа.

![Участник](media/uchastnik.png){: .zoom}

#### Столбец "Окно подтверждения" 

Заполняется в случае, когда необходимо для каждого этапа настроить индивидуальный статус отображения окна при отправке документа далее по маршруту. Если значение задано - то у каждого участника при нажатии на кнопку "Отправить" будет выходить на выбор только указанный в настройках статус:

* **Все (показывать в полном виде)** - показывается окно в полном виде;
* **Только комментарии** - показывается только окно для комментариев к документу;
* **Не показывать, если статус допускает** - при согласовании документа окно не показывается. В случае несогласования документа при отправке будет показываться окно для комментариев к документу.

![Окно](media/window.png){: .zoom}

#### Столбец "Рассылка" 

Используется в случае, когда необходимо направить документ определенной группе пользователей, которые не участвуют в маршруте. В этом случае настраивается вначале необходимая [группа рассылки](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/%D0%9A%D0%AD%D0%94%D0%9E/%D0%93%D1%80%D1%83%D0%BF%D0%BF%D1%8B %D1%80%D0%B0%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8/%D0%93%D1%80%D1%83%D0%BF%D0%BF%D1%8B %D1%80%D0%B0%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8/). После этого данная группа выбирается из выпадающего списка и указывается статус маршрута при каком статусе выбранной группе будет направлена рассылка.

![Группа](media/group.png){: .zoom}

![Рассылка](media/rassylka.png){: .zoom}

В данном примере указано что после согласования заявления Макеевым С.П., документ поступит на обработку Елизарьевой Е.А., и одновременно с помощью [списка рассылки](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/%D0%9A%D0%AD%D0%94%D0%9E/%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0 %D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2/%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0 %D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2/#%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%BF%D0%BE_%D1%81%D1%82%D0%B0%D1%82%D1%83%D1%81%D0%B0%D0%BC_%D0%BC%D0%B0%D1%80%D1%88%D1%80%D1%83%D1%82%D0%B0_%D0%B2_%D1%80%D0%B5%D0%B5%D1%81%D1%82%D1%80%D0%B0%D1%85_%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2) направится пользователям Кузнецовой А.А. и Солодовниковой М.П..

![Макеев](media/makeev.png){: .zoom}

![Руководители](media/rukovoditeli.png){: .zoom}

Документ сохраняется  с помощью кнопок "Сохранить" и "Сохранить и выйти".

## Сервисные функции

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

<table>
  <tr>
    <th style="width: 25%;">Название функции</th>
    <th>Определение</th>
  </tr>
  <tr>
    <td><strong>Service.Chief</strong></td>
    <td>автоматически определяющая руководителя инициатора маршрута документа. Данные берутся из документа «Настройка пользователей». В случае если сотрудник сам является руководителем, в этом случае подбирается руководитель подразделения. Если в подразделения также указан этот же сотрудник, в этом случае этап с согласованием руководителя автоматически удаляется.</td>
  </tr>
  <tr>
    <td><strong>Service.Clerk</strong></td>
    <td>аналогично Service.Curator.</td>
  </tr>
  <tr>
    <td><strong>Service.Curator</strong></td>
    <td>автоматически определяющая куратора документа, указанного в поле "Куратор" в Договоре или Дополнительном документе к договору.</td>
  </tr>
  <tr>
    <td><strong>Service.Initiator</strong></td>
    <td>автоматически определяющая инициатора маршрута документа. Данного пользователя можно подключать во всех этапах кроме первого, если есть необходимость, чтобы инициатор появляется в ходе согласования. Т.е. после согласования на регистрацию документ поступит вновь к инициатору.</td>
  </tr>
  <tr>
    <td><strong>Service.ListOf.AgreementUsers</strong></td>
    <td>автоматически определяющая дополнительного согласованта в служебных записках.</td>
  </tr>
  <tr>
    <td><strong>Service.ListOf.AllChiefs</strong></td>
    <td>автоматически определяющая руководителя сотрудника из управленческой структуры, <a href="../../Настройка пользователей/Настройка пользователей/">настроек пользователей</a> и по подразделению.</td>
  </tr>
  <tr>
    <td><strong>Service.ListOf.Chiefs</strong></td>
    <td>автоматически определяющая руководителя инициатора маршрута документа из списка руководителей из управленческой структуры. В настройках учетной политики предприятия можно настроить определение руководителей по подуровням подразделений. Для этого настраивается константа <strong>СЭД_числоПодуровнейПодразделенийРуководителейУпрСтруктуры</strong> с заполненным значением константа. Если у константы значение = 1, то тогда ищется руководитель в текущем подразделении. Если 2 в текущем и на уровень выше.</td>
  </tr>
  <tr>
    <td><strong>Service.ListOf.Chiefs2</strong></td>
    <td>автоматически определяющая курирующего руководителя инициатора маршрута документа из списка руководителей из управленческой структуры.</td>
  </tr>
  <tr>
    <td><strong>Service.ListOf.ChiefsByStaff</strong></td>
    <td>автоматически определяющая руководителя инициатора маршрута документа из списка категории должностей по подразделению. В настройках учетной политики предприятия необходимо настроить определение руководителей по подразделениям. Для этого настраивается константа <strong>СЭД_числоПодуровнейПодразделенийРуководителейОргСтруктуры</strong> с заполненным числовым значением количества уровней по дереву, по которым необходимо найти руководителей. Например, если указать значение равное 1, то функция рассчитывает подразделение на один уровень вверх от той, в которой работает пользователь. По этим подразделениям находятся сотрудники с руководящими должностями. Также, если сотрудник сам является начальником отдела (категория должности 1 или 2), а в учетной политике настроено согласование на 1 уровень наверх по штатной расстановке, то в маршрут подставляется его руководитель выше.</td>
  </tr>
  <tr>
    <td><strong>Service.ListOf.COrg_HR_Doc_Sign</strong></td>
    <td>автоматически определяющая логины из <strong>Настройки учетной политики предприятия</strong> с закладки <strong>Ответственные лица</strong>, те, кто указан как Подписант кадровых приказов, и у которых период дата попадает в период действия.</td>
  </tr>
  <tr>
    <td><strong>Service.ListOf.FunctionalChiefs</strong></td>
    <td>автоматически определяющая руководителя сотрудника из управленческой структуры и <a href="../../Настройка пользователей/Настройка пользователей/">настроек пользователей</a>.</td>
  </tr>
  <tr>
    <td><strong>Service.ListOf.RecipientCopy</strong></td>
    <td>автоматически определяющая получателя служебной записки.</td>
  </tr>
  <tr>
    <td><strong>Service.Recipient</strong></td>
    <td>автоматически определяющая дополнительного получателя служебной записки.</td>
  </tr>
  <tr>
    <td><strong>Service.Signer</strong></td>
    <td>автоматически определяющая подписанта в служебных записках.</td>
  </tr>
    <tr>
    <td><strong>Service.ServiceDeskCustomer</strong></td>
    <td>автоматически определяющая заказчика в заявках в <a href="../../Заявка в техническую поддержку/Заявки в техподдержку/">техническую поддержку.</a></td>
  </tr>
  <tr>
    <td><strong>Service.StaffTrainingChief</strong></td>
    <td>автоматически определяющая руководителя сотрудника в заявках на обучение. Данные поставляются из столбца "Руководитель" в <a href="../../УОП/Планирование обучения/Заявки на обучение/Заявки на обучение/">заявке на обучение</a>.</td>
  </tr>
  <tr>
    <td><strong>Service.Worker</strong></td>
    <td>определяющая логин сотрудника, указанного в поле "Работник" в документе "Заявления от сотрудника".</td>
  </tr>
</table>


<!-- - **_Service.ListOf.Workers_** - определяющая логин сотрудника, указанного в поле "Работник" в тиражированном заявлении, а также определяющая пользователей в соответствующий этап маршрута в документе на подписание. -->
 
## Автоматическая подстановка руководителей в маршрут

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

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

!!! warning
     Маршрут согласования через [организационную](#через_организационную_структуру) либо [управленческую](#через_управленческую_структуру) структуры, должен включать этап согласования руководителем. У данного этапа должно быть указано служебное слово в наименовании **Согласование руководителем**. При наличии данного служебного наименования в наименовании срабатывает проверка на наличие руководителя у сотрудника.
     
     ![Этап](media/Etap.png)
     
     При отсутствии руководителя у инициатора документа, или при не указании служебного слова в наименовании этапа, при подписании документа, система выдаст оповещение об отсутствии руководителя для согласования.

     ![Нет руководителя](media/netRukovoditel.png)

### Через сервисную функцию

Данный способ рекомендуется в случае настройки по функциональной подчиненности, когда руководителя работника невозможно определить по организационной структуре. В таком случае руководитель работника указывается индивидуально для каждого работника [в документе "Настройка пользователя", поле "Руководитель"](../Настройка пользователей/Настройка пользователей.md). Обычно это поле заполняется при создании сотрудника или смене его руководителя.

![Пример настройки пользователя с руководителем](./media/userSettingsExample.png){: .zoom}

В шаблоне маршрута в качестве пользователя нужно в качестве участника выбрать **Service.Chief**.

![Пример шаблона с руководителем через Service.Chief](./media/templateWithChiefExample.png){: .zoom}

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

![Пример маршрута с руководителем через Service.Chief](./media/routeExample.png){: .zoom}

### Через организационную структуру

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

Преимущества:

- Не нужно настраивать руководителя для каждого работника.

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

<!-- Данный способ включается при помощи заполнения поля "InternalName" значением **DynamicFromDepartment**. Создаваемый таким способом маршрут называется динамическим. Использовать сервисную функцию Service.Chief не требуется. Этапы, заданные в таблице в шаблоне маршрута, будут вставлены после этапов с руководителями.

![Пример шаблона с руководителем через InternalName](./media/templateInterNameExample.png){: .zoom}

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

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

Группировка этапов и их участников осуществляется по подразделениям.

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

![Пример динамического маршрута с руководителем](./media/routeDynamicExample.png){: .zoom} -->

В шаблоне маршрута в качестве пользователя нужно в качестве участника выбрать Service.ListOf.ChiefsByStaff.

![Оргструктура](media/orgStructure.png){: .zoom}

В итоге после создания маршрута в этапе "Руководитель" будет (будут) проставлен руководитель (руководители) по организационной структуре.

![Оргструктура шаблон](media/orgStrucMarsch.png){: .zoom}

Если в подразделении нет сотрудников с требуемой руководящей должностью, а таковой требуется в качестве участника маршрута, необходимо указать его в поле "Руководитель" документа ["Подразделение"]. Такое возможно при временном назначении руководителя подразделения или при наличии прикрепления у сотрудника к другому подразделению.

В приведённом примере участник второго этапа обладает должностью с категорией "Руководители", а участник третьего этапа назначен в качестве руководителя подразделения.

### Через управленческую структуру

Данный способ заключается в автоматическом определении руководителей сотрудника по управленческой структуре. 

В шаблоне маршрута в качестве пользователя нужно в качестве участника выбрать Service.ListOf.Chiefs. У руководителя совершенное действие необходимо указать "Согласовать".

![Управленческая структура](media/uprStructura.png){: .zoom}

В итоге после создания маршрута в этапе "Руководитель" будет (будут) проставлен руководитель (руководители) по управленческой структуре.

![Дерево](media/derevo.png)

![Маршрут](media/uprStrMarshrut.png)

### Настраиваемый шаблон для тиражируемых заявлений

Для тиражируемых заявлений должен быть настроен шаблон маршрута согласования. Для этого необходимо заполнить  поле "InternalName" значением **CopyEmployeeStatement**.

!!! warning
    На каждой организации должен быть заведен пользователь с логином **CopyEmployee**. (ФИО - Автоматическое тиражирование заявлений) с ролью **hr_docflow_worker** (или **docflow**). От имени указанного пользователя будут направляться тиражированные заявления.

На первом этапе указывается проставляется пользователь с логином **CopyEmployee** с назначенным действием "Инициатор (запустить маршрут)". На втором этапе указывается сервисная функция **Service.ListOf.Workers**, которая подставит работника в маршрут.

!!! warning
    Данный шаблон должен быть заведен на каждой организации

![Шаблон тиражируемого заявления](media/shablonTirazhiruem.png){: .zoom}

![Маршрут тиражируемого заявления](media/marshrutTirazh.png){: .zoom}

## Настраиваемые ограничения

Шаблоны маршрутов также можно фильтровать по произвольным условиям или устанавливать фильтры, зависящие от реквизитов самого согласуемого документа.
Для этого в документе "Шаблоны маршрутов" нужно перейти на вкладку "Настраиваемые ограничения".

![Настраиваемые ограничения](media/nastrOgranicheniya.png){: .zoom}

Настраиваемые ограничения работают следующим образом: сначала система подбирает шаблоны по правилам из вкладки "Основная", затем из них отсекает те, что не подходят по настраиваемым ограничениям.
В поле “Основная таблица документа” указывается наименование таблицы, к которой привязан документ. В поле "Дочерняя таблица документа" указывается табличная часть документа.  Например: для документа "СЗ на командировку" основная таблица будет DocflowDocument, дочерняя DocflowDocumentDetail. Для фильтрации в дочерней таблице документа нужно что бы были заполнены оба поля “Основная таблица документа” и "Дочерняя таблица документа".

!!! warning
    Для PostgreSQL сначала пишется схема, потом наименование таблицы в кавычках. Пример: dfd."DocflowDocument".

![Пример заполненной вкладки "Настраиваемые ограничения-дочерняя таблица"](media/tableOgran.png){: .zoom}

Ознакомиться с названиями таблиц можно в разделе ["Набор возможных документов и их основных полей"](../Настройка документов/Настройка документов.md#таблица).
Поле "Примечание" заполняется при необходимости. 

![Пример заполненной вкладки "Настраиваемые ограничения-примечание"](media/note.png){: .zoom}

В таблице "Настройка" добавляем строку с помощью кнопки "Добавить".

В столбце "Поле фильтра»" пишется условие на языке SQL, по которому будет осуществляться фильтрация. Пример: COALESCE(head."Subject",' ') = 'Москва'. В данном примере фильтр отработает по полю "Куда Страна/Город", где в данных будет указано слово "Москва". Под SQL-выражением head подразумевается таблица, указанная в поле "Основная таблица документа".

![Пример заполненной вкладки "Настраиваемые ограничения-фильтр"](media/filtr.png){: .zoom}

В столбце "Произвольное выражение" пишется условие на языке SQL, по которому будет осуществляться ограничение. Пример: not exists(select 1 from dbo.DocflowDocument where VCode = @docCode and DocTemplate = 17). Параметр @docCode указывает на текущий код обрабатываемого документа.

![Пример заполненной вкладки "Настраиваемые ограничения-фильтр2"](media/filtr2.png){: .zoom}

### Примеры настраиваемых ограничений

#### Пример настраиваемого ограничения для [корректирующего заявления](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/%D0%9A%D0%AD%D0%94%D0%9E/%D0%97%D0%B0%D1%8F%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F %D0%BE%D1%82 %D1%81%D0%BE%D1%82%D1%80%D1%83%D0%B4%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2/%D0%97%D0%B0%D1%8F%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F %D0%BE%D1%82 %D1%81%D0%BE%D1%82%D1%80%D1%83%D0%B4%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2/#%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D1%80%D1%80%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B5%D0%B3%D0%BE_%D0%B7%D0%B0%D1%8F%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F)

`(Head."TypeName" = 'EmployeeStatement' and 
Head."DocumentSubtype" in (133,134)
)`

Где 133,134 - VCode подтипов заявлений.

#### Пример настраиваемых ограничений для поля "Срочность" во [входящем документе](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/%D0%A1%D0%AD%D0%94/%D0%92%D1%85%D0%BE%D0%B4%D1%8F%D1%89%D0%B8%D0%B9%20%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82/%D0%92%D1%85%D0%BE%D0%B4%D1%8F%D1%89%D0%B8%D0%B9%20%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82/), [исходящем документе](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/%D0%A1%D0%AD%D0%94/%D0%98%D1%81%D1%85%D0%BE%D0%B4%D1%8F%D1%89%D0%B8%D0%B9%20%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82/%D0%98%D1%81%D1%85%D0%BE%D0%B4%D1%8F%D1%89%D0%B8%D0%B9%20%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82/), [служебной записке](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/%D0%A1%D0%AD%D0%94/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F%20%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%BA%D0%B0/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F%20%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%BA%D0%B0/), [организационно-распорядительном документе](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/%D0%A1%D0%AD%D0%94/%D0%9E%D0%A0%D0%94/%D0%9E%D0%A0%D0%94/):

<style>
  table {
    border-collapse: collapse;
  }

  td,
  th {
    border: 1px solid gray;
    padding: 8px;
    text-align: center;
  }

  th:nth-child(3) {
    vertical-align: middle;
  }

  td em {
    font-style: italic;
  }

  td code {
    font-family: Consolas, monospace;
    white-space: pre-wrap;
  }
</style>

<table>
  <tr>
    <th>Тип документа</th>
    <th>Срочность</th>
    <th style="vertical-align: middle;">Настраиваемое ограничение</th>
  </tr>
  <tr>
    <td rowspan="2" style="vertical-align: middle;">Входящий документ</td>
    <td><em>срочный</em></td>
    <td><code>"(Head.""TypeName"" = 'IncomingDocument' and Head.""Urgency"" in (27) )"</code></td>
  </tr>
  <tr>
    <td><em>несрочный</em></td>
    <td><code>"(Head.""TypeName"" = 'IncomingDocument' and Head.""Urgency"" in (28) )"</code></td>
  </tr>
  <tr>
    <td rowspan="2" style="vertical-align: middle;">Исходящий документ</td>
    <td><em>срочный</em></td>
    <td><code>"(Head.""TypeName"" = 'OutgoingDocument' and Head.""Urgency"" in (27) )"</code></td>
  </tr>
  <tr>
    <td><em>несрочный</em></td>
    <td><code>"(Head.""TypeName"" = 'OutgoingDocument' and Head.""Urgency"" in (28) )"</code></td>
  </tr>
  <tr>
    <td rowspan="2" style="vertical-align: middle;">Служебная записка</td>
    <td><em>срочный</em></td>
    <td><code>"(Head.""TypeName"" = 'ServiceRecord' and Head.""Urgency"" in (27) )"</code></td>
  </tr>
  <tr>
    <td><em>несрочный</em></td>
    <td><code>"(Head.""TypeName"" = 'ServiceRecord' and Head.""Urgency"" in (28) )"</code></td>
  </tr>
  <tr>
    <td rowspan="2" style="vertical-align: middle;">ОРД</td>
    <td><em>срочный</em></td>
    <td><code>"(Head.""TypeName"" = 'OrganizationalDocument' and Head.""Urgency"" in (27) )"</code></td>
  </tr>
  <tr>
    <td><em>несрочный</em></td>
    <td><code>"(Head.""TypeName"" = 'OrganizationalDocument' and Head.""Urgency"" in (28) )"</code></td>
  </tr>
</table>



## Настройка доступа

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

![Редактирование маршрута](media/readRoute.png)

В данном примере указано, что пользователь у которого присутствует роль **hr_docflow_hr** сможет редактировать жесткий маршрут.

!!! warning
    Редактировать возможно только входящий, исходящий, поручения, организационно-распорядительные документы, служебные записки, доверенности на конструкторе

!!! note
    Если данная табличная часть не заполнена, то жесткий маршрут к редактированию недоступен.