diff --git a/docs/Admin manuals/Конструктор документов/index.md b/docs/Admin manuals/Конструктор документов/index.md index c3e60f8..a53a747 100644 --- a/docs/Admin manuals/Конструктор документов/index.md +++ b/docs/Admin manuals/Конструктор документов/index.md @@ -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). Соответствует полю "Группа" документов справочника, выпадающий список будет содержать все наименования прописанной группы. Используется в том случае, когда атрибут может иметь одно из определенных значений в некоторой группе наименований. Справочник доступен по кнопке "Пользовательские типы атрибутов": { #описание-ChCode } -- если поле "Тип атрибута" принимает значение **"Произвольная выборка"**. Указывается вычисление атрибута из справочников, например, +- если поле "Тип атрибута" принимает значение **"Произвольная выборка"**. Указывается вычисление атрибута, например, ```sql select 99::bigint as "VCode", 'Тест 99'::text as "Name", 1 as "OrderKey" union select 199, 'Тест 199', 2 @@ -365,31 +365,6 @@ NIOFamilyGenitive | Отображение ФИО работника в форм ### Вычисляемые атрибуты - - Есть специальные дополнительные атрибуты с зарезервированными наименованиями и типами, прописывать их в таблице "Дополнительные атрибуты" не надо. Среди таких атрибутов есть: { #спец-атрибуты } @@ -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`: