Compare commits

...

7 Commits

47 changed files with 1156 additions and 228 deletions

View File

@ -50,9 +50,8 @@ theme:
- navigation.tabs.sticky - navigation.tabs.sticky
- search.suggest - search.suggest
- header.autohide - header.autohide
- navigation.path - navigation.path
- navigation.expand
# - navigation.tabs
language: ru language: ru

View File

@ -109,7 +109,7 @@ CN=service ldap lexema,OU=Technical Accounts,OU=ЦифроваяПомощь,OU=
!!! question !!! question
Что делать если по кнопке Добавить сертификат - список сертификатов пустой? Что делать если по кнопке Добавить сертификат - список сертификатов пустой?
см. статью [Привязка КЭП к пользователю Lexema-ECM](../Настройка для токенов КЭП/#шаг_3_привязка_кэп_к_пользователю_lexema-ecm). 1) см. статью [Привязка КЭП к пользователю Lexema-ECM](../Настройка для токенов КЭП/#шаг_3_привязка_кэп_к_пользователю_lexema-ecm).
Как добавить в личное хранилище импортированные сертификаты?</br> Как добавить в личное хранилище импортированные сертификаты?</br>
@ -120,6 +120,16 @@ CN=service ldap lexema,OU=Technical Accounts,OU=ЦифроваяПомощь,OU=
![csp5](media/csp5.PNG)</br> ![csp5](media/csp5.PNG)</br>
![сертификаты-личное](media/сертификаты-личное.PNG)</br> ![сертификаты-личное](media/сертификаты-личное.PNG)</br>
2) Нажмите сочетание клавиш `Win + R`
Введите `certmgr.msc` и нажмите клавишу Enter.
![Alt text](media/image-1.png)
Откроется Консоль управления сертификатами.
![Alt text](media/image.png)
## Использование Crontab для сервиса sheduler ## Использование Crontab для сервиса sheduler
!!! question !!! question

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

@ -1,3 +1,7 @@
---
search:
boost: 3
---
# Автоматическое создание пользователей # Автоматическое создание пользователей
## Создание пользователей ## Создание пользователей

View File

