Compare commits
4 Commits
54ff9c2221
...
a675cc5cfb
Author | SHA1 | Date | |
---|---|---|---|
a675cc5cfb | |||
980943be70 | |||
73badabb90 | |||
fc20209598 |
@ -62,7 +62,7 @@
|
||||
|
||||
В форме заявки отображается такая информация как: заказчик, подразделение, организация, суть обращения и текст заявки.
|
||||
|
||||

|
||||

|
||||
|
||||
Во вложениях на панели инструментов инициатор прикрепляет файлы при наличии(скриншот ошибки, уточняющие документы и т.п.).
|
||||
|
||||
@ -106,7 +106,9 @@
|
||||
* Согласование ЗНИ.
|
||||
|
||||
В ЗНИ открываются 3 поля. Два из них надо заполнить при расчёте затрат:
|
||||
|
||||
* Затраты (часов) - сколько часов чистого времени требуется для решения проблемы.
|
||||
|
||||
* Время выполнения (часов) - сколько времени реально потребуется для решения проблемы, отсчитывая от даты согласования ЗНИ. Столько часов будет выделено Исполнителю на его этапе в маршруте.
|
||||
|
||||

|
||||
@ -131,11 +133,23 @@
|
||||
|
||||
После регистрации заявки, она поступает на исполнение ответственному исполнителю. После исполнения заявки, исполнитель должен заполнить "Отчет об исполнении".
|
||||
|
||||

|
||||

|
||||
|
||||
Далее он подтверждает исполнение соответствующей кнопкой в панели инструментов. Заявка направляется инициатору данной заявки на ознакомление, фактический срок исполнения проставляется автоматически, статус заявка автоматически назначается "Выполнено".
|
||||
|
||||

|
||||

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

|
||||
|
||||
Так же подгруппы можно создавать из заявки в техническую поддержку. На скриншоте ниже видно как через "Кнопку быстрого создания" можно создать необходимую группировку.
|
||||
|
||||

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

|
||||
|
||||
### Статусы заявки
|
||||
|
||||
|
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 10 KiB |
154
docs/Admin manuals/Настройка Диадока/index.md
Normal file
@ -0,0 +1,154 @@
|
||||
# Диадок
|
||||
|
||||
## Описание
|
||||
|
||||
**Диадок** — это система юридически значимого электронного документооборота. Пользователи сервиса подписывают документы квалифицированной электронной подписью и обмениваются ими с контрагентами без дублирования на бумаге.
|
||||
|
||||

|
||||
|
||||
## Настройка работы Диадока
|
||||
|
||||
Для интеграции системы с сервисом Диадок необходимо настроить следующие библиотеки:
|
||||
|
||||
- Диадок
|
||||
- диадок-Сервис
|
||||
|
||||
|
||||
|
||||
## Подключение библиотек
|
||||
|
||||
В настройках конфигурации сайта (конфиги) прописываются настройки сервиса Диадок для каждой организации. Прописываются такие параметры как:
|
||||
|
||||
- путь
|
||||
- логин
|
||||
- пароль
|
||||
- ключ который предоставляется Контур.Диадок при заключении договора организации с диадоком (API-ключ для интеграции с Контур.Диадок)
|
||||
|
||||
Ниже приведен скрин с примером:
|
||||
|
||||

|
||||
|
||||
## Работа Диадока
|
||||
|
||||
Для работы Диадока необходимо настроить задания планировщика:
|
||||
|
||||
1. **Загрузка boxid** - это идентификаторы на которые будут отправляться и приниматься контрагенты.
|
||||
2. **Обновление статусов** - считывает текущие статусы контрагента (принятые, подписанные, аннулированные и т.д).
|
||||
3. **Загрузка новых событий** - факты подписания документов контрагентов и загрузка файла.
|
||||
|
||||

