---
search:
  boost: 2 
---
# Конструктор документов

## Общее описание назначения документа

Документ "Конструктор документов" предназначен для создания шаблонов документов следующих **типов документа**: Заявление от сотрудника, Локальный нормативный акт (ЛНА), Универсальный документ, Документ на подписание, Доверенность, Служебная записка.

С помощью конструктора документов можно создавать подтипы документов с определенной структурой, которые можно будет использовать в заявлениях от сотрудников, ЛНА, универсальных документах или документах на подписание. При создании документов по этим шаблонам от пользователя потребуется лишь заполнять соответствующие поля. 

В настройках пользователя в таблице "Настройка прав по подразделениям и подтипам документов" можно выбрать подтипы документов, к которым у пользователя будет доступ. Это позволяет разграничить права пользователя не только по подразделениям и типам документов, но и по подтипам документов. Более подробно про настройку пользователей можно прочесть в разделе [Настройка пользователей](../Настройка пользователей/index.md).

В рассматриваемом документе создается универсальная структура будущего заявления (или другого типа документа из списка доступных) с определением параметров для автоматического заполнения. На основе созданного шаблона пользователями будут создаваться документы. Общую структуру можно представить в виде следующей схемы:

![Рисунок 1 Общая схема](./media/schema.png)

Для каждого подтипа может существовать не более одного действующего (не закрытого) шаблона. Таким образом, пока шаблон не закрыт, сотрудники создают документы, подставляя значения в текст этого шаблона. Когда шаблон помечается как закрытый, можно создать новый шаблон того же типа и подтипа документа, и тогда при выборе сотрудником использованного ранее подтипа вставляемый шаблон будет уже другим.

На примере типа документа "Заявление от сотрудника" это будет выглядеть так:

![Рисунок 2 Схема для заявлений от сотрудника](./media/schemaExample.png)

## Реестр

Для открытия документа необходимо в Меню в поисковой строке ввести - Конструктор документов

![Рисунок 3 Меню](./media/menu.png)

После выбора нужного документа откроется реестр документов.

![Рисунок 4 Реестр "Конструктор документов"](./media/registry.png)

Для создания нового документа необходимо нажать на кнопку "Создать" на верхней панели инструментов
![](./media/create.png)

## Копирование конструктора

Для дублирования существующего документа необходимо отметить этот документ в реестре и нажать кнопку "Копировать" на верхней панели инструментов.

![Рисунок Копирование документов](./media/image15.png)

Откроется всплывающее окно "Создание шаблона". В нем необходимо выбрать в какую организацию необходимо скопировать данный документ. Если выбрать ту же организацию, то выбранный документ продублируется в этой же организации, после чего выйдет окно с предложением открыть скопированный документ.
![Копирование документа в ту же организацию](media/copyToCompany.png)
![Скопированный документ](media/copiedDocumentToCompany.png)

Если выбрать другую организацию, напротив поля "Разрешить этот же шаблон для выбранной организации" не ставить галочку и нажать "Создать", то выбранный документ продублируется в выбранную организацию. Код документа при копировании будет изменен.

![Копирование документа в другую компанию копированием](media/copyToAnotherCompany.png)
![Скопированный документ](media/copiedDocument.png)

Если выбрать другую организацию, напротив поля "Разрешить этот же шаблон для выбранной организации" поставить галочку, и нажать "Создать", то выбранный документ будет доступен для использования в выбранной организации, а документ дублироваться не будет. Код документа при этом в обоих организациях будет один и тот же.

![Копирование документа в другую компанию дублированированием](media/copyToAnotherCompanyWithCheck.png)
![Скопированный документ](media/copiedDocument2.png)

## Копировать для переноса в другую базу

Для переноса конструкторов документов из одной базы в другую необходимо отметить эти документы в реестре и нажать кнопку "Копировать для переноса в другую базу" на верхней панели инструментов.

![Копировать_для_переноса](media/Копировать_для_переноса.PNG) 

В открывшемся окне необходимо указать Код организации в базе, в которую переносятся данные. По кнопке "Создать скрипт переноса" будет сформирован скрипт. 

![Копировать_для_переноса2](media/Копировать_для_переноса2.PNG) 

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

## Вкладка "Основные характеристики"

Новый созданный документ, выглядит следующим образом:

![alt text](./media/DocumentConstructorForm-2.png)

В данной форме в "Панели управления" имеется кнопка "Вложения", при необходимости есть возможность добавить в конструктор документа вложение.

Обязательными полями для заполнения являются:

- Группа;
- Подтип документа;
- Шаблон.

В правом верхнем углу имеется выпадающий список **"Генерация номера"**, в котором присутствует 2 варианта выбора:

- **При создании маршрута** - номер документа будет формироваться после создания маршрута в документе.

- **При заполнении шаблона** - номер документа будет формироваться после нажатия кнопки "Заполнить шаблон" в документе.

Слева имееются поля с "галочками", которые включают в себя следующие функции: 

- **Автоматически формировать маршрут** - при включенной опции в документе созданном на конструкторе, например "Заявление от сотрудника", автоматически сформируется маршрут после нажатия на кнопку "Заполнить шаблон". Для автоматического формирования маршрута также необходимо чтобы на данный тип документа был настроен один [шаблон маршрутов](../Настройка шаблонов маршрутов/index.md). Если настроено несколько, тогда маршрут автоматически не сформируется. Данная опция рекомендуема для удобства работы с различными заявлениями.

- **Откл. автоформирование файла для подписания** - отключает автоматическое формирование файла во вложении к документу. Если галочка не стоит,то происходит автоматическая генерация pdf- файла на основании данных карточки во всех документах, построенных на конструкторе, при отправке по маршруту, например Заявление от сотрудника.  
**Если опция включена**, то автоматическая генерация pdf- файла не происходит. В некоторых бизнес-процессах данная опция будет лишней - например, в Локальных нормативных актах, где оригиналы документов поставляются из хранилища организации.


??? "Пример автоматического формирования PDF-файла в документе:"

    - ![Вложение](media/attachments.png)

    - ![Вложенное заявление](media/statement.png)



- **Редактировать содержимое мемо** - при ключенной "галочке", появляется возможность редактирования шаблона непременно в документе.

- **Откл. содержимое (мемо и предпросмотр)** - отключается отображение текстового рабочего поля и окна предварительного просмотра в документах, расположенные в правой стороне.

??? Примечание

    Для [универсальных документов](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/%D0%A3%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9 %D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82/) дополнительно скрывается кнопка по формированию маршрута.

    ![alt text](media/image-29.png)

- **Не требовать дату перехода КЭДО** - при включенной опции данный подтип документа может создавать [сотрудник](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Сотрудники/), у которого отсутствует дата перехода на КЭДО.  Если опция отключена, то создание документа с данным подтипом невозможно без указания даты перехода на КЭДО. По умолчанию для создания любого документа необходимо указывать дату перехода на КЭДО у сотрудника.

- **Показывать инфо о графике отпусков** - при включенной опции в панели инструментов в [заявлении от сотрудника](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Заявления от сотрудников/) появляется кнопка "График отпусков", при нажатии на которую во всплывающем окне отображается данные по графику отпусков сотрудника инициатора.

- **Формирование листа ознакомления с ЭП** - если в системе используются электронные подписи, то в листе согласования будут отражаться сведения о сертификате (отпечаток, сроки действия).

