Compare commits

..

10 Commits

22 changed files with 943 additions and 487 deletions

View File

@ -16,6 +16,8 @@ markdown_extensions:
- pymdownx.details
- pymdownx.tasklist:
custom_checkbox: true
- pymdownx.tabbed:
alternate_style: true
extra_css:

View File

@ -93,7 +93,7 @@ search:
**Если опция включена**, то автоматическая генерация pdf- файла не происходит. В некоторых бизнес-процессах данная опция будет лишней - например, в Локальных нормативных актах, где оригиналы документов поставляются из хранилища организации.
**Откл. содержимое (мемо и предпросмотр)** - отключается отображание текстового рабочего поля и окна предварительного просмотра в документах, расположенные в правой стороне.
**Откл. содержимое (мемо и предпросмотр)** - отключается отображение текстового рабочего поля и окна предварительного просмотра в документах, расположенные в правой стороне.
**Не требовать дату перехода КЭДО** - при включенной опции данный подтип документа может создавать [сотрудник](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Сотрудники/), у которого отсутствует дата перехода на КЭДО. Если опция отключена, то создание документа с данным подтипом невозможно без указания даты перехода на КЭДО. По умолчанию для создания любого документа необходимо указывать дату перехода на КЭДО у сотрудника.
@ -259,6 +259,9 @@ Name | Должность работника (атрибута) в именит
NameDative | Должность работника (атрибута) в дательном падеже |
NameGenitive | Должность работника (атрибута) в винительном падеже |
NSNT | Отображение ФИО пользователя-создателя документа и табельного номера
NSNTDative | Отображение ФИО пользователя-создателя документа и табельного номера в дательном падеже |
NSNTGenitive | Отображение ФИО пользователя-создателя документа и табельного номера в родительном падеже |
NSNTAccusative | Отображение ФИО пользователя-создателя документа и табельного номера в винительном падеже |
- **"Маска для ввода"** - позволяет установить строгий формат ввода данных пользователем и представлять из себя строку состоящую из обычных и специальных символов. При вводе обычные символы пользователь не может их удалить или заменить, специальные символы задают ограничения на вводимые данные.
@ -295,7 +298,7 @@ NSNT | Отображение ФИО пользователя-создателя
- **Высота таблицы** - используется для типа атрибута **"Табличная часть"**. Высота задается в пикселях.
- **Показывать разрядность в числах** - используется для типа атрибута **"Число"**. Если она включена то число будет отображаться - 2 022. Если выключена - то 2022 (без пробелов)
- **"Примечание/Комментарии"** - используется при необходимости для внесения информации по дополнительным атрибутам. Если тип атрибута "Логическое", то нужно задавать значения да/нет в формате Значение1| Значение 2. Если тип атрибута "Пользовательское" можно указывать дополнительную информацию по наименованию, например для автоматической проставки суммы вычета на детей при создании заявления. Подробнее можно почитать в разделе [Дополнение к наименованию в пользовательском типе атрибута](../Пользовательские типы атрибутов документов/index.md#поля_дополнение_к_наименованию).
- **"Примечание/Комментарии"** - используется при необходимости для внесения информации по дополнительным атрибутам. Если тип атрибута **"Логическое"**, то нужно задавать любые текстовые значения, например, да/нет в формате Значение 1| Значение 2. Если тип атрибута "Пользовательское" можно указывать дополнительную информацию по наименованию, например для автоматической проставки суммы вычета на детей при создании заявления. Подробнее можно почитать в разделе [Дополнение к наименованию в пользовательском типе атрибута](../Пользовательские типы атрибутов документов/index.md#поля_дополнение_к_наименованию).
- Группа столбцов **"Значение по умолчанию"** используется в случае, если при создании документа реквизит должен быть заполнен неким условленным значением. Для разных типов атрибутов используются разные колонки. Для типов атрибута **"Строка"** требуется заполнить поле в столбце **"Текст"**. Для типов атрибута **"Логическое"** требуется поставить галочку в столбце **"Флаг"**.
@ -311,6 +314,17 @@ NSNT | Отображение ФИО пользователя-создателя
- **Видимость для ролей** - используется при необходимости настройки отображения и редактирования данного атрибута при наличии определенной роли на текущем этапе у пользователя. Возможно задать как одну роль, так и несколько указанных через запятую. У пользователя имеющего указанную роль атрибут в документе будет отображен, в то время как у пользователя у которого отсутствует одна либо все указанные в данном столбце роли, данный атрибут не будет отображен.
### Разметка страницы / поля, см
Позволяет вручную задать отступы текста в печатной форме документа. Если поля не заполнены, то по умолчанию значения следующие:
* Вверхнее - 1
* Нижнее 2
* Левое - 2,8
* Правое - 1,8
![alt text](media/image-26.png)
### Дополнительные группы
- **Доп. группа** - указывается номер дополнительной группы.
@ -321,6 +335,8 @@ NSNT | Отображение ФИО пользователя-создателя
- **Рамка** - при включении у дополнительной группы будет отображаться рамка.
![alt text](media/image-27.png)
### Вычисляемые атрибуты
<!-- Чтобы прописать вычисление полей, значения которых должны зависеть от остальных полей (т.е. сделать их вычисляемыми), необходимо в Microsoft SQL Server Management Studio внести изменения в код процедуры dbo.callAfterSetSQL (в которой прописывается непосредственно вычисление значение атрибута) и в код процедуры dbo.callCheckSQL (для проверки корректности внесённых в поля атрибутов значений).

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -10,7 +10,11 @@
Откроется форма с пустой таблицей:
![alt text](media/image.png)
![alt text](media/image-6.png)
### Вкладка "Логи"
На данной вкладке отображается логирование системы.
Заполнить таблицу можно несколькими способами:
@ -26,15 +30,15 @@
* выбрать все кроме 1C: `"Service" not in ('odata')`
![alt text](media/image-2.png)
![alt text](media/image-8.png)
В столбце "Уровень" приводится тип сообщения о событии.
- error сообщение об ошибке;
- debug отладочное сообщение;
- info информационное техническое сообщение;
- MailInfo информационное сообщение от компоненты БД DBMail;
- MailError сообщение об ошибке от компоненты БД DBMail.
- `error` сообщение об ошибке;
- `debug` отладочное сообщение;
- `info` информационное техническое сообщение;
- `MailInfo` информационное сообщение от компоненты БД DBMail;
- `MailError` сообщение об ошибке от компоненты БД DBMail.
В столбце "Дата" указываются дата и время возникновения сообщения.
@ -42,7 +46,7 @@
В столбце "Сообщение" приводится краткая информация о событии. Если нажать на ссылку-текст сообщения, то откроется окно для более удобного просмотра длинного текста. То же происходит и при нажатии на ссылки в других столбцах.
![Пример сообщения](./media/viewFullField.png)
![alt text](media/image-7.png)
В столбце "Сообщение пользователю" содержится сообщение, возникшее в момент события на экране вызвавшего его пользователя под кнопкой "Инфо".
@ -52,19 +56,27 @@
В столбце "Сервис" указывается один из веб-сервисов, при выполнении которых возникло событие:
* entrypoint точка входа для клиентов;
* config сервис конфигурации;
* logic сервис логики;
* gate сервис входа (авторизации);
* radio сервис взаимодействия реального времени;
* lock сервис пессимистического блокировщика;
* data сервис доступа к данным и процедурам, хранимым в БД;
* RabbitMQ сервер RabbitMQ служит шиной обмена данными между веб-сервисами. Сервисы используют его механизмы (сообщения и очереди сообщений) для оповещения друг друга;
* Redis используется для хранения различной системной информации;
* post сервис электронной почты и смс-сообщений;
* jsreport предназначен для работы с отчетами jsreport;
* lexema-dss для работы с ОЭП выпускаемыми клиентом;
* preview предназначен для конвертации файлов в файлы в формате pdf, которые можно просматривать в элементе управления ```FilePreview```.
* `entrypoint` точка входа для клиентов;
* `config` сервис конфигурации;
* `logic` сервис логики;
* `gate` сервис входа (авторизации);
* `radio` сервис взаимодействия реального времени;
* `lock` сервис пессимистического блокировщика;
* `data` сервис доступа к данным и процедурам, хранимым в БД;
* `RabbitMQ` сервер RabbitMQ служит шиной обмена данными между веб-сервисами. Сервисы используют его механизмы (сообщения и очереди сообщений) для оповещения друг друга;
* `Redis` используется для хранения различной системной информации;
* `post` сервис электронной почты и смс-сообщений;
* `jsreport` предназначен для работы с отчетами jsreport;
* `lexema-dss` для работы с ОЭП выпускаемыми клиентом;
* `preview` предназначен для конвертации файлов в файлы в формате pdf, которые можно просматривать в элементе управления ```FilePreview```.
### Вкладка "Коллектор"
На данной вкладке история событий приложения.
Заполнить таблицу можно аналогично вкладке [логов](#вкладкаоги).
![alt text](media/image-9.png)
### Настройки выборок для логов приложения
@ -74,7 +86,10 @@
* **Наименование выборки** - наименование выборки в выпадающем списке;
* **Скрипт для вычисления** - заполняется условие для вычисления. Для настройки выборки можно использователь следующие параметры из логов:
* **Форма** - указывается для какой формы
* **Скрипт для вычисления** - указывается служебное наименование формы, в которой необходимо отображать данную настройку, например, в [логах](#вкладкаоги). Если поле незаполнено то данная настройка отображается во всех формах.
`"Level" (text)` - вид лога: ошибка (error), инф.сообщение (info), предупреждение (warn)
@ -88,7 +103,46 @@
`"Service" (text)` - название сервиса
![alt text](media/image-4.png)
![alt text](media/image-5.png)
!!! example "Примеры"
=== "Все по 1с"
``` sql
"Service" IN ('odata')
```
=== "Все кроме 1с"
``` sql
"Service" NOT IN ('odata')
```
=== "Все по сервису подписания"
``` sql
"Service" ILIKE '%dss%'
```
=== "Логи шедулера"
``` sql
"CUser" = 'SchedulerUser'
```
=== "Всё по jsreport+file+preview"
``` sql
"Service" IN ('jsreport', 'file', 'preview')
```
=== "Все кроме коллектора"
``` sql
"Service" NOT IN ('collector')
```
=== "По тексту сообщения"
``` sql
"Message" ILIKE '%ошибка%1С%'
```
=== "По сервису odata только ошибки"
``` sql
"Service" = 'odata' AND "Level" = 'error'
```
=== "Логи по сертификатам"
``` sql
"Details" = 'Логирование операций с сертификатом'
```
## Форма "Управление пользователями"

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

View File

@ -96,3 +96,75 @@
Для всех выше указан сущностей в столбец **"Функция для обработки ответа от 1С"** указывается функция, которая заберет данные из указанной сущности:
`select * from odata."loadReadListExceptions" ("_body_")`
## Выгрузка остатков отпусков в личный кабинет сотрудника
Для загрузки остатков отпусков необходимо:
* Со стороны 1С необходимо опубликовать сущности `InformationRegister_ЗаработанныеПраваНаОтпуска` и `InformationRegister_ДанныеОтпусковКарточкиСотрудника`
* В Настройке параметров 1С на закладке "Произвольные выборки из 1С" добавить строку с
сущностью `InformationRegister_ЗаработанныеПраваНаОтпуска`
* В параметры для запроса сущности указать
`?$filter=Period le datetime'{{ToDay}}'&$select=Period,Сотрудник_Key,ВидЕжегодногоОтпуска_Key,КоличествоДней,ДатаНачала,ДатаОкончания`
* В функцию для обработки указать
```sql
select * from odata."LoadUsingVacations"("_body_") as "resultText"
```
## Примеры произвольных выгрузок
<table border="1">
<thead>
<tr>
<th>Наименование выборки</th>
<th>Сущность в 1С</th>
<th>Параметр для запроса сущности в 1С</th>
<th>Функция для обработки ответа от 1С</th>
</tr>
</thead>
<tbody>
<tr>
<td>Выгрузка данных по образованию - формат Диалл Альянс</td>
<td>Structure</td>
<td>?Object=units</td>
<td>select * from odata."LoadEducation"("_body_") as "resultText"</td>
</tr>
<tr>
<td>Выгрузка изменений оплаты - возврат до 1,5</td>
<td>Document_ИзменениеУсловийОплатыОтпускаПоУходуЗаРебенком</td>
<td>?$filter=Posted eq true and ДатаИзменения le datetime'{{ToDay}}' and ДатаОкончанияПособияДоПолутораЛет ge datetime'{{ToDay}}'&$select=Ref_Key,ДатаИзменения,Сотрудник_Key,ОсновнойСотрудник_Key,ПрименениеПлановыхНачислений/Ref_Key,ПрименениеПлановыхНачислений/РабочееМесто_Key,ПрименениеПлановыхНачислений/Применение</td>
<td>select * from odata."loadReadListExceptions" ("_body_")</td>
</tr>
<tr>
<td>Выгрузка Больничных по беременности и родам</td>
<td>Document_БольничныйЛист</td>
<td>?$filter=ПричинаНетрудоспособности eq 'ПоБеременностиИРодам' and ДатаНачала gt datetime'2022-09-01T00:00:00' and DeletionMark eq false and ДокументРассчитан eq true&$select=Ref_Key,Сотрудник_Key,ДатаНачала,ДатаОкончания</td>
<td>select * from odata."loadReadListExceptions" ("_body_")</td>
</tr>
<tr>
<td>Выгрузка Больничных по беременности и родам</td>
<td>Document_БольничныйЛист_</td>
<td>?$filter=ДатаНачала le datetime'{{ToDay}}' and ДатаОкончания ge datetime'{{ToDay}}' and ПричинаНетрудоспособности eq 'ПоБеременностиИРодам' and DeletionMark eq false and ДокументРассчитан eq true&$format=json&$select=Ref_Key,Сотрудник_Key,ДатаНачала,ДатаОкончания</td>
<td>select * from odata."loadReadListExceptions" ("_body_")</td>
</tr>
<tr>
<td>Выгрузка возврат из отпуска по уходу</td>
<td>Document_ВозвратИзОтпускаПоУходуЗаРебенком</td>
<td>?$select=Ref_Key,ДатаВозврата,Сотрудник_Key,ОсновнойСотрудник_Key,Начисления/Ref_Key,Начисления/РабочееМесто_Key_</td>
<td>select * from odata."loadReadListExceptions" ("_body_")</td>
</tr>
<tr>
<td>Выгрузка Отпусков по уходу</td>
<td>Document_ОтпускПоУходуЗаРебенком</td>
<td>?$filter=DeletionMark eq false&$select=Ref_Key,Сотрудник_Key,ДатаНачала,ДатаОкончания,ОсновнойСотрудник_Key,Начисления/Ref_Key,Начисления/РабочееМесто_Key</td>
<td>select * from odata."loadReadListExceptions" ("_body_")</td>
</tr>
<tr>
<td>Остатки дней отпуска сотрудников</td>
<td>InformationRegister_ЗаработанныеПраваНаОтпуска</td>
<td>?$filter=Period le datetime'{{ToDay}}'&$select=Period,Сотрудник_Key,ВидЕжегодногоОтпуска_Key,КоличествоДней,ДатаНачала,ДатаОкончания</td>
<td>select * from odata."LoadUsingVacations"("_body_") as "resultText"</td>
</tr>
</tbody>
</table>

View File

@ -81,6 +81,7 @@ search:
3. **Документ вернется только инициатору** - документ направляется инициатору в случае не согласования документа по маршруту. Маршрут согласования в этом случае не повторяется.
4. **Документ вернется инициатору и всем несогласным** - документ направляется инициатору и всем несогласным в случае не согласования документа по маршруту.
5. **Ошибочно направлено. Документ вернется только инициатору** - документ направляется инициатору в случае не согласования документа по маршруту, по причине что документ был ошибочно направлен пользователю на согласование. Маршрут согласования в этом случае не повторяется.
6. **Построить новую итерацию из шаблона маршрута** - документ направляется инициатору в случае не согласования. Маршрут согласования в этом случае повторяется из шаблона маршрута.
Ко всем типам документов действие должно быть выбрано "Далее".

View File

@ -152,7 +152,8 @@
**не_включать_почту_в_сертификат** | Убирает отображение электронной почты в [заявлении на выдачу и расписке в получении](../Выпуск ОНЭП/index.md#просмотраявки_на_выпуск_сертификатов) сертификата электронной подписи | | 1 |
**Неребовать_подписанта_в_ОРД** | Отключает проверку в [ОРД](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/ОРД/) на наличие этапа с подписанием | | 1
**Отключить автоформирование маршрута** | Отключает автоматическое нажатие на кнопку "Создать маршрут" в модальном окне маршрута | | 1
**Отчет_с_ВЗ_генерировать_после_последнего_этапа_подписания** | В документах [«Заявление от сотрудников»](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Заявления от сотрудников/) и «Документ на подписание» будет сформирован и прикреплен файл со штампом электронной подписи после крайнего этапа подписания электронным сертификатом | | 1
**Отчет_с_ВЗ_генерировать_после_последнего_этапа_подписания** | В документах на констукторе будет сформирован и прикреплен файл со штампом электронной подписи после крайнего этапа подписания электронным сертификатом | | 1
**Отчет_с_ВЗ_прочерк_вместо_ПЭП** | В документах на констукторе в файл со штампом электронной подписи вместо **"Просто электронная подпись"** проставляется прочерк. Заполняется **"Значение(текст)"**. | | 1
**ПереходНаКЭДО_ЗапретСозданияИОбработкиДокументов** | При создании документов [«Заявление от сотрудников»](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Заявления от сотрудников/), [Универсальный документ](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Универсальный документ/) будет осуществляться проверка на наличие даты **"Переход на КЭДО"** в документе Сотрудники. | | 1
**Полные кадры** | В документе [«Заявление от сотрудников»](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Заявления от сотрудников/) добавляется операция "Создать приказ по подтипу документа". Если числовая константа выставлена в «0», то в документе ["Физические лица"](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Физические лица/) отключаются проверки на адрес. | | 1
**поручение инициатор=контролер** | В документе "Поручение" поле контролер автоматически заполняется значением из поля "Составитель" | | 1

View File

@ -7,7 +7,7 @@
Откроется новая форма.
![alt text](media/image-4.png)
![alt text](media/image-6.png)
При нажатии на кнопку **"Показать подсказки"** в верхней части раскрываются рекомендации по работе с данной формой:
@ -19,19 +19,19 @@
* **Не используется** - при включенной функции данная настройка не будет отображаться в журнале состояния документов.
![Не используется](media/neIspol.png)
![alt text](media/image-7.png)
![Фильтр](media/filtr.png)
* **№ / Пользовательское наименование** - указывается порядковый номер и наименование настройки для отображения в журнале состояния документов.
![alt text](media/image-1.png)
![alt text](media/image-9.png)
![Наименование](media/polNam2.png)
* **Служебное наименование** - указывается служебное наименование по которому фильтруется реестр документов. Служебное наименование должно быть **уникальным** в системе.
![alt text](media/image-2.png)
![alt text](media/image-10.png)
* **Показывать в форме** - указывается служебное наименование формы, в которой необходимо отображать данную настройку, например, в личном кабинете HR. Если поле незаполнено то данная настройка отображается во всех формах.
@ -43,6 +43,8 @@
* **рассчитывать просрочку в документах** - рассчитывает количество дней по нарушением сроков обработки в столбце "Просрочено (дней)"
* **Работа России** - отображает кнопку ["Отправить в РР"](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%20%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8/) в журнале.
### Скрыть столбцы
* **Подразделение инициатора** - скрывает колонку "Подразделение инициатора";
@ -65,7 +67,9 @@
* **Решение** - скрывает колонку "Решение";
* **Вложения** - скрывает колонку "Вложения".
* **Вложения** - скрывает колонку "Вложения";
* **Документ** - скрывает колонку "Документ".
### Добавить группировку
@ -109,20 +113,40 @@
В данном блоке указывается часть с динамическим запросом, содержащим непосредственно запроса для отображения документов.
!!! note
В запросе возможно настроить цветовое отображение полей документов в зависимости от условий. Для этого в запросе необходимо указать поле "Colors" и заполнить его одним из следующих значений: `1 - colors.gray 2 - colors.orange 3 - colors.yellow 4 - colors.green 5 - colors.blue 6 - colors.indigo 7 -colors.violet`. Например в запросе: **Все документы** данное значение указано в конце запроса: `(select top 1 wr."VCode" from "RP_Worker" wr join "RP_PersonContact" pc on wr."IdPerson"= pc."Pcode" and pc."IdTypeContact" = 6 and pc."Code" = t."StageUser" where wr."COrg" = 4 order by wr."DateBeg" ) as "AnyColumnO"
, 2`, где цифра 2 цвет
В запросе возможно настроить цветовое отображение полей документов в зависимости от условий. Для этого в запросе необходимо указать поле "Colors" и заполнить его одним из следующих значений: `1 - colors.gray 2 - colors.orange 3 - colors.yellow 4 - colors.green 5 - colors.blue 6 - colors.indigo 7 -colors.violet`.
!!! note
Для того чтобы запрос фильтровался по заданному количеству документов, которое указывается в поле **Кол-во строк/Период (с/по):** необзодимо в конце запроса добавить строку `_topcount` , например: ```left join "tmp_workers_for_documentStatusJournalProc" w2 on w2."VCode" = t."IdWorker" _topcount;```
!!! example "Пример:"
В запросе: **Все документы** данное значение указано в конце запроса:
```sql
(select top 1 wr."VCode" from "RP_Worker" wr join "RP_PersonContact" pc on wr."IdPerson"= pc."Pcode"
and pc."IdTypeContact" = 6 and pc."Code" = t."StageUser"
where wr."COrg" = 4 order by wr."DateBeg" ) as "AnyColumnO"
, 2
```
где цифра 2 цвет
Для того чтобы запрос фильтровался по заданному количеству документов, которое указывается в поле **Кол-во строк/Период (с/по):** необходимо в конце запроса добавить строку `_topcount`
!!! example "Пример:"
```sql
left join "tmp_workers_for_documentStatusJournalProc" w2 on w2."VCode" = t."IdWorker" _topcount;
```
### Примеры запросов
**Просроченные документы** - в реестре отображаются документы, по которым были нарушены сроки обработки:
#### Просроченные документы
В реестре отображаются документы, по которым были нарушены сроки обработки
??? note "Запрос"
Основной запрос:
Итоговая выборка:
```sql
insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId"
, "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution"
@ -156,11 +180,16 @@ where
coalesce(dd."expired", 0) <> 0 ;
```
**Зависшие документы у инициатора** - в реестре отображаются документы, которые были инициированы сотрудником, но не запущены далее по маршруту согласования.
#### Зависшие документы у инициатора
В реестре отображаются документы, которые были инициированы сотрудником, но не запущены далее по маршруту согласования.
??? note "Запрос"
Основной запрос:
Итоговая выборка:
```sql
insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId"
, "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution"
@ -183,11 +212,16 @@ insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeNa
) ;
```
**Поступят к hr в ближайшее время** - в реестре отображаются документы, которые в данный момент находятся на стадии согласования у руководителя сотрудника, и после этого поступят в HR службу.
#### Поступят к hr в ближайшее время
В реестре отображаются документы, которые в данный момент находятся на стадии согласования у руководителя сотрудника, и после этого поступят в HR службу.
??? note "Запрос"
Основной запрос:
Итоговая выборка:
```sql
insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId"
, "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution"
@ -219,11 +253,16 @@ insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeNa
) ;
```
**Сейчас в работе у hr** - в реестре отображаются документы, которые в данный момент находятся в HR службе в работе
#### Сейчас в работе у hr
В реестре отображаются документы, которые в данный момент находятся в HR службе в работе
??? note "Запрос"
Основной запрос:
Итоговая выборка:
```sql
insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId"
, "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution"
@ -248,11 +287,16 @@ insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeNa
) ;
```
**Обработано службой HR сегодня** - в реестре отображаются документы, которые были обработаны сегодня службой HR сегодня.
#### Обработано службой HR сегодня
В реестре отображаются документы, которые были обработаны сегодня службой HR сегодня.
??? note "Запрос"
Основной запрос:
Итоговая выборка:
```sql
insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId"
, "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution"
@ -278,9 +322,12 @@ insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeNa
) ;
```
**Все документы**
#### Все документы
??? note "Запрос"
Основной запрос:
```sql
do $myQ$
declare _str text;
@ -314,7 +361,9 @@ end;
$myQ$;
```
Итоговая выборка:
```sql
IF NOT comdoc."isTableExists"('tmp_addAtribute_for_documentStatusJournalProc', 'temp') THEN
CREATE TEMP TABLE "tmp_addAtribute_for_documentStatusJournalProc"(
@ -471,11 +520,14 @@ drop table "tmp_addAtribute_for_documentStatusJournalProc";
drop table "tmp_workers_for_documentStatusJournalProc";
```
**Документы на подписание, просроченные работниками**
#### Документы на подписание, просроченные работниками
??? note "Запрос"
Основной запрос:
Итоговая выборка:
```sql
insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId"
, "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution"
@ -507,9 +559,12 @@ where coalesce(t."RouteStatusId",0) in (2) and t."StageItemStatus"= 2 and t."IsM
;
```
**Договоры и доп. соглашения**
#### Договоры и доп. соглашения
??? note "Запрос"
Основной запрос:
```sql
do $newQ$
declare _str text;
@ -550,12 +605,11 @@ $newQ$;
```
Итоговая выборка:
```sql
```sql
do
$$
begin
--CREATE INDEX IF NOT EXISTS "idx_tr1_tmp_CategoryAttributeType" ON "tmp_CategoryAttributeType"("PCode" );
if not comdoc."isTableExists"('tmp_UserRole','temp') then
@ -612,12 +666,9 @@ round(comdoc."dfwcGetDuration"(t."eDate", COALESCE(t."ActionDate", _now::date),
) a
where coalesce(a."expired", 0) > 0
group by a."DocCode", a."Role";
end;
$$;
insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId"
, "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution"
, "DateControl" , "RouteVCode" , "RouteStatusId" , "RouteStatusName" , "DocName"
@ -754,7 +805,9 @@ inner join contract."VContractRegistry" c on t."DocCode" = c."VCode"
FETCH FIRST 1 ROWS WITH TIES ) --as "workers"
AS wi ON wi."lexLogin" = t."VirtualCUser"
LEFT JOIN LATERAL comdoc."getDocRouteCurrentStatus"(t."DocCode", t."DocType") AS rst ON true
--where c."DateContract" BETWEEN _bdate AND _edate
/*union all
select distinct t."DocCode" , t."DocType" , t."DocForm" , t."DocTypeName" , t."SettingsId"
, t."orgId" , t."DocumentDate" , t."DocumentNumber" , t."VirtualCUser" , t."DateOfExecution"
@ -858,6 +911,259 @@ from "tmp_preresult" t
AS wi ON wi."lexLogin" = t."VirtualCUser"
LEFT JOIN LATERAL comdoc."getDocRouteCurrentStatus"(t."DocCode", t."DocType") AS rst ON true
-- where c."DateContract" BETWEEN _bdate AND _edate
*/
```
#### Документы в работе у подчиненных
??? note "Запрос"
Основной запрос:
Итоговая выборка:
```sql
insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId"
, "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution"
, "DateControl" , "RouteVCode" , "RouteStatusId" , "RouteStatusName" , "DocName"
, "DocSubject" , "expired" , "StageNumber" , "BeginDate" , "ActionDate"
, "DocumentAction" , "DocumentStatus" , "FromMessage" , "eDate"
, "StageUser" , "StageItemStatus" , "StageStatus" , "StageItemAction" , "DocumentSubtype" ,
"AnyColumnA" ,"AnyColumnB" , "AnyColumnC","AnyColumnD" ,
"AnyColumnE" ,
"AnyColumnF", "AnyColumnG" , "AnyColumnH" , "AnyColumnI", "AnyColumnJ","AnyColumnK")
select t."DocCode" , t."DocType" , t."DocForm" , t."DocTypeName" , t."SettingsId"
, t."orgId" , t."DocumentDate" , t."DocumentNumber" ,
case when t."DocType" in ('UniversalDocument','DocumentForSigning') then (select pc."Code" from dfd."DocumentCategoryAttributeType" bd
join dfd."DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#Worker#'
join rp."RP_Worker" w on w."VCode" = daa1."BigIntValue"
join rp."RP_PersonContact" AS pc ON pc."Pcode" = w."IdPerson" AND pc."IdTypeContact" = 6
where t."DocumentCategory" = bd."PCode" limit 1)
else t."VirtualCUser" end,
t."DateOfExecution"
, t."DateControl" , t."RouteVCode" , t."RouteStatusId" , t."RouteStatusName" , t."DocName"
, t."DocSubject" ,
comdoc."dfwcGetDuration"(t."eDate", COALESCE(t."ActionDate", _now), false, t."orgId", 1, _dayoff1, _dayoff2, null) ,
t."StageNumber" , t."BeginDate" , t."ActionDate"
, t."DocumentAction" , t."DocumentStatus" , t."FromMessage" , t."eDate"
, t."StageUser" , t."StageItemStatus" , t."StageStatus" , t."StageItemAction", t."DocumentSubtype", t."AnyColumnA" ,
case when t."DocType" in ('DocumentForSigining','UniversalDocument') then (select coalesce(w."ID_RP",'') from dfd."DocumentCategoryAttributeType" bd
join dfd."DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#Worker#'
join rp."RP_WorkerMove" w on w."IdWorker" = daa1."BigIntValue"
where t."DocumentCategory" = bd."PCode" limit 1)
else (select coalesce(m."ID_RP",'') from rp."RP_WorkerMove" AS m where m."IdWorker" = t."IdWorker" limit 1) end as "AnyColumnB" ,
case when t."DocType" in ('DocumentForSigining','UniversalDocument') then (select coalesce(w."RP_Txt",'') from dfd."DocumentCategoryAttributeType" bd
join dfd."DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#Worker#'
join rp."RP_WorkerMove" w on w."IdWorker" = daa1."BigIntValue"
where t."DocumentCategory" = bd."PCode" limit 1) else (select coalesce(m."RP_Txt",'') from rp."RP_WorkerMove" AS m where m."IdWorker" = t."IdWorker" limit 1) end as "AnyColumnC",
case when t."DocType" in ('DocumentForSigining','UniversalDocument') then (select coalesce(w."ID_ER",'') from dfd."DocumentCategoryAttributeType" bd
join dfd."DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#Worker#'
join rp."RP_WorkerMove" w on w."IdWorker" = daa1."BigIntValue"
where t."DocumentCategory" = bd."PCode" limit 1) else (select coalesce(m."ID_ER",'') from rp."RP_WorkerMove" AS m where m."IdWorker" = t."IdWorker" limit 1) end as "AnyColumnD" ,
t."AnyColumnE",
(select to_char(daa1."DateValue", 'DD.MM.YYYY') from dfd."DocumentCategoryAttributeType" bd
join dfd."DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#bdate#' where t."DocumentCategory" = bd."PCode" limit 1) as "AnyColumnF" ,
(select to_char(daa1."DateValue", 'DD.MM.YYYY') from dfd."DocumentCategoryAttributeType" bd
join dfd."DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#edate#' where t."DocumentCategory" = bd."PCode" limit 1) as "AnyColumnG" ,
(select daa1."BigIntValue"::text from dfd."DocumentCategoryAttributeType" bd
join dfd."DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" ='#kolvo#' where t."DocumentCategory" = bd."PCode" limit 1) as "AnyColumnH",
(select string_agg(dca."Name" || ':' || (case
when coalesce(dca."AttributeType",'') = 'string' and coalesce(atr."Value",'') <> '' then atr."Value"
when coalesce(dca."AttributeType",'') = 'string' and coalesce(atr."Value",'') = '' then ' '
when coalesce(dca."AttributeType",'') = 'bigint' and atr."BigIntValue" is not null then cast(atr."BigIntValue" as varchar(255))
when coalesce(dca."AttributeType",'') = 'bigint' and atr."BigIntValue" is null then ' '
when coalesce(dca."AttributeType",'') = 'string' and atr."BigIntValue" is not null then cast(atr."BigIntValue" as varchar(255))
when coalesce(dca."AttributeType",'') = 'string' and atr."BigIntValue" is null then ' '
when coalesce(dca."AttributeType",'') = 'Base.Unispr' and atr."BigIntValue" is null and coalesce(atr."Value",'') = '' then ' '
when coalesce(dca."AttributeType",'') = 'Base.Unispr' and atr."BigIntValue" is not null and coalesce(atr."Value",'') <> '' then coalesce(atr."Value",' ')
when coalesce(dca."AttributeType",'') = 'Base.Post' and atr."BigIntValue" is null and coalesce(atr."Value",'') = '' then ' '
when coalesce(dca."AttributeType",'') = 'Base.Post' and atr."BigIntValue" is not null and coalesce(atr."Value",'') <> '' then coalesce(atr."Value",' ')
when coalesce(dca."AttributeType",'') = 'Base.RP_Worker' and atr."BigIntValue" is null and coalesce(atr."Value",'') = '' then ' '
when coalesce(dca."AttributeType",'') = 'Base.RP_Worker' and atr."BigIntValue" is not null and coalesce(atr."Value",'') <> '' then coalesce(atr."Value",' ')
when coalesce(dca."AttributeType",'') = 'Base.Contract' and atr."BigIntValue" is null and coalesce(atr."Value",'') = '' then ' '
when coalesce(dca."AttributeType",'') = 'Base.Contract' and atr."BigIntValue" is not null and coalesce(atr."Value",'') <> '' then coalesce(atr."Value",' ')
when coalesce(dca."AttributeType",'') = 'Base.Contractor' and atr."BigIntValue" is null and coalesce(atr."Value",'') = '' then ' '
when coalesce(dca."AttributeType",'') = 'Base.Contractor' and atr."BigIntValue" is not null and coalesce(atr."Value",'') <> '' then coalesce(atr."Value",' ')
when coalesce(dca."AttributeType",'') = 'Base.Department' and atr."BigIntValue" is null and coalesce(atr."Value",'') = '' then ' '
when coalesce(dca."AttributeType",'') = 'Base.Department' and atr."BigIntValue" is not null and coalesce(atr."Value",'') <> '' then coalesce(atr."Value",' ')
when coalesce(dca."AttributeType",'') = 'money' and atr."MoneyValue" is not null then cast(atr."MoneyValue" as varchar(255))
when coalesce(dca."AttributeType",'') = 'money' and atr."MoneyValue" is null then ' '
when coalesce(dca."AttributeType",'') = 'Date' and atr."DateValue" is not null then to_char(atr."DateValue", 'DD.MM.YYYY')
when coalesce(dca."AttributeType",'') = 'Date' and atr."DateValue" is null then ' '
when coalesce(dca."AttributeType",'') = 'DateTime' and atr."DateTimeValue" is not null then to_char(atr."DateValue", 'DD.MM.YYYY')
when coalesce(dca."AttributeType",'') = 'DateTime' and atr."DateTimeValue" is null then ' '
when coalesce(dca."AttributeType",'') = 'double' and atr."DoubleValue" is not null then cast(atr."DoubleValue" as varchar(255))
when coalesce(dca."AttributeType",'') = 'double' and atr."DoubleValue" is null then ' '
when coalesce(dca."AttributeType",'') = 'ServiceWord' and coalesce(atr."Value",'') <> '' then coalesce(atr."Value",' ')
when coalesce(dca."AttributeType",'') = 'ServiceWord' and coalesce(atr."Value",'') = '' then ' '
when coalesce(dca."AttributeType",'') = 'bool' and coalesce("BigIntValue"::integer,0) = 0 then substring(coalesce("Value",'|'), position('|' in coalesce("Value",'|'))+1,char_length(coalesce("Value",'|')))
when coalesce(dca."AttributeType",'') = 'bool' and coalesce("BigIntValue"::integer,0) = 1 then substring(coalesce("Value",'|'),0, position('|' in coalesce("Value",'|')))
end), '; ') AS "x"
from dfd."DocumentAdditionalAttribute" atr
join dfd."DocumentCategoryAttributeType" dca on atr."CategoryAttributeType" = dca."VCode"
where t."DocCode" = atr."PCode" and dca."ColumnName" not in ('#bdate#', '#edate#', '#kolvo#')) as "AnyColumnI",
case when t."DocType" in ('UniversalDocument','DocumentForSigning') then (select w."NumTab" from dfd."DocumentCategoryAttributeType" bd
join dfd."DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#Worker#'
join rp."RP_Worker" w on w."VCode" = daa1."BigIntValue"
where t."DocumentCategory" = bd."PCode" limit 1)
else (select r."NumTab" from rp."RP_Worker" as r where r."VCode" = t."IdWorker") end ,
case when t."DocType" in ('UniversalDocument','DocumentForSigning') then (select w."NameFull" from dfd."DocumentCategoryAttributeType" bd
join dfd."DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#Worker#'
join rp."RP_Worker" w on w."VCode" = daa1."BigIntValue"
where t."DocumentCategory" = bd."PCode" limit 1)
else (select r."NameFull" from rp."RP_Worker" as r where r."VCode" = t."IdWorker") end
from "tmp_preresult" t
where coalesce(t."RouteStatusId",0) = 2 and t."IsMarked" is not true
and t."StageItemStatus"= 2 and
exists (select 1
from comdoc."getWorkerChiefStructure"(null::bigint,lex."getVirtualLogin"(),1) s
join rp."RP_Worker" r on s."VCode" = r."VCode"
join rp."RP_PersonContact" c on r."IdPerson" = c."Pcode" and c."IdTypeContact" = 6
where c."Code" = coalesce(t."StageUser",'') )
AND (
t."DocumentDate" IS NULL OR t."DocumentDate" BETWEEN _bdate AND _edate
) and t."DocType" not in ('ServiceDesk', 'CancellationAct') ;
```
#### Универсальные документы подчиненных
??? note "Запрос"
Основной запрос:
Итоговая выборка:
```sql
insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId"
, "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution"
, "DateControl" , "RouteVCode" , "RouteStatusId" , "RouteStatusName" , "DocName"
, "DocSubject" , "expired" , "StageNumber" , "BeginDate" , "ActionDate"
, "DocumentAction" , "DocumentStatus" , "FromMessage" , "eDate"
, "StageUser" , "StageItemStatus" , "StageStatus" , "StageItemAction" , "DocumentSubtype" ,
"AnyColumnA" ,"AnyColumnB" , "AnyColumnC","AnyColumnD" ,
"AnyColumnE" ,
"AnyColumnF", "AnyColumnG" , "AnyColumnH" , "AnyColumnI", "AnyColumnJ","AnyColumnK")
select distinct t."DocCode" , t."DocType" , t."DocForm" , t."DocTypeName" , t."SettingsId"
, t."orgId" , t."DocumentDate" , t."DocumentNumber" ,
case when t."DocType" in ('UniversalDocument','DocumentForSigning') then (select pc."Code" from dfd."DocumentCategoryAttributeType" bd
join dfd."DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#Worker#'
join rp."RP_Worker" w on w."VCode" = daa1."BigIntValue"
join rp."RP_PersonContact" AS pc ON pc."Pcode" = w."IdPerson" AND pc."IdTypeContact" = 6
where t."DocumentCategory" = bd."PCode" limit 1)
else t."VirtualCUser" end,
t."DateOfExecution"
, t."DateControl" , t."RouteVCode" , t."RouteStatusId" , t."RouteStatusName" , t."DocName"
, t."DocSubject" ,
comdoc."dfwcGetDuration"(t."eDate", COALESCE(t."ActionDate", _now), false, t."orgId", 1, _dayoff1, _dayoff2, null) ,
t."StageNumber" , t."BeginDate" , t."ActionDate"
, t."DocumentAction" , t."DocumentStatus" , t."FromMessage" , t."eDate"
, t."StageUser" , t."StageItemStatus" , t."StageStatus" , t."StageItemAction", t."DocumentSubtype", t."AnyColumnA" ,
case when t."DocType" in ('DocumentForSigining','UniversalDocument') then (select coalesce(w."ID_RP",'') from dfd."DocumentCategoryAttributeType" bd
join dfd."DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#Worker#'
join rp."RP_WorkerMove" w on w."IdWorker" = daa1."BigIntValue"
where t."DocumentCategory" = bd."PCode" limit 1)
else (select coalesce(m."ID_RP",'') from rp."RP_WorkerMove" AS m where m."IdWorker" = t."IdWorker" limit 1) end as "AnyColumnB" ,
case when t."DocType" in ('DocumentForSigining','UniversalDocument') then (select coalesce(w."RP_Txt",'') from dfd."DocumentCategoryAttributeType" bd
join dfd."DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#Worker#'
join rp."RP_WorkerMove" w on w."IdWorker" = daa1."BigIntValue"
where t."DocumentCategory" = bd."PCode" limit 1) else (select coalesce(m."RP_Txt",'') from rp."RP_WorkerMove" AS m where m."IdWorker" = t."IdWorker" limit 1) end as "AnyColumnC",
case when t."DocType" in ('DocumentForSigining','UniversalDocument') then (select coalesce(w."ID_ER",'') from dfd."DocumentCategoryAttributeType" bd
join dfd."DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#Worker#'
join rp."RP_WorkerMove" w on w."IdWorker" = daa1."BigIntValue"
where t."DocumentCategory" = bd."PCode" limit 1) else (select coalesce(m."ID_ER",'') from rp."RP_WorkerMove" AS m where m."IdWorker" = t."IdWorker" limit 1) end as "AnyColumnD" ,
t."AnyColumnE",
(select to_char(daa1."DateValue", 'DD.MM.YYYY') from dfd."DocumentCategoryAttributeType" bd
join dfd."DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#bdate#' where t."DocumentCategory" = bd."PCode" limit 1) as "AnyColumnF" ,
(select to_char(daa1."DateValue", 'DD.MM.YYYY') from dfd."DocumentCategoryAttributeType" bd
join dfd."DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#edate#' where t."DocumentCategory" = bd."PCode" limit 1) as "AnyColumnG" ,
(select daa1."BigIntValue"::text from dfd."DocumentCategoryAttributeType" bd
join dfd."DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" ='#kolvo#' where t."DocumentCategory" = bd."PCode" limit 1) as "AnyColumnH",
(select string_agg(dca."Name" || ':' || (case
when coalesce(dca."AttributeType",'') = 'string' and coalesce(atr."Value",'') <> '' then atr."Value"
when coalesce(dca."AttributeType",'') = 'string' and coalesce(atr."Value",'') = '' then ' '
when coalesce(dca."AttributeType",'') = 'bigint' and atr."BigIntValue" is not null then cast(atr."BigIntValue" as varchar(255))
when coalesce(dca."AttributeType",'') = 'bigint' and atr."BigIntValue" is null then ' '
when coalesce(dca."AttributeType",'') = 'string' and atr."BigIntValue" is not null then cast(atr."BigIntValue" as varchar(255))
when coalesce(dca."AttributeType",'') = 'string' and atr."BigIntValue" is null then ' '
when coalesce(dca."AttributeType",'') = 'Base.Unispr' and atr."BigIntValue" is null and coalesce(atr."Value",'') = '' then ' '
when coalesce(dca."AttributeType",'') = 'Base.Unispr' and atr."BigIntValue" is not null and coalesce(atr."Value",'') <> '' then coalesce(atr."Value",' ')
when coalesce(dca."AttributeType",'') = 'Base.Post' and atr."BigIntValue" is null and coalesce(atr."Value",'') = '' then ' '
when coalesce(dca."AttributeType",'') = 'Base.Post' and atr."BigIntValue" is not null and coalesce(atr."Value",'') <> '' then coalesce(atr."Value",' ')
when coalesce(dca."AttributeType",'') = 'Base.RP_Worker' and atr."BigIntValue" is null and coalesce(atr."Value",'') = '' then ' '
when coalesce(dca."AttributeType",'') = 'Base.RP_Worker' and atr."BigIntValue" is not null and coalesce(atr."Value",'') <> '' then coalesce(atr."Value",' ')
when coalesce(dca."AttributeType",'') = 'Base.Contract' and atr."BigIntValue" is null and coalesce(atr."Value",'') = '' then ' '
when coalesce(dca."AttributeType",'') = 'Base.Contract' and atr."BigIntValue" is not null and coalesce(atr."Value",'') <> '' then coalesce(atr."Value",' ')
when coalesce(dca."AttributeType",'') = 'Base.Contractor' and atr."BigIntValue" is null and coalesce(atr."Value",'') = '' then ' '
when coalesce(dca."AttributeType",'') = 'Base.Contractor' and atr."BigIntValue" is not null and coalesce(atr."Value",'') <> '' then coalesce(atr."Value",' ')
when coalesce(dca."AttributeType",'') = 'Base.Department' and atr."BigIntValue" is null and coalesce(atr."Value",'') = '' then ' '
when coalesce(dca."AttributeType",'') = 'Base.Department' and atr."BigIntValue" is not null and coalesce(atr."Value",'') <> '' then coalesce(atr."Value",' ')
when coalesce(dca."AttributeType",'') = 'money' and atr."MoneyValue" is not null then cast(atr."MoneyValue" as varchar(255))
when coalesce(dca."AttributeType",'') = 'money' and atr."MoneyValue" is null then ' '
when coalesce(dca."AttributeType",'') = 'Date' and atr."DateValue" is not null then to_char(atr."DateValue", 'DD.MM.YYYY')
when coalesce(dca."AttributeType",'') = 'Date' and atr."DateValue" is null then ' '
when coalesce(dca."AttributeType",'') = 'DateTime' and atr."DateTimeValue" is not null then to_char(atr."DateValue", 'DD.MM.YYYY')
when coalesce(dca."AttributeType",'') = 'DateTime' and atr."DateTimeValue" is null then ' '
when coalesce(dca."AttributeType",'') = 'double' and atr."DoubleValue" is not null then cast(atr."DoubleValue" as varchar(255))
when coalesce(dca."AttributeType",'') = 'double' and atr."DoubleValue" is null then ' '
when coalesce(dca."AttributeType",'') = 'ServiceWord' and coalesce(atr."Value",'') <> '' then coalesce(atr."Value",' ')
when coalesce(dca."AttributeType",'') = 'ServiceWord' and coalesce(atr."Value",'') = '' then ' '
when coalesce(dca."AttributeType",'') = 'bool' and coalesce("BigIntValue"::integer,0) = 0 then substring(coalesce("Value",'|'), position('|' in coalesce("Value",'|'))+1,char_length(coalesce("Value",'|')))
when coalesce(dca."AttributeType",'') = 'bool' and coalesce("BigIntValue"::integer,0) = 1 then substring(coalesce("Value",'|'),0, position('|' in coalesce("Value",'|')))
end), '; ') AS "x"
from dfd."DocumentAdditionalAttribute" atr
join dfd."DocumentCategoryAttributeType" dca on atr."CategoryAttributeType" = dca."VCode"
where t."DocCode" = atr."PCode" and dca."ColumnName" not in ('#bdate#', '#edate#', '#kolvo#')) as "AnyColumnI",
case when t."DocType" in ('UniversalDocument','DocumentForSigning') then (select w."NumTab" from dfd."DocumentCategoryAttributeType" bd
join dfd."DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#Worker#'
join rp."RP_Worker" w on w."VCode" = daa1."BigIntValue"
where t."DocumentCategory" = bd."PCode" limit 1)
else (select r."NumTab" from rp."RP_Worker" as r where r."VCode" = t."IdWorker") end ,
case when t."DocType" in ('UniversalDocument','DocumentForSigning') then (select w."NameFull" from dfd."DocumentCategoryAttributeType" bd
join dfd."DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#Worker#'
join rp."RP_Worker" w on w."VCode" = daa1."BigIntValue"
where t."DocumentCategory" = bd."PCode" limit 1)
else (select r."NameFull" from rp."RP_Worker" as r where r."VCode" = t."IdWorker") end
from "tmp_preresult" t
where t."IsMarked" is not true and
exists (select 1
from comdoc."getWorkerChiefStructure"(null::bigint,lex."getVirtualLogin"(),1) s
join rp."RP_Worker" r on s."VCode" = r."VCode"
join rp."RP_PersonContact" c on r."IdPerson" = c."Pcode" and c."IdTypeContact" = 6
where c."Code" = coalesce(t."StageUser",'') )
AND (
t."DocumentDate" IS NULL OR t."DocumentDate" BETWEEN _bdate AND _edate
) and t."DocType" in ('UniversalDocument') ;
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -56,7 +56,7 @@
Откроется форма для создания нового шаблона.
![Создание нового шаблона маршрута](./media/formInit.png)
![alt text](media/image-1.png)
В документе необходимо заполнить следующие поля:
@ -76,6 +76,8 @@
- **Подразделение:** указывает на то, в каком подразделении действует шаблон, т.е. каждый пользователь прикреплен в системе к определенному подразделению, которое считывается автоматически при создании нового документа. По этой принадлежности фильтруются шаблоны. Если подразделение в шаблоне не задано, то шаблон действует по всей организации.
- **Время на обработку по умолчанию, дней / часов:** - устанавливается срок обработки документа в рабочих днях согласно производственному календарю при добавлении нового этапа согласования. В левом поле указываются дни, в правом - часы. **Заполняется только либо поле со днями либо с часами.** В случае если данные поля не заполнены, по умолчанию заполняется 2 рабочих дня.
- **Подтип документа** - указывает на то, для какого подтипа документа действует шаблон. Если подтип не указан, то шаблон маршрута действует для всех подтипов документа.
- **Роли приложения** задает список ролей, хотя бы одной из которых должен обладать пользователь, чтобы создать такой шаблон маршрута в документе.
@ -175,7 +177,7 @@
#### Столбец "Служебное наименование из конструктора"
Используется в случае, когда заранее неизвестно какой именно участник будет участвовать в маршруте, но его выбор зависит от реквизитов создаваемого документа. В этом случае в [конструкторе документов](../Конструктор документов/) в дополнительном атрибуте необходимо указать тип атрибута и служебное наименование. Например в подтипе "Документы о приеме на работу" заполняется атрибут "Работник" со служебным наименованием **#worker1#**.
Используется в случае, когда заранее неизвестно какой именно участник будет участвовать в маршруте, но его выбор зависит от реквизитов создаваемого документа. В этом случае в [конструкторе документов](../Конструктор документов/) в дополнительном атрибуте либо в табличной части необходимо указать тип атрибута и служебное наименование. Например в подтипе "Документы о приеме на работу" заполняется атрибут "Работник" со служебным наименованием **#worker1#**.
![Конструктор](media/konstruktor.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

View File

@ -13,6 +13,8 @@ markdown_extensions:
- pymdownx.highlight
- pymdownx.superfences
- def_list
- pymdownx.tabbed:
alternate_style: true
extra_css:
- css/extra.css