|
||||
|
||||
Для работы с Диадоком в Лексеме необходимо иметь определенную роль, подробнее можно ознакомиться в разделе [Технические роли](https://ecm-administrator-manuals.readthedocs.io/ru/latest/Admin%20manuals/%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5%20%D1%80%D0%BE%D0%BB%D0%B8/#%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5).
|
||||
|
||||
В системе имеется 2 формы Диадока:
|
||||
|
||||
**Документы Диадока** - форма документа которая хранит все данные о том что отправляли или принимали по Диадоку.
|
||||
|
||||
**Реестр документа Диадока** - аналитическая форма, она необходима для оптимизированной работы документов по Диадоку.
|
||||
|
||||

|
||||
|
||||
Создание документа Диадока происходит автоматически в процессе отправки документа в Диадок. Система автоматически заполняет всю информацию по документу.
|
||||
|
||||
Имеется 2 вида документов Диадока:
|
||||
|
||||
1. **_Входящие документы_** - формируются по задачи шедулера по проверке новых событий в ящике "Диадок".
|
||||
2. **_Исходящие документы_** - формируются из формы документа "Договор" и "Доп. Соглашения" к договору.
|
||||
|
||||

|
||||
|
||||
При отправке договора или доп. соглашения в Диадок, система определяем кем был подписан докумен подписью КЭП и вместе с файлом во вложении отправляется в диадок. Если на сотрудника подписавшего документ, существует дейтвующая МЧД, ЭДО то в диадок отправляется идентификатор доверенности.
|
||||
|
||||
После того как договор был подписан, в документ вкладывается скан-файл с типом вложения "Оригинал PDF". На каждое вложение формируется новый документ Диадок. Ему присваивается **Messageid** и **Entityid**.
|
||||
|
||||
??? Информация
|
||||
**_Messageid_** — уникальный идентификатор, который используется для идентификации сообщений.
|
||||
**_Entityid_** - это уникальный идентификатор, который используется для однозначного представления сущности (объекта) в системе или контексте, где она существует.
|
||||
|
||||
|
||||
Чтобы отправить договор в Диадок необходимо по кнопке "Операции" в панели управления выбрать строку "Отправить документ в Диадок".
|
||||
|
||||

|
||||
|
||||
После выбора действия "Отправить документ в Диадок" в реестре "Документы Диадок" формируется новый исходящий документ, в котором автоматически заполняются информация:
|
||||
|
||||
- от имени какой организации отправился документ и какой организации отправился (строка идентификатор ящика отправителя)
|
||||
- с какого ящика диадок отправился и на какой ящик другой организации (строка идентификатор ящика получателя)
|
||||
- строка с именем файла отправленного с документом (строка файл)
|
||||
|
||||

|
||||
|
||||
Так же по кнопке "Перейти" есть возможность перейти в договор или Доп. Соглашение отправленного в Диадок.
|
||||
|
||||

|
||||
|
||||
## Настройка интеграции с Диадок
|
||||
|
||||
Система автоматически загрузит в раздел "Реквизиты Диадока" реквизиты контрагента по задачам загрузки **boxid**, **Guid** и таблицу с информацией о том с каким юридическим лицом интегрированы по Диадоку. Проще говоря, это те контрагенты которые приняли приглашение для обмена по Диадоку с указанным контрагентом в строке "Идентификатор участника ЭДО".
|
||||
|
||||
В карточке контрагента на вкладке "Настройка интеграции с Диадок" указана информация по данному контрагенту в системе Диадока:
|
||||
|
||||

|
||||
|
||||
Если необходимо указать инедтификатор участника ЭДО, отличный от того который загружен автоматически, то необходимо заполнить поле "Идентификатора" участника ЭДО. Для редактирования этого поля у пользователя должна быть роль **_responsible_accountant_diadoc_**.
|
||||
|
||||
- **Идентификатор участника ЭДО** - поле с запросом которое выводит реквизиты по контрагенту из Диадока
|
||||
- **идентификатор участника ЭДО сверен** - чекбокс признак необходимый для того чтобы другой идентификатор не загружался в систему.
|
||||
|
||||
|
||||

|
||||
|
||||
Далее необходимо нажать кнопку "Загрузить реквизиты из Диадока".
|
||||
|
||||

|
||||
|
||||
**boxid (ручной ввод)** - заполняется в ручную в случае если необходим для работы с ним один конкретный ящик, а у контрагента имеется разное множество ящиков.
|
||||
|
||||
**boxid (загруженный)** - строка которая заполняется автоматически при работе задачи **"Загрузка boxid ящиков Диадок контрагентов"**
|
||||
|
||||

|
||||
|
||||
|
||||
??? Пример "Пример JSON формата данных контрагента"
|
||||
|
||||
```json
|
||||
"OrgIdGuid": "0581-JHY-862",
|
||||
"OrgId": "0581-JHY-8620", --Guid
|
||||
"Inn": "1234567890",
|
||||
"Kpp": "1234567890",
|
||||
"FullName": "Акционерное общество \"Радуга\"",
|
||||
"ShortName": "АО \"Радуга\"",
|
||||
"JoinedDiadocTreaty": true,
|
||||
"Boxes": [
|
||||
{
|
||||
"BoxId": "111abc654@diadoc.ru", --boxId
|
||||
"BoxIdGuid": "111abc-654",
|
||||
"Title": "АО \"Радуга\"",
|
||||
"InvoiceFormatVersion": "v5_02",
|
||||
"EncryptedDocumentsAllowed": false
|
||||
}
|
||||
],
|
||||
|
||||
"Ogrn": "1234567890",
|
||||
|
||||
"FnsParticipantId": "2BH47rDA", --Идентификатор учатсника ЭДО
|
||||
```
|
||||
|
||||
При нажатии на кнопку "Операции" в документе договор или доп. соглашение, имеются две операции:
|
||||
|
||||
1. **Отправить в Диадок** - документ направляется в систему Диадока c помощью сервиса API, где его при необходимости возможно отредактировать.
|
||||
2. **Отправить в Диадок шаблон** - отправляется шаблон документа который не возможно редактировать.
|
||||
|
||||
В окне "История" в панели управления документа Диадока показывается история документа, например _"Ожидается подпись контрагентом"_, _"Подписан контрагентом"_, _"Аннулирован контрагентом"_ и т.п.
|
||||
|
||||

|
||||
|
||||
Также во вложении будет файл, который имеет подписание с двух сторон с водяным знаком.
|
||||
|
||||
При каждой новой отправке в Диадок система отправляет те файлы, которые не были отправлены ранее, с последней подписью КЭП.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
BIN
docs/Admin manuals/Настройка Диадока/media/article14022022-1.png
Normal file
After Width: | Height: | Size: 163 KiB |
BIN
docs/Admin manuals/Настройка Диадока/media/configi.jpg
Normal file
After Width: | Height: | Size: 147 KiB |
BIN
docs/Admin manuals/Настройка Диадока/media/screen-1.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
docs/Admin manuals/Настройка Диадока/media/screen-10.png
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
docs/Admin manuals/Настройка Диадока/media/screen-2.png
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
docs/Admin manuals/Настройка Диадока/media/screen-3.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
docs/Admin manuals/Настройка Диадока/media/screen-4.png
Normal file
After Width: | Height: | Size: 86 KiB |
BIN
docs/Admin manuals/Настройка Диадока/media/screen-5.png
Normal file
After Width: | Height: | Size: 51 KiB |
BIN
docs/Admin manuals/Настройка Диадока/media/screen-6.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
docs/Admin manuals/Настройка Диадока/media/screen-7.png
Normal file
After Width: | Height: | Size: 53 KiB |
BIN
docs/Admin manuals/Настройка Диадока/media/screen-8.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
docs/Admin manuals/Настройка Диадока/media/screen-9.png
Normal file
After Width: | Height: | Size: 8.1 KiB |
@ -206,6 +206,7 @@
|
||||
**ЭЦП_количество_дней_за_сколько_отправтить_заявку_на_перевыпуск** | осуществляет автоматическую [заявку на выпуск сертификата](../Выпуск ОНЭП/index.md#Заявки-на-выпуск-ЭП) пользователям у которых закончился срок действия сертификата электронной подписи. Указывается значение количества дней по которому нужно проверять срок окончания сертификатов | | 7
|
||||
**заявка_на_выпуск_сертификата_проверка_КЭП_МЧД** | Позволяет включать и отключать проверку на строку "Доверенность" в заявке на выпуск сертификата. Если константа включена то и проверка на строку (выпадающий список) "Доверенность" работает.
|
||||
**empowerment_word_report** | Позволяет выводить QR-код в отчете доверенностей через формат Word. Отчет формата Word открывается через панель управления с помощью печатной формы.
|
||||
**СЭД_ВХД_показать_кнопку_печать** | Позволяет отоброжать в тулбаре (в палени управления) кнопку "Печать" во входящих документах.
|
||||
|
||||
#### Автосоздание_пользователей_Регистрировать_только_согласных_на_КЭДО
|
||||
|
||||
|
@ -175,7 +175,7 @@
|
||||
limit 1
|
||||
)
|
||||
```
|
||||
<!-- ### Примеры запросов
|
||||
### Примеры запросов
|
||||
|
||||
#### Просроченные документы
|
||||
|
||||
@ -226,6 +226,8 @@
|
||||
|
||||
??? note "Запрос"
|
||||
|
||||

|
||||
|
||||
Основной запрос:
|
||||
|
||||
Итоговая выборка:
|
||||
@ -297,7 +299,9 @@
|
||||
|
||||
В реестре отображаются документы, которые в данный момент находятся в HR службе в работе
|
||||
|
||||
??? note "Запрос"
|
||||
??? note "Запрос"
|
||||
|
||||

|
||||
|
||||
Основной запрос:
|
||||
|
||||
@ -331,7 +335,9 @@
|
||||
|
||||
В реестре отображаются документы, которые были обработаны сегодня службой HR сегодня.
|
||||
|
||||
??? note "Запрос"
|
||||
??? note "Запрос"
|
||||
|
||||

|
||||
|
||||
Основной запрос:
|
||||
|
||||
@ -366,6 +372,8 @@
|
||||
|
||||
??? note "Запрос"
|
||||
|
||||

|
||||
|
||||
Основной запрос:
|
||||
|
||||
```sql
|
||||
@ -601,7 +609,9 @@
|
||||
|
||||
#### Договоры и доп. соглашения
|
||||
|
||||
??? note "Запрос"
|
||||
??? note "Запрос"
|
||||
|
||||

|
||||
|
||||
Основной запрос:
|
||||
|
||||
@ -1235,4 +1245,103 @@
|
||||
join comdoc."VFilials" f on p."COrg" = f."VCode"
|
||||
where now()::date between coalesce(p."BeginDate",'19700101') and coalesce(p."EndDate",'20700101')
|
||||
;
|
||||
``` -->
|
||||
```
|
||||
|
||||
#### Аналитическая форма по расписанию задач
|
||||
|
||||
??? note "Запрос"
|
||||
|
||||

|
||||
|
||||
Основной запрос:
|
||||
|
||||
```sql
|
||||
INSERT INTO "tmp_calcWithBaseParams_for_documentStatusJournalProc"( "DocCode" )
|
||||
select null;
|
||||
```
|
||||
|
||||
Итоговая выборка:
|
||||
|
||||
```sql
|
||||
insert into "tmp_finresult"( "DocCode" , "DocType" , "DocForm" , "DocTypeName", "DocName", "DocumentDate",
|
||||
"AnyColumnA" , "AnyColumnB" , "AnyColumnC" , "AnyColumnD" , "AnyColumnE",
|
||||
"AnyColumnF", "AnyColumnG", "AnyColumnH", "AnyColumnI", "AnyColumnJ")
|
||||
|
||||
select dd."Id", 'task'::text, 'taskForm'::text, ('Шедулер' || dd."Name")::text, 'Планировщик задач ' ||dd."Name" , dd."CDate"::date,
|
||||
dd."Name" as "AnyColumnA" , dd."Description" as "AnyColumnB" ,
|
||||
dd."Minutes" as "AnyColumnC" , dd."Hours" as "AnyColumnD" , dd."Days" as "AnyColumnE" , dd."Months" as "AnyColumnF" , dd."DaysOfTheWeek" as "AnyColumnG" ,dd. "Note" as "AnyColumnH" ,dd. "TypeTask" as "AnyColumnI"
|
||||
, sum(comdoc."datediff"('minute',j."TimeStart" , j."TimeEnd"))/ count(j."Id") as "AnyColumnJ"
|
||||
from (
|
||||
select t."Id", t."Name", t."Description",
|
||||
sh."Crontab",
|
||||
max(case when s."VCode" = 1 then s."PartString" else '' end) as "Minutes",
|
||||
max(case when s."VCode" = 2 then s."PartString" else '' end) as "Hours",
|
||||
max(case when s."VCode" = 3 then s."PartString" else '' end) as "Days",
|
||||
max(case when s."VCode" = 4 then s."PartString" else '' end) as "Months",
|
||||
max(case when s."VCode" = 5 then s."PartString" else '' end) as "DaysOfTheWeek",
|
||||
'по гринвичу' as "Note", 'Шедулер' as "TypeTask", t."CDate"
|
||||
from lex."Task" t
|
||||
join lex."Schedule" sh on t."Id" = sh."Parent"
|
||||
LEFT JOIN LATERAL comdoc."LexStringToListNew"(replace(sh."Crontab",' ','Ё'),'Ё',0) s on true
|
||||
join (select 1 as "VCode", 'мин.' as "Name"
|
||||
union all
|
||||
select 2 as "VCode", 'часы' as "Name"
|
||||
union all
|
||||
select 3 as "VCode", 'день' as "Name"
|
||||
union all
|
||||
select 4 as "VCode", 'месяц' as "Name"
|
||||
union all
|
||||
select 5 as "VCode", 'дни недели' as "Name"
|
||||
) d on s."VCode" = d."VCode"
|
||||
|
||||
-- inner join lex."StepJournalEntryDetail" s on j."Id" = s."PCode"
|
||||
where coalesce(t."Toggle",false) = true
|
||||
group by t."Id", t."Name", t."Description", sh."Crontab", t."CDate"
|
||||
)dd
|
||||
left join lex."TaskJournalEntry" j on dd."Id" = j."TaskId" and j."TimeStart">= now()::date - '1 month'::interval and j."TimeEnd" is not null
|
||||
--where j."TimeStart">= now()::date - '1 month'::interval and j."TimeEnd" is not null
|
||||
group by dd."Id", dd."Name", dd."Description", dd."Crontab", "Minutes", "Hours", "Days", "Months", "DaysOfTheWeek", "Note", "TypeTask", dd."CDate"
|
||||
|
||||
union all
|
||||
select t."VCode", 'NotificationLexemaDirectory'::text, 'NotificationLexemaDirectoryForm'::text , '', ( 'Задачи планировщика ' ||t."TaskName") ::text, t."CDate"::date,
|
||||
t."TaskName" as "AnyColumnA" , null::text as "AnyColumnB" ,
|
||||
t."Minutes" as "AnyColumnC" , t."Hours" as "AnyColumnD" , t."Days" as "AnyColumnE" , t."Months" as "AnyColumnF" , t."DaysOfTheWeek" as "AnyColumnG" ,'серверное время' as "AnyColumnH" ,'Задачи планировщика' as "AnyColumnI",
|
||||
null::int as "AnyColumnJ"
|
||||
from dfd."NotificationLexemaDirectory" t
|
||||
where coalesce(t."Included",false) = true;
|
||||
```
|
||||
|
||||
#### Логи отправки почты и СМС
|
||||
|
||||
Необходимо дополнительно настроить [задачу планировщика](../Функции%20планировщика%20задач/#перенос_логов_отправки_почты_и_смс_в_таблицу_sendlog)
|
||||
|
||||
??? note "Запрос"
|
||||
|
||||

|
||||
|
||||
Основной запрос:
|
||||
|
||||
```sql
|
||||
INSERT INTO "tmp_calcWithBaseParams_for_documentStatusJournalProc"( "DocCode")
|
||||
select 1 from dfd."OutgoingEmailLog" where 1 = 1
|
||||
limit 1;
|
||||
```
|
||||
|
||||
Итоговая выборка:
|
||||
|
||||
```sql
|
||||
do $myQ$
|
||||
declare _str text;
|
||||
begin
|
||||
_str := '
|
||||
insert into "tmp_finresult"("AnyColumnA", "AnyColumnB", "AnyColumnC", "AnyColumnD", "AnyColumnE", "AnyColumnF", "AnyColumnG", "AnyColumnH", "AnyColumnI", "AnyColumnJ", "AnyColumnK", "AnyColumnL", "AnyColumnM")
|
||||
select p."Level", p."type", p."To", p."Subject", p."Body", p."Cc", p."Bcc", p."phones", p."text", p."errorText",
|
||||
to_char(p."CDateLog",''DD.MM.YYYY hh:mi'') as "CDateLog", p."CUserLog", p."CHostLog"
|
||||
from comdoc."SendLog" p
|
||||
where coalesce( p."CDateLog"::date,'_bdate'::date) between '_bdate'::date and '_edate'::date
|
||||
order by p."CDateLog" desc'
|
||||
_topcount ;
|
||||
execute _str;
|
||||
end;
|
||||
$myQ$;
|
||||
```
|
||||
|
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 131 KiB |
After Width: | Height: | Size: 43 KiB |
@ -15,6 +15,7 @@
|
||||
[Анализ плановых графиков отпусков](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Анализ%20плановых%20графиков%20сотрудников/) | analytvacationplan_read | analytvacationplan_write |
|
||||
[Анализ просроченных документов](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Анализ%20и%20отчетность/#анализ_просроченных_документов) | | dashboardcharts_write |
|
||||
Анкета соискателя (регистрация) | registrationrequest_read | registrationrequest_write |
|
||||
Вид обращения|treatmentofdocument_read| treatmentofdocument_write|
|
||||
[Вид обучения](../Вид обучения/) | stafftrainingkind_read, StaffTraining_Admin | stafftrainingkind_write, StaffTraining_Admin |
|
||||
Виды адресов | rpdictionaries_read | super,administrator_reg_personnel,rpdictionaries_write |
|
||||
Виды воинской обязанности | rpdictionaries_read | super,administrator_reg_personnel,rpdictionaries_write |
|
||||
@ -48,6 +49,7 @@
|
||||
[Группы рассылки](../Группы рассылки/) | readlistgroup_read | docflowAdmin,readlistgroup_admin,readlistgroup_write |
|
||||
Группы учета (запас) | rpdictionaries_read | super,administrator_reg_personnel,rpdictionaries_write |
|
||||
[Действие обученности при смене работодателя](../Действие обученности при смене работодателя/) | activityoftraining_read, StaffTraining_Admin | activityoftraining_write, StaffTraining_Admin |
|
||||
Диадок||responsible_accountant_diadoc| Роль позволяет редактировать поле "Идентификатор ЭДО" в карточке контрагента, в разделе "Настройки интеграции с Диадок"|
|
||||
Доверенности | empowerment_read | empowerment_write | create_origin_pdf_empowerment - роль для формирования финальной части в формат PDF, empovermentvisibleremove, showallnotremovedempowerment - отображение кнопки "Удалить" (перевод в статус "Удаленно") внутри доверенности, **docconstructor_write** - открывает доступ к переходу в конструктор документа по данному типу/подтипу документа, **routetemplate_write** - открывает доступ к переходу в настройки шаблона маршрута по данному документу, **documentsubtype_write** - открывает доступ к переходу в настройки подтипа документа
|
||||
Формирование вложений в доверенностях (PDF, Word)| empowerment_pdf_report, empowerment_word_report | | **empowerment_pdf_report** открывает доступ pdf отчету через печатную форму, файл вкладывается после формирования во вложения документа. **empowerment_word_report** открывает доступ к word отчету через печатную форму, сформированный отчет так же как и pdf вкладывается во вложение документа.
|
||||
[Договоры](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/%D0%94%D0%BE%D0%B3%D0%BE%D0%B2%D0%BE%D1%80/) | contract_read | super,jurist,contract_write | **master_jurist** - позволяет редактировать полный, внутренний, входящий номера в договоре на любом этапе маршрута. **projects_write** предоставляет возможность создания формы «Новый проект» из документа "Договор". Открывает доступ к кнопке «Создать проект». Данная роль предоставляется пользователю, который в системе заполняет справочник проектов. видеть_конфиденциальные_договора позволяет видеть договора с признаком "Конфиденциальность". **contract_editor** - предоставляет возможность редактировать договор в процессе согласования |
|
||||
|
@ -255,244 +255,256 @@ search:
|
||||
|
||||
### Документы, не пришедшие из 1с
|
||||
|
||||
```sql
|
||||
with "no1c"
|
||||
as
|
||||
(select r."COrgName" , 'таб.№ ' || r."NumTab"|| ' ' || r."Workers" as "Workers" ,r."PostWorkers" ,
|
||||
r."name1c" || ' По заявлению № ' || r."DocumentNumber" || ' от ' || to_char( "DocumentDate"::date, 'DD.MM.YYYY') as "name1c"
|
||||
, l."link_txt" || '#/view/'|| r."TypeName" ||'Form' ||'/' || r."VCode" as "link"
|
||||
from odata."getExchange1CGuidsRegistry"(null, null, (now()::date+ '-45 day'::interval)::date , (now()::date+ '-3 day'::interval)::Date , null) r
|
||||
cross join (select "LocationProtocol" || '//' || "LocationHostName" as "link_txt" from comdoc."DocflowSettings") l
|
||||
where
|
||||
coalesce( "DeletionMark",'false') = 'false ' and
|
||||
r."VCode" is not null and
|
||||
r."DFS_VCode" is null and
|
||||
r."guid" is not null and
|
||||
r.name1c not ilike '%больнич%'
|
||||
and
|
||||
r.name1c not ilike '%НДФЛ%'
|
||||
and
|
||||
r.name1c not ilike '%вычет%'
|
||||
and
|
||||
r.name1c not ilike '%мат%пом%'
|
||||
and
|
||||
r. "DocumentDate" >= now()::date+ '-45 day'::interval
|
||||
and
|
||||
r. "DocumentDate" <= now()::date+ '-3 day'::interval
|
||||
)
|
||||
|
||||
insert into "#forInsNotification" ("DocflowUser", "txt", "Link", "DocType", "DocName", "DocSubject", "IdWorker")
|
||||
select distinct 'Personnel' as "DocflowUser" ,
|
||||
--rlU."DocflowUser" ,
|
||||
'Следующие документы не пришли на подписание из 1С : <br/>' ||
|
||||
replace(
|
||||
replace(replace(
|
||||
'<table style = "border-collapse:collapse">
|
||||
<tr>
|
||||
<th style="text-align:center; border-left: 1px solid black; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Организация</th>
|
||||
<th style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Работник</th>
|
||||
<th style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Должность</th>
|
||||
<th style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Документ</th>
|
||||
</tr>'||
|
||||
(SELECT DISTINCT string_agg(x."Body", '')
|
||||
FROM(select '<tr><td style="text-align:center; border-left: 1px solid black; border-right: 1px solid black; border-bottom: 1px solid black">'|| coalesce(p2."COrgName",'')||'</td>
|
||||
<td style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black;">'||coalesce(p2."Workers",'')||'</td>
|
||||
<td style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black;">'||coalesce(p2."PostWorkers",'')||'</td>
|
||||
|
||||
<td style="text-align:center; border-left: 1px solid black; border-right: 1px solid black; border-bottom: 1px solid black">' ||
|
||||
'<a href="' || coalesce(p2."link",'') || '">' ||coalesce(p2."name1c",'')|| '</a>'::text || '</td>
|
||||
|
||||
</tr>' as "Body" from "no1c" p2
|
||||
order by p2."COrgName", p2."Workers" ) x)||'</table>'
|
||||
,'<','<'),'>','>'),
|
||||
'&','&') as txt,
|
||||
null::bigint as "link", 'Первичный документ', 'Первичный документ',
|
||||
'Информационное сообщение о документах, не пришедших из 1С',
|
||||
null::bigint as "IdWorker"
|
||||
from "no1c" dd
|
||||
/*join comdoc."ReadListGroup" rl on rl."Name" = 'Кадровики для рассылки документов, не пришедших из 1С'
|
||||
and rl."DocTypes" ilike '%NotificationLexema%'
|
||||
join comdoc."ReadListGroupUsers" rlU on rl."VCode" = rlU."PCode"*/
|
||||
--group by rlU."DocflowUser"
|
||||
??? Задача
|
||||
|
||||
```
|
||||
```sql
|
||||
with "no1c"
|
||||
as
|
||||
(select r."COrgName" , 'таб.№ ' || r."NumTab"|| ' ' || r."Workers" as "Workers" ,r."PostWorkers" ,
|
||||
r."name1c" || ' По заявлению № ' || r."DocumentNumber" || ' от ' || to_char( "DocumentDate"::date, 'DD.MM.YYYY') as "name1c"
|
||||
, l."link_txt" || '#/view/'|| r."TypeName" ||'Form' ||'/' || r."VCode" as "link"
|
||||
from odata."getExchange1CGuidsRegistry"(null, null, (now()::date+ '-45 day'::interval)::date , (now()::date+ '-3 day'::interval)::Date , null) r
|
||||
cross join (select "LocationProtocol" || '//' || "LocationHostName" as "link_txt" from comdoc."DocflowSettings") l
|
||||
where
|
||||
coalesce( "DeletionMark",'false') = 'false ' and
|
||||
r."VCode" is not null and
|
||||
r."DFS_VCode" is null and
|
||||
r."guid" is not null and
|
||||
r.name1c not ilike '%больнич%'
|
||||
and
|
||||
r.name1c not ilike '%НДФЛ%'
|
||||
and
|
||||
r.name1c not ilike '%вычет%'
|
||||
and
|
||||
r.name1c not ilike '%мат%пом%'
|
||||
and
|
||||
r. "DocumentDate" >= now()::date+ '-45 day'::interval
|
||||
and
|
||||
r. "DocumentDate" <= now()::date+ '-3 day'::interval
|
||||
)
|
||||
|
||||
insert into "#forInsNotification" ("DocflowUser", "txt", "Link", "DocType", "DocName", "DocSubject", "IdWorker")
|
||||
select distinct 'Personnel' as "DocflowUser" ,
|
||||
--rlU."DocflowUser" ,
|
||||
'Следующие документы не пришли на подписание из 1С : <br/>' ||
|
||||
replace(
|
||||
replace(replace(
|
||||
'<table style = "border-collapse:collapse">
|
||||
<tr>
|
||||
<th style="text-align:center; border-left: 1px solid black; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Организация</th>
|
||||
<th style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Работник</th>
|
||||
<th style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Должность</th>
|
||||
<th style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Документ</th>
|
||||
</tr>'||
|
||||
(SELECT DISTINCT string_agg(x."Body", '')
|
||||
FROM(select '<tr><td style="text-align:center; border-left: 1px solid black; border-right: 1px solid black; border-bottom: 1px solid black">'|| coalesce(p2."COrgName",'')||'</td>
|
||||
<td style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black;">'||coalesce(p2."Workers",'')||'</td>
|
||||
<td style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black;">'||coalesce(p2."PostWorkers",'')||'</td>
|
||||
|
||||
<td style="text-align:center; border-left: 1px solid black; border-right: 1px solid black; border-bottom: 1px solid black">' ||
|
||||
'<a href="' || coalesce(p2."link",'') || '">' ||coalesce(p2."name1c",'')|| '</a>'::text || '</td>
|
||||
|
||||
</tr>' as "Body" from "no1c" p2
|
||||
order by p2."COrgName", p2."Workers" ) x)||'</table>'
|
||||
,'<','<'),'>','>'),
|
||||
'&','&') as txt,
|
||||
null::bigint as "link", 'Первичный документ', 'Первичный документ',
|
||||
'Информационное сообщение о документах, не пришедших из 1С',
|
||||
null::bigint as "IdWorker"
|
||||
from "no1c" dd
|
||||
/*join comdoc."ReadListGroup" rl on rl."Name" = 'Кадровики для рассылки документов, не пришедших из 1С'
|
||||
and rl."DocTypes" ilike '%NotificationLexema%'
|
||||
join comdoc."ReadListGroupUsers" rlU on rl."VCode" = rlU."PCode"*/
|
||||
--group by rlU."DocflowUser"
|
||||
```
|
||||
|
||||
### Задача по изменению фамилии в карточке пользователя + склонение в карточке физического лица
|
||||
|
||||
```sql
|
||||
do $$
|
||||
begin
|
||||
IF NOT comdoc."isTableExists"('#fio', 'temp') THEN
|
||||
CREATE TEMP TABLE "#fio"("Id" bigint, "OldFam" text, "OldName" text, "OldOtch" text,
|
||||
"IdPerson" bigint, "NewFam" varchar(255), "NewName" varchar(255), "NewOtch" varchar(255), "UserName" varchar(255), "Code" varchar(2550)
|
||||
) ON COMMIT DROP;
|
||||
END IF;
|
||||
insert into "#fio"
|
||||
select m."Id",m."LastName", m."FirstName", m."MiddleName", per."VCode", per."Family", per."Name", per."Father", m."UserName" , c."Code"
|
||||
from lex."UserMeta" m
|
||||
join rp."RP_PersonContact" c on c."IdTypeContact" = 6 and m."UserName" = c."Code"
|
||||
join rp."RP_Person" per on per."VCode" = c."Pcode"
|
||||
where (lower(coalesce(m."LastName",''))<> lower(coalesce(per."Family",'')) or lower(coalesce(m."FirstName",''))<> lower(coalesce(per."Name",''))
|
||||
or lower(coalesce(m."MiddleName",''))<>lower(coalesce(per."Father",'')))
|
||||
and (select count(a."Pc") from (select distinct c."Pcode" as "Pc" from rp."RP_PersonContact" c
|
||||
join rp."RP_Person" per on per."VCode" = c."Pcode"
|
||||
where c."Code" =m."UserName")a) =1;
|
||||
|
||||
update lex."UserMeta" m set "LastName" = q."NewFam", "FirstName" = q."NewName", "MiddleName" = q."NewOtch"
|
||||
from "#fio" q
|
||||
where q."Id" = m."Id";
|
||||
??? Задача
|
||||
|
||||
update rp."RP_Person" per set "Note" = case when per."Note" is not null then per."Note" ||'
|
||||
' else '' end ||to_char(now(),'DD.MM.YYYY')
|
||||
|| (select ' изменено ФИО с '||coalesce(f."OldFam",'')||' '||coalesce(f."OldName",'')||' '||coalesce(f."OldOtch",'')||' на '
|
||||
||coalesce(f."NewFam",'')||' '||coalesce(f."NewName",'')||' '||coalesce(f."NewOtch",'')from "#fio" f where f."IdPerson" = per."VCode" limit 1),
|
||||
"FNFAccusative" = comdoc."Lexsklon"(per."Family", per."Name", per."Father", case when per."Sex" = 1 then 'Ж' else 'M' end, 1),
|
||||
"FNFDative" = comdoc."Lexsklon"(per."Family", per."Name", per."Father", case when per."Sex" = 1 then 'Ж' else 'M' end, 0),
|
||||
"FNFGenitive" = comdoc."Lexsklon"(per."Family", per."Name", per."Father", case when per."Sex" = 1 then 'Ж' else 'M' end, 2)
|
||||
from "#fio" q
|
||||
where per."VCode" = q."IdPerson";
|
||||
```sql
|
||||
do $$
|
||||
begin
|
||||
IF NOT comdoc."isTableExists"('#fio', 'temp') THEN
|
||||
CREATE TEMP TABLE "#fio"("Id" bigint, "OldFam" text, "OldName" text, "OldOtch" text,
|
||||
"IdPerson" bigint, "NewFam" varchar(255), "NewName" varchar(255), "NewOtch" varchar(255), "UserName" varchar(255), "Code" varchar(2550)
|
||||
) ON COMMIT DROP;
|
||||
END IF;
|
||||
insert into "#fio"
|
||||
select m."Id",m."LastName", m."FirstName", m."MiddleName", per."VCode", per."Family", per."Name", per."Father", m."UserName" , c."Code"
|
||||
from lex."UserMeta" m
|
||||
join rp."RP_PersonContact" c on c."IdTypeContact" = 6 and m."UserName" = c."Code"
|
||||
join rp."RP_Person" per on per."VCode" = c."Pcode"
|
||||
where (lower(coalesce(m."LastName",''))<> lower(coalesce(per."Family",'')) or lower(coalesce(m."FirstName",''))<> lower(coalesce(per."Name",''))
|
||||
or lower(coalesce(m."MiddleName",''))<>lower(coalesce(per."Father",'')))
|
||||
and (select count(a."Pc") from (select distinct c."Pcode" as "Pc" from rp."RP_PersonContact" c
|
||||
join rp."RP_Person" per on per."VCode" = c."Pcode"
|
||||
where c."Code" =m."UserName")a) =1;
|
||||
|
||||
update lex."UserMeta" m set "LastName" = q."NewFam", "FirstName" = q."NewName", "MiddleName" = q."NewOtch"
|
||||
from "#fio" q
|
||||
where q."Id" = m."Id";
|
||||
|
||||
update rp."RP_Person" per set "Note" = case when per."Note" is not null then per."Note" ||'
|
||||
' else '' end ||to_char(now(),'DD.MM.YYYY')
|
||||
|| (select ' изменено ФИО с '||coalesce(f."OldFam",'')||' '||coalesce(f."OldName",'')||' '||coalesce(f."OldOtch",'')||' на '
|
||||
||coalesce(f."NewFam",'')||' '||coalesce(f."NewName",'')||' '||coalesce(f."NewOtch",'')from "#fio" f where f."IdPerson" = per."VCode" limit 1),
|
||||
"FNFAccusative" = comdoc."Lexsklon"(per."Family", per."Name", per."Father", case when per."Sex" = 1 then 'Ж' else 'M' end, 1),
|
||||
"FNFDative" = comdoc."Lexsklon"(per."Family", per."Name", per."Father", case when per."Sex" = 1 then 'Ж' else 'M' end, 0),
|
||||
"FNFGenitive" = comdoc."Lexsklon"(per."Family", per."Name", per."Father", case when per."Sex" = 1 then 'Ж' else 'M' end, 2)
|
||||
from "#fio" q
|
||||
where per."VCode" = q."IdPerson";
|
||||
|
||||
|
||||
end;
|
||||
$$;
|
||||
```
|
||||
end;
|
||||
$$;
|
||||
```
|
||||
|
||||
### Оповещение о необходимости замены паспорта
|
||||
|
||||
```sql
|
||||
insert into "#forInsNotification" ("DocflowUser", "txt", "Link", "DocType", "DocName", "DocSubject", "IdWorker")
|
||||
select distinct pc."Code" , '<font size="3"> <b>Настоящим сообщаем, что приближается срок замены паспорта </b> <br/>' || '</font>' ,
|
||||
null::bigint as "link", '', '',
|
||||
'Инф. сообщение о замене паспорта',
|
||||
w."VCode" as "IdWorker"
|
||||
from rp."RP_Person" p
|
||||
join rp."RP_Worker" w on p."VCode" = w."IdPerson"
|
||||
left join rp."RP_WorkerMove" wm on w."VCode" = wm."IdWorker" and now() between coalesce(wm."DateBeg", '20010101') and coalesce(wm."DateEnd", '20700101')
|
||||
left join comdoc."Department" dep on wm."IdDepartment" = dep."VCode"
|
||||
left join rp."RP_Post" post on wm."IdPost" = post."VCode"
|
||||
left join rp."RP_PersonContact" pc on p."VCode" = pc."Pcode" and pc."IdTypeContact" = 6
|
||||
LEFT JOIN LATERAL comdoc."getAccountingConstantValues"(w."COrg", 'СЭД_Уведомления_Сообщения_о_замене_паспорта', NULL) cv on true
|
||||
where (
|
||||
now() between p."DateBirth" - (coalesce(cv."valueConst",30) || ' day')::interval + (date_part('year',age(p."DateBirth"))+1 || 'year')::interval and
|
||||
p."DateBirth" + (date_part('year',age(p."DateBirth"))+1 || 'year')::interval and
|
||||
date_part('year',age(p."DateBirth" - (coalesce(cv."valueConst",30) || ' day')::interval ))::int in (20,45)
|
||||
) or w."VCode" = 53
|
||||
```
|
||||
??? Задача
|
||||
|
||||
```sql
|
||||
insert into "#forInsNotification" ("DocflowUser", "txt", "Link", "DocType", "DocName", "DocSubject", "IdWorker")
|
||||
select distinct pc."Code" , '<font size="3"> <b>Настоящим сообщаем, что приближается срок замены паспорта </b> <br/>' || '</font>' ,
|
||||
null::bigint as "link", '', '',
|
||||
'Инф. сообщение о замене паспорта',
|
||||
w."VCode" as "IdWorker"
|
||||
from rp."RP_Person" p
|
||||
join rp."RP_Worker" w on p."VCode" = w."IdPerson"
|
||||
left join rp."RP_WorkerMove" wm on w."VCode" = wm."IdWorker" and now() between coalesce(wm."DateBeg", '20010101') and coalesce(wm."DateEnd", '20700101')
|
||||
left join comdoc."Department" dep on wm."IdDepartment" = dep."VCode"
|
||||
left join rp."RP_Post" post on wm."IdPost" = post."VCode"
|
||||
left join rp."RP_PersonContact" pc on p."VCode" = pc."Pcode" and pc."IdTypeContact" = 6
|
||||
LEFT JOIN LATERAL comdoc."getAccountingConstantValues"(w."COrg", 'СЭД_Уведомления_Сообщения_о_замене_паспорта', NULL) cv on true
|
||||
where (
|
||||
now() between p."DateBirth" - (coalesce(cv."valueConst",30) || ' day')::interval + (date_part('year',age(p."DateBirth"))+1 || 'year')::interval and
|
||||
p."DateBirth" + (date_part('year',age(p."DateBirth"))+1 || 'year')::interval and
|
||||
date_part('year',age(p."DateBirth" - (coalesce(cv."valueConst",30) || ' day')::interval ))::int in (20,45)
|
||||
) or w."VCode" = 53
|
||||
```
|
||||
|
||||
### Оповещение о списке работников, которые не создали заявление об отпуске из уведомления
|
||||
|
||||
```sql
|
||||
with list as (
|
||||
select ud."VCode", ud."IdWorker", atr."Value" as "Vacation", to_char(atrD."DateValue",'DD.MM.YYYY') as "DateBeg" , f."Name" as "COrgName"
|
||||
from dfd."UniversalDocument" AS ud
|
||||
join dfd."DocumentConstructor" dc on ud."DocumentCategory" = dc."VCode"
|
||||
join dfd."DocumentSubtype" ds on dc."DocumentSubtype" = ds."VCode"
|
||||
join dfd."DocumentAdditionalAttribute" atr on ud."VCode" = atr."PCode"
|
||||
join dfd."DocumentCategoryAttributeType" atrtype on atr."CategoryAttributeType" = atrtype."VCode" and ud."DocumentCategory" = atrtype."PCode" and
|
||||
atrtype."AttributeType" = 'string' and atrtype."ColumnName" = '#typeVacation#'
|
||||
join dfd."DocumentAdditionalAttribute" atrD on ud."VCode" = atrD."PCode"
|
||||
join dfd."DocumentCategoryAttributeType" atrtypeD on atrD."CategoryAttributeType" = atrtypeD."VCode" and ud."DocumentCategory" = atrtypeD."PCode" and
|
||||
atrtypeD."AttributeType" = 'Date' and atrtypeD."ColumnName" = '#bdate#'
|
||||
join comdoc."VFilials" f on ud."COrg" = f."VCode"
|
||||
where ud."TypeName" = 'NotificationLexema' and
|
||||
ds."InternalName" = 'NotificationVacation' and
|
||||
not exists (select 1
|
||||
from dfd."UniversalDocument" es
|
||||
join comdoc."DocflowLink" dle on ud."VCode" = dle."DocCode2" and
|
||||
((dle."DocType2" = ud."TypeName" and ud."VCode" = dle."DocCode2") or
|
||||
(dle."DocType1" = ud."TypeName" and ud."VCode" = dle."DocCode1")
|
||||
)
|
||||
where es."TypeName" = 'EmployeeStatement' ) and
|
||||
atrD."DateValue" > now()::date )
|
||||
??? Задача
|
||||
|
||||
insert into "#forInsNotification" ( "txt", "txtSMS", "txtTelegram")
|
||||
select null as "txt", null as "txtSMS", null as "txtTelegram"
|
||||
from (select ('<table><tr><th align="left">Организация</th><th align="left">Сотрудник</th><th align="left">Отпуск</th></tr>' ||
|
||||
(SELECT DISTINCT string_agg(x."link", '')
|
||||
FROM ( SELECT '<tr><td>' || coalesce(l."COrgName",'') || '</td><td>' || coalesce(r."NameFull",'') || '</td>' ||
|
||||
'<td>' || coalesce(l."Vacation", '') || ' ' || l."DateBeg" || '</td>'
|
||||
||'</tr>' as "link"
|
||||
FROM list l
|
||||
join rp."RP_Worker" r on l."IdWorker" = r."VCode") AS x) || '</table>'
|
||||
) ::text as "data") d
|
||||
```
|
||||
```sql
|
||||
with list as (
|
||||
select ud."VCode", ud."IdWorker", atr."Value" as "Vacation", to_char(atrD."DateValue",'DD.MM.YYYY') as "DateBeg" , f."Name" as "COrgName"
|
||||
from dfd."UniversalDocument" AS ud
|
||||
join dfd."DocumentConstructor" dc on ud."DocumentCategory" = dc."VCode"
|
||||
join dfd."DocumentSubtype" ds on dc."DocumentSubtype" = ds."VCode"
|
||||
join dfd."DocumentAdditionalAttribute" atr on ud."VCode" = atr."PCode"
|
||||
join dfd."DocumentCategoryAttributeType" atrtype on atr."CategoryAttributeType" = atrtype."VCode" and ud."DocumentCategory" = atrtype."PCode" and
|
||||
atrtype."AttributeType" = 'string' and atrtype."ColumnName" = '#typeVacation#'
|
||||
join dfd."DocumentAdditionalAttribute" atrD on ud."VCode" = atrD."PCode"
|
||||
join dfd."DocumentCategoryAttributeType" atrtypeD on atrD."CategoryAttributeType" = atrtypeD."VCode" and ud."DocumentCategory" = atrtypeD."PCode" and
|
||||
atrtypeD."AttributeType" = 'Date' and atrtypeD."ColumnName" = '#bdate#'
|
||||
join comdoc."VFilials" f on ud."COrg" = f."VCode"
|
||||
where ud."TypeName" = 'NotificationLexema' and
|
||||
ds."InternalName" = 'NotificationVacation' and
|
||||
not exists (select 1
|
||||
from dfd."UniversalDocument" es
|
||||
join comdoc."DocflowLink" dle on ud."VCode" = dle."DocCode2" and
|
||||
((dle."DocType2" = ud."TypeName" and ud."VCode" = dle."DocCode2") or
|
||||
(dle."DocType1" = ud."TypeName" and ud."VCode" = dle."DocCode1")
|
||||
)
|
||||
where es."TypeName" = 'EmployeeStatement' ) and
|
||||
atrD."DateValue" > now()::date )
|
||||
|
||||
таблица.столбец | описание | # для шаблона
|
||||
----------------|----------|--------------
|
||||
d."data" | Список | #query_list#
|
||||
insert into "#forInsNotification" ( "txt", "txtSMS", "txtTelegram")
|
||||
select null as "txt", null as "txtSMS", null as "txtTelegram"
|
||||
from (select ('<table><tr><th align="left">Организация</th><th align="left">Сотрудник</th><th align="left">Отпуск</th></tr>' ||
|
||||
(SELECT DISTINCT string_agg(x."link", '')
|
||||
FROM ( SELECT '<tr><td>' || coalesce(l."COrgName",'') || '</td><td>' || coalesce(r."NameFull",'') || '</td>' ||
|
||||
'<td>' || coalesce(l."Vacation", '') || ' ' || l."DateBeg" || '</td>'
|
||||
||'</tr>' as "link"
|
||||
FROM list l
|
||||
join rp."RP_Worker" r on l."IdWorker" = r."VCode") AS x) || '</table>'
|
||||
) ::text as "data") d
|
||||
```
|
||||
|
||||
таблица.столбец | описание | # для шаблона
|
||||
----------------|----------|--------------
|
||||
d."data" | Список | #query_list#
|
||||
|
||||
### Отсутствие планового графика отпусков по подразделению
|
||||
|
||||
```sql
|
||||
with "chiefStruct" as
|
||||
(select * from vac."SendingLateApplicationNotice"())
|
||||
insert into "#forInsNotification" ("DocflowUser","CopyTo", "txt")
|
||||
select /*main."ChiefLogin"*/ 'Loginovasa@lexema.ru', (select DISTINCT string_agg(coalesce(ch."ChiefLogin",''),', ') from "chiefStruct" ch
|
||||
where ch."IdWorker" = main."Chief" and main."ChiefLogin"<>coalesce(ch."ChiefLogin",'')),
|
||||
'Добрый день, ' || '<b>'||RTRIM(coalesce(du."FirstName",'') || ' ' || coalesce(du."MiddleName",''))||'</b>' ||
|
||||
'. <br><br>' ||
|
||||
'<br> По следующим сотрудникам не сформированы заявки на отпуск на '||main."planYear"::text||' год:'||
|
||||
'<br><br>' ||
|
||||
replace(
|
||||
replace(replace(
|
||||
'<table style = "border-collapse:collapse">
|
||||
<tr>
|
||||
<th style="text-align:center; border-left: 1px solid black; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Организация</th>
|
||||
<th style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Подразделение</th>
|
||||
<th style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Работник</th>
|
||||
<th style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Должность</th>
|
||||
</tr>'||
|
||||
(SELECT DISTINCT string_agg(x."link", '')
|
||||
FROM(select '<tr><td style="text-align:center; border-left: 1px solid black; border-right: 1px solid black; border-bottom: 1px solid black">'||fil||'</td>
|
||||
<td style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black">'||dep||'</td>
|
||||
<td style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black;">'||fio||'</td>
|
||||
<td style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black;">'||post||'</td>
|
||||
</tr>' as "link" from (select distinct f."Name" as fil, coalesce(dep."Name",'') as "dep", coalesce(w."NameShort",w."NameFull",'') as fio , coalesce(rp."Name",'') as post
|
||||
from "chiefStruct" p2
|
||||
left join rp."RP_Worker" w on w."VCode" = p2."IdWorker"
|
||||
left join comdoc."Department" dep on dep."VCode" = p2."IdDepartment"
|
||||
left join rp."RP_Post" rp on rp."VCode" = p2."IdPost"
|
||||
left join comdoc."VFilials" f on w."COrg" = f."VCode"
|
||||
where coalesce(p2."ChiefLogin",'') = coalesce(main."ChiefLogin",'')) qw
|
||||
order by fil, "dep", fio ) as x)||'</table>'
|
||||
,'<','<'),'>','>'),
|
||||
'&','&') as "Body"
|
||||
from "chiefStruct" main
|
||||
inner join comdoc."DocflowUser" du on main."ChiefLogin" = du."UserName"
|
||||
group by main."Chief", coalesce(du."FirstName",''), coalesce(du."MiddleName",''), main."ChiefLogin", main."planYear";
|
||||
```
|
||||
### Смена организации по умолчанию при смене основного места работы
|
||||
??? Задача
|
||||
|
||||
```sql
|
||||
with "chiefStruct" as
|
||||
(select * from vac."SendingLateApplicationNotice"())
|
||||
insert into "#forInsNotification" ("DocflowUser","CopyTo", "txt")
|
||||
select /*main."ChiefLogin"*/ 'Loginovasa@lexema.ru', (select DISTINCT string_agg(coalesce(ch."ChiefLogin",''),', ') from "chiefStruct" ch
|
||||
where ch."IdWorker" = main."Chief" and main."ChiefLogin"<>coalesce(ch."ChiefLogin",'')),
|
||||
'Добрый день, ' || '<b>'||RTRIM(coalesce(du."FirstName",'') || ' ' || coalesce(du."MiddleName",''))||'</b>' ||
|
||||
'. <br><br>' ||
|
||||
'<br> По следующим сотрудникам не сформированы заявки на отпуск на '||main."planYear"::text||' год:'||
|
||||
'<br><br>' ||
|
||||
replace(
|
||||
replace(replace(
|
||||
'<table style = "border-collapse:collapse">
|
||||
<tr>
|
||||
<th style="text-align:center; border-left: 1px solid black; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Организация</th>
|
||||
<th style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Подразделение</th>
|
||||
<th style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Работник</th>
|
||||
<th style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black; border-top: 1px solid black">Должность</th>
|
||||
</tr>'||
|
||||
(SELECT DISTINCT string_agg(x."link", '')
|
||||
FROM(select '<tr><td style="text-align:center; border-left: 1px solid black; border-right: 1px solid black; border-bottom: 1px solid black">'||fil||'</td>
|
||||
<td style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black">'||dep||'</td>
|
||||
<td style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black;">'||fio||'</td>
|
||||
<td style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black;">'||post||'</td>
|
||||
</tr>' as "link" from (select distinct f."Name" as fil, coalesce(dep."Name",'') as "dep", coalesce(w."NameShort",w."NameFull",'') as fio , coalesce(rp."Name",'') as post
|
||||
from "chiefStruct" p2
|
||||
left join rp."RP_Worker" w on w."VCode" = p2."IdWorker"
|
||||
left join comdoc."Department" dep on dep."VCode" = p2."IdDepartment"
|
||||
left join rp."RP_Post" rp on rp."VCode" = p2."IdPost"
|
||||
left join comdoc."VFilials" f on w."COrg" = f."VCode"
|
||||
where coalesce(p2."ChiefLogin",'') = coalesce(main."ChiefLogin",'')) qw
|
||||
order by fil, "dep", fio ) as x)||'</table>'
|
||||
,'<','<'),'>','>'),
|
||||
'&','&') as "Body"
|
||||
from "chiefStruct" main
|
||||
inner join comdoc."DocflowUser" du on main."ChiefLogin" = du."UserName"
|
||||
group by main."Chief", coalesce(du."FirstName",''), coalesce(du."MiddleName",''), main."ChiefLogin", main."planYear";
|
||||
```
|
||||
|
||||
```sql
|
||||
call dfd."updateUsersDefaultOrganization" (null, 'Admin;EVIvaschenko')
|
||||
|
||||
/* 1 - коды исключен физ лиц через ;
|
||||
2 - логины исключения через ; */
|
||||
```
|
||||
|
||||
### Создание отзывов доверенностей МЧД по уволенным
|
||||
|
||||
```sql
|
||||
with res as (select * ,
|
||||
'<tr>
|
||||
<td style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black;">'||
|
||||
'<a href="' ||
|
||||
(select "LocationProtocol" || '//' || "LocationHostName" || coalesce(':'||"LocationPort",'') from comdoc."DocflowSettings" order by "CDate" desc limit 1)
|
||||
|| '/#/view/' || se."DocForm" || '/' || r."VCode"::text
|
||||
|| '">' || case when r."TypeName" = 'EmpowermentRevocation' then 'Отзыв доверенности' else 'Доверенность' end || ' № ' ||coalesce(r."DocumentNumber",'') || ' от ' || to_char(r."DocumentDate",'DD.MM.YYYY')
|
||||
|| '</a>'::text ||'</td> </tr>' as "ref_link"
|
||||
from dfd."createEmpowermentRevocationUvol" () r
|
||||
join comdoc."DocflowDocumentSettings" se on r."TypeName" = se."DocType"
|
||||
)
|
||||
??? Задача
|
||||
```sql
|
||||
with res as (select * ,
|
||||
'<tr>
|
||||
<td style="text-align:center; border-right: 1px solid black; border-bottom: 1px solid black;">'||
|
||||
'<a href="' ||
|
||||
(select "LocationProtocol" || '//' || "LocationHostName" || coalesce(':'||"LocationPort",'') from comdoc."DocflowSettings" order by "CDate" desc limit 1)
|
||||
|| '/#/view/' || se."DocForm" || '/' || r."VCode"::text
|
||||
|| '">' || case when r."TypeName" = 'EmpowermentRevocation' then 'Отзыв доверенности' else 'Доверенность' end || ' № ' ||coalesce(r."DocumentNumber",'') || ' от ' || to_char(r."DocumentDate",'DD.MM.YYYY')
|
||||
|| '</a>'::text ||'</td> </tr>' as "ref_link"
|
||||
from dfd."createEmpowermentRevocationUvol" () r
|
||||
join comdoc."DocflowDocumentSettings" se on r."TypeName" = se."DocType"
|
||||
)
|
||||
|
||||
insert into "#forInsNotification" ("DocflowUser", "txt")
|
||||
select d."DocflowUser", null as "txt"
|
||||
from (select distinct r."DocflowUser", (select string_agg(coalesce(r1."ref_link",''),'')
|
||||
from res r1 where r."DocflowUser" = r1."DocflowUser") as list
|
||||
from res r
|
||||
) d
|
||||
```
|
||||
insert into "#forInsNotification" ("DocflowUser", "txt")
|
||||
select d."DocflowUser", null as "txt"
|
||||
from (select distinct r."DocflowUser", (select string_agg(coalesce(r1."ref_link",''),'')
|
||||
from res r1 where r."DocflowUser" = r1."DocflowUser") as list
|
||||
from res r
|
||||
) d
|
||||
```
|
||||
|
||||
таблица.столбец | описание | # для шаблона
|
||||
----------------|----------|--------------
|
||||
d.list | Список документов | #query_list#
|
||||
таблица.столбец | описание | # для шаблона
|
||||
----------------|----------|--------------
|
||||
d.list | Список документов | #query_list#
|
||||
|
||||
### Перенос логов отправки почты и СМС в таблицу SendLog
|
||||
|
||||
??? Задача
|
||||
|
||||
```sql
|
||||
call comdoc."PostToSendLog"();
|
||||
```
|