435 lines
32 KiB
Markdown
435 lines
32 KiB
Markdown
# Настройка архива вложенных документов
|
||
|
||
## Общее описание
|
||
|
||
Настройка архива вложенных документов необходима для работы аналитической формы [Архив вложенных документов](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Работа%20со%20вложениями/#архив_документов) и происходит в несколько этапов:
|
||
|
||
* В документ «Справочники поисковой системы» заносятся поля для фильтра, по которым будут собираться вложения.
|
||
* В справочник «Итоговые выборки поисковой системы» добавить документ с выборкой из некоторой таблицы для документа или группы документов, если их сущности извлекаются одинаково.
|
||
* В документе "Настройка документа" на вкладке "Контекстный поиск" заполнить несколько полей.
|
||
* Обновить страницу (клавиша F5), чтобы изменения вступили в силу.
|
||
|
||
## Справочники поисковой системы
|
||
|
||
Чтобы открыть документ «Справочники поисковой системы», необходимо в Меню в поисковой строке ввести - «Справочники поисковой системы».
|
||
|
||
Откроется документ "Справочники FTS". В нём необходимо заполнить таблицу "Фильтры".
|
||
|
||

|
||
|
||
Id | Name | Description
|
||
---|------|------------
|
||
Contractor | Контрагент |
|
||
Contract | Договор |
|
||
SignatoryUser | Работник |
|
||
Project | Проект |
|
||
Initiator | Инициатор |
|
||
CUser | Создатель документа |
|
||
Curator | Куратор |
|
||
StageUser | Участник маршрута |
|
||
EmpowermentSubject | Полномочия |
|
||
|
||
Существует строго определённый набор значений поля "Id", приведённый в [таблице ниже](#таблица). Соответствующее им поле "Name" заполняется произвольно. В справочнике «Итоговые выборки поисковой системы» этим значениям будут поставлены в соответствие поля в таблицах, по которым будет осуществляться поиск и фильтрация документов с вложениями.
|
||
|
||
## Итоговые выборки поисковой системы
|
||
|
||
Чтобы открыть справочник «Итоговые выборки поисковой системы», необходимо в меню в папке "Администрирование", подпапке "Документооборот", подпапке "Поисковая система" выбрать пункт «Итоговые выборки поисковой системы».
|
||
|
||

|
||
|
||
Откроется реестр "Итоги FTS".
|
||
|
||

|
||
|
||
Значения этого справочника будут предлагаться для выбора в документе ["Настройка документа"](../Настройка документов/index.md). Для создания нового документа необходимо нажать на кнопку "Создать" на верхней панели инструментов.
|
||
|
||

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

|
||
|
||
Под полем "Выборка" необходимо прописать результирующий селект, который в процессе расчета будет выполнять система. Структура селекта для всех выборок должна быть одинаковой, они будут объединяться с помощью оператора ```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```, будет совпадать с полем таблицы, которое присваивается одному из полей селекта.
|
||
|
||
<!--  -->
|
||
|
||
|
||
<!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 и обновить страницу, чтобы изменения вступили в силу.
|
||
|
||

|
||
|
||
## Примеры настраиваемых выборок
|
||
|
||
### Настраиваемая выборка "Приложение"
|
||
|
||
| Код | Наименование | 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
|
||
|
||

|
||
|
||
По завершению маршрута в окно вложений заявления добавится печатная форма с ЭП. Архив с ЭП можно будет скачать по кнопке "Скачать архив с ЭП".
|
||
|
||

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

|
||
|
||
Архив скачается в папку "Загрузки" (Downloads).
|
||
|
||

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

|
||
|
||
## Настройка отчета без включения пропущенных этапов подписания
|
||
|
||
В проекте есть возможность не добавлять в отчет тех сотрудников, кто включен в маршрут через **ИЛИ** и **НЕ ПРОШЕЛ** этап подписания.
|
||
|
||

|
||
|
||
Для этого в документе "Настройка учетной политики предприятия" нужно настроить константу **Скрывать участников маршрута без действий** со значением 1.
|
||
|
||

|
||
|
||
Результат сформированного отчета:
|
||
|
||
 |