@ -0,0 +1,88 @@
# Администрирование СЭД
Документ **"Администрирование СЭД"** необходим для делегирования либо переноса задач с одного пользователя на другого, либо с заблокированных пользователях.
Для перехода в документ необходимо в меню перейти Администрирование -> Документооборот -> СЭД -> Администрирование СЭД
![Рисунок](.media/../media/menu.png)
## Перевод-делегирование
В открытой вкладке "Перевод-делегирование" для формирования всех задач у заблокированного пользователя, необходимо нажать на **"Посмотреть заблокированные задачи"**
![Рисунок](./media/blockTask.png)
Сформируется табличная часть с задачами по всем заблокированным пользователям.
![Рисунок](./media/listBlockTask.png)
Для подробного просмотра документа необходимо перейти по кликабельной ссылке к этому документу.
Также можно отфильтровать задачи по заданному пользователю. Для этого в поле "Пользователь" необходимо указать Ф.И.О. сотрудника и нажать на "Посмотреть заблокированные задачи" (например выберем сотрудника Романова И.В.)
![Рисунок](./media/taskToUser.png)
Для делегирования задач необходимо в поле **"Делегат"** указать пользователя на которого будет произведена делегация, нажать на кнопку "Делегировать активные задачи" и подтвердить делегирование (например документ "Проект поручения №277 делегируем на пользователя Денежную Е.К.).Если на предприятии несколько филиалов, нужно указать филиал. Иначе все задачи пользователя, по всем филиалам будут делегированы указанному пользователю.
![Рисунок](./media/delegation.png)
![Рисунок](.media/../media/confirmation.png)
После подтверждения делегирования, данный документ поступает к указанному пользователю (в примере к пользователю Денежная Е.К.).
![Рисунок](.media/../media/delegationDoc.png)
В маршруте автоматически прописывается комментарий для делегированного пользователя
![Рисунок](./media/comment.png)
## Перенос документов на другого пользователя
В открытой вкладке для формирования всех задач пользователя, необходимо выбрать его в поле "Пользователь" нажать на **"Посмотреть задачи на пользователе"**.
![Alt text](media/image-5.png)
Сформируется табличная часть с документами пользователя:
![Alt text](media/image-6.png)
!!! note
В табличной части отображаются все документы с которыми взаимодействовал сотрудник (был инициатором, участвовал в согласовании по маршруту и получал посредством списка рассылки)
Для подробного просмотра документа можно перейти по кликабельной ссылке к этому документу. Также можно отфильтровать задачи по заданному пользователю (инициатору документа). Для переноса необходимо в табличной части выбрать один или несколько документов и выбрать получателя-пользователя в поле **"На кого перенести"** из выпадающего списка и нажать кнопку **"Перенести документы"**.
![Alt text](media/image-7.png)
После этого появится информационное сообщение что о переносе документов:
![Рисунок](media/info.png)
Если переведенные документы находились у пользователя в обработке, то эти документы будут находится у указанного пользователя в обработке:
![Alt text](media/image-8.png)
## Освобождение логина
В данной вкладке можно перенести все документы сотрудника на новый логин при его увольнении из компании. Это освободит логин для последующей передачи его новому пользователю в системе. При этом вся история документов, уволенного сотрудника, останется сохраненной в системе.
В открытой вкладке для формирования всех задач пользователя, необходимо выбрать его в поле "Пользователь" нажать на **"Посмотреть задачи на пользователе"**.
![Alt text](media/image.png)
Сформируется табличная часть с документами пользователя:
![Alt text](media/image-1.png)
!!! note
В табличной части отображаются все документы с которыми взаимодействовал сотрудник (был инициатором, участвовал в согласовании по маршруту и получал посредством списка рассылки)
Для подробного просмотра документа можно перейти по кликабельной ссылке к этому документу. Для переноса документов необходимо нажать на кнопку **"Освободить логин"**.
![Alt text](media/image-2.png)
После этого появится информационное сообщение что о переносе документов, а также автоматически заполнится поле **"Новый логин"**.
![Alt text](media/image-3.png)
Если переведенные документы находились у пользователя в обработке, то эти документы будут находится у указанного пользователя в обработке:
![Alt text](media/image-4.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1,81 @@
# Виды электронных подписей
## Общие сведения
В России в электронном документообороте можно использовать три вида подписи: простую (ПЭП), неквалифицированную (НЭП) и квалифицированную (КЭП) электронные подписи.
По способу хранения ЭП делятся на облачные и на специальном носителе (токенах).
Облачная электронная подпись позволяет подписывать документы СЭД и КЭДО с любого устройства, без привязки к рабочему месту. В Lexema-ECM можно работать как со сторонними облачными электронными подписями (ЭП), так и с собственными облачными неквалифицированными подписями (УНЭП). В систему встроен сервис для выпуска УНЭП.
## Простая электронная подпись, или ПЭП
Простая подпись — это знакомые всем коды доступа из СМС, коды на скретч-картах, пары "логин-пароль" в личных кабинетах на сайтах и в электронной почте. Простая подпись создается средствами информационной системы, в которой ее используют, и подтверждает, что электронную подпись создал конкретный человек.
### Где используется простая электронная подпись?
Простая электронная подпись чаще всего применяется при банковских операциях, а также для аутентификации в информационных системах, для получения госуслуг, для заверения документов внутри корпоративного электронного документооборота (далее — ЭДО).
Простую электронную подпись нельзя использовать при подписании электронных документов или в информационной системе, которые содержат гостайну.
### Юридическая сила ПЭП
Простая подпись приравнивается к собственноручной, если это регламентирует отдельный нормативно-правовой акт или между участниками ЭДО заключено соглашение, где прописаны:
- правила, по которым подписанта определяют по его простой электронной подписи;
- обязанность пользователя соблюдать конфиденциальность закрытой части ключа ПЭП (например, пароля в паре "логин-пароль" или СМС-кода, присланного на телефон).
Во многих информационных системах пользователь должен сначала подтвердить свою личность во время визита к оператору системы, чтобы его ПЭП в будущем имела юридическую силу. Например, для получения подтвержденной учетной записи на портале Госуслуг, нужно лично прийти в один из центров регистрации с документом, удостоверяющим личность.
## Неквалифицированная электронная подпись, или НЭП {#НЭП}
Усиленная неквалифицированная электронная подпись (далее — НЭП) создается с помощью программ криптошифрования с использованием закрытого ключа электронной подписи. НЭП идентифицирует личность владельца, а также позволяет проверить, вносили ли в файл изменения после его отправки.
Человек получает в удостоверяющем центре два ключа электронной подписи: закрытый и открытый. Закрытый ключ хранится на специальном ключевом носителе с пин-кодом или в компьютере пользователя — он известен только владельцу и его нужно держать в тайне. С помощью закрытого ключа владелец генерирует электронные подписи, которыми подписывает документы.
Открытый ключ электронной подписи доступен всем, с кем его обладатель ведет ЭДО. Он связан с закрытым ключом и позволяет всем получателям подписанного документа проверить подлинность ЭП.
То, что открытый ключ принадлежит владельцу закрытого ключа, прописывается в сертификате электронной подписи. Сертификат также выдается удостоверяющим центром. Но при использовании НЭП сертификат можно не создавать. Требования к структуре неквалифицированного сертификата не установлены в федеральном законе № 63-ФЗ "Об электронной подписи".
### Где используется неквалифицированная электронная подпись?
НЭП можно использовать для внутреннего ЭДО, если стороны предварительно договорились об этом.
### Юридическая сила НЭП
Участникам ЭДО нужно соблюдать дополнительные условия, чтобы электронные документы, заверенные НЭП, считались равнозначными бумажным с собственноручной подписью. Сторонам нужно обязательно заключить между собой соглашение о правилах использования НЭП и взаимном признании ее юридической силы.
## Квалифицированная электронная подпись или КЭП
Усиленная квалифицированная электронная подпись — самый регламентированный государством вид подписи. Так же, как и НЭП, она создается с помощью криптографических алгоритмов и базируется на инфраструктуре открытых ключей, но отличается от НЭП в следующем:
- Обязательно имеет квалифицированный сертификат в бумажном или электронном виде, структура которого определена приказом ФСБ России № 795 от 27.12.2011.
- Программное обеспечение для работы с КЭП сертифицировано ФСБ России.
- Выдавать КЭП может только удостоверяющий центр, который аккредитован Минкомсвязи России.
### Где используется квалифицированная электронная подпись?
КЭП нужна, чтобы сдавать отчетность в контролирующие органы, участвовать в качестве поставщика и заказчика в электронных торгах, работать с государственными информационными системами, обмениваться формализованными документами с ФНС, вести электронный документооборот внутри компании или с ее внешними контрагентами.
### Юридическая сила КЭП
КЭП — это подпись, которая придает документам юридическую силу без дополнительных условий. Если организации ведут ЭДО, подписывая документы КЭП, их юридическая сила признается автоматически согласно федеральному закону № 63-ФЗ "Об электронной подписи".
КЭП полностью приравнивается к ручной ("мокрой") подписи.
## Сводная таблица {#table}
Вид подписи | Что из себя представляет | Какие кадровые документы можно подписать? | Зона действия ЭП и риски
------------|--------------------------|-------------------------------------------|-------------------------
ПЭП | Логин-пароль | Расчетные листки, табель учета рабочего времени | Документы, имеющие силу только внутри ИС. Риски минимальные
НЭП | Заказывается в удостоверяющих центрах или создается силами собственных IT-специалистов | Все, кроме документов по увольнению сотрудников | Любые документы, действующие внутри компании. Риск утери НЭП влечет максимум подписание вместо сотрудника только кадрового документа
КЭП | Заказывается в аккредитованных удостоверяющих центрах | Все | Любые документы, включая финансовые и юридические. Утеря КЭП может нанести серьезный финансовый и репутационный ущерб
## Сводная таблица по применимости видов подписи к некоторым типам документов
Роль | ПЭП | НЭП | КЭП
-|-----|-----|----
Работник | Применимо к не указанным в разделе по НЭП документам, в отношении которых трудовым законодательством и иными нормативными правовыми актами, содержащими нормы трудового права, предусмотрено их оформление на бумажном носителе и (или) ознакомление с ними работника или лица, поступающего на работу, в письменной форме, в том числе под роспись, **за исключением**: трудовых книжек и формируемых в соответствии с трудовым законодательством в электронном виде сведений о трудовой деятельности работников, акта о несчастном случае на производстве по установленной форме, приказа (распоряжения) об увольнении работника, документов, подтверждающих прохождение работником инструктажей по охране труда, в том числе лично подписываемых работником. | При заключении трудового договора, договора о материальной ответственности, ученического договора, договора на получение образования без отрыва или с отрывом от работы, при внесении в них изменений, при подписании согласия на перевод, заявления об увольнении, отзыве заявления об увольнении, а также при ознакомлении с уведомлением об изменении определенных сторонами условий трудового договора, приказом (распоряжением) о применении дисциплинарного взыскания | Применимо к документам, в отношении которых трудовым законодательством и иными нормативными правовыми актами, содержащими нормы трудового права, предусмотрено их оформление на бумажном носителе и (или) ознакомление с ними работника или лица, поступающего на работу, в письменной форме, в том числе под роспись, **за исключением**: трудовых книжек и формируемых в соответствии с трудовым законодательством в электронном виде сведений о трудовой деятельности работников, акта о несчастном случае на производстве по установленной форме, приказа (распоряжения) об увольнении работника, документов, подтверждающих прохождение работником инструктажей по охране труда, в том числе лично подписываемых работником.
Работодатель | - | Применимо к не указанным в разделе по КЭП документам, в отношении которых трудовым законодательством и иными нормативными правовыми актами, содержащими нормы трудового права, предусмотрено их оформление на бумажном носителе и (или) ознакомление с ними работника или лица, поступающего на работу, в письменной форме, в том числе под роспись, **за исключением**: трудовых книжек и формируемых в соответствии с трудовым законодательством в электронном виде сведений о трудовой деятельности работников, акта о несчастном случае на производстве по установленной форме, приказа (распоряжения) об увольнении работника, документов, подтверждающих прохождение работником инструктажей по охране труда, в том числе лично подписываемых работником. | При заключении трудовых договоров, договоров о материальной ответственности, ученических договоров, договоров на получение образования без отрыва или с отрывом от работы, при внесении в них изменений, а также при подписании приказа (распоряжения) о применении дисциплинарного взыскания, уведомлении об изменении определенных сторонами условий трудового договора
> Данные приведены на основании [Федерального закона от 22.11.2021 № 377-ФЗ "О внесении изменений в Трудовой кодекс Российской Федерации"](http://publication.pravo.gov.ru/Document/View/0001202111220001)

View File

@ -1,3 +1,7 @@
---
search:
boost: 2
---
# Выпуск облачной неквалифицированной электронной подписи в Lexema-ECM администратором # Выпуск облачной неквалифицированной электронной подписи в Lexema-ECM администратором
## Общее описание ## Общее описание
@ -165,10 +169,10 @@
## Автоматический выпуск сертификатов новым сотрудникам ## Автоматический выпуск сертификатов новым сотрудникам
На проекте возможно настроить автоматический выпуск сертификатов новым пользователям в системе. Для этого в [планировщике задач](../Планировщик задач/index.md) необходимо настроить задачу ["Выпуск сертификатов новым сотрудникам"](.../Функции планировщика задач/TaskSheduler.md. Функция работает по следующему принципу: в случае если используется положение о КЭДО, то кандидаты подбираются если текущая дата больше либо равна дата перехода на КЭДО и есть логин в системе. В случае если положение о КЭДО не используется то по наличию логина в системе у сотрудника. На проекте возможно настроить автоматический выпуск сертификатов новым пользователям в системе. Для этого в [планировщике задач](../Планировщик задач/) необходимо настроить задачу [**"Выпуск сертификатов новым сотрудникам"**](.../Функции планировщика задач/), и настроить константу [**ЭЦП_количество_дней_за_сколько_отправтить_заявкуа_перевыпуск**](../Настройка констант/) с указанием количества дней по которому нужно проверять срок окончания сертификатов. Если она не задана, то по умолчанию количество дней = 5. Функция работает по следующему принципу: в случае если используется положение о КЭДО, то кандидаты подбираются если текущая дата больше либо равна дата перехода на КЭДО и есть логин в системе. В случае если положение о КЭДО не используется то по наличию логина в системе у сотрудника.
!!! warning !!! warning
Необходимо чтобы на всех филиалах был заведен **SchedulerUser** с правами администратора, и назначенной ролью **DssAdmin**, иначе будет ошибка что нет прав на создание сертификата. Необходимо чтобы на **всех филиалах** был заведен **SchedulerUser** с правами администратора, и назначенной ролью **DssAdmin**, иначе будет ошибка что нет прав на создание сертификата.
![SchedulerUser](media/SchedulerUser.png) ![SchedulerUser](media/SchedulerUser.png)
@ -180,7 +184,7 @@
## Автоматический перевыпуск сертификатов у которых заканчивается срок действия ## Автоматический перевыпуск сертификатов у которых заканчивается срок действия
На проекте возможно настроить автоматический перевыпуск сертификатов у которых заканчивается срок действия. Для этого в [планировщике задач](../Планировщик задач/index.md) необходимо настроить задачу ["Выпуск новых сертификатов, когда истекают сроки"](.../Функции планировщика задач/TaskSheduler.md. В настройках учетной политики должна быть включена константа **"ЭЦП_количество_дней_за_сколько_отправтить_заявкуа_перевыпуск"**, где указывается значение количества дней по которому нужно проверять сертификаты. Если текущая дата меньше даты окончания действующего ЭП либо равна константе - то по каждому работнику автоматически формируется документ "Заявка на выпуск" с новым выпущенным сертификатом, с заявлением на выдачу сертификата, распиской в получении сертификата. На проекте возможно настроить автоматический перевыпуск сертификатов у которых заканчивается срок действия. Для этого в [планировщике задач](../Планировщик задач/index.md) необходимо настроить задачу ["Выпуск новых сертификатов, когда истекают сроки"](../Функции планировщика задач/). В настройках учетной политики должна быть включена константа **"ЭЦП_количество_дней_за_сколько_отправтить_заявкуа_перевыпуск"**, где указывается значение количества дней по которому нужно проверять сертификаты. Если текущая дата меньше даты окончания действующего ЭП либо равна константе - то по каждому работнику автоматически формируется документ "Заявка на выпуск" с новым выпущенным сертификатом, с заявлением на выдачу сертификата, распиской в получении сертификата.
![Заявка](media/zayvka.png) ![Заявка](media/zayvka.png)

View File

@ -0,0 +1,33 @@
# Должности
## Общее описание назначения справочника
Справочник это документ, предназначенный для использования в других документах в качестве значений их полей.
Справочник "Должности" предназначен для хранения в системе основных данных по должностям в компании и заводится без привязки к подразделениям, так как одна должность может быть присуща нескольким подразделениям.
## Реестр
Для входа в документ необходимо в меню в группе "Кадры" выбрать пункт "Должности". Для доступа к документу нужны права администратора.
![Рисунок 1 Меню](./media/menu.png)
Откроется реестр должностей.
![Рисунок 2 Пример реестра должностей](./media/registry.png)
Для создания нового документа необходимо нажать на кнопку "Создать" на верхней панели инструментов.
![](./media/create.png)
Кнопка "Добавить из ОКПДТР" загрузка классификатора, подключается отдельным сервисом через вендора системы
## Документ
Пример заполненного документа "Должность" выглядит следующим образом:
![Рисунок 3 Пример документа "Должность"](./media/docExample.png)
Обязательными полями для заполнения являются наименование должности и её наименования в родительном и дательном падежах.
Если подключён справочник [Категории должностей](../Категории должностей/index.md), можно заполнить поле "Категория должности".

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

View File

@ -0,0 +1,27 @@
# Категории должностей
## Общее описание назначения справочника
Справочник это документ, предназначенный для использования в других документах в качестве значений их полей.
Справочник "Категория должностей" предназначен для хранения в системе основных данных по категории должностей в компании и заводится без привязки к должностям, так как одна категория может быть присуща нескольким должностям.
## Реестр
Для входа в документ необходимо перейти в Меню - Кадры - Справочники - Категории должностей. Для доступа к документу нужны права администратора.
Откроется реестр должностей.
![Рисунок 2 Пример реестра категории должностей](media/image3.png)
Для создания нового документа необходимо нажать на кнопку "Создать" на верхней панели инструментов.
![](../Должности/media/create.png)
## Документ
Пример заполненного документа "Категории должностей" выглядит следующим образом:
![Рисунок 2 Пример документа "Категории должностей"](media/image2.png)
Код и наименование обязательны для заполнения.

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -77,11 +77,16 @@
В запросе возможно настроить цветовое отображение полей документов в зависимости от условий. Для этого в запросе необходимо указать поле "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" В запросе возможно настроить цветовое отображение полей документов в зависимости от условий. Для этого в запросе необходимо указать поле "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 цвет , 2`, где цифра 2 цвет
!!! note
Для того чтобы запрос фильтровался по заданному количеству документов, которое указывается в поле **Кол-во строк/Период (с/по):** необзодимо в конце запроса добавить строку `_topcount` , например: ```left join "tmp_workers_for_documentStatusJournalProc" w2 on w2."VCode" = t."IdWorker" _topcount;```
Примеры запросов: ### Примеры запросов:
**Просроченные документы** - в реестре отображаются документы, по которым были нарушены сроки обработки: **Просроченные документы** - в реестре отображаются документы, по которым были нарушены сроки обработки:
Основной запрос:
Итоговая выборка:
```sql ```sql
insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId" insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId"
, "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution" , "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution"
@ -117,6 +122,9 @@ coalesce(dd."expired", 0) <> 0 ;
**Зависшие документы у инициатора** - в реестре отображаются документы, которые были инициированы сотрудником, но не запущены далее по маршруту согласования. **Зависшие документы у инициатора** - в реестре отображаются документы, которые были инициированы сотрудником, но не запущены далее по маршруту согласования.
Основной запрос:
Итоговая выборка:
```sql ```sql
insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId" insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId"
, "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution" , "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution"
@ -141,6 +149,9 @@ insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeNa
**Поступят к hr в ближайшее время** - в реестре отображаются документы, которые в данный момент находятся на стадии согласования у руководителя сотрудника, и после этого поступят в HR службу. **Поступят к hr в ближайшее время** - в реестре отображаются документы, которые в данный момент находятся на стадии согласования у руководителя сотрудника, и после этого поступят в HR службу.
Основной запрос:
Итоговая выборка:
```sql ```sql
insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId" insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId"
, "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution" , "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution"
@ -174,6 +185,9 @@ insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeNa
**Сейчас в работе у hr** - в реестре отображаются документы, которые в данный момент находятся в HR службе в работе **Сейчас в работе у hr** - в реестре отображаются документы, которые в данный момент находятся в HR службе в работе
Основной запрос:
Итоговая выборка:
```sql ```sql
insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId" insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId"
, "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution" , "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution"
@ -200,6 +214,9 @@ insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeNa
**Обработано службой HR сегодня** - в реестре отображаются документы, которые были обработаны сегодня службой HR сегодня. **Обработано службой HR сегодня** - в реестре отображаются документы, которые были обработаны сегодня службой HR сегодня.
Основной запрос:
Итоговая выборка:
```sql ```sql
insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId" insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId"
, "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution" , "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution"
@ -227,138 +244,584 @@ insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeNa
**Все документы** **Все документы**
Основной запрос:
```sql ```sql
insert into #tmp_finresult( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId" do $myQ$
declare _str text;
begin
_str := 'INSERT INTO "tmp_calcWithBaseParams_for_documentStatusJournalProc"(
"DocCode", "DocType", "DocForm", "DocTypeName", "SettingsId", "orgId", "DocumentDate", "DocumentNumber",
"VirtualCUser", "DateOfExecution", "DateControl","DocumentSubtype", "Department",
"IdWorker", "DocumentCategory"
)
SELECT distinct e."VCode" AS "DocCode", s."DocType", s."DocForm", s."DocName" AS "DocTypeName", s."VCode" AS "SettingsId", e."COrg" AS "orgId", e."DocumentDate", e."DocumentNumber"
, e."VirtualCUser", e."DateOfExecution", e."DateControl", e."DocumentSubtype", e."Department",
e."IdWorker", (select u."DocumentCategory" from dfd."UniversalDocument" u where u."VCode" = e."VCode") /*u."DocumentCategory"*/
FROM comdoc."DocflowExists" AS e
JOIN comdoc."DocflowDocumentSettings" AS s ON s."DocType" = e."TypeName"
-- left join dfd."UniversalDocument" u on u."VCode" = e."VCode"
WHERE 1 = 1 '
|| case when coalesce("orgParam",-1111)=-1111 then '' else ' and e."COrg" = '||_orgid::text end
|| case when EXISTS(SELECT 1 FROM "tmp_docTypes_for_documentStatusJournalProc" t) then '
and EXISTS(
SELECT 1 FROM "tmp_docTypes_for_documentStatusJournalProc" AS t WHERE t."DocType" = e."TypeName"
)' else '' end
|| case when exists(select 1 from "tmp_docSubTypes_for_documentStatusJournalProc" ) then '
AND EXISTS(
SELECT 1 FROM "tmp_docSubTypes_for_documentStatusJournalProc" AS t WHERE comdoc.try_cast_bigint(t."DocSubType") = e."DocumentSubtype"
) ' else '' end||'
and coalesce( e."DocumentDate",'''||_bdate||''') between '''||_bdate||''' and '''||_edate||'''
and e."TypeName" not in (''ServiceDesk'');' ;
-- }} Выборка по основным атрибутам документа
execute _str;
end;
$myQ$;
```
Итоговая выборка:
```sql
IF NOT comdoc."isTableExists"('tmp_addAtribute_for_documentStatusJournalProc', 'temp') THEN
CREATE TEMP TABLE "tmp_addAtribute_for_documentStatusJournalProc"(
"PCode" bigint NOT NULL,
worker bigint,
bdate text,
edate text,
kolvo text,
other text,
/* bdate_new1 text,
edate_new1 text,
kolvo_new1 text,
bdate_new2 text,
edate_new2 text,
kolvo_new2 text,*/
TypeName varchar(255)
);-- ON COMMIT DROP;
end if;
IF NOT comdoc."isTableExists"('tmp_workers_for_documentStatusJournalProc', 'temp') THEN
CREATE TEMP TABLE "tmp_workers_for_documentStatusJournalProc"(
"VCode" bigint NOT NULL,
"Login" varchar(255),
"NumTab" varchar(255),
"NameFull" varchar(255)
) ;-- ON COMMIT DROP;
end if;
insert into "tmp_addAtribute_for_documentStatusJournalProc"
select daa1."PCode", max(case when bd."ColumnName" = '#Worker#' then daa1."BigIntValue" end) as Worker,
max(case when bd."ColumnName" = '#bdate#' then to_char(daa1."DateValue", 'DD.MM.YYYY') end) as bdate,
max(case when bd."ColumnName" = '#edate#' then to_char(daa1."DateValue", 'DD.MM.YYYY') end) as edate,
max(case when bd."ColumnName" = '#kolvo#' then daa1."BigIntValue"::text end) as kolvo,
string_agg(case when bd."ColumnName" not in ('#bdate#', '#edate#', '#kolvo#','#bdate_new1#', '#edate_new1#', '#kolvo_new1#') then bd."Name" || ':' || (case
when coalesce(bd."AttributeType",'') = 'string' and coalesce(daa1."Value",'') <> '' then daa1."Value"
when coalesce(bd."AttributeType",'') = 'string' and coalesce(daa1."Value",'') = '' then ' '
when coalesce(bd."AttributeType",'') = 'bigint' and daa1."BigIntValue" is not null then cast(daa1."BigIntValue" as varchar(255))
when coalesce(bd."AttributeType",'') = 'bigint' and daa1."BigIntValue" is null then ' '
when coalesce(bd."AttributeType",'') = 'string' and daa1."BigIntValue" is not null then cast(daa1."BigIntValue" as varchar(255))
when coalesce(bd."AttributeType",'') = 'string' and daa1."BigIntValue" is null then ' '
when coalesce(bd."AttributeType",'') = 'Base.Unispr' and daa1."BigIntValue" is null and coalesce(daa1."Value",'') = '' then ' '
when coalesce(bd."AttributeType",'') = 'Base.Unispr' and daa1."BigIntValue" is not null and coalesce(daa1."Value",'') <> '' then coalesce(daa1."Value",' ')
when coalesce(bd."AttributeType",'') = 'Base.Post' and daa1."BigIntValue" is null and coalesce(daa1."Value",'') = '' then ' '
when coalesce(bd."AttributeType",'') = 'Base.Post' and daa1."BigIntValue" is not null and coalesce(daa1."Value",'') <> '' then coalesce(daa1."Value",' ')
when coalesce(bd."AttributeType",'') = 'Base.RP_Worker' and daa1."BigIntValue" is null and coalesce(daa1."Value",'') = '' then ' '
when coalesce(bd."AttributeType",'') = 'Base.RP_Worker' and daa1."BigIntValue" is not null and coalesce(daa1."Value",'') <> '' then coalesce(daa1."Value",' ')
when coalesce(bd."AttributeType",'') = 'Base.Contract' and daa1."BigIntValue" is null and coalesce(daa1."Value",'') = '' then ' '
when coalesce(bd."AttributeType",'') = 'Base.Contract' and daa1."BigIntValue" is not null and coalesce(daa1."Value",'') <> '' then coalesce(daa1."Value",' ')
when coalesce(bd."AttributeType",'') = 'Base.Contractor' and daa1."BigIntValue" is null and coalesce(daa1."Value",'') = '' then ' '
when coalesce(bd."AttributeType",'') = 'Base.Contractor' and daa1."BigIntValue" is not null and coalesce(daa1."Value",'') <> '' then coalesce(daa1."Value",' ')
when coalesce(bd."AttributeType",'') = 'Base.Department' and daa1."BigIntValue" is null and coalesce(daa1."Value",'') = '' then ' '
when coalesce(bd."AttributeType",'') = 'Base.Department' and daa1."BigIntValue" is not null and coalesce(daa1."Value",'') <> '' then coalesce(daa1."Value",' ')
when coalesce(bd."AttributeType",'') = 'money' and daa1."MoneyValue" is not null then cast(daa1."MoneyValue" as varchar(255))
when coalesce(bd."AttributeType",'') = 'money' and daa1."MoneyValue" is null then ' '
when coalesce(bd."AttributeType",'') = 'Date' and daa1."DateValue" is not null then to_char(daa1."DateValue", 'DD.MM.YYYY')
when coalesce(bd."AttributeType",'') = 'Date' and daa1."DateValue" is null then ' '
when coalesce(bd."AttributeType",'') = 'DateTime' and daa1."DateTimeValue" is not null then to_char(daa1."DateValue", 'DD.MM.YYYY')
when coalesce(bd."AttributeType",'') = 'DateTime' and daa1."DateTimeValue" is null then ' '
when coalesce(bd."AttributeType",'') = 'double' and daa1."DoubleValue" is not null then cast(daa1."DoubleValue" as varchar(255))
when coalesce(bd."AttributeType",'') = 'double' and daa1."DoubleValue" is null then ' '
when coalesce(bd."AttributeType",'') = 'ServiceWord' and coalesce(daa1."Value",'') <> '' then coalesce(daa1."Value",' ')
when coalesce(bd."AttributeType",'') = 'ServiceWord' and coalesce(daa1."Value",'') = '' then ' '
when coalesce(bd."AttributeType",'') = 'bool' and coalesce(daa1."BigIntValue"::integer,0) = 0 then substring(coalesce(daa1."Value",'|'), position('|' in coalesce(daa1."Value",'|'))+1,char_length(coalesce(daa1."Value",'|')))
when coalesce(bd."AttributeType",'') = 'bool' and coalesce(daa1."BigIntValue"::integer,0) = 1 then substring(coalesce(daa1."Value",'|'),0, position('|' in coalesce(daa1."Value",'|')))
end) end , '; ') as other,
/*max(case when bd."ColumnName" = '#bdate_new1#' then to_char(daa1."DateValue", 'DD.MM.YYYY') end) as bdate_new1,
max(case when bd."ColumnName" = '#edate_new1#' then to_char(daa1."DateValue", 'DD.MM.YYYY') end) as edate_new1,
max(case when bd."ColumnName" = '#kolvo_new1#' then daa1."BigIntValue"::text end) as kolvo_new1,
max(case when bd."ColumnName" = '#bdate_new2#' then to_char(daa1."DateValue", 'DD.MM.YYYY') end) as bdate_new2,
max(case when bd."ColumnName" = '#edate_new2#' then to_char(daa1."DateValue", 'DD.MM.YYYY') end) as edate_new2,
max(case when bd."ColumnName" = '#kolvo_new2#' then daa1."BigIntValue"::text end) as kolvo_new2,*/
max(a."DocType") as TypeName
from dfd."DocumentAdditionalAttribute" daa1
join dfd."DocumentCategoryAttributeType" bd on daa1."CategoryAttributeType" = bd."VCode"
join "tmp_calcWithBaseParams_for_documentStatusJournalProc_distinctVC" a on daa1."PCode" = a."DocCode"
where a."DocType" in ('DocumentForSigining','UniversalDocument', 'EmployeeStatement')
group by daa1."PCode";
insert into "tmp_workers_for_documentStatusJournalProc"
select w."VCode", max(pc."Code") as "Login", max(w."NumTab") as "NumTab", max(w."NameFull") as "NameFull"
from rp."RP_Worker" w
left join rp."RP_PersonContact" AS pc on pc."Pcode" = w."IdPerson" AND pc."IdTypeContact" = 6
left join rp."RP_WorkerMove" mov on mov."IdWorker" = w."VCode"
group by w."VCode" ;
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", "IsMarked", "DocumentSubtype"
, "AnyColumnA", "AnyColumnB", "AnyColumnC", "AnyColumnD", "AnyColumnE"
, "AnyColumnF", "AnyColumnG" , "AnyColumnH", "AnyColumnI", "AnyColumnJ"
, "AnyColumnK", "AnyColumnL", "AnyColumnM", "AnyColumnN", "EmailRecipient", "AnyColumnO", "Colors")
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 w."Login" else t."VirtualCUser" end) ,
null/*t."DateOfExecution"*/
, t."DateControl", t."RouteVCode", t."RouteStatusId", t."RouteStatusName", t."DocName"
, t."DocSubject", null/* coalesce(t."expired", case when coalesce(t."eDate", t."ActionDate", _now)<COALESCE(t."ActionDate", _now) then comdoc."dfwcGetDuration"(
t."eDate", COALESCE(t."ActionDate", _now), false, t."orgId", 1, _dayoff1, _dayoff2, null) end) */
, null/* t."StageNumber" */, null/*t."BeginDate" */, null/*t."ActionDate" */
, null/* t."DocumentAction"*/ , null/*t."DocumentStatus" */, null /*t."FromMessage" */, null /*t."eDate"*/
, null /*t."StageUser" */, null /*t."StageItemStatus"*/, null/*t."StageStatus" */, null/*t."StageItemAction"*/, t."IsMarked", t."DocumentSubtype"
, t."AnyColumnA", null as "AnyColumnB", null as "AnyColumnC", null as "AnyColumnD" , t."AnyColumnE"
, addit.bdate as "AnyColumnF", addit.edate as "AnyColumnG", addit.kolvo as "AnyColumnH", addit.other as "AnyColumnI", null/*sii."Name"*/ as "AnyColumnJ",
case when coalesce(t."RouteStatusId",0) = 2
and exists (select 1 from comdoc."RouteStage" rs where rs."PCode" = t."RouteVCode" and rs."StageNumber" = 1 and rs."Status" = 2 ) then 'Не запущен'
when coalesce(t."RouteStatusId",0) = 2 and t."StageItemStatus"= 2 and t."StageNumber" > 1
and exists (select 1 from comdoc."RouteStage" rs where rs."PCode" = t."RouteVCode" and rs."IsMarked" is not true and rs."StageName" in ( 'Исполнить')
and rs."Status"=1) then 'На согласовании / на согл у рук-ля'
when coalesce(t."RouteStatusId",0) = 3
and not exists (select 1 from comdoc."RouteStage" rs
join comdoc."StageItem" si on rs."VCode" = si."PCode"
where rs."PCode" = t."RouteVCode" and si."DocumentStatus" in (19,23)) then 'Завершен'
when coalesce(t."RouteStatusId",0) = 3
and exists (select 1 from comdoc."RouteStage" rs
join comdoc."StageItem" si on rs."VCode" = si."PCode"
where rs."PCode" = t."RouteVCode" and si."DocumentStatus" in (19,23)) then 'Отклонен' end as "AnyColumnK"
, ( SELECT DISTINCT string_agg(u."Initials"|| '(' || ds."Name"|| ')' , '; ') AS "x"
FROM comdoc."RouteStage" as rs
join comdoc."StageItem" AS i on i."PCode" = rs."VCode"
join comdoc."VUserMeta" AS u ON u."VCode" = i."StageUser"
join comdoc."DocumentStatus" AS ds ON ds."VCode" = i."DocumentStatus"
WHERE rs."PCode" = t."RouteVCode" AND i."StageItemStatus" = 3 and coalesce(i."DocumentStatus",0) <> 0) as "AnyColumnL"
, case when t."DocType" in ('UniversalDocument','DocumentForSigning') then w."NumTab" else w2."NumTab" end as "AnyColumnM"
, case when t."DocType" in ('UniversalDocument','DocumentForSigning') then w."NameFull" else w2."NameFull" end as "AnyColumnN"
, (select wr."VCode" from rp."RP_Worker" wr join rp."RP_PersonContact" pc on wr."IdPerson"= pc."Pcode" and pc."IdTypeContact" = 6 and pc."Code" = t."StageUser" where wr."COrg" = 1 order by wr."DateBeg" limit 1) as "EmailRecipient"
, (select wr."VCode" from rp."RP_Worker" wr join rp."RP_PersonContact" pc on wr."IdPerson"= pc."Pcode" and pc."IdTypeContact" = 6 and pc."Code" = t."StageUser" where wr."COrg" = 1 order by wr."DateBeg" limit 1) as "AnyColumnO"
, 3
from "tmp_preresult" t
left join "tmp_addAtribute_for_documentStatusJournalProc" addit on addit."PCode" = t."DocCode" --and addit.TypeName = "DocType"
left join "tmp_workers_for_documentStatusJournalProc" w on w."VCode" = addit.worker
left join "tmp_workers_for_documentStatusJournalProc" w2 on w2."VCode" = t."IdWorker"
_topcount;
drop table "tmp_addAtribute_for_documentStatusJournalProc";
drop table "tmp_workers_for_documentStatusJournalProc";
```
**Документы на подписание, просроченные работниками**
Основной запрос:
Итоговая выборка:
```sql
insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName" , "SettingsId"
, "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution" , "orgId" , "DocumentDate" , "DocumentNumber" , "VirtualCUser" , "DateOfExecution"
, "DateControl" , "RouteVCode" , "RouteStatusId" , "RouteStatusName" , "DocName" , "DateControl" , "RouteVCode" , "RouteStatusId" , "RouteStatusName" , "DocName"
, "DocSubject" , "expired" , "StageNumber" , "BeginDate" , "ActionDate" , "DocSubject" , "expired" , "StageNumber" , "BeginDate" , "ActionDate"
, "DocumentAction" , "DocumentStatus" , "FromMessage" , "eDate" , "DocumentAction" , "DocumentStatus" , "FromMessage" , "eDate", "Department"
, "StageUser" , "StageItemStatus" , "StageStatus" , "StageItemAction" , "IsMarked", "DocumentSubtype" , "AnyColumnA" , "AnyColumnB" , "AnyColumnC" , "AnyColumnD" , "AnyColumnE", , "StageUser" , "StageItemStatus" , "StageStatus" , "StageItemAction" , "DocumentSubtype" ,
"AnyColumnF", "AnyColumnG" , "AnyColumnH" , "AnyColumnI", "AnyColumnJ", "AnyColumnK","AnyColumnL", "AnyColumnM","AnyColumnN", "EmailRecipient","AnyColumnO", "Colors") "AnyColumnA" , "AnyColumnB" , "AnyColumnC" , "AnyColumnD" , "AnyColumnE" )
select t."DocCode" , t."DocType" , t."DocForm" , t."DocTypeName" , t."SettingsId" select t."DocCode" , t."DocType" , t."DocForm" , t."DocTypeName" , t."SettingsId"
, t."orgId" , t."DocumentDate" , t."DocumentNumber" , , t."orgId" , t."DocumentDate" , t."DocumentNumber" , t."VirtualCUser" , t."DateOfExecution"
(case when t."DocType" in ('UniversalDocument','DocumentForSigning') then (select top 1 pc."Code" from "DocumentCategoryAttributeType" bd , t."DateControl" , t."RouteVCode" , t."RouteStatusId" , t."RouteStatusName" , t."DocName"
join "DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#Worker#' , t."DocSubject" ,
join "RP_Worker" w on w."VCode" = daa1."BigIntValue" comdoc."dfwcGetDuration"(t."eDate", COALESCE(t."ActionDate", _now), false, t."orgId", 1, _dayoff1, _dayoff2, null) ,
join "RP_PersonContact" AS pc ON pc."Pcode" = w."IdPerson" AND pc."IdTypeContact" = 6 t."StageNumber" , t."BeginDate" , t."ActionDate"
where t."DocumentCategory" = bd."PCode") , t."DocumentAction" , t."DocumentStatus" , t."FromMessage" , t."eDate", t."Department"
else t."VirtualCUser" end) , , t."StageUser" , t."StageItemStatus" , t."StageStatus" , t."StageItemAction", t."DocumentSubtype",
null/*t."DateOfExecution"*/ , t."DateControl" , t."RouteVCode" , t."RouteStatusId" , t."RouteStatusName" , t."DocName" t."DocTypeName" as "AnyColumnA" ,
, t."DocSubject" , p."Family" || ' '|| p."Name" || ' '|| p."Father" as "AnyColumnB" ,
null/* comdoc."dfwcGetDuration"( t."DocCode" as "AnyColumnC", t."AnyColumnD" , t."AnyColumnE"
t."eDate", COALESCE(t."ActionDate", _now), false, t."orgId", 1, _dayoff1, _dayoff2, null from "tmp_preresult" t
) */ inner join comdoc."Route" r on t."RouteVCode" = r."VCode"
, null/* t."StageNumber" */ , null/*t."BeginDate" */ , null/*t."ActionDate" */ inner join comdoc."RouteStage" rs on r."VCode" = rs."PCode" and t."StageNumber"= rs."StageNumber"
,null/* t."DocumentAction"*/ , null/*t."DocumentStatus" */ , null /*t."FromMessage" */ , null /*t."eDate"*/ left join rp."RP_PersonContact" pc on pc."Code" = t."StageUser" and pc."IdTypeContact" = 6
, null /*t."StageUser" */ , null /*t."StageItemStatus"*/ , null/*t."StageStatus" */ , null/*t."StageItemAction"*/, t."IsMarked", t."DocumentSubtype" , t."AnyColumnA" , left join rp."RP_Person" p on pc."Pcode" = p."VCode"
null as "AnyColumnB" , where coalesce(t."RouteStatusId",0) in (2) and t."StageItemStatus"= 2 and t."IsMarked" is not true
null as "AnyColumnC", and rs."StageName" ilike '%работник%'
null as "AnyColumnD" , t."AnyColumnE" , and coalesce(t."ActionDate",t."DocumentDate") BETWEEN _bdate AND _edate
(select top 1 convert(varchar,daa1."DateValue",104) from "DocumentCategoryAttributeType" bd ;
join "DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#bdate#' where t."DocumentCategory" = bd."PCode" ) as "AnyColumnF" , ```
(select top 1 convert(varchar,daa1."DateValue",104) from "DocumentCategoryAttributeType" bd
join "DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#edate#' where t."DocumentCategory" = bd."PCode") as "AnyColumnG" ,
(select top 1 daa1."BigIntValue" from "DocumentCategoryAttributeType" bd
join "DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" ='#kolvo#' where t."DocumentCategory" = bd."PCode") 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",' ') ```sql
do $newQ$
declare _str text;
begin
_str := '
INSERT INTO "tmp_calcWithBaseParams_for_documentStatusJournalProc"(
"DocCode", "DocType", "DocForm", "DocTypeName", "SettingsId", "orgId", "DocumentDate", "DocumentNumber",
"VirtualCUser", "Department", "IdWorker"
)a
SELECT e."VCode" AS "DocCode", s."DocType", s."DocForm", s."DocName" AS "DocTypeName", s."VCode" AS "SettingsId", e."COrg" AS "orgId", e."DateContract", e."VhodNumber"
, e."CUser", e."CuratorDepartmentSpr", e."Manager"
FROM contract."Contract" AS e
JOIN comdoc."DocflowDocumentSettings" AS s ON s."DocType" = e."TypeName"
WHERE 1 = 1
'||case when coalesce("orgParam",-1111)=-1111 then '' else ' and e."COrg" = '||_orgid::text end ||'
and EXISTS( SELECT 1 FROM "tmp_docTypes_for_documentStatusJournalProc" AS t WHERE t."DocType" = e."TypeName" )
'|| case when _contractor is null then '' else ' and e."Contractor" = '||_contractor::text end
|| case when _contract is null then '' else ' and e."VCode" = '||_contract::text end
|| case when _manager is null then '' else ' and e."Manager" = '||_manager::text end
|| ' and e."DateContract" between '_bdate' and '_edate'
union all
SELECT e."VCode" AS "DocCode", s."DocType", s."DocForm", s."DocName" AS "DocTypeName", s."VCode" AS "SettingsId", e."COrg" AS "orgId", e."DateContract", e."Number"
, e."CUser", e."CuratorDepartmentSpr", e."Manager"
FROM contract."AdditionalContract" AS e
JOIN comdoc."DocflowDocumentSettings" AS s ON s."DocType" = e."TypeName"
WHERE 1= 1
'||case when coalesce("orgParam",-1111)=-1111 then '' else ' and e."COrg" = '||_orgid::text end ||'
and EXISTS( SELECT 1 FROM "tmp_docTypes_for_documentStatusJournalProc" AS t WHERE t."DocType" = e."TypeName" )
'|| case when _contractor is null then '' else ' and e."Contractor" = '||_contractor::text end
|| case when _contract is null then '' else ' and e."Contract" = '||_contract::text end
|| case when _addcontract is null then '' else ' and e."VCode" = '||_addcontract::text end
|| case when _manager is null then '' else ' and e."Manager" = '||_manager::text end
|| ' and e."DateContract" between '_bdate' and '_edate';';
when coalesce(dca."AttributeType",'') = 'Base.RP_Worker' and atr."BigIntValue" is null and coalesce(atr."Value",'') = '' then ' ' execute (_str);
when coalesce(dca."AttributeType",'') = 'Base.RP_Worker' and atr."BigIntValue" is not null and coalesce(atr."Value",'') <> '' then coalesce(atr."Value",' ') end;
$newQ$;
```
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",' ') ```sql
when coalesce(dca."AttributeType",'') = 'Base.Contractor' and atr."BigIntValue" is null and coalesce(atr."Value",'') = '' then ' ' do
when coalesce(dca."AttributeType",'') = 'Base.Contractor' and atr."BigIntValue" is not null and coalesce(atr."Value",'') <> '' then coalesce(atr."Value",' ') $$
begin
--CREATE INDEX IF NOT EXISTS "idx_tr1_tmp_CategoryAttributeType" ON "tmp_CategoryAttributeType"("PCode" );
if not comdoc."isTableExists"('tmp_UserRole','temp') then
create temp table "tmp_UserRole" (
"login" character varying(255), "Role" character varying(255)
)
--on commit drop
;
end if;
when coalesce(dca."AttributeType",'') = 'Base.Department' and atr."BigIntValue" is null and coalesce(atr."Value",'') = '' then ' ' insert into "tmp_UserRole" ("login", "Role")
when coalesce(dca."AttributeType",'') = 'Base.Department' and atr."BigIntValue" is not null and coalesce(atr."Value",'') <> '' then coalesce(atr."Value",' ') select distinct au."UserName" as login,"Role"
FROM lex."UserMeta" au
JOIN lex."OrganizationUser" ou ON au."Id" = ou."User"
left join lex."OrganizationUserRole" ur on ou."Id" = ur."OrganizationUser"
where "Role" in ('bh_purchasing_department', 'bh_legal_department', 'bh_contract_administrator', 'bh_financial_services')
or "Role" like '%ddc%'
;
when coalesce(dca."AttributeType",'') = 'money' and atr."MoneyValue" is not null then cast(atr."MoneyValue" as varchar(255)) if not comdoc."isTableExists"('tmp_CuserChief','temp') then
when coalesce(dca."AttributeType",'') = 'money' and atr."MoneyValue" is null then ' ' create temp table "tmp_CuserChief" (
"VirtualCUser" character varying(255), "chief" character varying(255)
)
--on commit drop
;
end if;
when coalesce(dca."AttributeType",'') = 'Date' and atr."DateValue" is not null then to_char(atr."DateValue", 'DD.MM.YYYY') insert into "tmp_CuserChief" ("VirtualCUser","chief")
when coalesce(dca."AttributeType",'') = 'Date' and atr."DateValue" is null then ' ' select "VirtualCUser", chief."chief"
from (select distinct t."DocCode",t."DocType" , t."orgId", t."VirtualCUser" from "tmp_preresult" t where t."DocType" in ('Base.Contract','Base.AdditionalContract')) t
left join lateral comdoc."getProjectTemplateMember"(t."DocCode",t."DocType" , t."orgId", t."VirtualCUser", 'Service.Chief') chief on true
;
if not comdoc."isTableExists"('tmp_ExpiredRole','temp') then
create temp table "tmp_ExpiredRole" (
"DocCode" bigint, "Role" character varying(255), "maxexpired" int
)
--on commit drop
;
end if;
when coalesce(dca."AttributeType",'') = 'DateTime' and atr."DateTimeValue" is not null then to_char(atr."DateValue", 'DD.MM.YYYY') insert into "tmp_ExpiredRole" ("DocCode","Role", "maxexpired")
when coalesce(dca."AttributeType",'') = 'DateTime' and atr."DateTimeValue" is null then ' ' select a."DocCode", a."Role", max(a."expired") as "maxexpired"
from
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 "DocumentAdditionalAttribute" atr
join "DocumentCategoryAttributeType" dca on atr."CategoryAttributeType" = dca."VCode"
where t."DocCode" = atr."PCode" and dca."ColumnName" not in ('#bdate#', '#edate#', '#kolvo#'))
*/ null as "AnyColumnI",
null/*sii."Name"*/,
case when coalesce(t."RouteStatusId",0) = 2 and exists (select 1 from "RouteStage" rs
where rs."PCode" = t."RouteVCode" and rs."StageNumber" = 1 and rs."Status" = 2 ) then 'Не запущен'
when coalesce(t."RouteStatusId",0) = 2 and t."StageItemStatus"= 2 and t."StageNumber" > 1
and exists (select 1 from "RouteStage" rs
where rs."PCode" = t."RouteVCode"
and isnull(rs."IsMarked",0) = 1
and rs."StageName" in ( 'Исполнить')
and rs."Status"=1) then 'На согласовании / на согл у рук-ля'
when coalesce(t."RouteStatusId",0) = 3
and not exists (select 1 from "RouteStage" rs
join "StageItem" si on rs."VCode" = si."PCode"
where rs."PCode" = t."RouteVCode"
and si."DocumentStatus" in (19,23)) then 'Завершен'
when coalesce(t."RouteStatusId",0) = 3 and exists (select 1 from "RouteStage" rs
join "StageItem" si on rs."VCode" = si."PCode"
where rs."PCode" = t."RouteVCode"
and si."DocumentStatus" in (19,23)) then 'Отклонен'
end as "AnyColumnK",
/*( SELECT DISTINCT string_agg(u."Initials"|| '(' || ds."Name"|| ')' , '; ') AS "x"
FROM "RouteStage" as rs
join "StageItem" AS i on i."PCode" = rs."VCode"
join "VUserMeta" AS u ON u."VCode" = i."StageUser"
join "DocumentStatus" AS ds ON ds."VCode" = i."DocumentStatus"
WHERE rs."PCode" = t."RouteVCode"
AND i."StageItemStatus" = 3
and coalesce(i."DocumentStatus",0) <> 0
) */ '' as "AnyColumnL",
case when t."DocType" in ('UniversalDocument','DocumentForSigning') then (select top 1 w."NumTab" from "DocumentCategoryAttributeType" bd
join "DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#Worker#'
join "RP_Worker" w on w."VCode" = daa1."BigIntValue"
where t."DocumentCategory" = bd."PCode")
else (select r."NumTab" from "RP_Worker" as r where r."VCode" = t."IdWorker") end as "AnyColumnM",
case when t."DocType" in ('UniversalDocument','DocumentForSigning') then (select top 1 w."NameFull" from "DocumentCategoryAttributeType" bd
join "DocumentAdditionalAttribute" daa1 on t."DocCode" = daa1."PCode" and daa1."CategoryAttributeType" = bd."VCode" and bd."ColumnName" = '#Worker#'
join "RP_Worker" w on w."VCode" = daa1."BigIntValue"
where t."DocumentCategory" = bd."PCode" )
else (select r."NameFull" from "RP_Worker" as r where r."VCode" = t."IdWorker") end as "AnyColumnN",
(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 "EmailRecipient",
(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
from #tmp_preresult t
where t."DocType" not in ('ServiceDesk') and
( (
t."DocumentDate" IS NULL OR t."DocumentDate" BETWEEN @_bdate AND @_edate select t."DocCode", t."StageUser", -- ur."Role", coalesce(ch.ф"chief",'') as "chief",
case when coalesce(ch."chief",'') <>'' then 'chief_role' else ur."Role" end as "Role",
round(comdoc."dfwcGetDuration"(t."eDate", COALESCE(t."ActionDate", _now::date), false, t."orgId", null, _dayoff1, _dayoff2, null)/60.0/60.0/9, 0) as "expired"
from (select distinct "DocCode", t."StageUser", t."eDate", t."ActionDate",t."orgId" from "tmp_preresult" t where t."DocType" in ('Base.Contract','Base.AdditionalContract')) t
left join "tmp_UserRole" ur on t."StageUser"= ur."login"
left join "tmp_CuserChief" ch on t."StageUser" = ch."chief"
) 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"
, "DocSubject" , "expired" , "StageNumber" , "BeginDate" , "ActionDate"
, "DocumentAction" , "DocumentStatus" , "FromMessage" , "eDate", "Department"
, "StageUser" , "StageItemStatus" , "StageStatus" , "StageItemAction" , "DocumentSubtype"
, "AnyColumnA" , "AnyColumnB" , "AnyColumnC" , "AnyColumnD" , "AnyColumnE"
, "AnyColumnF" , "AnyColumnG" , "AnyColumnH" , "AnyColumnI" , "AnyColumnJ"
, "AnyColumnK" , "AnyColumnL" , "AnyColumnM" , "AnyColumnN" , "AnyColumnO"
, "AnyColumnP", "AnyColumnQ" , "AnyColumnR" , "AnyColumnS" , "AnyColumnT"
, "AnyColumnU" , "AnyColumnV" , "AnyColumnW" , "AnyColumnX" , "AnyColumnY"
, "AnyColumnZ" , "AnyColumnAA" , "AnyColumnAB" , "AnyColumnAC" , "AnyColumnAD" , "AnyColumnAE" , "AnyColumnAF"
, "AnyColumnAG" , "AnyColumnAH" , "AnyColumnAI" , "AnyColumnAJ" , "AnyColumnAK" , "AnyColumnAL" , "AnyColumnAM"
, "Colors", "attFilter"
) )
and t."DocType" not in ('ServiceDesk') ;
select distinct t."DocCode" , t."DocType" , t."DocForm" , t."DocTypeName" , t."SettingsId"
, t."orgId" , t."DocumentDate" , t."DocumentNumber" , t."VirtualCUser" , t."DateOfExecution"
, t."DateControl", t."RouteVCode" , t."RouteStatusId" , t."RouteStatusName" , t."DocName"
, t."DocSubject", null::bigint , null::int as "StageNumber" , null::date as "BeginDate" , null::date as "ActionDate"
, null::int as "DocumentAction" ,null::int as "DocumentStatus" , null as"FromMessage" , null::date as "eDate", t."Department"
, null as "StageUser", null::int as "StageItemStatus" , null::int as "StageStatus", null::int as "StageItemAction", t."DocumentSubtype",
"Number" as "AnyColumnA",
"VhodNumber" as "AnyColumnB",
to_char("DateContract", 'DD.MM.YYYY' ) as "AnyColumnC",
to_char("DateBegin", 'DD.MM.YYYY' ) as "AnyColumnD",
to_char("DateEnd", 'DD.MM.YYYY' ) as "AnyColumnE",
null as "AnyColumnF",
case when coalesce("IsDocument",false) = true then 'Да' else 'Нет' end as "AnyColumnG",
"StatusOfContract" as "AnyColumnH",
"Contractor" as "AnyColumnI",
"VTypeContract" as "AnyColumnJ",
"ContractKind1" as "AnyColumnK",
null as "AnyColumnL",
"SumContract" as "AnyColumnM",
"TypePayment" as "AnyColumnN",
"SubjectOfContract" as "AnyColumnO",
null as "AnyColumnP",
to_char("DateAutolong", 'DD.MM.YYYY' ) as "AnyColumnQ",
null as "AnyColumnR",
null as "AnyColumnS",
null as "AnyColumnT",
COALESCE(rst."RouteStatusNm", 'Не запущен') as "AnyColumnU"
, ( SELECT string_agg(r_info."x", ';') FROM
( SELECT 'Этап '||s."StageNumber"||' '||du."Initials"||COALESCE(' '||ds."Name", '')||COALESCE(' '||i."FromMessage", '') AS "x"
FROM comdoc."Route" AS r
JOIN comdoc."RouteStage" AS s ON s."PCode" = r."VCode"
JOIN comdoc."StageItem" AS i ON i."PCode" = s."VCode"
JOIN comdoc."VUserMeta" AS du ON du."VCode" = i."StageUser"
LEFT JOIN comdoc."DocumentStatus" AS ds ON ds."VCode" = i."DocumentStatus"
WHERE r."DocCode" = t."DocCode"
AND r."DocType" = t."DocType"
AND r."RouteStatus" <> 4
ORDER BY s."StageNumber" ASC, i."VCode" ASC
) as r_info ) as "AnyColumnV",
null as "AnyColumnW", --бренд
null as "AnyColumnX", --парал импорт
null as "AnyColumnY", -- с НДС
(select "maxexpired" from "tmp_ExpiredRole" er where t."DocCode" = er."DocCode" and "Role"='chief_role') as "AnyColumnZ",--просрочено рук
(select "maxexpired" from "tmp_ExpiredRole" er where t."DocCode" = er."DocCode" and "Role"='bh_financial_services') as "AnyColumnAA",--просрочено фин
(select "maxexpired" from "tmp_ExpiredRole" er where t."DocCode" = er."DocCode" and "Role"='bh_legal_department') as "AnyColumnAB",--просрочено прав деп
(select "maxexpired" from "tmp_ExpiredRole" er where t."DocCode" = er."DocCode" and "Role"='bh_purchasing_department') as "AnyColumnAC",--просрочено закупки
(select "maxexpired" from "tmp_ExpiredRole" er where t."DocCode" = er."DocCode" and "Role" like '%ddc%') as "AnyColumnAD", --просрочено ДДЦ
(select "maxexpired" from "tmp_ExpiredRole" er where t."DocCode" = er."DocCode" and "Role"='bh_contract_administrator') as "AnyColumnAE", --просрочен админ дог
t."DocCode" as "AnyColumnAF"
--надо найти зама
, (SELECT DISTINCT string_agg(x."UserName", ',') FROM
(select
m."LastName" || ' ' || m."FirstName" || ' ' || m. "MiddleName" as "UserName"
--m."UserName", m1."UserName" as "UserName1"
from lex."UserMeta" as m
join lex."OrganizationUser" as ou on m."Id" = ou."User" and coalesce(ou."IsBlocked",false) = false
join lex."Replacement" as rep on ou."Id" = rep."Replacer"
--AND now() between coalesce(rep."BeginDate",now()) AND coalesce(rep."EndDate",now())
and coalesce(rep."BeginDate",now())::date<= "DateEnd"::date and coalesce(rep."EndDate",now())::date>= "DateBegin"::date
join lex."OrganizationUser" as ou1 on rep."Replaceable" = ou1."Id" --and coalesce(ou1."IsBlocked",false) = false
join lex."UserMeta" as m1 on ou1."User" = m1."Id"
where m1."UserName" = t."VirtualCUser"
group by m."LastName" || ' ' || m."FirstName" || ' ' || m. "MiddleName"
-- m."UserName", m1."UserName"
) as x ) ::character varying(1000) AS "AnyColumnAG"
--надо найти руководителя по штатке
,
(select um."LastName" || ' ' ||um."FirstName" || ' ' ||um."MiddleName" as "UserName"
from comdoc."Department" dep
join rp."RP_Worker" w on dep."Manager" = w."VCode"
join rp."RP_PersonContact" pers on w."IdPerson" = pers."Pcode" and pers."IdTypeContact" = 6
join lex."UserMeta" um on um."UserName" = pers."Code"
where dep."VCode" = (select "Department" from comdoc."DocflowExists" where "VCode" = t."DocCode" and "TypeName" = t."DocType" limit 1) )
AS "AnyColumnAH"
, wi."Dpost" AS "AnyColumnAI", wi."Duvl" AS "AnyColumnAJ"
, c."PaymentMethod" as "AnyColumnAK" , null as "AnyColumnAL" ,
case when coalesce(c."DateAutolong",c."DateEnd",'20701231')::date between now()::date and now()::date + 30::integer
then 'yellow'
when coalesce(c."DateAutolong",c."DateEnd",'20701231')<now()::date
then 'violet'
end as "AnyColumnAM"
, case when coalesce(c."DateAutolong",c."DateEnd",'20701231')::date between now()::date and now()::date + 30::integer
then 3
when coalesce(c."DateAutolong",c."DateEnd",'20701231')<now()::date
then 7
end
as "Colors"
, ' and "OrigPriznak" is true ' as "attFilter"
/*цвета 1 - colors.gray
2 - colors.orange
3 - colors.yellow
4 - colors.green
5 - colors.blue
6 - colors.indigo
7 -colors.violet*/
from (select distinct t."DocCode" , t."DocType" , t."DocForm" , t."DocTypeName" , t."SettingsId"
, t."orgId" , t."DocumentDate" , t."DocumentNumber" , t."VirtualCUser" , t."DateOfExecution"
, t."DateControl", t."RouteVCode" , t."RouteStatusId" , t."RouteStatusName" , t."DocName"
, t."DocSubject", t."Department", t."DocumentSubtype", t."DocumentCategory"
from "tmp_preresult" t
where t."DocType" in ('Base.Contract')
) t
inner join contract."VContractRegistry" c on t."DocCode" = c."VCode"
LEFT JOIN ( SELECT w."VCode", w."lexLogin", dep."VCode" AS "DepartmentVCode", dep."Name" AS "Department", pos."Name" AS "Position" ,to_char(w."DateBeg",'DD.MM.YYYY') as "Dpost",to_char(w."DateEnd",'DD.MM.YYYY') as "Duvl"
FROM rp."VLookupWorker" AS w
JOIN rp."RP_WorkerMove" AS m ON m."IdWorker" = w."VCode"
LEFT JOIN comdoc."Department" AS dep ON dep."VCode" = m."IdDepartment"
LEFT JOIN rp."RP_Post" AS pos ON pos."VCode" = m."IdPost"
WHERE w."lexLogin" IS NOT NULL
ORDER BY ROW_NUMBER() OVER(
PARTITION BY w."lexLogin"
ORDER BY COALESCE(m."DateEnd", w."DateEnd", '2070-01-01'::date) DESC, m."VCode" DESC
)
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"
, t."DateControl", t."RouteVCode" , t."RouteStatusId" , t."RouteStatusName" , t."DocName"
, t."DocSubject", null::bigint , null::int as "StageNumber" , null::date as "BeginDate" , null::date as "ActionDate"
, null::int as "DocumentAction" ,null::int as "DocumentStatus" , null as"FromMessage" , null::date as "eDate", t."Department"
, null as "StageUser", null::int as "StageItemStatus" , null::int as "StageStatus", null::int as "StageItemAction", t."DocumentSubtype",
ds."Number" as "AnyColumnA",
c."VhodNumber"as "AnyColumnB",
to_char(c."DateContract", 'DD.MM.YYYY' ) as "AnyColumnC",
to_char(ds."DateBegin", 'DD.MM.YYYY' ) as "AnyColumnD",
to_char(ds."DateEnd", 'DD.MM.YYYY' ) as "AnyColumnE",
to_char(ds."DateSignUp", 'DD.MM.YYYY' ) as "AnyColumnF",
case when coalesce(ds."IsDocument",false) = true then 'Да' else 'Нет' end as "AnyColumnG",
ds."StatusOfContractName" as "AnyColumnH",
ds."ContractorName" as "AnyColumnI",
c."VTypeContract" as "AnyColumnJ",
c."ContractKind1" as "AnyColumnK",
c."ContractCategory" as "AnyColumnL",
ds."SumWithVAT" as "AnyColumnM",
c."TypePayment" as "AnyColumnN",
ds."SubjectOfContract" as "AnyColumnO",
c."Autolong" as "AnyColumnP",
to_char(c."DateAutolong", 'DD.MM.YYYY' ) as "AnyColumnQ",
c."TypicalForm" as "AnyColumnR",
c."ContractBasis" as "AnyColumnS",
c."CompanyListName" as "AnyColumnT",
COALESCE(rst."RouteStatusNm", 'Не запущен') as "AnyColumnU"
, ( SELECT string_agg(r_info."x", ';') FROM
( SELECT 'Этап '||s."StageNumber"||' '||du."Initials"||COALESCE(' '||ds."Name", '')||COALESCE(' '||i."FromMessage", '') AS "x"
FROM comdoc."Route" AS r
JOIN comdoc."RouteStage" AS s ON s."PCode" = r."VCode"
JOIN comdoc."StageItem" AS i ON i."PCode" = s."VCode"
JOIN comdoc."VUserMeta" AS du ON du."VCode" = i."StageUser"
LEFT JOIN comdoc."DocumentStatus" AS ds ON ds."VCode" = i."DocumentStatus"
WHERE r."DocCode" = t."DocCode"
AND r."DocType" = t."DocType"
AND r."RouteStatus" <> 4
ORDER BY s."StageNumber" ASC, i."VCode" ASC
) as r_info ) as "AnyColumnV",
c."BrendName" as "AnyColumnW", --бренд
c."ParalelImportName" as "AnyColumnX", --парал импорт
case when coalesce(c."WithNDS",false) = true then 'С НДС' else 'Без НДС' end as "AnyColumnY", -- с НДС
(select "maxexpired" from "tmp_ExpiredRole" er where t."DocCode" = er."DocCode" and "Role"='chief_role') as "AnyColumnZ",--просрочено рук
(select "maxexpired" from "tmp_ExpiredRole" er where t."DocCode" = er."DocCode" and "Role"='chief_role') as "AnyColumnAA",--просрочено фин
(select "maxexpired" from "tmp_ExpiredRole" er where t."DocCode" = er."DocCode" and "Role"='bh_legal_department') as "AnyColumnAB",--просрочено прав деп
(select "maxexpired" from "tmp_ExpiredRole" er where t."DocCode" = er."DocCode" and "Role"='chief_role') as "AnyColumnAC",--просрочено закупки
(select "maxexpired" from "tmp_ExpiredRole" er where t."DocCode" = er."DocCode" and "Role"='chief_role') as "AnyColumnAD", --просрочено ДДЦ
(select "maxexpired" from "tmp_ExpiredRole" er where t."DocCode" = er."DocCode" and "Role"='bh_contract_administrator') as "AnyColumnAE", --просрочен админ дог
t."DocCode" as "AnyColumnAF"
--надо найти зама
, (SELECT DISTINCT string_agg(x."UserName", ',') FROM
(select
m."LastName" || ' ' || m."FirstName" || ' ' || m. "MiddleName" as "UserName"
--m."UserName", m1."UserName" as "UserName1"
from lex."UserMeta" as m
join lex."OrganizationUser" as ou on m."Id" = ou."User" and coalesce(ou."IsBlocked",false) = false
join lex."Replacement" as rep on ou."Id" = rep."Replacer"
--AND now() between coalesce(rep."BeginDate",now()) AND coalesce(rep."EndDate",now())
and coalesce(rep."BeginDate",now())::date<= c."DateEnd"::date and coalesce(rep."EndDate",now())::date>= c."DateBegin"
join lex."OrganizationUser" as ou1 on rep."Replaceable" = ou1."Id" --and coalesce(ou1."IsBlocked",false) = false
join lex."UserMeta" as m1 on ou1."User" = m1."Id"
where m1."UserName" = t."VirtualCUser"
group by m."LastName" || ' ' || m."FirstName" || ' ' || m. "MiddleName"
-- m."UserName", m1."UserName"
) as x ) ::character varying(1000) AS "AnyColumnAG"
--надо найти руководителя по штатке
,
(select um."LastName" || ' ' ||um."FirstName" || ' ' ||um."MiddleName" as "UserName"
from comdoc."Department" dep
join rp."RP_Worker" w on dep."Manager" = w."VCode"
join rp."RP_PersonContact" pers on w."IdPerson" = pers."Pcode" and pers."IdTypeContact" = 6
join lex."UserMeta" um on um."UserName" = pers."Code"
where dep."VCode" = (select "Department" from comdoc."DocflowExists" where "VCode" = t."DocCode" and "TypeName" = t."DocType" limit 1) )
AS "AnyColumnAH"
, wi."Dpost" AS "AnyColumnAI", wi."Duvl" AS "AnyColumnAJ"
, c."PaymentMethod" as "AnyColumnAK" , c."SumAddContractWithoutVAT" as "AnyColumnAL" ,
null as "AnyColumnAM"
, null as "Colors"
from (select distinct t."DocCode" , t."DocType" , t."DocForm" , t."DocTypeName" , t."SettingsId"
, t."orgId" , t."DocumentDate" , t."DocumentNumber" , t."VirtualCUser" , t."DateOfExecution"
, t."DateControl", t."RouteVCode" , t."RouteStatusId" , t."RouteStatusName" , t."DocName"
, t."DocSubject", t."Department", t."DocumentSubtype", t."DocumentCategory"
from "tmp_preresult" t
where t."DocType" in ('Base.AdditionalContract')
) t
inner join contract."VAdditionalContractRegistry" ds on t."DocCode" =ds."VCode"
inner join contract."VContractRegistry" c on ds."Contract" = c."VCode"
LEFT JOIN ( SELECT w."VCode", w."lexLogin", dep."VCode" AS "DepartmentVCode", dep."Name" AS "Department", pos."Name" AS "Position" ,to_char(w."DateBeg",'DD.MM.YYYY') as "Dpost",to_char(w."DateEnd",'DD.MM.YYYY') as "Duvl"
FROM rp."VLookupWorker" AS w
JOIN rp."RP_WorkerMove" AS m ON m."IdWorker" = w."VCode"
LEFT JOIN comdoc."Department" AS dep ON dep."VCode" = m."IdDepartment"
LEFT JOIN rp."RP_Post" AS pos ON pos."VCode" = m."IdPost"
WHERE w."lexLogin" IS NOT NULL
ORDER BY ROW_NUMBER() OVER(
PARTITION BY w."lexLogin"
ORDER BY COALESCE(m."DateEnd", w."DateEnd", '2070-01-01'::date) DESC, m."VCode" DESC
)
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
*/
``` ```

View File

@ -198,13 +198,13 @@
#### Столбец "Рассылка" #### Столбец "Рассылка"
Используется в случае, когда необходимо направить документ определенной группе пользователей, которые не участвуют в маршруте. В этом случае настраивается вначале необходимая [группа рассылки](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Группы%20рассылки/). После этого данная группа выбирается из выпадающего списка и указывается статус маршрута при каком статусе выбранной группе будет направлена рассылка. Используется в случае, когда необходимо направить документ определенной группе пользователей, которые не участвуют в маршруте. В этом случае настраивается вначале необходимая [группа рассылки](../Группы рассылки/index.md). После этого данная группа выбирается из выпадающего списка и указывается статус маршрута при каком статусе выбранной группе будет направлена рассылка.
![Группа](media/group.png) ![Группа](media/group.png)
![Рассылка](media/rassylka.png) ![Рассылка](media/rassylka.png)
В данном примере указано что после согласования заявления Макеевым С.П., документ поступит на обработку Елизарьевой Е.А., и одновременно с помощью [списка рассылки](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Обработка%20документов/#список_рассылки) направится пользователям Кузнецовой А.А. и Солодовниковой М.П.. В данном примере указано что после согласования заявления Макеевым С.П., документ поступит на обработку Елизарьевой Е.А., и одновременно с помощью [списка рассылки](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Обработка документов/#список_рассылки) направится пользователям Кузнецовой А.А. и Солодовниковой М.П..
![Макеев](media/makeev.png) ![Макеев](media/makeev.png)
@ -243,7 +243,7 @@
</tr> </tr>
<tr> <tr>
<td><strong>Service.ListOf.AllChiefs</strong></td> <td><strong>Service.ListOf.AllChiefs</strong></td>
<td>автоматически определяющая руководителя сотрудника из управленческой структуры, <a href="../../Настройка пользователей/Настройка пользователей/">настроек пользователей</a> и по подразделению.</td> <td>автоматически определяющая руководителя сотрудника из управленческой структуры, <a href="../Настройка пользователей/">настроек пользователей</a> и по подразделению.</td>
</tr> </tr>
<tr> <tr>
<td><strong>Service.ListOf.Chiefs</strong></td> <td><strong>Service.ListOf.Chiefs</strong></td>
@ -263,7 +263,7 @@
</tr> </tr>
<tr> <tr>
<td><strong>Service.ListOf.FunctionalChiefs</strong></td> <td><strong>Service.ListOf.FunctionalChiefs</strong></td>
<td>автоматически определяющая руководителя сотрудника из управленческой структуры и <a href="../../Настройка пользователей/Настройка пользователей/">настроек пользователей</a>.</td> <td>автоматически определяющая руководителя сотрудника из управленческой структуры и <a href="../Настройка пользователей/">настроек пользователей</a>.</td>
</tr> </tr>
<tr> <tr>
<td><strong>Service.ListOf.Recipient</strong></td> <td><strong>Service.ListOf.Recipient</strong></td>
@ -279,11 +279,11 @@
</tr> </tr>
<tr> <tr>
<td><strong>Service.ServiceDeskCustomer</strong></td> <td><strong>Service.ServiceDeskCustomer</strong></td>
<td>автоматически определяющая заказчика в заявках в <a href="../../Заявка в техническую поддержку/Заявки в техподдержку/">техническую поддержку.</a></td> <td>автоматически определяющая заказчика в заявках в <a href="../Заявка в техническую поддержку/">техническую поддержку.</a></td>
</tr> </tr>
<tr> <tr>
<td><strong>Service.StaffTrainingChief</strong></td> <td><strong>Service.StaffTrainingChief</strong></td>
<td>автоматически определяющая руководителя сотрудника в заявках на обучение. Данные поставляются из столбца "Руководитель" в <a href="../../УОП/Планирование обучения/Заявки на обучение/Заявки на обучение/">заявке на обучение</a>.</td> <td>автоматически определяющая руководителя сотрудника в заявках на обучение. Данные поставляются из столбца "Руководитель" в <a href="../Заявки на обучение/">заявке на обучение</a>.</td>
</tr> </tr>
<tr> <tr>
<td><strong>Service.Worker</strong></td> <td><strong>Service.Worker</strong></td>
@ -421,7 +421,7 @@
### Примеры настраиваемых ограничений ### Примеры настраиваемых ограничений
#### Пример настраиваемого ограничения для [корректирующего заявления](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Заявления%20от%20сотрудников/#созданиеорректирующегоаявления) #### Пример настраиваемого ограничения для [корректирующего заявления](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Заявления от сотрудников/#созданиеорректирующегоаявления)
`(Head."TypeName" = 'EmployeeStatement' and `(Head."TypeName" = 'EmployeeStatement' and
Head."DocumentSubtype" in (133,134) Head."DocumentSubtype" in (133,134)
@ -429,7 +429,7 @@ Head."DocumentSubtype" in (133,134)
Где 133,134 - VCode подтипов заявлений. Где 133,134 - VCode подтипов заявлений.
#### Пример настраиваемых ограничений для поля "Срочность" во [входящем документе](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Входящий%20документ/), [исходящем документе](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Исходящий%20документ/), [служебной записке](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Служебная%20записка/), [организационно-распорядительном документе](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/ОРД/): #### Пример настраиваемых ограничений для поля "Срочность" во [входящем документе](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Входящий документ/), [исходящем документе](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Исходящий документ/), [служебной записке](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Служебная записка/), [организационно-распорядительном документе](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/ОРД/):
<style> <style>
table { table {

View File

@ -1,3 +1,7 @@
---
search:
boost: 2
---
# Управление пользователями # Управление пользователями
## Общее описание назначения формы ## Общее описание назначения формы

View File

@ -1,44 +1,260 @@
---
search:
boost: 2
---
# Функции планировщика задач # Функции планировщика задач
В системе список задач, выполняемых по расписанию постоянно обновляется .На текущий момент доступны следующие задачи: В системе список задач, выполняемых по расписанию постоянно обновляется. На текущий момент доступны следующие задачи:
<table border="1">
<tr>
<th width="200px">Название действия (задача)</th>
<th width="width:auto;">Техническое название</th>
<th width="width:auto;">Что она делает</th>
<th width="200px">Где используется</th>
<th width="180px">Рекомендуемая частота выполнения задачи</th>
</tr>
<tr>
<td>Автоматическое обновление статуса обучение</td>
<td>ecosoft-lexema8-scheduler-staff-training-functions.AutomaticUpdateStudyingCourseStatus</td>
<td>Автоматически переводит просроченные <a href="../Программы обучения/">программы обучения</a> по дате обучения в статус "Не пройдено"</td>
<td>В процедуре обучения</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Автоматическое создание заявок на обучение</td>
<td>Осуществляет автоматическое создание <a href="../Заявки на обучение/">заявки на обучение</a> из <a href="../План обучения/">плана обучения</a>.
</td>
<td>Автоматическое создание заявки на обучение из плана обучения</td>
<td>В процессе планирования обучения</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Автоматическое формирование протоколов обучения</td>
<td>ecosoft-lexema8-scheduler-staff-training-functions.AutomaticCreateStaffTrainingJournalFromStatistic</td>
<td>Автоматически формирует протоколы обучения согласно статистике обучения по сотрудникам</td>
<td>В процедуре обучения</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Блокировка учетных записей пользователей, где дата увольнения меньше текущей</td>
<td>ecosoft-lexema8-scheduler-admin-console-functions.UserBloking</td>
<td>Проставляет признак блокировки у пользователей, если у связанного сотрудника проставлена дата увольнения меньше текущей даты</td>
<td>В процедуре блокировки пользователей</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Выгрузка документов из Лексемы в 1С</td>
<td>ecosoft-lexema8-scheduler-odata-functions.unLoadDocuments</td>
<td>Осуществляет автоматическую выгрузку документов из Лексемы в 1С перечисленные на вкладке <a href="../Настройка для интеграции с 1С/Настройка интеграции справочников и документов/Вкладка Исходящие документы/">Исходящие документы</td>
<td>В процедуре автоматической выгрузки данных в 1С</td>
<td>Один раз в час</td>
</tr>
<tr>
<td>Выпуск новых сертификатов, когда истекают сроки</td>
<td>ecosoft-lexema8-scheduler-admin-console-functions.createCloudCertificateExpiring</td>
<td>Осуществляет автоматическую заявку на выпуск <a href="../Выпуск ОНЭП/#Заявки-на-выпуск-ЭП"> сертификата</a> пользователям у которых закончился срок действия сертификата электронной подписи. В настройках учетной политики должна быть включена константа <b>"ЭЦП_количество_дней_за_сколько_отправтить_заявкуа_перевыпуск"</b>, где указывается значение количества дней по которому нужно проверять сертификаты. Если текущая дата меньше даты окончания действующего ЭП либо равна константе - то создается заявка на перевыпуск. Сертификаты создаются по всем филиалам организаций, на которых истекает срок действия. Также с помощью <a href="../Настройка констант/#система_электронного_и_кадровогоокументооборота">константы</a>оличество_перевыпускаемых_сертификатов_ЭП_за_раз" возможно задать количество сертификатов которые будут выпущены за раз.</td>
<td>В процедуре выпуска сертификатов пользователям</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Выпуск сертификатов новым сотрудникам</td>
<td>ecosoft-lexema8-scheduler-admin-console-functions.NewUsersCloudCertificateCreate</td>
<td>Осуществляет автоматический выпуск сертификатов электронной подписи новым принятым сотрудникам. Функция работает по следующему принципу: в случае если используется положение о КЭДО, то кандидаты подбираются если текущая дата больше либо равна дата перехода на КЭДО и есть логин в системе. В случае если положение о КЭДО не используется то по наличию логина в системе у сотрудника.</td>
<td>В процедуре выпуска сертификатов пользователям</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Добавление в список рассылки ЛНА с признаком "Ознакомлен ранее"</td>
<td>ecosoft-lexema8-scheduler-formation-mailing-list.InsertReadListLNDReadEarlier</td>
<td>В список рассылки автоматически добавляются сотрудники, которые подписали ознакомление с ЛНА на бумажном носителе при приеме на работу</td>
<td>В процедуре создания ЛНА</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Договора в статусе черновик (не отправленные по маршруту)</td>
<td>ecosoft-lexema8-scheduler-formation-mailing-list.sendingContractNotificationsExpired</td>
<td>Удаляет договора, которым не назначен маршрут. На следующий день после создания договора. Все договора, которые остались без маршрута будут удалены</td>
<td>В процедуре удаления договоров, которым не назначен маршрут</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Загрузка в Лексему документов на подписание из файлов (расчетные листы)</td>
<td>ecosoft-lexema8-scheduler-odata-functions.loadDocumentForSigningFromFile</td>
<td>Осуществляет автоматическую загрузку файлов в Лексему из сетевого хранилища</td>
<td>В процедуре автоматической загрузки данных из 1С</td>
<td>Один раз в час</td>
</tr>
<tr>
<td>Загрузка в Лексему из 1С документов</td>
<td>ecosoft-lexema8-scheduler-odata-functions.loadDocumentForm</td>
<td>Осуществляет автоматическую загрузку физических документов из 1С в Лексему перечисленные на вкладке <a href="../Настройка для интеграции с 1С/Настройка интеграции справочников и документов/Вкладка Входящие документы/">"Входящие документы"</a> с типом "Документ в Лексеме"</td>
<td>В процедуре автоматической загрузки данных из 1С</td>
<td>Один раз в час</td>
</tr>
<tr>
<td>Загрузка в Лексему из 1С произвольных выборок</td>
<td>ecosoft-lexema8-scheduler-odata-functions.loadFreeQuery</td>
<td>Осуществляет автоматическую загрузку сущностей, не относящих к справочникам и документам, в произвольном виде в физическую таблицу СЭД. Например, управленческую структуру.</td>
<td>В процедуре автоматической выгрузки произвольных выборок из 1С</td>
<td>Один раз в час</td>
</tr>
<tr>
<td>Загрузка из 1С в Лексему документов на подписание</td>
<td>ecosoft-lexema8-scheduler-odata-functions.loadDocumentForSigningFromFile</td>
<td>Осуществляет автоматическую загрузку документов на подписание из 1С в Лексему <a href="../Настройка для интеграции с 1С/Настройка интеграции справочников и документов/Вкладка Входящие документы/">"Входящие документы"</a> с типом "Документ в Лексеме". Также создает документы на подписание в документообороте</td>
<td>В процедуре автоматической загрузки данных из 1С</td>
<td>Один раз в час</td>
</tr>
<tr>
<td>Загрузка из 1С физ.лиц</td>
<td>ecosoft-lexema8-scheduler-odata-functions.loadDocumentForm</td>
<td>Осуществляет автоматическую загрузку физических лиц из 1С</td>
<td>В процедуре автоматической загрузки физических лиц из 1С</td>
<td>Один раз в час</td>
</tr>
<tr>
<td>Загрузка пользователей из Active Directory в форму для сопоставления</td>
<td>ecosoft-lexema8-scheduler-admin-console-functions.loadADUsers</td>
<td>Автоматически добавляет и сопоставляет доменные учетные записи из Active Directory со справочником физических лиц</td>
<td>В процедуре создания нового пользователя. Если в системе Active Directory были изменения в данных пользователей, таких как ФИО или адрес электронной почты, то обновленная информация используется для обновления соответствующих таблиц.</td>
<td>Один раз в час</td>
</tr>
<tr>
<td>Загрузка справочников (должности,подразделения,физ.лица и сотрудники)</td>
<td>ecosoft-lexema8-scheduler-odata-functions.loadDictionary</td>
<td>Осуществляет автоматическую загрузку справочников из 1С. Будут загружаться только те справочники, у которых в настройке стоит галка в поле "Загружать в пакете справочников" (должности,подразделения, ... физические лица при небольшом объеме можно загружать здесь же)</td>
<td>В процедуре автоматической загрузки данных из 1С</td>
<td>Один раз в час</td>
</tr>
<tr>
<td>Напоминание о входе в систему неактивированным пользователям</td>
<td>ecosoft-lexema8-scheduler-admin-console-functions.SendAuthEmail</td>
<td>Создает в системе информационное письмо, с помощью которого рассылается напоминание пользователям о входе в систему, которые не сделали этого ранее (в настройках учетной политики должна быть настроена константа "УпрП_напоминание_о_созданной_УЗ" со значением 1). Также задача направляет уведомление пользователям, которые дали согласие на кадровый электронный документооборот, но также не зарегистрировались в системе (в настройках учетной политики должна быть настроена константа "ПереходНаКЭДО_НапоминаниеОбОригинале" со значением 1).</td>
<td>В процедуре активации учетной записи пользователями</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Напоминание о необходимости сдачи заявления на сертификат в отдел кадров</td>
<td>ecosoft-lexema8-scheduler-admin-console-functions.SendSertificationEmail</td>
<td>Осуществляет автоматическую отправку письма пользователю, у которого был выпущен сертификат НЭП, но не были сданы оригиналы документов "Заявление на выдачу сертификата" и "Расписка в получении сертификата ключа проверки электронной подписи".</td>
<td>В процедуре автоматической отправки писем</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Отзыв сертификатов при изменении должности</td>
<td>ecosoft-lexema8-scheduler-admin-console-functions.revokeCertificate</td>
<td>Создает документ "Отзыв сертификата" при смене должности сотрудника. Проверяет должность в сертификате и текущую должность сотрудника на предприятии.</td>
<td>В процессе смены должности сотрудником</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Проверка документов Лексемы на удаление в 1С</td>
<td>ecosoft-lexema8-scheduler-odata-functions.unLoadDictionaryMaterials</td>
<td>У заявлений проставляется признак "Удалено" у тех документов, которые были удалены в 1С. Также этот признак отображается в реестре обмена с 1С.</td>
<td>В процедуре автоматической загрузки данных из 1С</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Просроченные документы</td>
<td>ecosoft-lexema8-scheduler-formation-mailing-list.sendingNotificationsExpired</td>
<td>Рассылает пользователям информацию о просроченных документах (нарушения сроков обработки).</td>
<td>В процедуре рассылки просроченных документов</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Рассылка документов на этапе инициирования</td>
<td>ecosoft-lexema8-scheduler-formation-mailing-list.sendingNotificationsFirstStage</td>
<td>Осуществляет автоматическую отправку письма инициатору, в случае если он создал документ, но не запустил документ по маршруту.</td>
<td>В процедуре автоматической отправки писем</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Рассылка просроченных документов руководителям</td>
<td>ecosoft-lexema8-scheduler-formation-mailing-list.sendingNotificationsExpiredChief</td>
<td>Создает автоматическую рассылку руководителю подразделения со списком подчиненных, у которых есть задолженности, с указанием количества просроченных документов и типов документов.</td>
<td>В процедуре автоматической рассылки просроченных документов руководителям</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Рассылка сводки по просроченным документам их инициаторам</td>
<td>ecosoft-lexema8-scheduler-formation-mailing-list.SendingNotificationsExpiredSummaryToInitiator</td>
<td>Оповещения направляются инициатору с информацией по документам, действия по которым просрочил любой из маршрута.</td>
<td>В процедуре автоматической отправки писем</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Рассылка уведомлений об ознакомлении ЛНА</td>
<td>ecosoft-lexema8-scheduler-formation-mailing-list.longQuery</td>
<td>В список рассылки автоматически добавляются вновь принятые сотрудники, которые работают в подразделения, на которые распространяется действие ЛНА. Также из списка рассылки автоматически удаляются уволенные сотрудники, которые не успели ознакомиться с данным ЛНА.</td>
<td>В процедуре автоматической отправки писем</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Снятие с ознакомления ЛНА с истёкшим сроком действия</td>
<td>ecosoft-lexema8-scheduler-formation-mailing-list.ClearReadListOfExpiredLND</td>
<td>Отменяет факт отправки ЛНА на ознакомление пользователям, которые не ознакомились с ЛНА до истечения его срока действия. В списках рассылки таких ЛНА останутся только пользователи, которые ознакомились с ним до выполнения задачи.</td>
<td>В процедуре рассылки ЛНА</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Создание новых пользователей</td>
<td>ecosoft-lexema8-scheduler-admin-console-functions.createNewUsers</td>
<td>Создает новых пользователей, осуществляет их привязку к организации, формирует документы "настройка пользователей" на основании данных справочников "Физическое лицо" и "Сотрудник", а также данных, загруженных из Active Directory, при необходимости. Примечание: У физического лица должно быть заполнено поле "Адрес эл/почты".</td>
<td>В процедуре создания новых пользователей</td>
<td>Один раз в час</td>
</tr>
<tr>
<td>Уведомления Lexema</td>
<td>ecosoft-lexema8-scheduler-formation-mailing-list.SendingNotificationLexema</td>
<td>Создает уведомления в системе, с помощью которых можно посылать по СЭД сообщения пользователям. Все уведомления будут находиться в окне "На обработку" как напоминание.</td>
<td>В процедуре уведомления в системе</td>
<td>Ежеминутно</td>
</tr>
<tr>
<td>Уведомления о приближающейся просрочке документов</td>
<td>ecosoft-lexema8-scheduler-formation-mailing-list.SendingNotificationsProcessing</td>
<td>Создает в системе информационное письмо, с помощью которого пользователям направляется уведомление о необходимости обработки документов СЭД согласно срокам. Необходима настройка константы "Предупреждать об окончании норматива согласования за (дней)".</td>
<td>В процедуре уведомления в системе</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Уведомления о приближающейся просрочке документов через СМС</td>
<td>ecosoft-lexema8-scheduler-formation-mailing-list.SendingNotificationsSMS</td>
<td>Пользователям направляется уведомление о необходимости обработки документов СЭД согласно срокам, а также о просроченных документов через SMS.</td>
<td>В процедуре уведомления в системе</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Уведомления об окончании срока доверенностей</td>
<td>ecosoft-lexema8-scheduler-formation-mailing-list.SendingEmpowermentNotificationExpired</td>
<td>Автоматически рассылает уведомления об окончании срока действия доверенности.</td>
<td>В процедуре рассылки</td>
<td>Один раз в день</td>
</tr>
<tr>
<th>Установка даты перехода на КЭДО принятым сотрудникам</th>
<th>Техническое название</th>
<th>Что она делает</th>
<th>Где используется</th>
<th>Рекомендуемая частота выполнения задачи</th>
</tr>
<tr>
<td>ecosoft-lexema8-scheduler-admin-console-functions.UpdateWorkerDateEDM</td>
<td>Осуществляет автоматическое проставление вновь принятым сотрудникам даты перехода на кадровый электронный документооборот. Система проверяет на текущий день всех новых сотрудников, у которых присутствует логин, но отсутствует дата перехода на КЭДО. В настройках учетной политики должна быть настроена константа "Дата_принятия_положения_КЭДО" с заполненной датой в формате дд.мм.гггг (например 09.09.2022). По указанной дате система определяет сотрудников, у которых дата приема позже, чем дата из константы, и по таким сотрудникам устанавливает дату перехода на КЭДО, равную дате приема.</td>
<td>В процедуре автоматического проставления даты перехода на КЭДО</td>
<td>Один раз в день</td>
</tr>
<tr>
<td>Формирование недостающих отчетов со штампом электронной подписи</td>
<td>ecosoft-lexema8-scheduler-formation-mailing-list.loadWaterMarkReport</td>
<td>Формирует автоматическое вложение отчета со штампом электронной подписи во вложении к заявлению, в случае если это не было сделано ранее по завершению маршрута заявления.</td>
<td>В процедуре укомплектования документов</td>
<td>Один раз в час</td>
</tr>
</table>
Название действия (задача)   |  Техническое название   |  Что она делает   |  Где используется  
-----------------------------|--------------------------|--------------------|---------------------
Автоматическое обновление статуса обучение |  ecosoft-lexema8-scheduler-staff-training-functions.AutomaticUpdateStudyingCourseStatus   |  Автоматически переводит просроченные [программы обучения](../Программы обучения/) по дате обучения в статус «Не пройдено» |  В процедуре обучения  
Автоматическое создание заявок на обучение |  -   |  Автоматическое создание [заявки на обучение](../Заявки на обучение/) из [плана обучения](../План обучения/) |  В процессе планирования обучения  
Автоматическое формирование протоколов обучения |  eecosoft-lexema8-scheduler-staff-training-functions.AutomaticCreateStaffTrainingJournalFromStatistic |  Автоматически формирует протоколы обучения согласно статистике обучения по сотрудникам |  В процедуре обучения  
Блокировка учетных записей пользователей, где дата увольнения меньше текущей  |  ecosoft-lexema8-scheduler-admin-console-functions.UserBloking   |  Проставляет признак блокировки у пользователей, если у связанного сотрудника проставлена дата увольнения меньше текущей даты   |  В процедуре блокировки пользователей  
Выгрузка документов из Лексемы в 1С   |  ecosoft-lexema8-scheduler-odata-functions.unLoadDocuments   |  Осуществляет автоматическую выгрузку документов из Лексемы в 1С (перечисленные на вкладке ["Исходящие документы"](../Настройка для интеграции с 1С/Настройка интеграции справочников и документов/Вкладка Исходящие документы/) |  В процедуре автоматической выгрузки данных в 1С  
Выпуск новых сертификатов, когда истекают сроки |  ecosoft-lexema8-scheduler-admin-console-functions.createCloudCertificateExpiring   |  Осуществляет автоматическую [заявку на выпуск сертификата](../Выпуск ОНЭП/#Заявки-на-выпуск-ЭП) пользователям у которых закончился срок действия сертификата электронной подписи. В настройках учетной политики должна быть включена константа **ЭЦП_количество_дней_за_сколько_отправтить_заявкуа_перевыпуск**, где указывается значение количества дней по которому нужно проверять сертификаты. Если текущая дата меньше даты окончания действующего ЭП либо равна константе - то создается заявка на перевыпуск. Сертификаты создаются по всем филиалам организаций, на которых истекает срок действия. Также с помощью [константы](../Настройка%20констант/index.md) **количество_перевыпускаемых_сертификатов_ЭП_за_раз** возможно задать количество сертификатов которые будут выпущены за раз. |  В процедуре выпуска сертификатов пользователям
Выпуск сертификатов новым сотрудникам |  ecosoft-lexema8-scheduler-admin-console-functions.NewUsersCloudCertificateCreate   | Осуществляет автоматический выпуск сертификатов электронной подписи новым принятым сотрудникам. Функция работает по следующему принципу: в случае если используется положение о КЭДО, то кандидаты подбираются если текущая дата больше либо равна дата перехода на КЭДО и есть логин в системе. В случае если положение о КЭДО не используется то по наличию логина в системе у сотрудника. |  В процедуре выпуска сертификатов пользователям
Добавление в список рассылки ЛНА с признаком "Ознакомлен ранее" |  ecosoft-lexema8-scheduler-formation-mailing-list.InsertReadListLNDReadEarlier   | В [список рассылки](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Обработка%20документов/#список_рассылки) автоматически добавляются сотрудники, которые подписали ознакомление с ЛНА на [бумажном носителе при приеме на работу](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Локально-нормативные%20документы/#вкладка_распространяется_на)   |  В процедуре создания ЛНА
Договора в статусе черновик (не отправленные по маршруту)   |  ecosoft-lexema8-scheduler-formation-mailing-list.sendingContractNotificationsExpired   |  Удаляет договора, которым не назначен маршрут. На следующий день после создания договора. Все договора, которые остались без маршрута будут удалены   |  В процедуре удаления договоров, которым не назначен маршрут  
Загрузка в Лексему документов на подписание из файлов (расчетные листы)   |  ecosoft-lexema8-scheduler-odata-functions.loadDocumentForSigningFromFile   | Осуществляет автоматическую загрузку файлов в Лексему из сетевого хранилища | В процедуре автоматической загрузки данных из 1С
Загрузка в Лексему из 1С документов  | ecosoft-lexema8-scheduler-odata-functions.loadDocumentForm   | Осуществляет автоматическую загрузку физических документов из 1С в Лексему (перечисленные на вкладке ["Входящие документы"](../Настройка для интеграции с 1С/Настройка интеграции справочников и документов/Вкладка Входящие документы/) с типом *"Документ в Лексеме"*)   |  В процедуре автоматической загрузки данных из 1С  
Загрузка в Лексему из 1С произвольных выборок   |  ecosoft-lexema8-scheduler-odata-functions.loadFreeQuery  |  Осуществляет автоматическую загрузку сущностей, не относящих к справочникам и документам, в произвольном виде в физическую таблицу СЭД. Например, управленческую структуру. Подробнее ознакомиться можно в разделе [Произвольные выборки](../Настройка для интеграции с 1С/Настройка интеграции справочников и документов/Вкладка Произвольные выборки/) |  В процедуре автоматической выгрузки произвольных выборок из 1С  
Загрузка из 1С в Лексему документов на подписание   |  ecosoft-lexema8-scheduler-odata-functions.loadDocumentForSigningFromFile   |  Осуществляет автоматическую загрузку документов на подписание из 1С в Лексему (перечисленные на вкладке ["Входящие документы"](../Настройка для интеграции с 1С/Настройка интеграции справочников и документов/Вкладка Входящие документы/) с типом *"Подтип документа на подписание"*).. Так же создает документы на подписание в документообороте   |  В процедуре автоматической загрузки данных из 1С  
Загрузка из 1С физ.лиц  |  ecosoft-lexema8-scheduler-odata-functions.loadDocumentForm   |  Осуществляет автоматическую загрузку физических лиц из 1С   |  В процедуре автоматической загрузки физических лиц из 1С  
Загрузка пользователей из Active Directory в форму для сопоставления  |  ecosoft-lexema8-scheduler-admin-console-functions.loadADUsers   |  Автоматически добавляет и сопоставляет доменные учетные записи из Active Directory со справочником физических лиц   |  В процедуре создания нового пользователя. Если в системе Active Directory были изменения в данных пользователей, таких как ФИО или адрес электронной почты, то обновленная информация используется для обновления соответствующих таблиц.  
Загрузка справочников (должности,подразделения,физ.лица и сотрудники)  |  ecosoft-lexema8-scheduler-odata-functions.loadDictionary   |  Осуществляет автоматическую загрузку справочников из 1С. Будут загружаться только те справочники, у которых в настройке стоит галка в поле "Загружать в пакете справочников" (должности,подразделения, ... физические лица при небольшом объеме можно загружать здесь же)   |  В процедуре автоматической загрузки данных из 1С  
Напоминание о входе в систему неактивированным пользователям  |  ecosoft-lexema8-scheduler-admin-console-functions.SendAuthEmail   |  Создает в системе информационное письмо, с помощью которого рассылается напоминание пользователям о входе в систему, которые не сделали этого ранее в настройках учетной политики должна быть настроена константа **УпрП_напоминание_о_созданной_УЗ** со значением 1). Также задача направляет уведомление пользователям которые дали согласие на кадровый электронный документооборот, но также не зарегистрировались в системе (в настройках учетной политики должна быть настроена константа **ПереходНаКЭДО_НапоминаниеОбОригинале** со значением 1)   |  В процедуре активации учетной записи пользователями  
Напоминание о необходимости сдачи заявления на сертификат в отдел кадров  |  ecosoft-lexema8-scheduler-admin-console-functions.SendSertificationEmail   |  Осуществляет автоматическую отправку письма пользователю, у которого был выпущен сертификат НЭП, но не были сданы оригиналы документов **Заявление на выдачу сертификата** и **Расписка в получении сертификата ключа проверки электронной подписи**.   |  В процедуре автоматической отправки писем  
Отзыв сертификатов при изменении должности   |  ecosoft-lexema8-scheduler-admin-console-functions.revokeCertificate   |  Cоздает документ "Отзыв сертификата" при смене должности сотрудника. Проверяет должность в сертификате и текущую должность сотрудника на предприятии   |  В процессе смены должности сотрудником  
Проверка документов Лексемы на удаление в 1С  |  ecosoft-lexema8-scheduler-odata-functions.unLoadDictionaryMaterials   |  У заявлений проставляется признак "Удалено" у тех документов, которые были удалены в 1С. Также этот признак отображается в реестре обмена с 1С   |  В процедуре автоматической загрузки данных из 1С
Просроченные документы  |  ecosoft-lexema8-scheduler-formation-mailing-list.sendingNotificationsExpired   |  Рассылает пользователям информацию о просроченных документах (нарушения сроков обработки)   |  В процедуре рассылки просроченных документов  
Рассылка документов на этапе инициирования  |  ecosoft-lexema8-scheduler-formation-mailing-list.sendingNotificationsFirstStage   |  Осуществляет автоматическую отправку письма инициатору, в случае если он создал документ, но не запустил документ по маршруту   |  В процедуре автоматической отправки писем  
Рассылка просроченных документов руководителям  |  ecosoft-lexema8-scheduler-formation-mailing-list.sendingNotificationsExpiredChief   |  Создает автоматическую рассылку руководителю подразделения со списком подчиненных у которых есть задолженности, с указанием количества просроченных документов и типов документов   |  В процедуре автоматической рассылки просроченных документов руководителям  
Рассылка сводки по просроченным документам их инициаторам | ecosoft-lexema8-scheduler-formation-mailing-list.SendingNotificationsExpiredSummaryToInitiator | Оповещения направляются инициатору с информацией по документам, действия по которым просрочил любой из маршрута | В процедуре автоматической отправки писем  
Рассылка уведомлений об ознакомлении ЛНА | ecosoft-lexema8-scheduler-formation-mailing-list.longQuery | В [список рассылки](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Обработка%20документов/#список_рассылки) автоматически добавляются вновь принятые сотрудники, которые работают в подразделения на которые [распространяется действие ЛНА](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Локально-нормативные%20документы/#вкладка_распространяется_на). Также из списка рассылки автоматически удаляются уволенные сотрудники, которые не успели ознакомиться с данным ЛНА | В процедуре автоматической отправки писем  
Снятие с ознакомления ЛНА с истёкшим сроком действия   |  ecosoft-lexema8-scheduler-formation-mailing-list.ClearReadListOfExpiredLND   |  Отменяет факт отправки ЛНА на ознакомление пользователям, которые не ознакомились с ЛНА до истечения его срока действия. В списках рассылки таких ЛНА останутся только пользователи, которые ознакомились с ним до выполнения задачи   |  В процедуре рассылки ЛНА  
Создание новых пользователей   |  ecosoft-lexema8-scheduler-admin-console-functions.createNewUsers   |  Создает новых пользователей, осуществляет их привязку к организации,  формирует документы "настройка пользователей" на основании данных справочников "Физическое лицо" и "Сотрудник", а также данных, загруженных из Active Directory, при необходимости.  Примечание: У физического лица должно быть заполнено поле "Адрес эл/почты"   |  В процедуре создания новых пользователей  
Уведомления Lexema  |  ecosoft-lexema8-scheduler-formation-mailing-list.SendingNotificationLexema   |  Создает уведомления в системе, с помощью которых можно посылать по СЭД сообщения пользователям. Все уведомления  будут находиться в окне "На обработку" как напоминание   |  В процедуре уведомления в системе  
Уведомления о приближающейся просрочке документов  |  ecosoft-lexema8-scheduler-formation-mailing-list.SendingNotificationsProcessing   |  Создает в системе информационное письмо, с помощью которого пользователям направляется уведомление о необходимости обработки документов СЭД согласно срокам. Необходимо настройка константы [**"Предупреждать об окончании норматива согласования за (дней)"**](../Настройка констант/) |  В процедуре уведомления в системе  
Уведомления о приближающейся просрочке документов через СМС | ecosoft-lexema8-scheduler-formation-mailing-list.SendingNotificationsSMS | Пользователям направляется уведомление о необходимости обработки документов СЭД согласно срокам, а также о просроченных документов через SMS | В процедуре уведомления в системе  
Уведомления об окончании срока доверенностей   |  ecosoft-lexema8-scheduler-formation-mailing-list.SendingEmpowermentNotificationExpired   |  Автоматичеси рассылает уведомления об окончании срока действия доверенности   |  В процедуре рассылки  
Установка даты перехода на КЭДО принятым сотрудникам  |  ecosoft-lexema8-scheduler-admin-console-functions.UpdateWorkerDateEDM   |  Осуществляет автоматическое проставление вновь принятым сотрудникам даты перехода на кадровый электронный документооборот. Система проверяет на текущий день всех новых сотрудников, у которых присутствует логин, но отсутствует дата перехода на КЭДО. В настройках учетной политики должна быть настроена константа **Дата_принятия_положения_КЭДО** с заполненой датой в формате дд.мм.гггг (например 09.09.2022). По указанной дате система определяет сотрудников,у которых дата приема позже, чем дата из константы, и по таким сотрудникам устанавливает дату перехода на КЭДО, равную дате приема   |  В процедуре автоматического проставления даты перехода на КЭДО  
Формирование недостающих отчетов со штампом электронной подписи |  ecosoft-lexema8-scheduler-formation-mailing-list.loadWaterMarkReport   |  Формирует автоматическое вложение отчета со штампом электронной подписи во вложении к заявлению, в случае если это не было сделано ранее по завершению маршрута заявления   |  В процедуре укомплектования документов  
   
**Способы и примеры настройки расписания задаются в формате crontab** **Способы и примеры настройки расписания задаются в формате crontab**
Ознакомиться подробнее можно в разделе [Создание расписания в формате Crontab](../FAQ/#использование_crontab_для_сервиса_sheduler) Ознакомиться подробнее можно в разделе [Создание расписания в формате Crontab](../FAQ/#использование_crontab_для_сервиса_sheduler)

View File

@ -1,57 +1,57 @@
- Администрирование электронного документооборота - Администрирование электронного документооборота
- [Администрирование СЭД](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Администрирование СЭД/) - [Настройка своей организации](Admin manuals/Управление компаниями/)
- [Валюта](Admin manuals/Валюта/)
- [Группы рассылки](Admin manuals/Группы рассылки/)
- [Журнал регистрации и нумерация](Admin manuals/Журнал регистрации/)
- [Импорт данных из Excel-файлов](Admin manuals/Импорт данных из Excel-файлов/)
- [Исключение из группы рассылки](Admin manuals/Исключения из рассылки/)
- [Конструктор документов](Admin manuals/Конструктор документов/)
- [Мобильное приложение](Admin manuals/Мобильное приложение/)
- [Настройка архива](Admin manuals/Настройка архива/)
- [Настройка документов, участвующих в документообороте](Admin manuals/Настройка документов/) - [Настройка документов, участвующих в документообороте](Admin manuals/Настройка документов/)
- [Настройка запрещающих правил для создания документов](Admin manuals/Настройка запрещающих правил/) - [Журнал регистрации и нумерация](Admin manuals/Журнал регистрации/)
- [Настройка архива](Admin manuals/Настройка архива/)
- [Типы вложений](Admin manuals/Типы вложений/)
- [Настройка обозревателя аналитик](Admin manuals/Настройка ОА/) - [Настройка обозревателя аналитик](Admin manuals/Настройка ОА/)
- [Подтипы документов](Admin manuals/Подтипы документов/)
- [Конструктор документов](Admin manuals/Конструктор документов/)
- [Пользовательские типы атрибутов документов](Admin manuals/Пользовательские типы атрибутов документов/)
- [Настройка шаблонов маршрутов](Admin manuals/Настройка шаблонов маршрутов/)
- [Настройка правил поиска для ЖСД](Admin manuals/Настройка правил поиска для ЖСД/) - [Настройка правил поиска для ЖСД](Admin manuals/Настройка правил поиска для ЖСД/)
- [Настройка правил поиска для истории операций](Admin manuals/Настройка правил поиска для истории операций/) - [Настройка правил поиска для истории операций](Admin manuals/Настройка правил поиска для истории операций/)
- [Настройка своей организации](Admin manuals/Управление компаниями/) - [Администрирование СЭД](Admin manuals/Администрирование СЭД/)
- [Настройка мобильного приложения](Admin manuals/Мобильное приложение/)
- [Группы рассылки](Admin manuals/Группы рассылки/)
- [Настройка пунктов плиточного меню](Admin manuals/Настройка плиточного меню/)
- [Импорт данных из Excel-файлов](Admin manuals/Импорт данных из Excel-файлов/)
- [Исключение из группы рассылки](Admin manuals/Исключения из рассылки/)
- [Настройка запрещающих правил для создания документов](Admin manuals/Настройка запрещающих правил/)
- [Настройки сообщений в окне Документооборот](Admin manuals/Настройки сообщений в окне Документооборот/) - [Настройки сообщений в окне Документооборот](Admin manuals/Настройки сообщений в окне Документооборот/)
- [Настройка шаблонов маршрутов](Admin manuals/Настройка шаблонов маршрутов/) - [Валюта](Admin manuals/Валюта/)
- [Подтипы документов](Admin manuals/Подтипы документов/)
- [Пользовательские типы атрибутов документов](Admin manuals/Пользовательские типы атрибутов документов/)
- [Ставки НДС](Admin manuals/Ставки НДС/) - [Ставки НДС](Admin manuals/Ставки НДС/)
- [Типы вложений](Admin manuals/Типы вложений/)
- [Условия для проверки контрагента](Admin manuals/Условия для проверки контрагентов/) - [Условия для проверки контрагента](Admin manuals/Условия для проверки контрагентов/)
- Управление пользователями
- [Автоматическое создание пользователей](Admin manuals/Автоматическое создание пользователей/)
- [Виды авторизации пользователей](Admin manuals/Авторизация/)
- [Настройка пользователей](Admin manuals/Настройка пользователей/)
- [Настройка служебных пользователей](Admin manuals/Настройка служебных пользователей/)
- [Роли системы](Admin manuals/Бизнес-роли.md)
- [Создание сотрудника с сайта регистрации](Admin manuals/Создание сотрудника с сайта регистрации/)
- [Технические роли](Admin manuals/Технические роли.md)
- [Управление пользователями](Admin manuals/Управление пользователями/)
- Работа с электронными подписями
- [Виды электронных подписей](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/ЭП/)
- [Выпуск корневого сертификата](Admin manuals/Организация выпуска корневого сертификата/)
- [Выпуск облачной неквалифицированной электронной подписи в Lexema-ECM](Admin manuals/Выпуск ОНЭП/)
- [Как настроить работу с КЭП на токенах?](Admin manuals/Настройка для токенов КЭП/)
- [Настройка массового подписания](Admin manuals/Настройка для массового подписания/)
- [Настройка ЭП для документов СЭД](Admin manuals/Настройка ЭП для документов СЭД/)
- [Отзыв сертификата электронной подписи](Admin manuals/Отзыв ЭП/)
- Техническая поддержка проектов
- [Заявки в техническую поддержку](Admin manuals/Заявка в техническую поддержку/) - [Заявки в техническую поддержку](Admin manuals/Заявка в техническую поддержку/)
- [Типы заявок в техническую поддержку](Admin manuals/Типы заявок в техподдержку/) - [Типы заявок в техническую поддержку](Admin manuals/Типы заявок в техподдержку/)
- [Самостоятельное проведение тестирования сайта](Admin manuals/Проведение тестирование сайта/)
- Управление пользователями
- [Автоматическое создание пользователей](Admin manuals/Автоматическое создание пользователей/)
- [Создание сотрудника с сайта саморегистрации](Admin manuals/Создание сотрудника с сайта регистрации/)
- [Управление пользователями](Admin manuals/Управление пользователями/)
- [Настройка пользователей](Admin manuals/Настройка пользователей/)
- [Роли системы](Admin manuals/Бизнес-роли.md)
- [Технические роли](Admin manuals/Технические роли.md)
- [Настройка служебных пользователей](Admin manuals/Настройка служебных пользователей/)
- [Виды авторизации пользователей](Admin manuals/Авторизация/)
- Работа с электронными подписями
- [Виды электронных подписей](Admin manuals/Виды электронных подписей/)
- [Настройка ЭП для документов СЭД](Admin manuals/Настройка ЭП для документов СЭД/)
- [Выпуск облачной неквалифицированной электронной подписи в Lexema-ECM](Admin manuals/Выпуск ОНЭП/)
- [Выпуск корневого сертификата](Admin manuals/Организация выпуска корневого сертификата/)
- [Как настроить работу с КЭП на токенах?](Admin manuals/Настройка для токенов КЭП/)
- [Настройка массового подписания](Admin manuals/Настройка для массового подписания/)
- [Отзыв сертификата электронной подписи](Admin manuals/Отзыв ЭП/)
- Работа с уведомлениями - Работа с уведомлениями
- [Конструктор уведомлений](Admin manuals/Конструктор уведомлений/) - [Рассылки системы](Admin manuals/Рассылки системы/)
- [Настройка внутрисистемных уведомлений](Admin manuals/Настройка внутрисистемных уведомлений/) - [Настройка внутрисистемных уведомлений](Admin manuals/Настройка внутрисистемных уведомлений/)
- [Конструктор уведомлений](Admin manuals/Конструктор уведомлений/)
- [Создание задачи в планировщике задач](Admin manuals/Планировщик задач/)
- [Функции планировщика задач](Admin manuals/Функции планировщика задач/)
- [Настройка констант](Admin manuals/Настройка констант/) - [Настройка констант](Admin manuals/Настройка констант/)
- [Настройка интеграции сервиса Telegram](Admin manuals/Настройка телеграм/) - [Настройка интеграции сервиса Telegram](Admin manuals/Настройка телеграм/)
- [Настройка оповещений об окончании сроков действия лицензий](Admin manuals/Настройка оповещений об окончании лицензии/) - [Настройка оповещений об окончании сроков действия лицензий](Admin manuals/Настройка оповещений об окончании лицензии/)
- [Настройка пунктов плиточного меню](Admin manuals/Настройка плиточного меню/)
- [Настройка рассылки уведомлений](Admin manuals/Настройки рассылки уведомлений/) - [Настройка рассылки уведомлений](Admin manuals/Настройки рассылки уведомлений/)
- [Рассылки системы](Admin manuals/Рассылки системы/)
- [Создание задачи в планировщике задач](Admin manuals/Планировщик задач/)
- [Функции планировщика задач](Admin manuals/Функции планировщика задач/)
- Настройка для интеграции с 1С - Настройка для интеграции с 1С
- [Настройка интеграции справочников и документов](Admin manuals/Настройка для интеграции с 1С/Настройка интеграции справочников и документов/) - [Настройка интеграции справочников и документов](Admin manuals/Настройка для интеграции с 1С/Настройка интеграции справочников и документов/)
- [Настройка обмена данных с 1С](Admin manuals/Настройка для интеграции с 1С/Обмен данными с 1С/) - [Настройка обмена данных с 1С](Admin manuals/Настройка для интеграции с 1С/Обмен данными с 1С/)
@ -61,26 +61,27 @@
- [Описание протокола обмена](Admin manuals/Настройка для интеграции с 1С/Описание протокола обмена/Описание протокола обмена.md) - [Описание протокола обмена](Admin manuals/Настройка для интеграции с 1С/Описание протокола обмена/Описание протокола обмена.md)
- Администрирование системы обучения персонала - Администрирование системы обучения персонала
- [Вид обучения](Admin manuals/Вид обучения/) - [Вид обучения](Admin manuals/Вид обучения/)
- [Группы обучения](Admin manuals/Группы обучения/) - [Ресурс обучения](Admin manuals/Ресурс обучения/)
- [Группа обучения аналитическая форма](Admin manuals/Группа обучения аналитическая/) - [Формат обучения](Admin manuals/Формат обучения/)
- [Доступные программы в организации](Admin manuals/Доступные программы в организации/)
- [Действие обученности при смене работодателя](Admin manuals/Действие обученности при смене работодателя/) - [Действие обученности при смене работодателя](Admin manuals/Действие обученности при смене работодателя/)
- [Заявки на обучение](Admin manuals/Заявки на обучение/)
- [Журнал протоколов обучения](Admin manuals/Журнал протоколов обучения/)
- [Комплекс программ обучения](Admin manuals/Комплекс программ обучения/)
- [Конструктор программ обучения](Admin manuals/Конструктор программ обучения/)
- [Конструктор тем](Admin manuals/Конструктор тем/)
- [Конструктор тестов](Admin manuals/Конструктор тестов/)
- [Критерии оценок](Admin manuals/Критерии оценки теста/)
- [Матрица обучения](Admin manuals/Матрица обучения/)
- [Направления обучения](Admin manuals/Направления обучения/) - [Направления обучения](Admin manuals/Направления обучения/)
- [Периодичность обучения](Admin manuals/Периодичность обучения/) - [Периодичность обучения](Admin manuals/Периодичность обучения/)
- [План обучения](Admin manuals/План обучения/) - [Должности](Admin manuals/Должности/)
- [Категории должностей](Admin manuals/Категории должностей/)
- [Программы обучения](Admin manuals/Программы обучения/) - [Программы обучения](Admin manuals/Программы обучения/)
- [Комплекс программ обучения](Admin manuals/Комплекс программ обучения/)
- [Доступные программы в организации](Admin manuals/Доступные программы в организации/)
- [Матрица обучения](Admin manuals/Матрица обучения/)
- [План обучения](Admin manuals/План обучения/)
- [Заявки на обучение](Admin manuals/Заявки на обучение/)
- [Критерии оценок](Admin manuals/Критерии оценки теста/)
- [Конструктор тестов](Admin manuals/Конструктор тестов/)
- [Конструктор тем](Admin manuals/Конструктор тем/)
- [Конструктор программ обучения](Admin manuals/Конструктор программ обучения/)
- [Группы обучения](Admin manuals/Группы обучения/)
- [Группа обучения аналитическая форма](Admin manuals/Группа обучения аналитическая/)
- [Протокол обучения](Admin manuals/Протокол обучения/) - [Протокол обучения](Admin manuals/Протокол обучения/)
- [Ресурс обучения](Admin manuals/Ресурс обучения/)
- [Статистика обучения](Admin manuals/Статистика обучения/) - [Статистика обучения](Admin manuals/Статистика обучения/)
- [Формат обучения](Admin manuals/Формат обучения/) - [Журнал протоколов обучения](Admin manuals/Журнал протоколов обучения/)
- [Логи приложения](Admin manuals/Логи приложения/) - [Логи приложения](Admin manuals/Логи приложения/)
- [Самостоятельное проведение тестирования сайта](Admin manuals/Проведение тестирование сайта/)
- [FAQ Lexema-ECM](Admin manuals/FAQ/) - [FAQ Lexema-ECM](Admin manuals/FAQ/)

View File

@ -10,7 +10,7 @@
} }
.md-grid { .md-grid {
max-width: 95%; max-width: 98%;
} }
ul.uldisc { ul.uldisc {

View File

@ -58,8 +58,6 @@ theme:
- search.suggest - search.suggest
- header.autohide - header.autohide
- navigation.path - navigation.path
- navigation.expand
# - navigation.tabs
docs_dir: docs docs_dir: docs
site_dir: site site_dir: site