Files
ecm-administrator-manuals/docs/Admin manuals/Настройка архива/index.md

435 lines
32 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Настройка архива вложенных документов
## Общее описание
Настройка архива вложенных документов необходима для работы аналитической формы [Архив вложенных документов](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Работа%20со%20вложениями/#архив_документов) и происходит в несколько этапов:
* В документ «Справочники поисковой системы» заносятся поля для фильтра, по которым будут собираться вложения.
* В справочник «Итоговые выборки поисковой системы» добавить документ с выборкой из некоторой таблицы для документа или группы документов, если их сущности извлекаются одинаково.
* В документе "Настройка документа" на вкладке "Контекстный поиск" заполнить несколько полей.
* Обновить страницу (клавиша F5), чтобы изменения вступили в силу.
## Справочники поисковой системы
Чтобы открыть документ «Справочники поисковой системы», необходимо в Меню в поисковой строке ввести - «Справочники поисковой системы».
Откроется документ "Справочники FTS". В нём необходимо заполнить таблицу "Фильтры".
![Справочники FTS](./media/CustomFTSFiltersForm.png)
Id | Name | Description
---|------|------------
Contractor | Контрагент |
Contract | Договор |
SignatoryUser | Работник |
Project | Проект |
Initiator | Инициатор |
CUser | Создатель документа |
Curator | Куратор |
StageUser | Участник маршрута |
EmpowermentSubject | Полномочия |
Существует строго определённый набор значений поля "Id", приведённый в [таблице ниже](#таблица). Соответствующее им поле "Name" заполняется произвольно. В справочнике «Итоговые выборки поисковой системы» этим значениям будут поставлены в соответствие поля в таблицах, по которым будет осуществляться поиск и фильтрация документов с вложениями.
## Итоговые выборки поисковой системы
Чтобы открыть справочник «Итоговые выборки поисковой системы», необходимо в меню в папке "Администрирование", подпапке "Документооборот", подпапке "Поисковая система" выбрать пункт «Итоговые выборки поисковой системы».
![Меню](./media/ResultFTSMenu.png)
Откроется реестр "Итоги FTS".
![Итоги FTS](./media/ResultFTSRegistry.png)
Значения этого справочника будут предлагаться для выбора в документе ["Настройка документа"](../Настройка документов/index.md). Для создания нового документа необходимо нажать на кнопку "Создать" на верхней панели инструментов.
![Кнопка "Создать"](./media/create.png)
В поле "Выборка" необходимо ввести обозначение для документа или группы документов, если их сущности извлекаются одинаково, которое будет использоваться в качестве одного из значений в настройках документов. В поле "Примечание" можно внести пояснения, например, к каким именно документам относится выборка.
![Пример заполнения полей "Выборка" и "Примечание"](./media/ResultFTSHeader.png)
Под полем "Выборка" необходимо прописать результирующий селект, который в процессе расчета будет выполнять система. Структура селекта для всех выборок должна быть одинаковой, они будут объединяться с помощью оператора ```UNION```. Выборка состоит из следующих полей:
* ```DocCode``` - уникальный код документа, используемый в системе; как правило ```VCode```.
* ```DocType``` - тип документа; как правило ```TypeName```.
* ```DocDate``` - дата документа; свойство, которое указывается в *Настройке документа* и передаётся в качестве параметра; указывается ```:DateProperty```.
* ```DocNumber``` - номер документа; свойство, которое указывается в *Настройке документа* и передаётся в качестве параметра; указывается ```:NumberProperty```.
* ```ContractorId``` - уникальный код контрагента, используемый в системе.
* ```ContractId``` - уникальный код договора, используемый в системе.
* ```AddContractId``` - уникальный код дополнительного документа к договору, используемый в системе.
* ```ProjectId``` - уникальный код проекта, используемый в системе.
В зависимости от подключаемых документов будут меняться таблица, стоящая после оператора ```FROM```, и присваиваемые значения установленных в селекте полей. Если для них есть соответствующие им поля в таблице, их необходимо присвоить. Например, полю ```ContractId``` должен соответствовать код договора, который есть в таблице ```dbo.DocflowDocument``` под названием ```Contract```. Если такого поля в таблице нет, необходимо присвоить значение ```null```. Например, в таблице ```dbo.DocflowDocument``` не указывается код дополнительного документа к договору, поэтому значению ```AddContractId``` присваивется ```null```.
**В левую часть указывается скрипт:**
```sql
SELECT t."VCode" AS "DocCode"
, t."TypeName" AS "DocType"
, :DateProperty AS "DocDate"
, :NumberProperty AS "DocNumber"
, NULL::bigint AS "ContractorId"
, NULL::bigint AS "ContractId"
, NULL::bigint AS "AddContractId"
, NULL::bigint AS "ProjectId"
FROM dfd."UniversalDocument" as t
WHERE 1 = 1
```
**В правую часть:**
```sql
SELECT t."VCode" AS "DocCode"
, t."TypeName" AS "DocType"
, :DateProperty AS "DocDate"
, :NumberProperty AS "DocNumber"
, NULL AS "DocName"
, NULL AS "DocTheme"
, NULL AS "DocDefinition"
FROM dfd."UniversalDocument" as t
WHERE 1 = 1
```
В таблицу справа "Фильтры" необходимо занести значения из *Справочника поисковой системы*, по которым будет осуществляться фильтр, и SQL-скрипт кусок кода, который будет подставлен в предложение WHERE результирующего селекта. Значение, сравниваемое с ```an.Value```, будет совпадать со значением в столбце ```ID``` таблицы "Фильтр". Значение, сравниваемое с ```an.Value```, будет совпадать с полем таблицы, которое присваивается одному из полей селекта.
<!-- ![Пример документа "Итог FTS"](./media/ResultFTSForm.png) -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SQL Syntax Highlighting</title>
<style>
table {
width: 100%;
border-collapse: collapse;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
}
th {
background-color: #f2f2f2;
text-align: left;
}
code {
background-color: #f9f9f9;
padding: 2px 4px;
border-radius: 4px;
}
.sql-keyword {
color: #0000FF;
font-weight: bold;
}
.sql-identifier {
color: #A31515;
}
.sql-string {
color: #A31515;
}
.sql-comment {
color: #008000;
}
</style>
</head>
<body>
<h2>Примеры настраиваемых выборок</h2>
<h3>Настраиваемая выборка для кадрового электронного документооборота</h3>
<table>
<thead>
<tr>
<th>Код</th>
<th>Наименование</th>
<th>SQLScript</th>
</tr>
</thead>
<tbody>
<tr>
<td>CUser</td>
<td>Создатель документа</td>
<td><code>and exists( select 1 from <span class="sql-identifier">"tmp_anFilters_for_documentSearch"</span> as an where an.<span class="sql-identifier">"id"</span> = <span class="sql-string">'CUser'</span> and an.<span class="sql-identifier">"value"</span> = cast(t.<span class="sql-identifier">"CUser"</span> as character varying) )</code></td>
</tr>
<tr>
<td>Initiator</td>
<td>Инициатор</td>
<td>
<code>and( <br>
exists( <br>
select 1 <br>
from <span class="sql-identifier">"tmp_anFilters_for_documentSearch"</span> as an <br>
join <span class="sql-identifier">comdoc."Route"</span> as r on r.<span class="sql-identifier">"DocCode"</span> = t.<span class="sql-identifier">"VCode"</span> and r.<span class="sql-identifier">"DocType"</span> = t.<span class="sql-identifier">"TypeName"</span> <br>
where an.<span class="sql-identifier">"id"</span> = <span class="sql-string">'Initiator'</span> <br>
and r.<span class="sql-identifier">"Initiator"</span> = an.<span class="sql-identifier">"value"</span> <br>
)</code>
</td>
</tr>
<tr>
<td>StageUser</td>
<td>Участник маршрута</td>
<td>
<code>and <br>
exists( <br>
select 1 <br>
from <span class="sql-identifier">"tmp_anFilters_for_documentSearch"</span> as an <br>
join <span class="sql-identifier">comdoc."Route"</span> as r on r.<span class="sql-identifier">"DocCode"</span> = t.<span class="sql-identifier">"VCode"</span> and r.<span class="sql-identifier">"DocType"</span> = t.<span class="sql-identifier">"TypeName"</span> <br>
join <span class="sql-identifier">comdoc."RouteStage"</span> as s on s.<span class="sql-identifier">"PCode"</span> = r.<span class="sql-identifier">"VCode"</span> <br>
join <span class="sql-identifier">comdoc."StageItem"</span> as i on i.<span class="sql-identifier">"PCode"</span> = s.<span class="sql-identifier">"VCode"</span> <br>
where an.<span class="sql-identifier">"id"</span> = <span class="sql-string">'StageUser'</span> <br>
and r.<span class="sql-identifier">"RouteStatus"</span> NOT IN (4) <br>
and i.<span class="sql-identifier">"StageUser"</span> = an.<span class="sql-identifier">"value"</span> <br>
)</code>
</td>
</tr>
<tr>
<td>SignatoryUser</td>
<td>Работник</td>
<td>
<code>and( <br>
exists( <br>
select 1 <br>
from <span class="sql-identifier">"tmp_anFilters_for_documentSearch"</span> as an <br>
join <span class="sql-identifier">comdoc."Route"</span> as r on r.<span class="sql-identifier">"DocCode"</span> = t.<span class="sql-identifier">"VCode"</span> and r.<span class="sql-identifier">"DocType"</span> = t.<span class="sql-identifier">"TypeName"</span> <br>
where an.<span class="sql-identifier">"id"</span> = <span class="sql-string">'SignatoryUser'</span> <br>
and r.<span class="sql-identifier">"DocType"</span> = <span class="sql-string">'EmployeeStatement'</span> <br>
and r.<span class="sql-identifier">"Initiator"</span> = an.<span class="sql-identifier">"value"</span> <br>
) or exists( <br>
select 1 <br>
from <span class="sql-identifier">"tmp_anFilters_for_documentSearch"</span> as an <br>
join <span class="sql-identifier">comdoc."Route"</span> as r on r.<span class="sql-identifier">"DocCode"</span> = t.<span class="sql-identifier">"VCode"</span> and r.<span class="sql-identifier">"DocType"</span> = t.<span class="sql-identifier">"TypeName"</span> <br>
join <span class="sql-identifier">comdoc."RouteStage"</span> as s on s.<span class="sql-identifier">"PCode"</span> = r.<span class="sql-identifier">"VCode"</span> <br>
join <span class="sql-identifier">comdoc."StageItem"</span> as i on i.<span class="sql-identifier">"PCode"</span> = s.<span class="sql-identifier">"VCode"</span> <br>
where an.<span class="sql-identifier">"id"</span> = <span class="sql-string">'SignatoryUser'</span> <br>
and r.<span class="sql-identifier">"DocType"</span> = <span class="sql-string">'LND'</span> <br>
AND r.<span class="sql-identifier">"RouteStatus"</span> NOT IN(4) <br>
AND s.<span class="sql-identifier">"IsMarked"</span> IS NOT true <br>
AND COALESCE(i.<span class="sql-identifier">"DocumentAction"</span>, 0) IN (20, 30) <br>
and i.<span class="sql-identifier">"StageUser"</span> = an.<span class="sql-identifier">"value"</span> <br>
) or exists( <br>
select 1 <br>
from <span class="sql-identifier">"tmp_anFilters_for_documentSearch"</span> as an <br>
join <span class="sql-identifier">comdoc."ReadListItem"</span> as r on r.<span class="sql-identifier">"DocCode"</span> = t.<span class="sql-identifier">"VCode"</span> and r.<span class="sql-identifier">"DocType"</span> = t.<span class="sql-identifier">"TypeName"</span> <br>
where an.<span class="sql-identifier">"id"</span> = <span class="sql-string">'SignatoryUser'</span> <br>
and r.<span class="sql-identifier">"DocType"</span> = <span class="sql-string">'LND'</span> <br>
and r.<span class="sql-identifier">"DocflowUser"</span> = an.<span class="sql-identifier">"value"</span> <br>
) or exists( <br>
select 1 <br>
from <span class="sql-identifier">"tmp_anFilters_for_documentSearch"</span> as an <br>
join <span class="sql-identifier">dfd."EmpowermentWorkerDetail"</span> as ewd on ewd.<span class="sql-identifier">"PCode"</span> = t.<span class="sql-identifier">"VCode"</span> <br>
JOIN <span class="sql-identifier">rp."RP_Person"</span> AS p ON ewd.<span class="sql-identifier">"PersonId"</span> = p.<span class="sql-identifier">"VCode"</span> <br>
JOIN <span class="sql-identifier">rp."RP_PersonContact"</span> AS pc on p.<span class="sql-identifier">"VCode"</span> = pc.<span class="sql-identifier">"Pcode"</span> <br>
where an.<span class="sql-identifier">"id"</span> = <span class="sql-string">'SignatoryUser'</span> <br>
and t.<span class="sql-identifier">"TypeName"</span> = <span class="sql-string">'EmpowermentConstructor'</span> <br>
and pc.<span class="sql-identifier">"IdTypeContact"</span> = 6 <br>
and pc.<span class="sql-identifier">"Code"</span> = an.<span class="sql-identifier">"value"</span> <br>
)
)
</code>
</td>
</tr>
<tr>
<td>EmpowermentSubject</td>
<td>Полномочия</td>
<td>
<code>and <br>
exists( <br>
select 1 <br>
from <span class="sql-identifier">"tmp_anFilters_for_documentSearch"</span> as an <br>
join <span class="sql-identifier">dfd."EmpowermentSubjectDetail"</span> as esd on esd.<span class="sql-identifier">"PCode"</span> = t.<span class="sql-identifier">"VCode"</span> <br>
JOIN <span class="sql-identifier">dfd."EmpowermentSubject"</span> AS s ON esd.<span class="sql-identifier">"Subject"</span> = s.<span class="sql-identifier">"VCode"</span> <br>
where an.<span class="sql-identifier">"id"</span> = <span class="sql-string">'EmpowermentSubject'</span> <br>
and t.<span class="sql-identifier">"TypeName"</span> = <span class="sql-string">'EmpowermentConstructor'</span> <br>
and s.<span class="sql-identifier">"VCode"</span> = an.<span class="sql-identifier">"value"</span>::bigint <br>
)
</code>
</td>
</tr>
<tr>
<td>Filial</td>
<td>Организация</td>
<td>
<code>and exists( <br>
select 1 <br>
from <span class="sql-identifier">"tmp_anFilters_for_documentSearch"</span> as an <br>
where an.<span class="sql-identifier">"id"</span> = <span class="sql-string">'Filial'</span> <br>
and t.<span class="sql-identifier">"COrg"</span>::text = an.<span class="sql-identifier">"value"</span> <br>
)
</code>
</td>
</tr>
</tbody>
</table>
</body>
</html> |
## Настройка документов
После заполнения справочника «Итоговые выборки поисковой системы» необходимо перейти в реестр "Настройка документов". В документе необходимо заполнить поля typeNameProperty, dateProperty и numberProperty соответствующими им наименованиями полей таблицы: типа документа, даты документа и номера документа. Также необходимо в поле "Итоги" выбрать одно из значений справочника «Итоговые выборки поисковой системы». После заполнения этих полей необходимо поставить галочку в поле FTS2 и обновить страницу, чтобы изменения вступили в силу.
![Настройка](media/DocflowDocumentForm.png)
## Примеры настраиваемых выборок
### Настраиваемая выборка "Приложение"
| Код | Наименование | SQLScript |
|--------------|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Contractor | Контрагент | and exists(<br> select 1 from "tmp_anFilters_for_documentSearch" as an where an."id" = 'Contractor' and an."value" = cast(t."Contractor" as character varying)<br>) |
| Contract | Договор | and exists(<br> select 1 from "tmp_anFilters_for_documentSearch" as an where an."id" = 'Contract' and an."value" = cast(t."Contract" as character varying)<br>) |
| CUser | Создатель документа | and exists(<br> select 1 from "tmp_anFilters_for_documentSearch" as an where an."id" = 'CUser' and an."value" = cast(t."CUser" as character varying)<br>) |
| Initiator | Инициатор | and(<br> exists(<br> select 1<br> from "tmp_anFilters_for_documentSearch" as an<br> join comdoc."Route" as r on r."DocCode" = t."VCode" and r."DocType" = t."TypeName"<br> where an."id" = 'Initiator'<br> and r."Initiator" = an."value"<br> )) |
| StageUser | Участник маршрута | and <br> exists(<br> select 1<br> from "tmp_anFilters_for_documentSearch" as an<br> join comdoc."Route" as r on r."DocCode" = t."VCode" and r."DocType" = t."TypeName"<br> join comdoc."RouteStage" as s on s."PCode" = r."VCode"<br> join comdoc."StageItem" as i on i."PCode" = s."VCode"<br> where an."id" = 'StageUser'<br> and r."RouteStatus" NOT IN (4)<br> and i."StageUser" = an."value"<br> ) |
| SignatoryUser | Работник | and(exists( select 1 from "tmp_anFilters_for_documentSearch" as an join comdoc."Route" as r on r."DocCode" = t."VCode" and r."DocType" = t."TypeName" where an."id" = 'SignatoryUser' and r."DocType" = 'EmployeeStatement' and r."Initiator" = an."value" ) or exists( select 1 from "tmp_anFilters_for_documentSearch" as an join comdoc."Route" as r on r."DocCode" = t."VCode" and r."DocType" = t."TypeName" join comdoc."RouteStage" as s on s."PCode" = r."VCode" join comdoc."StageItem" as i on i."PCode" = s."VCode" where an."id" = 'SignatoryUser' and r."DocType" = 'LND' AND r."RouteStatus" NOT IN(4) AND s."IsMarked" IS NOT true AND COALESCE(i."DocumentAction", 0) IN (20, 30) and i."StageUser" = an."value" ) or exists( select 1 from "tmp_anFilters_for_documentSearch" as an join comdoc."ReadListItem" as r on r."DocCode" = t."VCode" and r."DocType" = t."TypeName" where an."id" = 'SignatoryUser' and r."DocType" = 'LND'
and r."DocflowUser" = an."value" ) or exists( select 1 from "tmp_anFilters_for_documentSearch" as an join dfd."EmpowermentWorkerDetail" as ewd on ewd."PCode" = t."VCode" JOIN rp."RP_Person" AS p ON ewd."PersonId" = p."VCode" JOIN rp."RP_PersonContact" AS pc on p."VCode" = pc."Pcode" where an."id" = 'SignatoryUser' and t."TypeName" = 'EmpowermentConstructor' and pc."IdTypeContact" = 6 and pc."Code" = an."value" ) )|
**В левую часть указывается скрипт:**
```sql
SELECT t."VCode" AS "DocCode"
, t."TypeName" AS "DocType"
, :DateProperty AS "DocDate"
, :NumberProperty AS "DocNumber"
, t."Contractor" AS "ContractorId"
, t."Contract" AS "ContractId"
, t."VCode" AS "AddContractId"
, t."Projects" AS "ProjectId"
FROM contract."AdditionalContract" as t
WHERE t."COrg" = _orgidparam
```
**В правую часть:**
```sql
SELECT t."VCode" AS "DocCode"
, t."TypeName" AS "DocType"
, :DateProperty AS "DocDate"
, :NumberProperty AS "DocNumber"
, NULL::text AS "DocName"
, t."SubjectOfContract" AS "DocTheme"
, 'Содержание' AS "DocDefinition"
:ItemSelect
FROM contract."AdditionalContract" as t
:ItemFrom
WHERE t."COrg" = _orgidparam
:ItemWhere
```
### Настраиваемая выборка "Заявка на выпуск сертификата ЭП"
Код | Наименование | SQLScript
----|--------------|----------
SignatoryUser | Работник | "and exists(<br> select 1 from "tmp_anFilters_for_documentSearch" as an where an."id" = 'SignatoryUser' and an."value" = cast(t."DocflowUser" as character varying))"
**В левую часть указывается скрипт:**
```sql
SELECT t."VCode" AS "DocCode"
, t."TypeName" AS "DocType"
, :DateProperty AS "DocDate"
, :NumberProperty AS "DocNumber"
, NULL::bigint AS "ContractorId"
, NULL::bigint AS "ContractId"
, NULL::bigint AS "AddContractId"
, NULL::bigint AS "ProjectId"
FROM comdoc."ECPCertificateApplication" as t
WHERE t."COrg" = _orgidparam
```
**В правую часть:**
```sql
SELECT t."VCode" AS "DocCode"
, t."TypeName" AS "DocType"
, :DateProperty AS "DocDate"
, :NumberProperty AS "DocNumber"
, NULL::text AS "DocName"
, NULL::text AS "DocTheme"
, NULL::text AS "DocDefinition"
:ItemSelect
FROM comdoc."ECPCertificateApplication" as t
:ItemFrom
WHERE t."COrg" = _orgidparam
:ItemWhere
```
### Настраиваемая выборка "Канцелярия"
| Код | Наименование | SQLScript |
|--------------|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Contractor | Контрагент | and exists(<br> select 1 from "tmp_anFilters_for_documentSearch" as an where an."id" = 'Contractor' and an."value" = cast(t."Contractor" as character varying)<br>) |
| Contract | Договор | and exists(<br> select 1 from "tmp_anFilters_for_documentSearch" as an where an."id" = 'Contract' and an."value" = cast(t."Contract" as character varying)<br>) |
| CUser | Создатель документа | and exists(<br> select 1 from "tmp_anFilters_for_documentSearch" as an where an."id" = 'CUser' and an."value" = cast(t."CUser" as character varying)<br>) |
| Initiator | Инициатор | and(<br> exists(<br> select 1<br> from "tmp_anFilters_for_documentSearch" as an<br> join comdoc."Route" as r on r."DocCode" = t."VCode" and r."DocType" = t."TypeName"<br> where an."id" = 'Initiator'<br> and r."Initiator" = an."value"<br> )) |
| StageUser | Участник маршрута | and <br> exists(<br> select 1<br> from "tmp_anFilters_for_documentSearch" as an<br> join comdoc."Route" as r on r."DocCode" = t."VCode" and r."DocType" = t."TypeName"<br> join comdoc."RouteStage" as s on s."PCode" = r."VCode"<br> join comdoc."StageItem" as i on i."PCode" = s."VCode"<br> where an."id" = 'StageUser'<br> and r."RouteStatus" NOT IN (4)<br> and i."StageUser" = an."value"<br> ) |
**В левую часть указывается скрипт:**
```sql
SELECT t."VCode" AS "DocCode"
, t."TypeName" AS "DocType"
, :DateProperty AS "DocDate"
, :NumberProperty AS "DocNumber"
, t."Contractor" AS "ContractorId"
, t."VCode" AS "ContractId"
, NULL::bigint AS "AddContractId"
, t."Projects" AS "ProjectId"
FROM dfd."DocflowDocument" as t
WHERE t."COrg" = _orgidparam
```
**В правую часть:**
```sql
SELECT t."VCode" AS "DocCode"
, t."TypeName" AS "DocType"
, :DateProperty AS "DocDate"
, :NumberProperty AS "DocNumber"
, NULL::text AS "DocName"
, NULL::text AS "DocTheme"
, NULL::text AS "DocDefinition"
FROM dfd."DocflowDocument" as t
WHERE t."COrg" = _orgidparam
```
## Автоматическое формирование отчета заявления с ЭП
На проекте возможно настроить автоматическое формирование отчета заявления с электронными подписями по завершению маршрута. Для этого в документе "Настройка учетной политики предприятия" нужно настроить константу **Интеграция с 1С с помощью сервиса ODATA** со значением 1
![Константа](media/constant.png)
По завершению маршрута в окно вложений заявления добавится печатная форма с ЭП. Архив с ЭП можно будет скачать по кнопке "Скачать архив с ЭП".
![Вложения](media/attachments.png)
Скачать архив с ЭП можно только когда в маршруте пройдены все этапы с действием "Подписан ЭП" и текущий этап
не требует подписания документа.
![Этапы](media/stages.png)
Архив скачается в папку "Загрузки" (Downloads).
![Загрузки](media/Downloads.png)
В архиве будут находиться: оригинал заявления, отчет по подписанию и файл с информацией о подписании данного документа по каждому сотруднику.
![Архив ЭП](media/arhiv.png)
## Настройка отчета без включения пропущенных этапов подписания
В проекте есть возможность не добавлять в отчет тех сотрудников, кто включен в маршрут через **ИЛИ** и **НЕ ПРОШЕЛ** этап подписания.
![Статус пропущен](media/skipped.png)
Для этого в документе "Настройка учетной политики предприятия" нужно настроить константу **Скрывать участников маршрута без действий** со значением 1.
![Константа2](media/constant2.png)
Результат сформированного отчета:
![Отчет маршрута](media/skippedPrint.png)