This commit is contained in:
Rafael 2025-04-15 15:34:11 +05:00
commit 1729042038

View File

@ -132,7 +132,7 @@ search:
**Редактируемый при активном маршруте до использования ЭП** - при включенной опции в выбранной подтипе разрешено редактирование атрибутов документа во время согласования по маршруту.
!!! warning
Редактировать атрибуты документа возможно только в документах, в которых отсутствует автоматически сгенерированный файл на подписание. Генерацию файла возможно настроить с помощью константы [**КЭДО_ВидыДействия_СоздатьФайл**](../Настройка констант/#система_электронного_и_кадровогоокументооборота). Указываются после каких видов действия с документом будет автоматически формироваться печатная форма в формате pdf. Заполняется столбец "Значение (текст)" с кодами видов действия. Видов может быть как один, так и несколько. Если несколько, то перечисляются через запятую.
Редактировать атрибуты документа возможно только в документах, в которых отсутствует автоматически сгенерированный файл на подписание. Генерацию файла возможно настроить с помощью константы [**КЭДО_ВидыДействия_СоздатьФайл**](../Настройка констант#система_электронного_и_кадровогоокументооборота). Указываются после каких видов действия с документом будет автоматически формироваться печатная форма в формате pdf. Заполняется столбец "Значение (текст)" с кодами видов действия. Видов может быть как один, так и несколько. Если несколько, то перечисляются через запятую.
**Запрещать ознакомление, если не создан документ из меню операций** - при включенной опции в выбранном подтипе документа запрещено ознакомление, например, с уведомлением об отпуске, если сотрудник не оформил заявление на отпуск или заявление на перенос через меню операций. **Данная опция реализована только для типа документа "Уведомления Lexema"**.
@ -146,9 +146,9 @@ search:
### Тип и подтип документа
Поля "Тип документа" и "Подтип документа" позволяют выбрать значение из выпадающего списка. В случае, если нет требуемого типа документа, необходимо заполнить форму ["Настройка документа"](../Настройка документов/) с требуемым типом и включить опцию "Форма построена на конструкторе документов".
Поля "Тип документа" и "Подтип документа" позволяют выбрать значение из выпадающего списка. В случае, если нет требуемого типа документа, необходимо заполнить форму ["Настройка документа"](../Настройка документов) с требуемым типом и включить опцию "Форма построена на конструкторе документов".
Поле "Подтип документа" можно заполнить только после заполнения поля "Тип документа". В случае, если нет требуемого подтипа документа его возможно создать через справочник ["Подтип документа"](../Подтипы документов/) либо по нажатию на кнопку создания напротив поля подтип документа.
Поле "Подтип документа" можно заполнить только после заполнения поля "Тип документа". В случае, если нет требуемого подтипа документа его возможно создать через справочник ["Подтип документа"](../Подтипы документов) либо по нажатию на кнопку создания напротив поля подтип документа.
Для выбора необходимого типа в документе "Конструктор документов" необходимо раскрыть справочник "Тип документа" и выбрать необходимый их выпадающего списка.
@ -214,7 +214,7 @@ search:
Логическое | Логическое выражение (Истина/Ложь)
Подразделение | Выпадающий список [подразделений](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/%D0%9F%D0%BE%D0%B4%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F/)
Пользовательский тип атрибута | Выпадающий список [пользовательских атрибутов](../Пользовательские типы атрибутов документов/index.md)
Произвольная выборка | Выпадающий список из справочников, например, [физических лиц](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/%D0%A4%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5 %D0%BB%D0%B8%D1%86%D0%B0/)
Произвольная выборка | Выпадающий список из справочников, например, [физических лиц](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/%D0%A4%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5 %D0%BB%D0%B8%D1%86%D0%B0/). Указывается [вычисление](#описание_полей_в_таблицеополнительные_атрибуты)
Работник | Выпадающий список с [сотрудниками](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/%D0%A1%D0%BE%D1%82%D1%80%D1%83%D0%B4%D0%BD%D0%B8%D0%BA%D0%B8/)
Строка | Текстовое поле
Табличная часть | Добавление табличной части
@ -260,7 +260,7 @@ search:
- **"Тип группы(Unispr)"** заполняется в случаях:
- если поле "Тип атрибута" принимает значение **"Пользовательский тип атрибута"** ("Base.Unispr"). Заполняется значением из справочника ["Пользовательские типы атрибутов документов"](../Пользовательские типы атрибутов документов/index.md). Соответствует полю "Группа" документов справочника, выпадающий список будет содержать все наименования прописанной группы. Используется в том случае, когда атрибут может иметь одно из определенных значений в некоторой группе наименований. Справочник доступен по кнопке "Пользовательские типы атрибутов": <img src="media/image13.png">
{ #описание-ChCode }
- если поле "Тип атрибута" принимает значение **"Произвольная выборка"**. Указывается вычисление атрибута из справочников, например,
- если поле "Тип атрибута" принимает значение **"Произвольная выборка"**. Указывается вычисление атрибута, например,
```sql
select 99::bigint as "VCode", 'Тест 99'::text as "Name", 1 as "OrderKey" union select 199, 'Тест 199', 2
@ -365,31 +365,6 @@ NIOFamilyGenitive | Отображение ФИО работника в форм
### Вычисляемые атрибуты
<!-- Чтобы прописать вычисление полей, значения которых должны зависеть от остальных полей (т.е. сделать их вычисляемыми), необходимо в Microsoft SQL Server Management Studio внести изменения в код процедуры dbo.callAfterSetSQL (в которой прописывается непосредственно вычисление значение атрибута) и в код процедуры dbo.callCheckSQL (для проверки корректности внесённых в поля атрибутов значений).
*Для вычисляемых атрибутов рекомендуется устанавливать признак "Только для чтения".*
В рассматриваемом примере дата окончания отпуска (#eDate#) вычисляется на основе количества дней в отпуске (\#bDate#) и даты его начала (\#cnt#). В процедуру dbo.callAfterSetSQL для изменения атрибута \#eDate# при изменении \#bDate# или \#cnt# были внесены следующие изменения:
```sql
if @formName='EmployeeStatementForm' AND ( @ColumnName = '#bDate#' OR @ColumnName = '#cnt#' ) AND @DocumentSubtypeName = 'Заявление на отпуск без сохранения зп'
begin
update #resTab
set
DateValue = convert(varchar(50),
dateadd(day,
convert(bigint,
(select top 1 BigIntValue from #resTab where ColumnName = '#cnt#')-1),
convert(date,
(select top 1 DateValue from #resTab where ColumnName = '#bDate#'),
104)
),
104),
Recalculated = 1
where ColumnName = '#eDate#'
end
``` -->
Есть специальные дополнительные атрибуты с зарезервированными наименованиями и типами, прописывать их в таблице "Дополнительные атрибуты" не надо. Среди таких атрибутов есть:
{ #спец-атрибуты }
@ -636,7 +611,169 @@ if @formName='EmployeeStatementForm' AND ( @ColumnName = '#bDate#' OR @ColumnNam
## Вкладка "Настройка интерфейса"
В данной вкладке настраивается интерфейс документа.
В данной вкладке настраивается интерфейс документа, например, создание нового документа из существующего, видимость данных в документе.
### Меню операций
В табличной части "Тип+подтип документов" задаются условия какие типы и подтипы документов будут отображаться по кнопке "Операции" внутри документа.
Данный пример представлен для конструктора группы ["Уведомления Lexema"](../Настройка внутрисистемных уведомлений/index.md) подтипа "Уведомления об отпуске".
![Меню](media/menuOperac.png)
* **Вкл.** - включение или отключение операции в выбранном документе;
* **Название** - задается название операции, например, Создать "Заявление на ежегодный отпуск";
* **Тип документа** - выбирается к какому типу документа необходимо добавить меню операций;
!!! "Примечание"
По умолчанию создается новый документ без заполненных полей. В случае когда необходимо создать новый документ (как на конструкторе, так и любой другой) с заполненными данными из первичного документа, возможно реализовать через столбец "Скрипт по созданию документа".
* **Подтип** - выбирается к какому типу документа необходимо добавить меню операций;
* **Условие фильтрации** - задается название типа вида отпуска указанный в [уведомлении](../Настройка внутрисистемных уведомлений/index.md)
* **Служебное наименование** - задается служебное наименование [дополнительного атрибута](ополнительные_атрибуты_документа), в данном случае **#typeVacation#**.
![Атрибут](media/atribut.png)
* **Условие для видимости операции** - указывается условие в зависимости от которого выбранная операция будет доступна для пользователя, например, `not exists (select 1 from comdoc."isAccessOfRoles"(lex."getLogin"(), comdoc."getFilial"(),'user') where "RoleName" ilike '%df_officeworker%')`, в данном условии сказано что операция не будет доступа пользователю имеющий роль **df_officeworker**.
!!! note
Если столбцы "Подтип", "Условие фильтрации" и "Служебное наименование" не заполнены, то созданная операция будет отображаться во всех подтипах документа.
* **Разрешить создавать несколько документов** - при включенной операции из одного типа документа возможно создавать несколько новых. По умолчанию из одного документа можно создать только один новый, и при нажатии в операциях по созданию нового будет открываться ранее созданный.
* **Скрипт по созданию документа** - используется в случае когда необходимо переносить динамические данные из первичного документа в новый документ. Использоваться может как при создании нового документа на конструкторе, например, заявления от сотрудника, так и при создании документа не на конструкторе , например, приказа.
??? "Пример для PostgreSQL"
```sql
DO
$$
-- объявление переменных
declare _docVCode bigint;
declare _BeginDateScript date;
declare _EndDateScript date;
declare _LeadTimeScript integer;
declare _AttVCode bigint;
declare _k integer;
begin
_docVCode := lex."L8_sp_GenCode"('UniversalDocument', 1);
-- в скобках указывается таблица для нового типа документа
-- (например, для служебной записки указывается таблица 'DocflowDocument')
INSERT INTO dfd."UniversalDocument" (-- начало создания документа (по аналогии указывается схема и таблица для нового документа)
"VCode", "TypeName", "DocumentCategory", "DocumentSubtype",
"DocumentDate", "MyCompany", "IdWorker", "Department", "Position",
"CUser", "VirtualCUser", "COrg", "WOrg",
"WUser", "CDate", "WDate", "CHost", "WHost", "SourceDocumentCode", "SourceDocumentType"
)
SELECT _docVCode , '_newTypeName', _Constructor, _new_DocumentSubtype,
-- _newTypeName - тип нового документа из столбца "Тип документа" из таблицы "Тип+подтип документов"
-- _Constructor - код нового конструктора документа для нового документа
-- _new_DocumentSubtype - код нового подтипа документа (в случае создания документа не на конструкторе, данные параметры не указывается)
now()::date, _filial, _IdWorker, _IdDep::bigint, _IdPost::bigint,
-- _filial - код организации MyCompany,
-- _IdWorker - код работника,
-- _IdDep - код подразделения работника,
-- _IdPost - код должности работника
'_cuser', '_virtual_user', _corg, _corg,
-- _corg - код филиала организации
'_cuser', '_cdate', '_cdate', '_chost', '_chost', _doc_code, '_doc_type'
-- Указываются параметры из вызываемой процедуры CreateUniversDocsFromNotificationLexema, где:
-- _doc_code - код первоначального документа из которого создается новый документ по операции,
-- '_doc_type' - тип первоначального документа из которого создается новый документ по операции, текстовое поле обрамляются в одинарных кавычках.
;
select ud."BeginDate" , ud."EndDate", ud."LeadTime" from dfd."DocflowDocument" ud where ud."VCode" = _doc_code
-- отсюда берутся необходимые поля первоначального документа из таблицы, которые необходимо передать в новый документ
into _BeginDateScript, _EndDateScript, _LeadTimeScript;
-- Начало вставки в дополнительные атрибуты нового документа (в случае создания документа не на конструкторе, не указывается)
_k := count(1) from dfd."DocumentCategoryAttributeType" a where a."PCode" = _Constructor;
_AttVCode := lex."L8_sp_GenCode"('DocumentAdditionalAttribute'::character varying, _k::integer);
insert into dfd."DocumentAdditionalAttribute" ("VCode", "PCode", "CategoryAttributeType",
-- вставка в дополнительные аттрибуты (в случае создания документа не на конструкторе, не указывается)
"DateValue", "BigIntValue", "Value",
"DoubleValue", "MoneyValue", "DateTimeValue", "TimeValue",
"CUser", "WUser", "CDate", "WDate", "CHost", "WHost")
select _AttVCode +dense_rank() over (order by a."VCode") -1 , _docVCode ,
a."VCode",
case when a."ColumnName" = '#bdate#' then _BeginDateScript
when a."ColumnName" = '#edate#' then _EndDateScript
else null::date end,
case when a."ColumnName" = '#kolvo#' then _LeadTimeScript else null::BigInt end , null,
null, null, null, null,
'_cuser', '_cuser', '_cdate', '_cdate', '_chost', '_chost'
-- #bdate#, #edate#, #kolvo# дополнительные атрибуты в которые вставляются данные из первичного документа
from dfd."DocumentCategoryAttributeType" a
where a."PCode" = _Constructor ;
-- Конец вставки в дополнительные атрибуты нового документа
update "#tmp_newDocVCode" -- хранение кода нового документа для его открытия
set "newDocVCode" = _docVCode ;
END;
$$
```
??? "Пример для MSSQL"
```sql
declare @docVCode bigint
declare @god int
declare @AttVCode bigint
declare @k int
exec @docVCode = dbo."L8_sp_GenCode" 'UniversalDocument', 1
INSERT INTO "UniversalDocument" (
"VCode", "TypeName", "DocumentCategory", "DocumentSubtype",
"DocumentDate", "MyCompany", "IdWorker", "Department", "Position",
"CUser", "VirtualCUser", "COrg", "WOrg",
"WUser", "CDate", "WDate", "CHost", "WHost", "SourceDocumentCode", "SourceDocumentType"
)
SELECT @docVCode , '@newTypeName', @Constructor, @new_DocumentSubtype,
sysdatetimeoffset(), @filial, @IdWorker, @IdDep, @IdPost,
'@cuser', '@virtual_user', @corg, @corg,
'@cuser', '@cdate', '@cdate', '@chost', '@chost', @doc_code, '@doc_type'
select @god = ud.BigIntValue
from "DocumentAdditionalAttribute" ud
join "DocumentCategoryAttributeType" ty on ud."CategoryAttributeType" = ty.VCode
where ud."PCode" = @doc_code and
ty."ColumnName" = '#worker4#'
select @k= count(1) from "DocumentCategoryAttributeType" a where a."PCode" = @Constructor
exec @AttVCode = dbo."L8_sp_GenCode" 'DocumentAdditionalAttribute', @k
insert into "DocumentAdditionalAttribute" ("VCode", "PCode", "CategoryAttributeType",
"DateValue", "BigIntValue", "Value",
"DoubleValue", "MoneyValue", "DateTimeValue", "TimeValue",
"CUser", "WUser", "CDate", "WDate", "CHost", "WHost")
select @AttVCode + dense_rank() over (order by VCode)-1, @docVCode ,
a."VCode", null, case when a."ColumnName" = '#year#' then @god else null end, null,
null, null, null, null,
'@cuser', '@cuser', '@cdate', '@cdate', '@chost', '@chost'
from "DocumentCategoryAttributeType" a
where a."PCode" = @Constructor
update #tmp_newDocVCode
set newDocVCode = @docVCode
```
В данном примере указано, что при поступлении пользователю уведомления где вид отпуска "Основной", в меню операций у него будут доступны операции:
* Создать "Заявление на доп. отпуск"
* Создать "Заявление на ежегодный отпуск"
* Создать "Заявление на перенос отпуска"
* Создать "Универсальный документ"
![Операции](media/operacii.png)
### Видимость данных
@ -747,36 +884,6 @@ if @formName='EmployeeStatementForm' AND ( @ColumnName = '#bDate#' OR @ColumnNam
![alt text](media/image126.png)
### Меню операций
В табличной части "Тип+подтип документов" задаются условия какие типы и подтипы документов будут отображаться по кнопке "Операции" внутри документа.
Данный пример представлен для конструктора группы ["Уведомления Lexema"](../Настройка внутрисистемных уведомлений/index.md) подтипа "Уведомления об отпуске".
![Меню](media/menuOperac.png)
* **Вкл.** - включение или отключение операции в выбранном документе;
* **Название** - задается название операции, например, Создать "Заявление на ежегодный отпуск";
* **Тип документа** - выбирается к какому типу документа необходимо добавить меню операций;
* **Подтип** - выбирается к какому типу документа необходимо добавить меню операций;
* **Условие фильтрации** - задается название типа вида отпуска указанный в [уведомлении](../Настройка внутрисистемных уведомлений/index.md)
* **Служебное наименование** - задается служебное наименование [дополнительного атрибута](ополнительные_атрибуты_документа), в данном случае **#typeVacation#**.
* **Условие для видимости операции** - указывается условие в зависимости от которого выбранная операция будет доступна для пользователя, например, `not exists (select 1 from comdoc."isAccessOfRoles"(lex."getLogin"(), comdoc."getFilial"(),'user') where "RoleName" ilike '%df_officeworker%')`, в данном условии сказано что операция не будет доступа пользователю имеющий роль **df_officeworker**.
![Атрибут](media/atribut.png)
!!! note
Если столбцы "Подтип", "Условие фильтрации" и "Служебное наименование" не заполнены, то созданная операция будет отображаться во всех подтипах документа. Кнопка "Операции" отображается только в документах "Заявление от сотрудника".
В данном примере указано, что при поступлении пользователю уведомления где вид отпуска "Основной", в меню операций у него будут доступны операции:
* Создать "Заявление на доп. отпуск"
* Создать "Заявление на ежегодный отпуск"
* Создать "Заявление на перенос отпуска"
* Создать "Универсальный документ"
![Операции](media/operacii.png)
### Статичные поля
В табличной части возможно настроить обязательность заполнения, видимости и указать значения по умолчанию для статичных полей в карточке документа.
@ -1240,7 +1347,7 @@ if @formName='EmployeeStatementForm' AND ( @ColumnName = '#bDate#' OR @ColumnNam
## Настройка операций по созданию заявления в личном кабинете сотрудника
В личном кабинете во вкладке ["Графики отпусков"](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Профиль сотрудника/#графики_отпусков) для настройки операций по созданию заявления необходимо:
В личном кабинете во вкладке ../Подтипы документовttps://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Профиль сотрудника/#графики_отпусков) для настройки операций по созданию заявления необходимо:
* Создать [подтип документа](../Подтипы документов/) со служебным наименованием `MyProfileVacationOperation`: