ред конструктор доков

This commit is contained in:
mirzakaev_tf 2023-07-25 15:31:29 +05:00
parent a04a13c7c4
commit c54d4f696b
11 changed files with 145 additions and 23 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 308 KiB

After

Width:  |  Height:  |  Size: 298 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 307 KiB

After

Width:  |  Height:  |  Size: 298 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -2,9 +2,9 @@
## Общее описание назначения документа
Документ "Конструктор документов" предназначен для создания шаблонов документов следующих **типов документа**: Заявление от сотрудника, Локально-нормативный документ (ЛНД), Универсальный документ и Документ на подписание, Доверенности.
Документ "Конструктор документов" предназначен для создания шаблонов документов следующих **типов документа**: Заявление от сотрудника, Локально-нормативный акт (ЛНА), Универсальный документ и Документ на подписание, Доверенности.
С помощью конструктора документов можно создавать подтипы документов с определенной структурой, которые можно будет использовать в заявлениях от сотрудников, ЛНД, универсальных документах или документах на подписание. При создании документов по этим шаблонам от пользователя потребуется лишь заполнять соответствующие поля.
С помощью конструктора документов можно создавать подтипы документов с определенной структурой, которые можно будет использовать в заявлениях от сотрудников, ЛНА, универсальных документах или документах на подписание. При создании документов по этим шаблонам от пользователя потребуется лишь заполнять соответствующие поля.
В настройках пользователя в таблице "Настройка прав по подразделениям и подтипам документов" можно выбрать подтипы документов, к которым у пользователя будет доступ. Это позволяет разграничить права пользователя не только по подразделениям и типа документов, но и по подтипам документов. Более подробно про настройку пользователей можно прочесть в разделе [Настройка пользователей](../Настройка пользователей/Настройка пользователей.md).
@ -87,7 +87,7 @@
![Вложенное заявление](media/statement.png)
**Если опция включена**, то автоматическая генерация pdf- файла не происходит. В некоторых бизнес-процессах данная опция будет лишней - например, в Локально-нормативных документах, где оригиналы документов поставляются из репозитория организации.
**Если опция включена**, то автоматическая генерация pdf- файла не происходит. В некоторых бизнес-процессах данная опция будет лишней - например, в Локально-нормативных актах, где оригиналы документов поставляются из репозитория организации.
**Номер п/п** - с помощью данного поля можно упорядочить подтипы в рамках одного типа документа в выпадающем списке. Например, заявления на разные вида отпуска
@ -187,7 +187,11 @@
- **"Наименование"** необходимо заполнить наименованием дополнительного атрибута (строковое поле), исходя из которого пользователю должно быть понятно, какое значение должен принимать атрибут. Например: "Год", "Способ получения справки" и пр. Является обязательным для заполнения.
- **"Тип атрибута"** необходимо заполнить информацией из выпадающего справочника, выбрав тип атрибута. Например, типы атрибута могут быть датой (Date), целым числом (bigint), строкой (string), логическим выражением (bool) и т.д. Также можно подключать сложные справочники, такие как сотрудники ("Работник"), контрагенты ("Контрагент") и т.д. Например, если в качестве типа атрибута было выбрано "Подразделение", то в качестве списка возможных значений атрибута будет использована одна из колонок справочника подразделений, колонка задаётся полем "Наименование в выпадающем списке". Атрибут "Дата и время" может использоваться для типов документов когда важно отразить дату и время, например в заявке на подачу автотранспорта. С помощью атрибута "Время" в документе отображается только время без даты. **"Тип атрибута"** является обязательным для заполнения.
При выборе типа атрибута - **Табличная часть** под блоком **"Дополнительные атрибуты"** появляется дополнительный блок для настройки табличной части в документе. Для использования в документе, в блоке **"Дополнительные атрибуты"** для данного типа атрибуа необходимо указать **служебное наименование**, которое заполняется в столбце **Служебное наименование таблицы**. В столбце **"Маска для ввода, кол-во знаков после запятой"** позволяет установить строгий формат ввода данных пользователем и представлять из себя строку состоящую из обычных и специальных символов. Количество знаков после запятой используется для атрибута **double**. Ширина колонки задается в пикселях. При проставлении галочки в столбце **"Суммовое поле"** все столбцы с атрибутом **"Целое"** будут суммироваться в конце таблицы.
При выборе типа атрибута - **Табличная часть** под блоком **"Дополнительные атрибуты"** появляется дополнительный блок для настройки табличной части в документе. Для использования в документе, в блоке **"Дополнительные атрибуты"** для данного типа атрибута необходимо указать **служебное наименование**, которое заполняется после этого в столбце **Служебное наименование таблицы**.
![Таблица](media/table.png)
В столбце **"Маска для ввода, кол-во знаков после запятой"** позволяет установить строгий формат ввода данных пользователем и представлять из себя строку состоящую из обычных и специальных символов. Маска для ввода используется для атрибута **"Строка"**. Количество знаков после запятой используется для атрибута **double**. Ширина колонки задается в пикселях. При проставлении галочки в столбце **"Суммовое поле"** все столбцы с атрибутом **"Целое"** будут суммироваться в конце таблицы.
- **"Служебное наименование"** наименование, вставляемое в текст шаблона для автозамены в тексте. Обязательная форма написания включает две "#": слева и справа от наименования, наименование прописывается на английском языке, например, #Name#. Именно эти значения будут заменены в тексте шаблона на введенные пользователем значения атрибута после нажатия на кнопку "Заполнить шаблон". Является обязательным для заполнения.
- **"Требовать заполнение"** обязательность заполнения атрибута. Если в этом поле стоит галочка, документ не получится сохранить и отправить по маршруту, пока соответствующий атрибут не будет заполнен.
@ -213,6 +217,9 @@
- **"Маска для ввода"** - позволяет установить строгий формат ввода данных пользователем и представлять из себя строку состоящую из обычных и специальных символов. При вводе обычные символы пользователь не может их удалить или заменить, специальные символы задают ограничения на вводимые данные.
!!! note
Маска для ввода используется для атрибута **"Строка"**
Использование маски:
* `# - ввод цифр`
@ -453,7 +460,7 @@ if @formName='EmployeeStatementForm' AND ( @ColumnName = '#bDate#' OR @ColumnNam
Для настройки индивидуальных проверок необходимо обратиться в техническую поддержку.
## Вкладка "Тиражирование"
## Вкладка "Тиражирование/Оповещения"
**Тиражировать заявление для совместителей** - включает автоматическое тиражирование заявления по всем организациям, в которых работает совместитель.
@ -461,7 +468,7 @@ if @formName='EmployeeStatementForm' AND ( @ColumnName = '#bDate#' OR @ColumnNam
**Разрешить тиражирование уволенным по всем местам работы** и **Атрибут Год** - включает автоматическое тиражирование заявления на те филиалы, в которых сотрудник работал в указанный год, но в данный момент уволен.
### Предупреждение при тиражировании
### Предупреждение при тиражировании/Оповещение
Если сотрудник трудоустроен на нескольких организациях холдинга и/или принят также внутренним совместителем на одной из организаций, то при оформлении заявления на отпуск, он должен согласовать заявление по каждому месту работы. Для этого реализована возможность тиражирования данного документа во все организации, и все должности внутри одной организации. По завершению согласования заявления на основном месте работе, оно будет растиражировано по каждому месту работы. В данном блоке можно можно указать данную информацию для совместителя, что ему не нужно будет создавать на каждом месте работы нужное заявление. Информация будет отображаться при заполнении заявления на основном месте работы.
@ -603,7 +610,7 @@ if @formName='EmployeeStatementForm' AND ( @ColumnName = '#bDate#' OR @ColumnNam
![Операции](media/operacii.png)
## Вкладка "Вычисления"
## Вкладка "Настройка проверок"
Данная вкладка предназначена для определения зависимостей атрибутов между собой.
@ -625,7 +632,7 @@ if @formName='EmployeeStatementForm' AND ( @ColumnName = '#bDate#' OR @ColumnNam
### Дополнительные проверки
При необходимости возможно настроить дополнительные проверки для атрибутов. В данном примере представлен конструктор подтипа "Заявление на перенос ежегодного оплачиваемого отпуска". В блоке "Дополнительные атрибуты" указаны атрибуты по датам переноса и количеству дней переноса. В столбце **"Колонка для выделения"** перечисляются атрибуты (если их несколько то через запятую), на которые необходимо задать проверки. В столбце **"Сообщение"** задается информационное сообщение, которое выводится в случае незаполнения либо некорректных данных. В столбце **"Правило для проверки"** указывается условие по которому вычисляется проверка по зависимым атрибутам.
При необходимости возможно настроить дополнительные проверки для атрибутов. В данном примере представлен конструктор подтипа "Заявление на перенос ежегодного оплачиваемого отпуска". В блоке "**Дополнительные атрибуты"** указаны атрибуты по датам переноса и количеству дней переноса. При необходимости возможно отключить какие-то проверки по отдельности, для этого необходимо выбрать необходимую проверку и в столбце **"Вкл."** проставить галочку. В столбце **"Колонка для выделения"** перечисляются атрибуты (если их несколько то через запятую), на которые необходимо задать проверки. В столбце **"Сообщение"** задается информационное сообщение, которое выводится в случае незаполнения либо некорректных данных. В столбце **"Правило для проверки"** указывается условие по которому вычисляется проверка по зависимым атрибутам.
![Дополнительные проверки](media/dopProverki.png)
@ -636,20 +643,135 @@ if @formName='EmployeeStatementForm' AND ( @ColumnName = '#bDate#' OR @ColumnNam
**Ниже представлены примеры проверок для расчета количества дней:**
Колонка для выделения | Сообщение | Правило для проверки
----------------------|-----------|---------------------
#bdate_new1#,#bdate_new2# | Заявление подается минимум за 3 дня до даты отпуска. Скорректируйте #bdate_new1_name# #bdate_new1# | #bdate_new1#::date < now()::date+ interval '1 day'*3
#kolvo_new1# | Количество переносов (часть 1) больше чем в основном отпуске | #kolvo#< coalesce(#kolvo_new1#,0)
#kolvo_new2# | Количество переносов (часть 1 + часть2) больше чем в основном отпуске | #kolvo#< coalesce(#kolvo_new1#,0)+coalesce(#kolvo_new2#,0) and coalesce(#kolvo_new2#,0)<>0
#bdate_new1# | Дата начала нового отпуска должна быть позже текущей даты | #bdate_new1#::date <= now()::date
#bdate_new2# | Дата начала нового отпуска должна быть позже текущей даты | coalesce(#bdate_new2#,'19700101')<>'19700101' and #bdate_new2#::date <= now()::date
#bdate_new2# | Заявление подается минимум за 3 дня до даты отпуска | coalesce(#bdate_new2#,'19700101')<>'19700101' and #bdate_new2#::date < now()::date+ interval '1 day'*3
#bdate_new2# | Пересечение отпусков, скорректируйте период | coalesce(#bdate_new2#,'19700101')<>'19700101' and #bdate_new2# between #bdate_new1# and #edate_new1#
#bdate_new1# | Пересечение отпусков, скорректируйте период | coalesce(#bdate_new1#,'19700101')<>'19700101' and #bdate_new1# between #bdate_new2# and #edate_new2#
#edate_new1# | Пересечение отпусков, скорректируйте период | coalesce(#edate_new1#,'19700101')<>'19700101' and #edate_new1# between #bdate_new2# and #edate_new2#
#edate_new2# | Пересечение отпусков, скорректируйте период | coalesce(#edate_new2#,'19700101')<>'19700101' and #edate_new2# between #bdate_new1# and #edate_new1#
#kolvo_new2# | Количество переносов (часть 1 + часть 2) меньше чем в основном отпуске | #kolvo#> coalesce(#kolvo_new1#,0)+coalesce(#kolvo_new2#,0) and coalesce(#kolvo_new2#,0)<>0
#kolvo_new1# | Количество переносов (часть 1) меньше чем в основном отпуске | #kolvo#> coalesce(#kolvo_new1#,0) and coalesce(#kolvo_new2#,0) = 0
<!DOCTYPE html>
<html>
<head>
<title>Правила для проверки</title>
</head>
<body>
<table border="1">
<tr>
<th>Колонка для выделения</th>
<th>Сообщение</th>
<th>Правило для проверки</th>
</tr>
<tr>
<td>#bdate_new1#</td>
<td>Дата начала нового отпуска должна быть позже текущей даты</td>
<td>#bdate_new1#::date <= now()::date</td>
</tr>
<tr>
<td>#bdate_new2#</td>
<td>Дата начала нового отпуска должна быть позже текущей даты</td>
<td>coalesce(#bdate_new2#,'19700101')<>'19700101' and #bdate_new2#::date <= now()::date</td>
</tr>
<tr>
<td>#bdate_new2#</td>
<td>Дата начала отпуска в следующем году. Скорректируйте #bdate_new1_name# #bdate_new1#</td>
<td>#year#::integer < date_part('year'::text,#bdate_new2#::date)::integer</td>
</tr>
<tr>
<td>#bdate_new1#</td>
<td>Дата начала отпуска в следующем году. Скорректируйте #bdate_new1_name# #bdate_new1#</td>
<td>#year#::integer < date_part('year'::text,#bdate_new1#::date)::integer</td>
</tr>
<tr>
<td>#bdate_new2#</td>
<td>Заявление подается минимум за 3 дня до даты отпуска</td>
<td>coalesce(#bdate_new2#,'19700101')<>'19700101' and #bdate_new2#::date < now()::date + interval '1 day' * 3</td>
</tr>
<tr>
<td>#bdate_new1#,#bdate_new2#</td>
<td>Заявление подается минимум за 3 дня до даты отпуска. Скорректируйте #bdate_new1_name# #bdate_new1#</td>
<td>#bdate_new1#::date < now()::date + interval '1 day' * 21</td>
</tr>
<tr>
<td>#kolvo_new2#</td>
<td>Количество переносов (часть 1 + часть 2) меньше чем в основном отпуске</td>
<td>#kolvo# > coalesce(#kolvo_new1#,0) + coalesce(#kolvo_new2#,0) and coalesce(#kolvo_new2#,0) <> 0</td>
</tr>
<tr>
<td>#kolvo_new2#</td>
<td>Количество переносов (часть 1 + часть2) больше чем в основном отпуске</td>
<td>#kolvo# < coalesce(#kolvo_new1#,0) + coalesce(#kolvo_new2#,0) and coalesce(#kolvo_new2#,0) <> 0</td>
</tr>
<tr>
<td>#kolvo_new1#</td>
<td>Количество переносов (часть 1) больше чем в основном отпуске</td>
<td>#kolvo# < coalesce(#kolvo_new1#,0)</td>
</tr>
<tr>
<td>#kolvo_new1#</td>
<td>Количество переносов (часть 1) меньше чем в основном отпуске</td>
<td>#kolvo# > coalesce(#kolvo_new1#,0) and coalesce(#kolvo_new2#,0) = 0</td>
</tr>
<tr>
<td>#bdate_new1#,#bdate_new2#</td>
<td>Непрерывный период хотя бы одного отпуска в год должен составлять не менее 14 дней.</td>
<td>"coalesce(dfd.""CheckWorkerPeriodVacations""(
#Master_IdWorker#::bigint,
comdoc.""getFilial""()::bigint,
#year#::bigint,
true::boolean,
now()::date,
#bdate_new1#::date,#edate_new1#::date,
#bdate_new2#::date, #edate_new2#::date,
#bdate_new3#::date, #edate_new3#::date,
#bdate#::date, doc_code::bigint),false) = false"</td>
</tr>
<tr>
<td>#bdate_new1#</td>
<td>Перенос отпуска оформлен только на выходные дни. Скорректируйте #bdate_new1_name# #bdate_new1#</td>
<td>"not exists(select 1 from comdoc.""VDocflowCalendar"" v where v.""RDate"" between #bdate_new1#::date and #edate_new1#::date
and ""isDayOff"" = false and ((v.""orgId"" = comdoc.""getFilial""() and coalesce (comdoc.""fnDefineRegion""(null::bigint, comdoc.""getFilial""()::bigint, now()::date),0) =0) or v.""Region"" = comdoc.""fnDefineRegion""(null::bigint, comdoc.""getFilial""()::bigint, now()::date) ))
"</td>
</tr>
<tr>
<td>#bdate_new2#</td>
<td>Перенос отпуска оформлен только на выходные дни. Скорректируйте #bdate_new2_name# #bdate_new2#</td>
<td>"not exists(select 1 from comdoc.""VDocflowCalendar"" v where v.""RDate"" between #bdate_new2#::date and #edate_new2#::date
and ""isDayOff"" = false and ((v.""orgId"" = comdoc.""getFilial""() and coalesce(comdoc.""fnDefineRegion""(null::bigint, comdoc.""getFilial""()::bigint, now()::date),0) =0) or v.""Region"" = comdoc.""fnDefineRegion""(null::bigint, comdoc.""getFilial""()::bigint, now()::date) )) and #bdate_new2# is not null
"</td>
</tr>
<tr>
<td>#bdate_new1#</td>
<td>Перенос создан с даты ранее разрешенной</td>
<td>#bdate_new1#::date < (#year# ||substring((select t.""valueText"" from comdoc.""getAccountingConstantValues""(null, 'создавать переносы отпусков, начиная с даты (день+месяц)'::text , null) t) ,4,2)
|| left((select t.""valueText"" from comdoc.""getAccountingConstantValues""(null, 'создавать переносы отпусков, начиная с даты (день+месяц)'::text , null) t) ,2))::date</td>
</tr>
<tr>
<td>#bdate_new2#</td>
<td>Перенос создан с даты ранее разрешенной</td>
<td>#bdate_new2#::date < (#year# ||substring((select t.""valueText"" from comdoc.""getAccountingConstantValues""(null, 'создавать переносы отпусков, начиная с даты (день+месяц)'::text , null) t) ,4,2)
|| left((select t.""valueText"" from comdoc.""getAccountingConstantValues""(null, 'создавать переносы отпусков, начиная с даты (день+месяц)'::text , null) t) ,2))::date</td>
</tr>
<tr>
<td>#bdate_new2#</td>
<td>Пересечение отпусков, скорректируйте период</td>
<td>coalesce(#bdate_new2#,'19700101')<>'19700101' and #bdate_new2# between #bdate_new1# and #edate_new1#</td>
</tr>
<tr>
<td>#bdate_new1#</td>
<td>Пересечение отпусков, скорректируйте период</td>
<td>coalesce(#bdate_new1#,'19700101')<>'19700101' and #bdate_new1# between #bdate_new2# and #edate_new2#</td>
</tr>
<tr>
<td>#edate_new1#</td>
<td>Пересечение отпусков, скорректируйте период</td>
<td>coalesce(#edate_new1#,'19700101')<>'19700101' and #edate_new1# between #bdate_new2# and #edate_new2#</td>
</tr>
<tr>
<td>#edate_new2#</td>
<td>Пересечение отпусков, скорректируйте период</td>
<td>coalesce(#edate_new2#,'19700101')<>'19700101' and #edate_new2# between #bdate_new1# and #edate_new1#</td>
</tr>
</table>
</body>
</html>
!!! note
Для вычислений проверки **"Перенос создан с даты ранее разрешенной"** необходимо завести константу ```создавать переносы отпусков, начиная с даты (день+месяц)```, заполняется столбец **"Значение (текст)"** числом и месяцем ранее которой не разрешается создавать заявление на перенос ежегодного отпуска.
**Ниже представлен пример проверки на заполнение реквизита в документе для пользователя с определенной должностью**, на примере документа "Заявление на получение справки 2НДФЛ", где #year# является реквизитом документа
@ -669,7 +791,7 @@ if @formName='EmployeeStatementForm' AND ( @ColumnName = '#bDate#' OR @ColumnNam
## Пример
Так как документы, созданные по этому шаблону, не будут относиться к блокам "Заявление от сотрудника", "Локально-нормативные документы" и "Документы на подписание", то шаблон будет для подтипа, относящегося к типу документа "Универсальный документ".
Так как документы, созданные по этому шаблону, не будут относиться к блокам "Заявление от сотрудника", "Локально-нормативные акты" и "Документы на подписание", то шаблон будет для подтипа, относящегося к типу документа "Универсальный документ".
### Наименование, тип, подтип