- **Пересчитывать при движении по маршруту** - при включенной опции в выбранном подтипе в текстовом рабочем окне автоматически обновляются данные по участникам в маршруте согласования. Необходимо настроить [служебные слова](#вычисляемые_атрибуты) `#Route_AggUserGroup#, #Route_AggUserName#, #Route_AggDocumentStatus#, 	#Route_AggComment#.`

- **Номер п/п** - с помощью данного поля можно упорядочить подтипы в рамках одного типа документа в выпадающем списке. Например, заявления на разные вида отпуска

??? "Пример установки порядка подтипа в заявлении от сотрудника:"

    ![Группировка](media/group.png)
    

- **Ознакамливать бухгалтера по зп** - по завершению маршрута документа при включенной галочке, бухгалтеру организации направляется автоматическая рассылка о завершении маршрута документа. Бухгалтер назначается в [настройках пользователя](../Настройка пользователей/index.md#вкладка_расчет_зарплаты)

<!-- **Кол-во дней от даты создания** - с помощью данного поля устанавливается ограничение от даты создания документа. Например, если для подтипа "Заявление на ежегодный отпуск", выставить ограничение 14 дней, то при заполнении шаблона документа, если дата начала отпуска наступает ранее чем через 14 дней, появится уведомление в системе, что дата не может быть ранее чем 14 дней от сегодняшней даты.

![Уведомление](media/uvedomlenie.png) -->

- **Разрешить редактировать номер** - при включенной опции в документе созданном на конструкторе, например "Универсальный документ", можно вручную задавать номер документа. При выключенной опции, генерация номера документа будет автоматическая.

??? "Пример редактирования номера документа:"

    ![Номер документа](media/numberDoc.png)



- **Запретить создавать под замещением** - при включенной опции выбранный подтип документа нельзя создавать под [замещением](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Функция замещения/).

- **Напоминать об отправке по маршруту** - при включенной опции выводит информационное сообщение об отправке заявления по маршруту. Работает при условиях, что автоматически формируется маршрут и на данный подтип настроен [один шаблон маршрута](../Настройка шаблонов маршрутов/index.md)

- **Показывать границы таблиц в отчетах** - при включенной опции в печатных формах заявлений, универсальных документов, ЛНА будут отображаться границы у таблиц при их наличии в отчете. При выключенной опции границы будут отсутствовать.

- **Редактируемый при активном маршруте до использования ЭП** - при включенной опции в выбранной подтипе разрешено редактирование атрибутов документа во время согласования по маршруту.

!!!Warning
    Редактировать атрибуты документа возможно только в документах, в которых отсутствует автоматически сгенерированный файл на подписание. Генерацию файла возможно настроить с помощью константы [**КЭДО_ВидыДействия_СоздатьФайл**](../Настройка констант#система_электронного_и_кадрового_документооборота). Указываются после каких видов действия с документом будет автоматически формироваться печатная форма в формате pdf. Заполняется столбец "Значение (текст)" с кодами видов действия. Видов может быть как один, так и несколько. Если несколько, то перечисляются через запятую.

- **Запрещать ознакомление, если не создан документ из меню операций** - при включенной опции в выбранном подтипе документа запрещено ознакомление, например, с уведомлением об отпуске, если сотрудник не оформил заявление на отпуск или заявление на перенос через меню операций. **_Данная опция реализована только для типа документа "Уведомления Lexema"_**.

??? "Пример запрета ознакомления с документом:"

    ![Предупреждение](media/warning.png)


<!-- **Формирование листа ознакомления с ЭП** - -->

- **Всегда показывать предпросмотр вложений** - при включенной опции в выбранном подтипе документа вместо текстового рабочего окна всегда показывается предпросмотр вложений.


### Тип и подтип документа
  
Поля "Тип документа" и "Подтип документа" позволяют выбрать значение из выпадающего списка. В случае, если нет требуемого типа документа, необходимо заполнить форму ["Настройка документа"](../Настройка документов) с требуемым типом и включить опцию "Форма построена на конструкторе документов".

Поле "Подтип документа" можно заполнить только после заполнения поля "Тип документа". В случае, если нет требуемого подтипа документа его возможно создать через справочник ["Подтип документа"](../Подтипы документов) либо по нажатию на кнопку создания напротив поля подтип документа.

Для выбора необходимого типа в документе "Конструктор документов" необходимо раскрыть справочник "Тип документа" и выбрать необходимый из выпадающего списка: 

![alt text](media/image-46.png)

После выбора типа документа необходимо выбрать подтип документа:

![alt text](media/image-39.png)

Если требуемый подтип отсутствует в выпадающем списке, можно добавить новый подтип через [реестр "Подтип документа"](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Подтипы документов/) или при помощи вложенной формы:

![Рисунок 8 Реестр "Подтип документа"](./media/image7.png)

Новый подтип документа можно создать внутри формы "Конструктор документов" с помощью кнопки <img  src="media/createSubTypeDoc.png"> рядом с выпадающим списком. Необходимо заполнить строковое поле "Наименование" и "Использовать в документе", остальные поля необязательны. После нажатия на кнопку "Сохранить" новый подтип будет выбран автоматически. Подробнее об заполнении подтипа документа можно ознакомиться в [инструкции](../Подтипы документов/index.md).

![alt text](./media/DocumentConstructorForm-3.png)

После создания шаблона документа выбранный для него подтип будет появляться при создании документов, относящихся только к выбранному типу документа. Т.е. если в шаблоне документа был выбран тип "Заявление от сотрудника", то данный шаблон будет доступен только при создании заявления от сотрудника даже при наличии подтипа с таким же наименованием, но для другого типа документа.

Если по выбранному подтипу уже существует не закрытый шаблон, то поле очистится и появятся уведомления:

![Уведомления о не закрытом шаблоне](./media/subTypeDuplicated.png)

В уведомлениях содержится код шаблона, по которому его можно найти в реестре "Конструктор документов". Про закрытие шаблонов можно прочесть [ниже](#закрытие-шаблона).

### Дополнительные атрибуты документа

После того как два основных поля заполнены, необходимо перейти к заполнению таблицы "Дополнительные атрибуты". Это поля, которые будет необходимо заполнять при создании документа по создаваемому сейчас шаблону документа. В качестве примера добавим шесть дополнительных атрибутов:

- Основной отпуск – кол-во дней <Целое\> – длительность отпуска в днях, вводится автором вручную.
- Основной отпуск – с <Дата\> – дата начала отпуска, вводится автором вручную.
- Основной отпуск – по <Дата\> – дата окончания отпуска, вычисляется на основе количества дней в отпуске и даты его начала.
- Причина <Строка\> – причина ухода в отпуск без сохранения ЗП, вводится автором вручную.
- Причина (список) <Пользовательский тип атрибута\> – причина ухода в отпуск без сохранения ЗП, автор выбирает одно из возможных значений в списке.
- Компания <Контрагент\> – компания, в которую направляется заявление, автор выбирает одно из возможных значений в списке.

![Заполненные атрибуты](./media/DocumentConstructorForm-44.png)

Это будут единственные изменяемые в тексте документа (заявления от сотрудника) поля, поэтому нужно внимательно отнестись к их созданию и заполнению поля "Шаблон", который содержит макет и основной текст будущего документа.

Для добавления новой строки в таблицу "Дополнительные атрибуты" необходимо нажать на кнопку "Добавить".

![alt text](./media/DocumentConstructorForm-4.png)

После нажатия на кнопку добавляется новая строка в таблице.

#### Описание полей в таблице "Дополнительные атрибуты":

- **"Порядок"** – порядок сортировки, заполняется целыми числами, в зависимости от которых будут упорядочиваться атрибуты для заполнения в документе. Например, атрибут с порядком сортировки, равным 2, будет располагаться ниже атрибута с порядком, равным 1.
- **"Наименование"** – необходимо заполнить наименованием дополнительного атрибута (строковое поле), исходя из которого пользователю должно быть понятно, какое значение должен принимать атрибут. Например: "Год", "Способ получения справки" и пр. Является обязательным для заполнения.
- **"Тип атрибута"** – необходимо заполнить информацией из выпадающего справочника, выбрав тип атрибута. **Является обязательным для заполнения.**

??? "Типы атрибутов"
    Тип атрибута | Описание
    -------------|---------
    Автонумерация | Автоматическая нумерация строк в таблице. Нумерация проставляется после нажатия на кнопку "Сформировать документ"
    Вещественное | Целое число с плавающей точкой
    Время | Отображение времени
    Дата | Отображение даты
    Дата и время | Отображение даты и времени
    Денежное | Денежные единицы
    Длинный текст (мемо) | Многострочное текстовое поле
    Договор | Выпадающий список [договоров](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/%D0%94%D0%BE%D0%B3%D0%BE%D0%B2%D0%BE%D1%80/)
    Должность | Выпадающий список [должностей](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/%D0%94%D0%BE%D0%BB%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8/)
    Контрагент | Выпадающий список [контрагентов](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%B0%D0%B3%D0%B5%D0%BD%D1%82%D1%8B/)
    Логическое | Логическое выражение (Истина/Ложь)
    Подразделение | Выпадающий список [подразделений](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%A1%D0%BE%D1%82%D1%80%D1%83%D0%B4%D0%BD%D0%B8%D0%BA%D0%B8/)
    Строка | Текстовое поле
    Табличная часть | Добавление табличной части
    Целое | Целое число

    !!!Note
        Каждый атрибут на странице документа имеет свое наименование **(заголовок)** и редактируемую заполняемую часть.


    

- **"Служебное наименование"** – наименование, вставляемое в текст шаблона для автозамены в тексте. Обязательная форма написания включает две "#": слева и справа от наименования, наименование прописывается на английском языке, например, #Name#. Именно эти значения будут заменены в тексте шаблона на введенные пользователем значения атрибута после нажатия на кнопку "Заполнить шаблон". Является обязательным для заполнения.
- **"Тип группы(Unispr)"** - заполняется в случаях: 
  1. если поле "Тип атрибута" принимает значение **"Пользовательский тип атрибута"** ("Base.Unispr"). Заполняется значением из справочника ["Пользовательские типы атрибутов документов"](../Пользовательские типы атрибутов документов/index.md). Соответствует полю "Группа" документов справочника, выпадающий список будет содержать все наименования прописанной группы. Используется в том случае, когда атрибут может иметь одно из определенных значений в некоторой группе наименований. Справочник доступен по кнопке "Пользовательские типы атрибутов": <img src="media/image13.png">
 { #описание-ChCode }
  2. если поле "Тип атрибута" принимает значение **"Произвольная выборка"**. Указывается вычисление атрибута, например,

    ```sql
    select 99::bigint as "VCode", 'Тест 99'::text as "Name", 1 as "OrderKey" union select 199, 'Тест 199', 2
    ```
    Т.е. запрос должен возвращать 3 поля

    `"VCode", "Name", "OrderKey"` с типами целое число **bigint**, текст **text** и **int** соответственно.


- **"Наименование в выпадающем списке"** – специфичная характеристика выпадающих списков, отвечает за то, какая информация будет отображаться в выпадающем списке для идентификации позиций в справочнике (например, для выпадающего списка "Работник" доступны варианты отображения  ФИО работника или его табельного номера, для выпадающего списка "Контрагент" - полное или краткое наименование контрагента ). Выбирается из выпадающего списка, в зависимости от выбранного типа атрибута.  По умолчанию устанавливается "NameFull", что означает для справочника "Работник" - ФИО работника, для справочника "Контрагент" - краткое наименование контрагента, для справочника "Пользовательский тип" - поле Наименование, которое будет фильтроваться в зависимости от выбранного типа группы для справочников "Должность" и "Подразделение" - наименование должности и подразделения соответственно. Является обязательным для заполнения, если тип атрибута – справочник. Для некоторых типов атрибутов, возможно использование нескольких наименований. 
  
??? "Наименования в выпадающем списке"
    
    Наименование | Описание |
    ---------|----------|
    NameFull | Полное отображение ФИО работника (атрибута)|
    FullNameDative | ФИО работника (атрибута) в дательном падеже |
    FullNameGenitive | ФИО работника (атрибута) в родительном падеже |
    FullNameAccusative | ФИО работника (атрибута) в винительном падеже |
    NameShort | ФИО работника (атрибута) в формате "Фамилия И.О." |
    NumTab | Табельный номер работника (атрибута) |
    Name | Должность работника (атрибута) в именительном падеже |
    NameDative | Должность работника (атрибута) в дательном падеже |
    NameGenitive | Должность работника (атрибута) в винительном падеже |
    NSNT | Отображение ФИО работника (атрибута) и табельного номера
    NSNTDative | Отображение ФИО работника (атрибута) и табельного номера в дательном падеже |
    IOFamily | Отображение ФИО работника в формате И.О.Фамилия в именительном падеже |
    IOFamilyAccusative | Отображение ФИО работника в формате И.О.Фамилия в винительном падеже |
    IOFamilyDative | Отображение ФИО работника в формате И.О.Фамилия  в дательном падеже |
    NIOFamilyGenitive | Отображение ФИО работника в формате И.О.Фамилия  в родительном падеже |
    
    


- **"Требовать заполнение"** – обязательность заполнения атрибута. Если в табличной части стоит галочка, документ не получится сохранить и отправить по маршруту, пока соответствующий атрибут не будет заполнен. **Вкл.** - требует заполнения атрибута. **"Действие"** - назначается при каком действии будет требоваться заполнения атрибута в процессе согласования по маршруту.Возможно выбрать как одно, так и несколько действий. Если в столбце **"Действие"** ничего не указано, то данная проверка будет срабатывать у инициатора документа.
- **"Настройка редактирования"** - данная колонка так же делится на 2 подгруппы, **"Только для чтения"** и **"Редактирование на Действии"**. Колонка **"Только для чтения"** - используется для вычисляемых полей. Если в этом поле стоит галочка, атрибут будет недоступен для редактирования пользователем напрямую. **"Редактирование на действии"** - используется при необходимости доступа к редактированию поля, на определенном виде действия маршрута.  
- **"Настройка видимости"** - данная колонка делится на несколько подгрупп. **Сделать невидимым** - используется если необходимо скрыть дополнительный атрибут в карточке документа. **"Видимость на действие"** - данная настройка используется если есть необходимость скрыть атрибут, до определенного действия маршрута. **"Видимость для ролей"** - у пользователя имеющего указанную роль атрибут в документе будет отображен, в то время как у пользователя у которого отсутствует одна либо все указанные в данном столбце роли, данный атрибут не будет отображен. 
- **"Настройка размера"** - колонка имеет 2 подгруппы. **"Заголовок"** задается размер шрифта названия поля. **"Контрол"** задается размер поля. 
- [**Доп. группа**](#дополнительные_группы) - добавляет отображание текущего атрибута в отдельную группу в документе. 
  
??? "Пример Доп. группы"
    
    ![alt text](media/image-24.png)

    ![alt text](media/image-25.png)
    
    
- **"Скрыть техн. код, Таблица с вычис-лениями"** - данная настройка позволяет скрывать _уникальный код_ строки внутри выпадающего списка.
- **"Кол-во строк в лукапе"** - настройка позволяющая задавать определенное количество строк в выпадающем списке. 
- **"Все (сотруд), искл. физлица (контр)"** - данная колонка позволяет исключить отражение списка физ. лиц из справочника "Контрагентов".    
- **"Маска для ввода, кол-во знаков после запятой, высота таблицы, размер мемо"** - позволяет установить строгий формат ввода данных пользователем и представлять из себя строку состоящую из обычных и специальных символов. При вводе обычные символы пользователь не может их удалить или заменить, специальные символы задают ограничения на вводимые данные.  

??? "Примеры масок"
    
    Маска для ввода используется для атрибута **"Строка"**

    Использование маски:

    * `# - ввод цифр`

    * L - ввод букв

    * A - ввод цифр и букв

    * [abcd] - список допустимых символов. Можно указать диапазон символов для цифр [1-5] и для букв [а-я] (при указании в списке допустимых символов "]" и "-" необходимо их дополнительно экранировать символом "\", например "abcd\]efg\-h")
    
    Документ | Количество символов | Маска
    ---------|---------------------|------
    ИНН физического лица | 12 | ############
    ИНН юридического лица | 10 | ##########
    Код подразделения, выдавшего паспорт | 6 | ###-###
    Номер мобильного телефона | 10 | #-###-###-##-##
    Номер паспорта | 6 | ######
    Номер военного билета | 9 | LL #######
    Расчетный счет в банке | 20 | ####################
    Серия и номер свидетельства о рождении | 10 | LL-LL№######
    Серия паспорта | 4 | ####
    СНИЛС | 11 | ###-###-### ##
    № счета | 20 | ####################
    БИК | 9 | #########
    Корр. счет | 20 | ####################
    ИНН банка | 12 | ############
    КПП | 9 | #########
    
      
- **"Показывать разрядность в числах"** - используется для типа атрибута **"Число"**. Если она включена то число будет отображаться - `2 022`. Если выключена  - то `2022` (без пробелов)
- **"Примечание/Комментарии"** - используется при необходимости для внесения информации по дополнительным атрибутам. Если тип атрибута **"Логическое"**, то нужно задавать любые текстовые значения, например, да/нет в формате Значение 1| Значение 2. Если тип атрибута "Пользовательское" можно указывать дополнительную информацию по наименованию, например для автоматической проставки суммы вычета на детей при создании заявления. Подробнее можно почитать в разделе [Дополнение к наименованию в пользовательском типе атрибута](../Пользовательские типы атрибутов документов/index.md#поля_дополнение_к_наименованию).
- Группа столбцов **"Значение по умолчанию"** используется в случае, если при создании документа реквизит должен быть заполнен неким условленным значением. Для разных типов атрибутов используются разные колонки. Для типов атрибута **"Строка"** требуется заполнить поле в столбце **"Текст"**. Для типов атрибута **"Логическое"** требуется поставить галочку в столбце **"Флаг"**.



<!-- Например, типы атрибута могут быть датой (Date), целым числом (bigint), строкой (string), логическим выражением (bool) и т.д. Также можно подключать сложные справочники, такие как сотрудники ("Работник"), контрагенты ("Контрагент") и т.д. Например, если в качестве типа атрибута было выбрано **"Подразделение"**, то в качестве списка возможных значений атрибута будет использована одна из колонок справочника подразделений, колонка задаётся полем "Наименование в выпадающем списке". Атрибут **"Дата и время"** может использоваться для типов документов когда важно отразить дату и время, например в заявке на подачу автотранспорта. С помощью атрибута **"Время"** в документе отображается только время без даты. 
-->

#### Тип атрибута Табличная часть

При выборе типа атрибута **_Табличная часть_** под блоком **_"Дополнительные атрибуты"_** появляется дополнительный блок для настройки табличной части в документе. Для использования в документе, в блоке **_"Дополнительные атрибуты"_**, для данного типа атрибута, необходимо указать служебное наименование **`#Table1#`**, которое заполняется после этого в столбце **Служебное наименование таблицы**.

![Таблица](./media/DocumentConstructorForm-5.png)

!!! Примечание
    Для того чтобы в правой части документа отображались данные из таблицы необходимо вначале нарисовать таблицу в шаблоне конструктора с помощью редактора. Ниже приведено описание колонок, которые отсутствуют в Дополнительных атрибутах: 



    ![alt text](media/image-40.png)

    В мемо поле имеется консоль тегов - специальное окно для отображения тегов с возможностью редактирования шаблона конструктора. Данное консольное окно открывается с помощью специальной кнопки.

    ![Консоль тегов](./media/DocumentConstructorForm-46.png)

    Далее в ячейке в ## указывается служебное наименование таблицы и атрибута через _ , например **#Table1_Data1#**:

    ![alt text](./media/DocumentConstructorForm-6.png)

    

В данной _Табличной части_ имеются похожие по аналогии с _"Дополнительными атрибутами"_ колонки для заполнения и настройки таблицы в документе. 



<!--Маска для ввода используется для атрибута **"Строка"**.  
Количество знаков после запятой используется для атрибута **Вещественное**.  
Высота таблицы задается в пикселях, используется для атрибута **"Табличная часть"**.  
При проставлении галочки в столбце **"Суммовое поле"** все столбцы с атрибутом **"Целое"** будут суммироваться в конце таблицы.  
**"Размер мемо"** - указывается высота атрибута **"Длинный текст (мемо)"**. Значение по умолчанию - 3 строки.
- **Размер** - задается размер редактируемой части атрибута.

- **Размер заголовка** - задается размер заголовка атрибута.
- - **Высота таблицы** - используется для типа атрибута **"Табличная часть"**. Высота задается в пикселях.
- Для типа атрибута **"Целое"** или типов атрибутов, которые позволяют в документе выбрать значение из списка, требуется заполнить поле в столбце **"Код/число"** числовым значением.
![Строка](media/StrokaLog.png)

![Реквизиты](media/rekvisity.png)



![Код](media/cod.png)

![Код2](media/cod2.png)

-->


### Разметка страницы / поля, см

Позволяет вручную задать отступы текста в печатной форме документа. Если поля не заполнены, то по умолчанию значения следующие: 

* Вверхнее - 1
* Нижнее 2
* Левое - 2,8
* Правое - 1,8

![alt text](media/image-26.png)

#### Дополнительные группы

- **Доп. группа** - указывается номер дополнительной группы.

- **Заголовок** - задается наименование группы.
 
- **Размер** - указывается размер дополнительной группы в долях.

- **Рамка** - при включении у дополнительной группы будет отображаться рамка.

![alt text](./media/DocumentConstructorForm-7.png)

### Вычисляемые атрибуты

Есть специальные дополнительные атрибуты с зарезервированными наименованиями и типами, прописывать их в таблице "Дополнительные атрибуты" не надо. Среди таких атрибутов есть:
{ #спец-атрибуты }

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Сгруппированные вычисляемые атрибуты</title>
<style>
  table {
    border-collapse: collapse;
    margin-bottom: 20px;
    width: 100%;
  }

  th, td {
    border: 1px solid #333;
    padding: 5px 10px;
  }

  th {
    background: #f0f0f0;
  }

  h2 {
    margin-top: 40px;
  }
</style>
</head>
<body>

<h2>Доверенность</h2>
<table>
  <tr><th>Вычисляемый атрибут</th><th>Описание</th></tr>
  <tr><td>#Master_BeginDate#</td><td>дата начала действия доверенности</td></tr>
  <tr><td>#Master_EndDate#</td><td>дата окончания действия доверенности</td></tr>
  <tr><td>#Master_SubjectDetail#</td><td>список полномочий по доверенности из таблицы документа Доверенность</td></tr>
  <tr><td>#Master_WorkersDetail#</td><td>список сотрудников: ФИО, дата рождения, паспортные данные, адрес регистрации из таблицы документа Доверенность</td></tr>
</table>

<h2>Служебная записка</h2>
<table>
  <tr><th>Вычисляемый атрибут</th><th>Описание</th></tr>
  <tr><td>#Master_CopyRecipient#</td><td>дополнительный согласующий в служебной записке из табличной части "Копия"</td></tr>
  <tr><td>#Master_HideAgreedUsers#</td><td>скрываются согласующие документ по маршруту в печатной форме служебной записки</td></tr>
  <tr><td>#Master_HideInitiator#</td><td>скрывается составитель в печатной форме служебной записки</td></tr>
  <tr><td>#Master_HideImg#</td><td>скрывается печать "Зарегистрировано СЭД Лексема" в печатной форме без согласования в служебной записке</td></tr>
  <tr><td>#Master_HideSigner#</td><td>скрывается блок с подписантом в печатной форме служебной записки</td></tr>
  <tr><td>#Master_PrintedText#</td><td>содержательная часть</td></tr>
  <tr><td>#Master_Recipient#</td><td>получатель служебной записки из табличной части "Кому"</td></tr>
  <tr><td>#Master_ShowOldHeader#</td><td>отображение списка согласующих и получателей служебной записки</td></tr>
  <tr><td>#Master_Signer#</td><td>ФИО подписанта</td></tr>
  <tr><td>#Master_SignerDative#</td><td>ФИО подписанта в дательном падеже</td></tr>
  <tr><td>#Master_SignerGenitive#</td><td>ФИО подписанта в родительном падеже</td></tr>
  <tr><td>#Master_SignerPosition#</td><td>должность подписанта</td></tr>
  <tr><td>#Master_SignerPositionDative#</td><td>должность подписанта в дательном падеже</td></tr>
  <tr><td>#Master_SignerPositionGenitive#</td><td>должность подписанта в родительном падеже</td></tr>
  <tr><td>#Master_SignerShort#</td><td>краткое ФИО подписанта</td></tr>
  <tr><td>#Master_SignerShortDative#</td><td>краткое ФИО подписанта в дательном падеже</td></tr>
  <tr><td>#Master_SignerShortGenitive#</td><td>краткое ФИО подписанта в родительном падеже</td></tr>
</table>

<h2>Документооборот</h2>
<table>
  <tr><th>Вычисляемый атрибут</th><th>Описание</th></tr>
  <tr><td>#Master_ContractorPrint#</td><td>контрагент (из поля наименование для печати)</td></tr>
  <tr><td>#Master_CUserEmail#</td><td>эл.почта пользователя создателя документа</td></tr>
  <tr><td>#Master_CUserName#</td><td>полное ФИО пользователя создателя документа</td></tr>
  <tr><td>#Master_CUserNameAccusative#</td><td>ФИО пользователя создателя документа в винительном падеже</td></tr>
  <tr><td>#Master_CUserNameDative#</td><td>ФИО пользователя создателя документа в дательном падеже</td></tr>
  <tr><td>#Master_CUserNameGenitive#</td><td>ФИО пользователя создателя документа в родительном падеже</td></tr>
  <tr><td>#Master_CUserNameShort#</td><td>ФИО пользователя создателя документа в формате "Фамилия И.О."</td></tr>
  <tr><td>#Master_CUserPhoneNumber#</td><td>мобильный телефон пользователя создателя документа из справочника "Физическое лицо"</td></tr>
  <tr><td>#Master_CUserInnerPhone#</td><td> внутренний номер пользователя создателя документа из справочника "Физическое лицо"</td></tr>
  <tr><td>#Master_DateOfRegistration#</td><td>Рег. дата документа</td></tr>
  <tr><td>#Master_Department#</td><td>подразделение пользователя создателя документа</td></tr>
  <tr><td>#Master_DocumentDate#</td><td>дата создания документа</td></tr>
  <tr><td>#Master_DocumentDateText#</td><td>дата в формате 1 января 2022 г</td></tr>
  <tr><td>#Master_DocumentNumber#</td><td>номер создаваемого документа</td></tr>
  <tr><td>#Master_DocumentType#</td><td>тип документа</td></tr>
  <tr><td>#Master_DocumentSubtype#</td><td>подтип документа</td></tr>
  <tr><td>#Master_IdWorker#</td><td>код работника из справочника "Сотрудники"</td></tr>
  <tr><td>#Master_MyCompany#</td><td>компания пользователя создателя документа</td></tr>
  <tr><td>#Master_MyCompanyActualAddressText#</td><td>своя организация: фактический адрес</td></tr>
  <tr><td>#Master_MyCompanyDirector#</td><td>своя организация: директор в именительном падеже</td></tr>
  <tr><td>#Master_MyCompanyDirectorAccusative#</td><td>своя организация: директор в винительном падеже</td></tr>
  <tr><td>#Master_MyCompanyDirectorActBasis#</td><td>своя организация: основание действия директора</td></tr>
  <tr><td>#Master_MyCompanyDirectorDative#</td><td>своя организация: директор в дательном падеже</td></tr>
  <tr><td>#Master_MyCompanyDirectorGenitive#</td><td>своя организация: директор в родительном падеже</td></tr>
  <tr><td>#Master_MyCompanyDirectorProf#</td><td>своя организация: должность директора в именительном падеже</td></tr>
  <tr><td>#Master_MyCompanyDirectorProfGenitive#</td><td>своя организация: должность директора в родительном падеже</td></tr>
  <tr><td>#Master_MyCompanyDirectorShort#</td><td>своя организация: короткое ФИО директора</td></tr>
  <tr><td>#Master_MyCompanyEMailAddress#</td><td>своя организация: email</td></tr>
  <tr><td>#Master_MyCompanyFSS#</td><td>своя организация: номер ФСС</td></tr>
  <tr><td>#Master_MyCompanyFullName#</td><td>полное наименование своей организации</td></tr>
  <tr><td>#Master_MyCompanyGAccountant#</td><td>ФИО Гл. бухгалтера</td></tr>
  <tr><td>#Master_MyCompanyGAccountantAccusative#</td><td>ФИО Гл. бухгалтера в Вин. падеже</td></tr>
  <tr><td>#Master_MyCompanyGAccountantDative#</td><td>ФИО Гл. бухгалтера в Дат. падеже</td></tr>
  <tr><td>#Master_MyCompanyGAccountantGenitive#</td><td>ФИО Гл. бухгалтера в Род. падеже</td></tr>
  <tr><td>#Master_MyCompanyGAccountantProf#</td><td>должность Гл. бухгалтера</td></tr>
  <tr><td>#Master_MyCompanyGAccountantProfAccusative#</td><td>должность Гл. бухгалтера в Вин. падеже</td></tr>
  <tr><td>#Master_MyCompanyGAccountantProfDative#</td><td>должность Гл. бухгалтера в Дат. падеже</td></tr>
  <tr><td>#Master_MyCompanyGAccountantProfGenitive#</td><td>должность Гл. бухгалтера в Род. падеже</td></tr>
  <tr><td>#Master_MyCompanyINN#</td><td>своя организация: ИНН</td></tr>
  <tr><td>#Master_MyCompanyKPP#</td><td>своя организация: КПП</td></tr>
  <tr><td>#Master_MyCompanyLegalAddressText#</td><td>своя организация: юридический адрес</td></tr>
  <tr><td>#Master_MyCompanyMailAddressText#</td><td>своя организация: почтовый адрес</td></tr>
  <tr><td>#Master_MyCompanyOGRN#</td><td>своя организация: ОГРН</td></tr>
  <tr><td>#Master_MyCompanyOKATO#</td><td>своя организация: ОКАТО</td></tr>
  <tr><td>#Master_MyCompanyOKPO#</td><td>своя организация: OKPO</td></tr>
  <tr><td>#Master_MyCompanyPFR#</td><td>своя организация: номер ПФР</td></tr>
  <tr><td>#Master_MyCompanyPhone#</td><td>своя организация: контактный телефон</td></tr>
  <tr><td>#Master_MyCompanyRegistrationDate#</td><td>своя организация: дата регистрации</td></tr>
  <tr><td>#Master_MyCompanyShortName#</td><td>короткое наименование своей организации для печати</td></tr>
  <tr><td>#Master_NumTab#</td><td>табельный номер сотрудника</td></tr>
  <tr><td>#Master_Position#</td><td>должность пользователя создателя документа</td></tr>
  <tr><td>#Master_PositionDative#</td><td>должность пользователя создателя документа в дательном падеже</td></tr>
  <tr><td>#Master_PositionGenitive#</td><td>должность пользователя создателя документа в родительном падеже</td></tr>
  <tr><td>#Master_PrintedText#</td><td>содержательная часть во входящем документе, исходящем документе, орд, служебной записке</td></tr>
  <tr><td>#Route_AggComment#</td><td>комментарий пользователя из маршрута согласования</td></tr>
  <tr><td>#Route_AggDocumentStatus#</td><td>статус этапа согласования пользователем из маршрута</td></tr>
  <tr><td>#Route_AggUserName#</td><td>Ф.И.О. пользователя из маршрута согласования</td></tr>
  <tr><td>#Route_AggUserGroup#</td><td>отображение группы пользователя из маршрута согласования из столбца "Группа"</td></tr>
  <tr><td>#Master_SignerIOFamily#</td><td>И.О. Фамилия подписанта в именительном падеже</td></tr>
  <tr><td>#Master_SignerIOFamilyDative#</td><td>И.О. Фамилия подписанта в дательном падеже</td></tr>
  <tr><td>#Master_SignerIOFamilyGenitive#</td><td>И.О. Фамилия подписанта в родительном падеже</td></tr>
  <tr><td>#Master_SumInWords#</td><td> конвертирует число в текст. Используется для атрибута <b>Вещественное</b> (необходимо дополнительно после вычисляемого атрибута в скобках указать служебное наименование атрибута из конструктора). Пример: #summa# (#Master_SumInWords#(#summa#)) , где #summa# служебное наименование атрибута из конструктора. Будет отображать как <b>1000.00 (одна тысяча рублeй 00 копeeк)</b>
  <tr><td>#Master_WorkersAccusativeDetail#</td><td>список сотрудников в род падеже</td></tr>
  <tr><td>#Master_WorkersAccusativePasportDetail#</td><td>список сотрудников в род падеже с паспортом</td></tr>
  <tr><td>#Master_WorkersGenitiveDetail#</td><td>список сотрудников в винительном падеже</td></tr>
  <tr><td>#Master_WorkersGenitivePasportDetail#</td><td>список сотрудников в винительном падеже c паспортом</td></tr>
  <tr><td>#WorkerNominativePasportList#</td><td>список сотрудников с паспортами</td></tr>
</table>

<h2>Служебная записка на командировку</h2>
<table>
  <tr><th>Вычисляемый атрибут</th><th>Описание</th></tr>
  <tr><td>#Master_DocumentBeginDate#</td><td>"Период командировки с" в служебной записке на командировку на конструкторе</td></tr>
  <tr><td>#Master_DocumentContractorText#</td><td>"Куда Организация" в служебной записке на командировку на конструкторе</td></tr>
  <tr><td>#Master_DocumentDaysOnRoad#</td><td>"Кол-во дней в пути" в служебной записке на командировку на конструкторе</td></tr>
  <tr><td>#Master_DocumentDestination#</td><td>"Куда Страна/Город" в служебной записке на командировку на конструкторе</td></tr>
  <tr><td>#Master_DocumentEndDate#</td><td>"Период командировки по" в служебной записке на командировку на конструкторе</td></tr>
  <tr><td>#Master_DocumentLeadTime#</td><td>"Кол-во дней" в служебной записке на командировку на конструкторе</td></tr>
  <tr><td>#Master_DocumentNote#</td><td>"Примечание" в служебной записке на командировку на конструкторе</td></tr>
  <tr><td>#Master_DocumentPurpose#</td><td>Цель командировки в служебной записке на командировку на конструкторе</td></tr>
</table>

<h2>Исходящий документ</h2>
<table>
  <tr><th>Вычисляемый атрибут</th><th>Описание</th></tr>
  <tr><td>#Master_PrintedText#</td><td>содержательная часть</td></tr>
  <tr><td>#Master_ReplyNumber#</td><td>в ответ на входящий - номер документа</td></tr>
  <tr><td>#Master_ReplyDate#</td><td>в ответ на входящий - дата документа</td></tr>
  <tr><td>#Master_WhoseName#</td><td>на чье имя (Ф.И.О.) в исходящем документе</td></tr>
</table>

<h2>ОРД</h2>
<table>
  <tr><th>Вычисляемый атрибут</th><th>Описание</th></tr>
  <tr><td>#Master_PrintedText#</td><td>содержательная часть</td></tr>
  <tr><td>#Master_Signer#</td><td>ФИО подписанта</td></tr>
  <tr><td>#Master_SignerDative#</td><td>ФИО подписанта в дательном падеже</td></tr>
  <tr><td>#Master_SignerGenitive#</td><td>ФИО подписанта в родительном падеже</td></tr>
  <tr><td>#Master_SignerPosition#</td><td>должность подписанта</td></tr>
  <tr><td>#Master_SignerPositionDative#</td><td>должность подписанта в дательном падеже</td></tr>
  <tr><td>#Master_SignerPositionGenitive#</td><td>должность подписанта в родительном падеже</td></tr>
  <tr><td>#Master_SignerShort#</td><td>краткое ФИО подписанта</td></tr>
  <tr><td>#Master_SignerShortDative#</td><td>краткое ФИО подписанта в дательном падеже</td></tr>
  <tr><td>#Master_SignerShortGenitive#</td><td>краткое ФИО подписанта в родительном падеже</td></tr>
</table>

</body>
</html>

Заполненная табличная часть выглядит следующим образом:

![alt text](./media/DocumentConstructorForm-8.png)

## Шаблон

Поле "Шаблон" – это макет документа, включающий в себя, как правило, большую часть его содержания. В шаблоне должен содержаться текст и определенные ранее атрибуты, включенные в текст при помощи соответствующих значений столбца "Наименование колонки" таблицы "Дополнительные атрибуты".

В поле "Шаблон" доступны инструменты форматирования текста: доступно изменение шрифта текста, выравнивание, создание списков. При необходимости есть возможность _"развернуть"_ шаблон в более удобные масштабы, для этого необходимо дважды щелкнуть по пустому месту в шаблоне.

Заполненный текст шаблона выглядит следующим образом:

![Рисунок 13 Заполненный шаблон](./media/DocumentConstructorForm-9.png)

Для дальнейшей работы пользователей с документом необходимо его сохранить, нажав на кнопку "Сохранить"
![](./media/image12.png)

!!! note
    В шаблон можно вставить графические файлы, например логотип компании. Необходимо обратить внимание чтобы используемый графический файл не имел прозрачности.

## Предпросмотр

Для того, чтобы иметь более чёткое представление о том, как будет выглядеть печатная форма при построенном шаблоне, можно воспользоваться кнопкой "Предпросмотр" ![Препросмотр](media/previewBtn.png). При нажатии на кнопку документ конструктора будет сохранён и откроется печатная форма с текстом, внесённом в шаблон. При предпросмотре служебные наименования на конкретные значения не заменяются.

![Пример отчёта при предпросмотре](./media/DocumentConstructorForm-10.png)

## Показать подсказки

Для того, чтобы при работе с конструктором видеть краткие рекомендации по его заполнению, можно воспользоваться кнопкой <img alt="Показать подсказки" src="media/showTips.png">.

В верхней части формы появится подсказка:

![alt text](./media/DocumentConstructorForm-11.png)

Чтобы скрыть вспомогательный текст, необходимо нажать на кнопку <img alt="Скрыть подсказки" src="media/hideTips.png">.

## Создать шаблон маршрута

При нажатии на данную кнопку автоматически создается форма шаблона маршрута с выбранными типом и подтипом документа из вкладки "Основная". Подробнее о работе с данной формой можно ознакомиться в статье ["Настройка шаблонов маршрутов"](../Настройка шаблонов маршрутов/index.md).

## Перейти в документ

При нажатии на данную кнопку возможно перейти в настройка выбранного [подтипа](../Подтипы документов/index.md) либо в [настройки](../Настройка документов/index.md) документа

## Показать организации

При нажатии на данную кнопку показываются организации на которые распространяется данный конструктор документов.

![alt text](./media/DocumentConstructorForm-45.png)

Если необходимо скопировать текущий конструктор на другие филиалы, необходимо их выделить в табличной части и нажать кнопку ОК.

## Закрытие шаблона { #закрытие-шаблона}

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

Аналогичные действия производятся в том случае, если есть документ с неактуальным подтипом.

![Alt text](media/image-4.png)

## Копирование шаблона

При копировании шаблона отступ текста может выглядеть следующим образом:

![Рисунок 29 Копирование шаблона отступ](./media/Конструктор копирование в столбик.png)

Необходимо уменьшить отступ, чтобы скопированный текст умещался в строчку:

![Рисунок 30 Копирование исправление](./media/Конструктор копирование в столбик исправление.png)

## Вкладка "Настройка интерфейса"

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

### Меню операций

В табличной части "Тип+подтип документов" задаются условия какие типы и подтипы документов будут отображаться по кнопке "Операции" внутри документа.

Данный пример представлен для конструктора группы ["Уведомления Lexema"](../Настройка внутрисистемных уведомлений/index.md) подтипа "Уведомления об отпуске".
 
![Меню](./media/DocumentConstructorForm-12.png)

* **Вкл.** - включение или отключение операции в выбранном документе;
* **Название** - задается название операции, например, Создать "Заявление на ежегодный отпуск";
* **Тип документа** - выбирается к какому типу документа необходимо добавить меню операций;

!!! warning
    По умолчанию создается новый документ без заполненных полей. В случае когда необходимо создать новый документ (как на конструкторе, так и любой другой) с заполненными данными из первичного документа, возможно реализовать через столбец "Скрипт по созданию документа".

* **Подтип** - выбирается к какому типу документа необходимо добавить меню операций;
* **Условие фильтрации** - задается название типа вида отпуска указанный в [уведомлении](../Настройка внутрисистемных уведомлений/index.md)
* **Служебное наименование** - задается служебное наименование [дополнительного атрибута](#дополнительные_атрибуты_документа), в данном случае **#typeVacation#**.

![Атрибут](./media/DocumentConstructorForm-13.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/DocumentConstructorForm-14.png)

### Видимость данных

В конструторе документов имеется возможность редактирования элементов верстки и кнопок в панели управления документа: 

![Рисунок](./media/DocumentConstructorForm-15.png)

Данные настройки имеют следующие характеристики: 

* Скрыть поле **<Автор/Работник>** - скрывается инициатор документа;

![Автор](media/noAvtor.png)
![Автор](media/noAvtor1.png)

* Скрыть группу **<Регистрационные данные> полностью** - скрывается полностью группа регистрационных данных документа;

![Нет данных](media/noDannye.png)
![Нет данных](media/noDannye1.png)

* Скрыть кнопку **<Копировать>** - скрывается кнопка "Копировать" в панели инструментов в **универсальных документах** и **доверенностях на конструкторе**;

![Копирование](media/noCopy1.png)

![Копирование](media/noCopy12.png)

* Скрыть кнопку **<Рассылка>** - скрывается кнопка "Рассылка" в панели инструментов в **заявлениях**;

![Рассылка](media/noRassylka.png)

![Рассылка](media/noRassylka1.png)

* Скрыть кнопку **<Аннулировать>** - скрывается кнопка "Аннулировать" в панели инструментов в документах;

![Аннулировать](media/anull.png)

![Аннулировать](media/anull2.png)

* Скрыть кнопку **<На контроль>** - скрывается кнопка "На контроль" в панели инструментов в документах;

![На контроль](media/noControl.png)

![На контроль](media/noControl1.png)

* Скрыть кнопку **<Операции>** - скрывается кнопка "Операции" в панели инструментов в **заявлениях**;

![Операции](media/noOperachii.png)

![Операции](media/noOperachii1.png)

* Скрыть поле **<Доп.Согласование>** - скрывается поле "Доп.согласование" в служебной записке;

![alt text](media/image-35.png)

![alt text](media/image-36.png)

* Скрыть поле **<Копия:>** - скрывается поле "Копия" в служебной записке;

![alt text](media/image-33.png)

![alt text](media/image-34.png)

* Скрыть поле **<Кому:>** - скрывается поле "Кому" в служебной записке;

![alt text](media/image-31.png)

![alt text](media/image-32.png)


<!--* Скрыть поле **<Номер документа>** - скрывается номер документа;

![Нет номера](media/noNumber1.png)
![Нет номера](media/noNumber.png)

* Скрыть поле **<Дата документа>** - скрывается дата документа;

![Дата](media/noDate.png)
![Дата](media/noDate1.png)

* Скрыть поле **<Должность автора>** - скрывается должность инициатора документа;

![Должность](media/noDolnzhnost.png)
![Должность](media/noDolnzhnost1.png)

* Скрыть поле **<Подразделение автора>** - скрывается подразделение инициатора документа;

![Подразделение](media/noPodrazdelenie.png)
![Подразделение](media/noPodrazdelenie1.png)

* Скрыть поле **<Организация>**

![Организация](media/noOrg.png)
![Организация](media/noOrg1.png)

* Скрыть поле **<Договор>** - скрывается поле "Договор" во входящем документе;

![alt text](media/image-40.jpg)

![alt text](media/image124.png)

* Скрыть поле **<Вид доставки>** - скрывается поле "Вид доставки" во входящем документе;

![alt text](media/image120.png)

![alt text](media/image122.png)

* Скрыть поле **<Получатель>** - скрывается поле "Получатель" во входящем документе;

![alt text](media/image121.png)

![alt text](media/image123.png)

* Скрыть поле **<Примечание>** - скрывается поле "Примечание" в исходящем документе;

![alt text](media/image125.png)

![alt text](media/image126.png)-->

### Статичные поля

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

![alt text](./media/DocumentConstructorForm-16.png)

Данные настройки работают по аналогии с [дополнительными атрибутами](#дополнительные_атрибуты_документа).

* **Атрибут документа** - выпадающий список с наименованием атрибута документа.
<!-- * **Id** - уникальный идентификатор атрибута в макете документа
* **Поле в БД** - наименование атрибута документа в базе данных. -->
* **Видимость** - отображение атрибута в документе.
* **Требовать заполнение** – обязательность заполнения атрибута. Если в табличной части стоит галочка, документ не получится сохранить и отправить по маршруту, пока соответствующий атрибут не будет заполнен. Вкл. - требует заполнения атрибута.
* **Группа столбцов "Значение по умолчанию"** используется в случае, если при создании документа реквизит должен быть заполнен неким условленным значением. Для разных типов атрибутов используются разные колонки. Для типов атрибута **"Строка"** требуется заполнить поле в столбце **"Текст"**. Для типов атрибута **"Логическое"** требуется поставить галочку в столбце **"Флаг"**. Для типа атрибута **"Целое"** или типов атрибутов, которые позволяют в документе выбрать значение из списка, требуется заполнить поле в столбце "Код/число" числовым значением.

## Вкладка "Настройка проверок"

Данная вкладка предназначена для определения зависимостей атрибутов между собой.

### Зависимые атрибуты

В данном примере представлен конструктор подтипа "Заявление о предоставлении стандартного налогового вычета на ребенка". В блоке "Дополнительные атрибуты", например, по первому ребенку указаны такие атрибуты как **#first#, #firstfio#, #firstdr#, #firstvichet#** и **#firstapp#**.

![Конструктор](./media/DocumentConstructorForm-17.png)

В столбце **"Основной атрибут"** заполняется служебное наименование атрибута, который является основным, в данном случае **#first#**. В столбце **«Зависимые атрибуты»** указываются служебные наименования атрибутов, которые необходимо указать как зависимые от основного атрибута, в данном случае это **#firstfio#, #firstdr#, #firstvichet# и #firstapp#**.

Если в табличной части стоит галочка "Вкл.", документ не получится сохранить и отправить по маршруту, пока соответствующий атрибут не будет заполнен. **Вкл.** - требует заполнения атрибута. **"Действие"** - назначается при каком действии будет требоваться заполнения атрибута в процессе согласования по маршруту.Возможно выбрать как одно, так и несколько действий. Если в столбце **"Действие"** ничего не указано, то данная проверка будет срабатывать у инициатора документа.

![alt text](./media/DocumentConstructorForm-18.png)

В данном примере указано что при заполнении поля "Первый ребенок" у которого служебное наименование **#first#**, система будет проверять заполнение полей ФИО, Дата рождения, Размер вычета и свидетельство о рождении, так как служебные наименования указаны в вычислениях как зависимые от поля "Первый ребенок". В случае не заполнения зависимых полей, они будут подсвечены красным светом, а также будет выведен текст о необходимости заполнить данные.

![Заявление на вычет](./media/DocumentConstructorForm-19.png)

### Дополнительные проверки

#### Проверки для дополнительных атрибутов

При необходимости возможно настроить дополнительные проверки для атрибутов.  В данном примере представлен конструктор подтипа "Заявление на перенос ежегодного оплачиваемого отпуска". В блоке "**Дополнительные атрибуты"** указаны атрибуты по датам переноса и количеству дней переноса.  
При необходимости возможно отключить какие-то проверки по отдельности, для этого необходимо выбрать необходимую проверку и в столбце **"Вкл."** проставить галочку. В столбце **"Колонка для выделения"** перечисляются атрибуты (если их несколько то через запятую), на которые необходимо задать проверки. В столбце **"Сообщение"** задается информационное сообщение, которое выводится в случае незаполнения либо некорректных данных. В столбце **"Правило для проверки"** указывается условие по которому вычисляется проверка по зависимым атрибутам. **"Действие"** - назначается при каком действии будет требоваться заполнения атрибута в процессе согласования по маршруту.Возможно выбрать как одно, так и несколько действий.  
Если в столбце **"Действие"** ничего не указано, то данная проверка будет срабатывать у инициатора документа.

![alt text](./media/DocumentConstructorForm-20.png)

В данном примере указано правило: в случае если атрибут **#bdate_new1#** (_Дата начала нового отпуска (период 1)_) меньше либо равна текущей дате, то будет информационное сообщение: **"Дата начала нового отпуска должна быть позже текущей даты"**.

<!--![alt text](media/image-44.png)-->
![Предупреждение](./media/DocumentConstructorForm-21.png)

**Ниже представлены примеры проверок для расчета количества дней:**

<!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>
        <tr>
            <td>#bdate#</td>
            <td>На текущий календарный год отпуск запланирован, для корректировки периода предоставления отпуска необходимо оформить перенесение отпуска</td>
            <td>
            exists(select 1 from aw."RP_DocVacation" p
                inner join aw."RP_WorkerVacation" m on p."VCode" = m."Pcode"
                where p."Year" = date_part('year'::varchar(255),  #bdate#::date) and m."IdWorker" = #Master_IdWorker# and p."TypeName" = 'Base.RP_DocVacation'
                limit 1)</td>
        </tr>
          <tr>
            <td>#Master_DocumentDate#</td>
            <td>Заявление на перенос отпуска будущего месяца создаются только в период с 10 по 17 число текущего месяца</td>
            <td>
            date_part('day',now()) not in (10,11,12,13,14,15,16,17)</td>
        </tr>
    </table>
</body>
</html>

!!! note
    Для вычислений проверки **"Перенос создан с даты ранее разрешенной"** необходимо завести константу ```создавать переносы отпусков, начиная с даты (день+месяц)```, заполняется столбец **"Значение (текст)"** числом и месяцем ранее которой не разрешается создавать заявление на перенос ежегодного отпуска.

**Ниже представлен пример проверки на заполнение реквизита в документе для пользователя с определенной должностью**, на примере документа "Заявление на получение справки 2НДФЛ", где #year# является реквизитом документа

Колонка для выделения | Сообщение | Правило для проверки
----------------------|-----------|---------------------
#year# | Необходимо заполнить информацию | #Master_Position# ilike '%водитель%'

Также возможно использовать служебное слово **#Master_PositionName#**, например, при написании заявления на ежегодный отпуск руководителем, необходимо указать заместителя на период отсутствия.

Колонка для выделения | Сообщение | Правило для проверки
----------------------|-----------|---------------------
#zam# | Необходимо заполнить информацию |  coalesce(#zam#,0)::bigint=0::bigint and  '#Master_PositionName#'::text ilike '%глав%врач%'::text


#### Проверки для табличных атрибутов

В столбец **"Колонка для выделения"** указывается служебное наименование таблицы,например, **#Table1#**, а в столбце **"Правило для проверки"** указывается служебные наименования таблицы и атрибута, например, **#Table1_bigint#**.

![alt text](./media/DocumentConstructorForm-22.png)
![alt text](./media/DocumentConstructorForm-23.png)

## Вкладка "Настройка вычислений"

Данная вкладка предназначена для вычисления зависимостей атрибутов.

В столбце **"Основной атрибут"** заполняется служебное наименование атрибута, который является основным в конструкторе.  
В столбце **«Зависимые атрибуты»** указываются служебные наименования атрибутов, которые необходимо указать как зависимые от основного атрибута.  
В столбце **"Вычисление"** указывается условие по которому вычисляется проверка по зависимым атрибутам.  
В столбце **"Фильтрация"** указывается условие по которому выполняется фильтрация по зависимым атрибутам.

ВСТАВИТЬ СКРИН!!!

В качестве вычисления возможно также использовать [вычисляемые атрибуты](#вычисляемые_атрибуты):

Вычисляемый атрибут | Описание
--------------------|---------
#Master_BeginDate#  |  дата начала действия доверенности
#Master_DocumentDate#  |  дата создания документа
#Master_DocumentNumber#  |  номер создаваемого документа 
#Master_EndDate# | дата окончания действия доверенности
#Master_IdWorker# | код работника из справочника "Сотрудники"
#Master_MyCompany#  |  компания пользователя создателя документа
#Master_Position#  |  должность пользователя создателя документа

В данном примере представлены вычисления для определения подразделения и должности при выборе сотрудника из выпадающего списка. В качестве основного атрибута для обоих вычислений выступает служебное наименование **#worker#**, для должности - **#prof#**, для подразделения - **#podr#**. При необходимости вычисления можно отключить, для этого нужно проставить галочку в столбце "Вкл.".

Основной атрибут | Зависимые атрибуты | Вычисления
-----------------|--------------------|-----------
#worker# | #prof# | (select p."IdPost" from comdoc."WorkersListOnDate"(now()::date, 1, 1) p where p."IdWorker" = #worker#)
#worker# | #podr# | (select p."IdDepartment" from comdoc."WorkersListOnDate"(now()::date, 1, 1) p where p."IdWorker" = #worker#)

![Alt text](media/image-12.png)
![Атрибуты](media/naimenova.png)
![Заявление](media/zayavlen.png)

Для табличных атрибутов помимо служебного наименования атрибута необходимо добавить служебное наименование табличной части через нижнее подчеркивание _. 

![alt text](media/image-51.png)
![alt text](media/image-52.png)


Основной атрибут | Зависимые атрибуты | Вычисления
-----------------|--------------------|-----------
#Table1_worker_tabn# | #Table1_worker# | (select "VCode" from rp."RP_Worker" where "NumTab" = #Table1_worker_tabn# order by  coalesce("DateEnd", 20700101'::date) desc limit 1)
#Table1_worker# | #Table1_worker_tabn# | (select "NumTab" from rp."RP_Worker" where "VCode" = #Table1_worker#)
#Table1_worker# | #Table1_worker_post# | (select rpwm.""IdPost"" from rp.""RP_Worker"" w join rp.""RP_WorkerMove"" rpwm on rpwm.""IdWorker"" =  w.""VCode""   where w.""VCode"" =  #Table1_worker#  and w.""NumTab"" = #Table1_worker_tabn# order by coalesce(rpwm.""DateEnd"",'20700101') desc limit 1 )

!!! note
    Для табличных атрибутов присутствует служебное слово **Remove**. Его возможно использовать в случае когда необходимо очистить автоматически динамический атрибут после удаления данных из табличной части.
    К служебному наименованию служебной таблицы добавляется Remove без подчеркивания и пишется вычисление на очищение динамического атрибута.
    Например основой атрибут - **#Table1Remove#**, вычисление (select case when len(#Table1#) = 0 then '' else  'СОГЛАСОВАНО' end).

В примере указанном ниже указано условие фильтрации по которому в зависимости от выбранного подразделения будут фильтроваться сотрудники, которые работают в данном подразделении.

Основной атрибут | Зависимые атрибуты | Фильтрация
-----------------|--------------------|-----------
#podr# | #worker# |  and (t."IdDepartment" = coalesce(#podr#,0) or #podr# is null)

![Alt text](media/image-6.png)
![Атрибуты](media/naimenova.png)
![Alt text](media/image-7.png)

!!! note
    Фильтрация настроена для атрибутов с выпадающим списком: **Должность**, **Подразделение**, **Работник**, **Пользовательские типы атрибутов документов**, **Договор**, **Контрагент**, **Произвольная выборка**

Для зависимых атрибутов возможно настроить динамическое появление атрибута в документе. Для отображения атрибутов необходимо проставить галочка в столбце **"Видимость"**. должно быть **логическое**. Также данные атрибуты должны быть по умолчанию невидимыми в табличной части [дополнительные атрибуты](#дополнительные_атрибуты_документа).

![Alt text](media/image-5.png)
![Alt text](media/image-2.png)
![Alt text](media/image-1.png)

## Вкладка "Ограничения"

### Правила для вложений

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

- **"Роли"** - из выпадающего списка выбирается необходимая роль.

- Этап **"Всегда"** - можно прикрепить вложение к документу в любой момент и на любом этапе, и на этапе завершения.

- Этап **"Без маршрута"** -  можно прикрепить вложение к документу если маршрут не создан

-  **"Действие"** - назначается при каком действии по маршруту пользователь сможет вкладывать вложение.Возможно выбрать как одно, так и несколько действий.
  
![Рисунок](./media/DocumentConstructorForm-25.png)

<!--Галочка напротив поля **Разрешить вкладывать файлы** должна быть проставлена.-->

!!! note
    Если в данной вкладке не заполнены правила, то вкладывать документы во вложении может любой пользователь на любом этапе

При включенной галке  **Запрещать вкладывать файлы после завершения маршрута** запрещено вкладывать любые типы вложений в данном подтипе документов после завершения маршрута.

При включенной галке **"Запрещать всем вкладывать файлы"** запрещено вкладывать любые типы вложений в данном подтипе документов.

### Необходимые типы вложений

В конструкторе есть возможность задавать типы вложений. Для этого их нужно добавить в таблице "Необходимые типы вложений" по кнопке добавить. Типы вложений выбираются из справочника ["Типы вложений"](../Типы вложений/index.md)

**Необходимые типы вложений** - из выпадающего списка выбирается тип вложения.

- Этап **"Всегда"** - требоваие вложения в любой момент и на любом этапе, и на этапе завершения.

- Этап **"Без маршрута"** - требование вложения если маршрут не создан.

-  **"Действие"** - назначается при каком действии по маршруту требовать прикрепить вложение к документу.Возможно выбрать как одно, так и несколько действий.

![Рисунок](./media/DocumentConstructorForm-26.png)

Если в конструкторе НЕ заполнена таблица "Необходимые типы вложений", то проверка при отправке по маршруту НЕ сработает.



### Правила на время создания

В данном блоке, при необходимости устанавливается ограничение от даты создания документа. Например, для подтипа "Заявление на ежегодный отпуск", при периоде заявления от 1 до 7 календарных дней не получится создать заявление на этот период ранее чем за календарных 7 дней от текущей даты.

!!! Примечание
    Данное правило действуют только на заявление длительностью от 1 до 7 календарных дней. В случае если у заявления период действия от 8 дней и более, ограничение действовать не будет.


![Рисунок](./media/DocumentConstructorForm-27.png)

![7 дней](media/7days.png)

**Проверка сработает, если [служебное наименование](#служебное_наименование) в Конструкторе указано `"CheckDates"` или "`CheckCalendarDates"`**

![Alt text](media/image-11.png)

Чтобы установить одно ограничение создания на любое количество дней, необходимо указать 1 в столбце «Мин. кол-во дней» и оставить столбец «Макс. кол-во дней» пустым. В этом случае ограничение будет применяться вне зависимости от указанного количества дней.

![Одно правило](media/odnoPravilo.png)

### Служебное наименование

Служебное наименование является необязательным, но рекомендуемым полем, которое должно либо содержать уникальное значение среди документов реестра "Конструктор документов" (на латинице, без спецсимволов и без пробелов), либо одно из "специальных". *Специальные* служебные наименования подключают функции проверок и вычислений. Можно воспользоваться следующими встроенными функциями:

- Для проверки и настройки дат c учетом **рабочих** дней: в поле "Служебное наименование" ввести значение ```CheckDates```; для атрибутов, которые будут проверяться и рассчитываться в зависимости друг от друга, необходимо указать служебные слова ```#bdate#``` (начало периода), ```#edate#``` (конец периода), ```#kolvo#``` (количество дней между датами). 
- Для проверки и настройки дат с учетом **календарных** дней: в поле "Служебное наименование" ввести значение ```CheckCalendarDates```; для атрибутов, которые будут проверяться и рассчитываться в зависимости друг от друга, необходимо указать служебные слова ```#bdate#``` (начало периода), ```#edate#``` (конец периода), ```#kolvo#``` (количество дней между датами).
- Для проверки и настройки когда дата начала, например, электронного листа нетрудоспособности, не может быть больше даты окончания:  поле "Служебное наименование" ввести значение ```CheckBDateBeforeEDate```; для атрибутов, которые будут проверяться и рассчитываться в зависимости друг от друга, необходимо указать служебные слова ```#bdate#``` (начало периода), ```#edate#``` (конец периода).
- Для проверки и настройки дат с учетом **будних дней за исключением субботы, воскресенья и праздничных**: в поле "Служебное наименование" ввести значение ```CheckDayOffDates```; для атрибутов, которые будут проверяться и рассчитываться в зависимости друг от друга, необходимо указать служебные слова ```#bdate#``` (начало периода), ```#edate#``` (конец периода), ```#kolvo#``` (количество дней между датами).

!!! note
    Служебные наименование должны быть указаны с маленькой буквы

Для настройки индивидуальных проверок необходимо обратиться в техническую поддержку.

## Вкладка "Тиражирование/Оповещения"

**Тиражировать заявление для совместителей** - включает автоматическое тиражирование заявления по всем организациям, в которых работает совместитель.

**Запретить удалять тираж.копии** - запрет на удаление тиражированных копий заявлений.

**Разрешить тиражирование уволенным по всем местам работы** и **Атрибут Год** - включает автоматическое тиражирование заявления на те филиалы, в которых сотрудник работал в указанный год, но в данный момент уволен.

![Рисунок](./media/DocumentConstructorForm-28.png)

### Предупреждение при тиражировании/Оповещение

#### Тиражирование документа

Если сотрудник трудоустроен на нескольких организациях холдинга и/или принят также внутренним совместителем на одной из организаций, то при оформлении заявления на отпуск, он должен согласовать заявление по каждому месту работы. Для этого реализована возможность тиражирования данного документа во все организации, и все должности внутри одной организации. По завершению согласования заявления на основном месте работе, оно будет растиражировано по каждому месту работы. В данном блоке можно  указать данную информацию для совместителя, что ему не нужно будет создавать на каждом месте работы нужное заявление. Информация будет отображаться при заполнении заявления на основном месте работы.

![Рисунок](./media/DocumentConstructorForm-29.png)

![Рисунок](./media/DocumentConstructorForm-30.png)

С помощью инструментов, расположенных в верхней части можно форматировать текст. Например, выбрать шрифт, размер, цвет, начертание (полужирный, курсив или подчеркнутый), выравнивание абзацев.

![Рисунок](./media/DocumentConstructorForm-32.png)

#### Оповещение документа

При необходимости для документов можно настроить информационные сообщения которые будут отображаться в верхней части документа.

![Оповещение](media/opovesh.png)
![Документ](media/doc.png)

С помощью инструментов, расположенных в верхней части можно форматировать текст. Например, выбрать шрифт, размер, цвет, начертание (полужирный, курсив или подчеркнутый), выравнивание абзацев.

### Текст для документа-копии

Данный блок заполняется в случае если для документов-копий (тиражированных заявлений) необходимо указать текст предупреждения.

![Рисунок](./media/DocumentConstructorForm-31.png)

![Копия](media/copi.png)

С помощью инструментов, расположенных в верхней части можно форматировать текст. Например, выбрать шрифт, размер, цвет, начертание (полужирный, курсив или подчеркнутый), выравнивание абзацев.

![Форматирование](./media/DocumentConstructorForm-33.png)

### Не применять тиражирование для Пользователей

Если в таблице указан пользователь, то система не будет автоматически создавать копии документов на все места его работы. В этом случае пользователь должен самостоятельно переключаться на каждое место работы и заполнять заявление на отпуск отдельно для каждой организации, в которой он работает.

![Не тиражировать](./media/DocumentConstructorForm-34.png)

### Сообщения об удаленных документах 

Данное поле предназначено для вывода оповещения в документе, при переводе документа в статус "Удалено". 

![Рисунок](./media/DocumentConstructorForm-35.png)

## Вкладка "Сформировать наименование документов из реквизитов"

### Краткое содержание

Заполненное краткое содержание автоматически заполнится в соответствующем поле в [служебной записке](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Служебная записка/).

![Содержание](./media/DocumentConstructorForm-36.png)

![Служебная записка](./media/DocumentConstructorForm-37.png)

В данной вкладке присутствует поле **"Правило для заголовка вкладки документа"**. Данное поле позволяет задавать наименование для вкладки документа. Наименование отображается текстовым наименованием, наименованием с помощью служебного наименования или комбинирования текстового наименования со служебным наименованием.  
Стоит учитывать что та же самая настройка присутствует в [Настройке документов](https://ecm-administrator-manuals.readthedocs.io/ru/latest/Admin%20manuals/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0%20%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2/#%D0%B2%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0_%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_%D0%BD%D0%B0%D0%B8%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F), при указанных настройках и в конструкторе документов и в настройке документов одновременно, преимущество наименования вкладки будет у конструктора документов.

![Наименование вкладки](./media/DocumentConstructorForm-38.png)

### Правило наименования документа:

По умолчанию наименование и тема документа формируется по правилу #Master_DocumentType# № #Master_DocumentNumber# от #Master_DocumentDate#, которое расшифровывается как <Тип документа> №<Номер документа> от <Дата документа>. В поле ниже вы можете задать свое правило.
Правила формируются на основании **служебных наименований** атрибутов документа, как [вычисляемых](#вычисляемые_атрибуты), так и указанных в таблице [Дополнительные атрибуты](#дополнительные_атрибуты_документа). Например, для заявления на ежегодный отпуск можно задать следующее правило:

`#Master_DocumentSubtype# от сотрудника #Master_CUserNameGenitive# от #Master_DocumentDate#` , которое расшифровывается как <Подтип документа> от сотрудника <ФИО инициатора документа в родительном падеже> от <Текущая дата документа>.

![Рисунок](./media/DocumentConstructorForm-39.png)

!!! note
    В данной настройке есть возможность использовать атрибуты полей документа, например`#kolvo#`.

    ![Количество](media/kolvo.png)

В окне маршрута будет отображено заданное наименование документа.

![Наименование](./media/DocumentConstructorForm-40.png)

### Правило темы документа

Правило темы заполняется по аналогии наименования документа, описанного [выше](#правило_наименования_документа)

Заполненная тема документа будет отображаться в панели документооборота в столбце "По вопросу".

![По вопросу](media/vopros.png)


<!---## Вкладка "Сообщения об удаленных документах"

Данная вкладка предназначена для самостоятельного указания текста для удаленных документах из системы 1С. Если электронный документ был загружен в систему 1С, и при этом соответствующий приказ был помечен на удаление в системе 1С, то указанный текст, он будет отображаться в связанном с приказом заявлении. Для проставления признака должна быть настроена задача ["Проверка документов Лексемы на удаление в 1С"](../Функции планировщика задач/index.md) в [планировщике](../Планировщик задач/index.md).

![Сообщение](media/messageDelete.png)

![1C](media/delete1c.png)

![Заявление](media/messageEmployee.png)-->

## Вкладка "Настройка проверок на пересечение периодов"

Данная вкладка предназначена для настроек проверок на пересечение периодов между разными подтипами документов.

* **Вкл.** - включение или отключение операции в выбранном документе;

В группе столбцов "Текущий документ" указываются необходимые проверки для текущего подтипа документа.

Текущий документ | Описание
-----------------|---------
Реквизит Дата с | / Реквизит Дата по | указываются служебные наименования атрибутов дата начала и даты окончания. |
Маршрут | выбирается статус маршрута текущего документа из выпадающего списка  (**В любом статусе** - маршрут может быть как завершен с любым статусом положительно _(согласован)_ или отрицательно _(несогласован)_, быть текущим, либо отсутствовать) (**Завершен** - маршрут завершен с любым статусом положительно или отрицательно) (**Завершен положительно** - маршрут завершен с положительным статусом _(согласован)_) |

В группе столбцов "Документ для проверки" указываются необходимые проверки для документа по которому будет проверяться текущий.

Документ для проверки | Описание
-----------------|---------
Тип документа | заполняется тип документа
Подтип документа | заполняется подтип документа
Реквизит Дата с | / Реквизит Дата по | указываются служебные наименования атрибутов дата начала и даты окончания. |
Маршрут | выбирается статус маршрута документа для проверки из выпадающего списка  (**В любом статусе** - маршрут может быть как завершен с любым статусом положительно _(согласован)_ или отрицательно _(несогласован)_, быть текущим, либо отсутствовать) (**Завершен** - маршрут завершен с любым статусом положительно или отрицательно) (**Завершен положительно** - маршрут завершен с положительным статусом _(согласован)_) |
Примечание | при необходимо к проверку указывается примечание

![alt text](media/image-30.png)

## Настройка операций по созданию заявления в личном кабинете сотрудника

В личном кабинете во вкладке ../Подтипы документовttps://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Профиль сотрудника/#графики_отпусков) для настройки операций по созданию заявления необходимо:

* Создать [подтип документа](../Подтипы документов/) со служебным наименованием `MyProfileVacationOperation`:

![alt text](media/image-13.png)

* Создать новый конструктор и выбрать данный подтип. После чего перейти во вкладку "Настройка интерфейса":

![alt text](./media/DocumentConstructorForm-41.png)

В табличной части "Тип+подтип документов" задаются условия какие подтипы документов будут отображаться по кнопке "Создать заявление" внутри личного кабинета.

* **Вкл.** - включение или отключение операции;
* **Название** - задается название операции, например, Создать "Заявление на перенос основного отпуска";
* **Тип документа** - выбирается тип "Заявление от сотрудника";
* **Подтип** - выбирается необходимый [подтип](../Подтипы документов/index.md) документа, например, "Заявление на перенос основного отпуска" ;
* **Условие фильтрации** - задается условия фильтрации по [графику отпусков](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/График отпусков/);
* **Служебное наименование** - не заполняется.

Пример:

Название | Тип документа | Подтип | Условие фильтрации
---------|---------------|--------|-------------------
Заявление на перенос основного отпуска | Заявление от сотрудника | Заявление на перенос ежегодного оплачиваемого отпуска | Ежегодный основной оплачиваемый отпуск
Заявление на компенсацию доп. отпуска | Заявление от сотрудника | Заявление на компенсацию основного отпуска | Ежегодный дополнительный оплачиваемый отпуск
Заявление на доп. отпуск | Заявление от сотрудника | Заявление на ежегодный дополнительный оплачиваемый отпуск | Ежегодный дополнительный оплачиваемый отпуск
Заявление на перенос доп.отпуска | Заявление от сотрудника | Заявление на перенос дополнительных дней отпуска | Ежегодный дополнительный оплачиваемый отпуск
Заявление на основной отпуск | Заявление от сотрудника | Заявление на ежегодный основной оплачиваемый отпуск (по графику отпусков) | Ежегодный основной оплачиваемый отпуск

![alt text](./media/DocumentConstructorForm-42.png)

<!-- ## Пример

Так как документы, созданные по этому шаблону, не будут относиться к блокам "Заявление от сотрудника", "Локально-нормативные акты" и "Документы на подписание", то шаблон будет для подтипа, относящегося к типу документа "Универсальный документ". 

### Наименование, тип, подтип

<p>После нажатия на кнопку "Создать" в реестре "Конструктор документов" заполним служебное наименование шаблона значением "AppealToPetrov" (рекомендуется использовать латинский алфавит), выберем тип документа "Универсальный документ" и создадим новый подтип документа: "Обращение". Это делается с помощью кнопки <img src="media/createSubTypeDoc.png"> справа от поля "Подтип документа".</p>

![Рисунок 15 Подтип "Обращение"](./media/subtypeExample.png)

По нажатию на кнопку "Сохранить" создается новый подтип для типа документа, указанного в поле "* Использовать в документе". Выберем созданный подтип для шаблона документа. В результате заполнены первые три поля, которые определят процесс выбора шаблона пользователями.

![Рисунок 16 Заполнены тип и подтип](./media/exampleTypeChoosed.png)

### Текст шаблона

Заполним текст шаблона, в который будут подставляться атрибуты. Места для подстановки выделяются с двух сторон символом #, текст между ними рекомендуется писать на латинице и достаточно близкий по смыслу к соответствующим атрибутам. Текст шаблона будет выглядеть следующим образом:

![Рисунок 17 Заполнен основной текст шаблона](./media/exampleTemplateText.png)

### Суть обращения

Создадим первый атрибут – суть обращения. Поле, которое увидит пользователь, будет предназначено для ввода текста. Добавим новую строку в таблицу "Дополнительные атрибуты" и заполним наименование, тип атрибута и наименование колонки, а также потребуем обязательное заполнение поля пользователем и сделаем атрибут первым по порядку (порядок сортировки).

![Рисунок 18 Заполнен атрибут Суть обращения](./media/example1stAttr.png)

### Источник обращения {#источник}

Допустим, что при создании документа пользователь должен будет указать его источник: коллцентр, сайт или входящее письмо в организацию. Для заполнения источника обращения создадим пользовательский тип атрибута, чтобы пользователь мог выбрать одно из значений из списка. Сначала перейдем в реестр пользовательских типов при помощи кнопки ![](./media/UnisprButton.png)

Создадим 3 документа в реестре. У каждого будет одна и та же группа: "источник обращения". Наименования будут служить значениями списка источников.

![Рисунок 19 Первый источник](./media/exampleSource1.png)

![Рисунок 20 Второй источник](./media/exampleSource2.png)

![Рисунок 21 Третий источник](./media/exampleSource3.png)

Теперь можно вернуться в конструктор документов и добавить вторую строку: с источником обращения. В качестве типа атрибута здесь необходимо выбрать "Пользовательский тип атрибута", в Тип группы (Unispr) необходимо ввести группу "источник обращения", в качестве наименования в выпадающем списке необходимо ввести значение "Name".

![Рисунок 22 Заполнен атрибут Источник обращения](./media/example2ndAttr.png)

### Адресат

Следующий атрибут – адресат обращения, который будет содержать список подразделений и необязателен для заполнения. Так как уже существует справочник подразделений, можно использовать наименования подразделений в качестве источника данных для атрибута. 

В новой строке таблицы "Дополнительные атрибуты" в качестве типа атрибута необходимо выбрать "Подразделение" и заполнить поле Наименование в выпадающем списке значением "Name". 

![Рисунок 23 Заполнен атрибут Адресат обращения](./media/example3rdAttr.png)

### Срочность

Срочность обработки обращения предполагается оставить в качестве реквизита документа, не отражая его значение в текстовой части. Поле будет в виде опции (поле для галочки, чекбокс). Для этого необходимо в качестве типа атрибута выбрать "Логическое" (bool).

![Рисунок 24 Заполнен атрибут Срочность рассмотрения](./media/example4thAttr.png)

### Дата

Последним атрибутом в таблице "Дополнительные атрибуты" будет дата создания документа. 

![Рисунок 25 Заполнен атрибут Дата обращения](./media/example5thAttr.png)

### Специальные атрибуты

В тексте шаблона присутствуют [специальные атрибуты](#спец-атрибуты), которые мы не стали прописывать в таблице "Дополнительные атрибуты". Это #Master_PositionGenitive#, #Master_CUserNameGenitive# и #Master_CUserNameShort#. Чтобы в них подставились наименование должности и ФИО в родительном падеже и Фамилия И.О. составителя, пользователю не потребуется их явное указание в каких-либо полях.

### Результат

Сохраним созданный шаблон документа:

![Рисунок 26 Шаблон "Обращение на имя Петрова"](./media/exampleTemplateFinal.png)

Перейдем к созданию универсального документа по созданному шаблону. Нажмем на кнопку "Создать" в реестре универсальных документов и выберем подтип "Обращение". Загрузятся реквизиты документа, соответствующие созданным нами дополнительным атрибутам, и основной текст. Более подробно о работе в универсальном документе можно прочесть в соответствующей [статье](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/Универсальный документ/).

![Рисунок 27 Универсальный документ – шаблон загружен](./media/exampleUniDocInit.png)  

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

![Рисунок 28 Универсальный документ – шаблон заполнен](./media/exampleUniDocFilled.png) -->

## Вкладка "Комментарий" 

Данная вкладка имеет текстовое поле, необходимо оно для рассуждения, пояснительния и критических замечаний о чём-либо.

![Рисунок](./media/DocumentConstructorForm-43.png)

## FAQ

### Мне нужен в качестве атрибута список ИНН контрагентов. Нужно ли мне заводить для всех контрагентов записи с ИНН в Пользовательских типах атрибутах?  
  
  *Нет, необходимо создать атрибут в таблице "Дополнительные атрибуты" со значением "Контрагент" в поле "Тип атрибута", значением "INN" в поле "Наименование в выпадающем списке", а также заполнить поля "Наименование" и "Наименование колонки".*  

  ***Вы можете использовать любой столбец таблиц Contract (для договоров), Contractor (для контрагентов), RP_Worker (для сотрудников), Department (для подразделений), Post (для должностей) в качестве источника данных для создаваемого атрибута. Названия столбцов можно узнать с помощью стандартных средств Microsoft SQL Server Management Studio.***


### После добавления нового документа в Конструкторе документов при создании нового документа в Заявлениях от сотрудника среди подтипов документа выпадает два одинаковых названия.  
  
  *Названия подтипов документов дублируются потому, что после создания нового шаблона в Конструкторе документов остался незакрытым шаблон с таким же подтипом. См. раздел [Закрытие шаблона](#закрытие-шаблона).*


### Что писать в Тип группы (Unispr)? Зачем этот столбец? { #chcode }
  
  *Откройте реестр "Пользовательские типы атрибутов документов". В поле Тип группы (Unispr) вы можете внести любое значение, расположенное в столбце "Группа" этого реестра. Тогда атрибут сможет принимать любое из значений в столбце "Наименование", которым соответствует выбранная группа. Для удобства восприятия содержания реестра вы можете воспользоваться фильтром или сортировкой по группе.*   

  ***Помните, что при этом в таблице "Дополнительные атрибуты" в поле "Тип атрибута" должно стоять значение "Пользовательский тип атрибута", а в поле "Наименование в выпадающем списке" – значение "Name".***


### Зачем столбец "Только для чтения"? Ведь нужно, чтобы пользователь заполнял шаблон какими-то значениями.
  
  *Постановка галочки в столбце "Только для чтения" нужна для вычисляемых атрибутов. Их заполнение происходит в sql-процедурах и они зависят от значений других вносимых пользователем атрибутов. Например, дата конца отпуска – вычисляемый атрибут, он зависит от двух атрибутов: даты начала отпуска и количества дней в отпуске.*


### Атрибуты при создании документа располагаются не в том порядке, в каком создавались в таблице в Конструкторе документов.
  
  *Чтобы порядок атрибутов был как в конструкторе, необходимо заполнить столбец "Порядок сортировки" в таблице "Дополнительные атрибуты".*


<!-- ### Как создать пользовательский тип атрибута?
  
  *Инструкцию по созданию пользовательского типа атрибута см. главу [Пользовательские типы атрибутов документа](../Пользовательские типы атрибутов документов/index.md).*
  
  *О том, как использовать созданный пользовательский тип см. раздел [Описание полей в таблице "Дополнительные атрибуты". Тип группы (Unispr)](#описание-ChCode) и [Что писать в Тип группы (Unispr)?](#chcode).* -->

<!-- ```sql
    DO
$$
declare "_PCode" bigint;
declare "_VCode" bigint;
declare "_CDate" timestamptz := now();
declare "_CHost" character varying(255) := inet_client_addr();
declare "_CUser" character varying(255) := lex."getVirtualLogin"();
declare "_COrg" bigint := lex."getOrgId"();
declare _TypePersonalOrder bigint;
        _TypeNamePersonalOrder varchar(255);
        _FlagMove int ;

BEGIN

if "_DocumentCategory" is not null then
    select ty."IdTypeTimeWork", 'Base.'::varchar(255)|| coalesce(ty."NameModel"::varchar(255),''::varchar(255)), ty."FlagMove"
    from dfd."DocumentConstructor" dc
         join dfd."DocumentSubtype" ds on dc."DocumentSubtype" = ds."VCode"
         join comdoc."VTypePersonalOrder" ty on ds."TypePersonalOrder" = ty."VCode"
    where dc."VCode" = "_DocumentCategory"
	into _TypePersonalOrder, _TypeNamePersonalOrder, _FlagMove;
end if;

if _FlagMove = 2 then

    "_PCode" := lex."L8_sp_GenCode" ('RP_DocAbsence', 1);
    "_VCode" := lex."L8_sp_GenCode" ('RP_WorkerAbsence', 1);

    INSERT INTO aw."RP_DocAbsence" (
        "VCode", "TypeName", "DateDoc",
        "CDate", "CHost", "CUser", "COrg",
        "WDate", "WHost", "WUser", "WOrg"
    )
    VALUES (
        "_PCode", coalesce(_TypeNamePersonalOrder,"_TypeName"), coalesce("_DateDoc","_CDate"),
        "_CDate", "_CHost", "_CUser", "_COrg",
        "_CDate", "_CHost", "_CUser", "_COrg"
    );

    INSERT INTO aw."RP_WorkerAbsence" (
        "VCode", "Pcode", "IdWorker", "IdTypePer",
        "CDate", "CHost", "CUser", "COrg",
        "WDate", "WHost", "WUser", "WOrg"
    )
    select
        "_VCode", "_PCode", "_IdWorker", coalesce(_TypePersonalOrder,"_IdTypePer"),
        "_CDate", "_CHost", "_CUser", "_COrg",
        "_CDate", "_CHost", "_CUser", "_COrg"
    ;
else

    "_PCode" := lex."L8_sp_GenCode" ('RP_DocMove', 1);
    "_VCode" := lex."L8_sp_GenCode" ('RP_WorkerMove', 1);

    INSERT INTO rp."RP_DocMove" ( "VCode", "CDate", "WDate", "CHost", "WHost", "CUser", "WUser", "COrg", "WOrg", 
                 "TypeName", "IdTypeCauseCond", /*"NumDoc",*/ "DateDoc", "FlagApp", "IdTypeDocStaff", "Note") 
    select "_PCode", "_CDate", "_CDate", "_CHost", "_CHost", "_CUser", "_CUser", "_COrg", "_COrg",
                  _TypeNamePersonalOrder, null, coalesce("_DateDoc","_CDate"), null, _TypePersonalOrder, null;

    INSERT INTO rp."RP_WorkerMove" ( "VCode", "Pcode", "CDate", "WDate", "CHost", "WHost", "CUser", "WUser", "COrg", "WOrg", 
                 "IdWorker", "DateBeg", "IdDepartment", "IdPost", "IdRank", --"IdWorkContract", 
                  "IdStaffUnit", "IdTypeBasisDoc", "DateBasis", "Rate", "IdOper1", "SumOper1", "IdTypeWorkSched", "Probation", "WCode")
    select "_VCode", "_PCode", "_CDate", "_CDate", "_CHost", "_CHost", "_CUser", "_CUser", "_COrg", "_COrg",
                  "_IdWorker", @DateBeg, mm."IdDepartment", mm."IdPost", mm."IdRank",
                  mm."IdStaffUnit", mm."IdTypeBasisDoc", mm."DateBasis", mm."Rate", mm."IdOper1", mm."SumOper1", 
                  mm."IdTypeWorkSched", mm."Probation", case when _FlagMove = 1 then mm."PCode" end
    from (
          select m.*
          from rp."RP_DocMove" p
               join rp."RP_WorkerMove" m on p."VCode" = m."PCode"
               join comdoc."VRP_TypeDocStaff" s on p."IdTypeDocStaff" = s."VCode"
          where m."IdWorker" = "_IdWorker" and s."FlagMove" = 1
          order by "DateBeg" desc
          limit 1) mm;

end if;

    update "#tmp_newDocVCode" 
    set "newDocVCode" = "_PCode" ;

END;
$$
``` -->