---
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/image-18.png)

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

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

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

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

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

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

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

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

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

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

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

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

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

![Группировка](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. Заполняется столбец "Значение (текст)" с кодами видов действия. Видов может быть как один, так и несколько. Если несколько, то перечисляются через запятую.

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

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

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

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

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

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

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

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

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

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

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

![Рисунок 9 Создание подтипа документа на вложенной форме](./media/createSubTypeSubForm.png)

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

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

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

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

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

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

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

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

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

![Рисунок 10 Расположение кнопки "Добавить"](./media/image8.png)

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

![Рисунок 11 Новая строка в таблице "Дополнительные атрибуты"](./media/image10.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%20manuals/%D0%A4%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5%20%D0%BB%D0%B8%D1%86%D0%B0/)
Работник | Выпадающий список с [сотрудниками](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/%D0%A1%D0%BE%D1%82%D1%80%D1%83%D0%B4%D0%BD%D0%B8%D0%BA%D0%B8/)
Строка | Текстовое поле
Табличная часть | Добавление табличной части
Целое | Целое число

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

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

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

![Таблица](media/table.png)

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

- **"Служебное наименование"** – наименование, вставляемое в текст шаблона для автозамены в тексте. Обязательная форма написания включает две "#": слева и справа от наименования, наименование прописывается на английском языке, например, #Name#. Именно эти значения будут заменены в тексте шаблона на введенные пользователем значения атрибута после нажатия на кнопку "Заполнить шаблон". Является обязательным для заполнения.
- **"Требовать заполнение"** – обязательность заполнения атрибута. Если в этом поле стоит галочка, документ не получится сохранить и отправить по маршруту, пока соответствующий атрибут не будет заполнен.
- [**Доп. группа**](#дополнительные_группы) - добавляет отображание текущего атрибута в отдельную группу в документе.

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

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

- **Размер** - задается размер редактируемой части атрибута.

- **Размер заголовка** - задается размер заголовка атрибута.

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

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

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

- **"Наименование в выпадающем списке"** – специфичная характеристика выпадающих списков, отвечает за то, какая информация будет отображаться в выпадающем списке для идентификации позиций в справочнике (например, для выпадающего списка "Работник" доступны варианты отображения  ФИО работника или его табельного номера, для выпадающего списка "Контрагент" - полное или краткое наименование контрагента ). Выбирается из выпадающего списка, в зависимости от выбранного типа атрибута.  По умолчанию устанавливается "NameFull", что означает для справочника "Работник" - ФИО работника, для справочника "Контрагент" - краткое наименование контрагента, для справочника "Пользовательский тип" - поле Наименование, которое будет фильтроваться в зависимости от выбранного типа группы для справочников "Должность" и "Подразделение" - наименование должности и подразделения соответственно. Является обязательным для заполнения, если тип атрибута – справочник. Для некоторых типов атрибутов, возможно использование нескольких наименований. 

Наименование | Описание |
---------|----------|
NameFull | Полное отображение ФИО пользователя-создателя|
FullNameDative | ФИО пользователя-создателя документа в дательном падеже |
FullNameGenitive | ФИО пользователя-создателя документа в родительном падеже |
FullNameAccusative | ФИО пользователя-создателя документа в винительном падеже |
NameShort | ФИО пользователя-создателя документа в формате "Фамилия И.О." |
NumTab | Табельный номер пользователя-создателя |
Name | Должность работника (атрибута) в именительном падеже |
NameDative | Должность работника (атрибута) в дательном падеже |
NameGenitive | Должность работника (атрибута) в винительном падеже |
NSNT | Отображение ФИО пользователя-создателя документа и табельного номера

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

!!! note
    Маска для ввода используется для атрибута **"Строка"**

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

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

* 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#поля_дополнение_к_наименованию).
 
- Группа столбцов **"Значение по умолчанию"** используется в случае, если при создании документа реквизит должен быть заполнен неким условленным значением. Для разных типов атрибутов используются разные колонки. Для типов атрибута **"Строка"** требуется заполнить поле в столбце **"Текст"**. Для типов атрибута **"Логическое"** требуется поставить галочку в столбце **"Флаг"**.

![Строка](media/StrokaLog.png)

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

Для типа атрибута **"Целое"** или типов атрибутов, которые позволяют в документе выбрать значение из списка, требуется заполнить поле в столбце **"Код/число"** числовым значением.

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

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

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

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

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

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

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

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

<!-- Чтобы прописать вычисление полей, значения которых должны зависеть от остальных полей (т.е. сделать их вычисляемыми), необходимо в Microsoft SQL Server Management Studio внести изменения в код процедуры dbo.callAfterSetSQL (в которой прописывается непосредственно вычисление значение атрибута) и в код процедуры dbo.callCheckSQL (для проверки корректности внесённых в поля атрибутов значений).

*Для вычисляемых атрибутов рекомендуется устанавливать признак "Только для чтения".*

В рассматриваемом примере дата окончания отпуска (#eDate#) вычисляется на основе количества дней в отпуске (\#bDate#) и даты его начала (\#cnt#). В процедуру dbo.callAfterSetSQL для изменения атрибута \#eDate# при изменении \#bDate# или \#cnt# были внесены следующие изменения:

```sql
if @formName='EmployeeStatementForm' AND ( @ColumnName = '#bDate#' OR @ColumnName = '#cnt#' )  AND @DocumentSubtypeName = 'Заявление на отпуск без сохранения зп'
	begin
		update #resTab
		set 
      DateValue =  convert(varchar(50),
                    dateadd(day, 		
                        convert(bigint,
                              (select top 1 BigIntValue from #resTab where ColumnName = '#cnt#')-1), 		
                        convert(date,
                              (select top 1 DateValue from #resTab where ColumnName = '#bDate#'),
                              104)		
                      ), 
                104), 		
      Recalculated = 1
		where ColumnName = '#eDate#'
	end
``` -->

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

Вычисляемый атрибут | Описание
--------------------|---------
#Master_BeginDate#  |  дата начала действия доверенности
#Master_CopyRecipient# | дополнительный согласующий в служебной записке из табличной части "Копия"
#Master_CUserName#  |  полное ФИО пользователя создателя документа 
#Master_CUserNameAccusative#  |  ФИО пользователя создателя документа в винительном падеже
#Master_CUserNameDative#  |  ФИО пользователя создателя документа в дательном падеже
#Master_CUserNameGenitive#  |  ФИО пользователя создателя документа в родительном падеже
#Master_CUserNameShort#  |  ФИО пользователя создателя документа в формате "Фамилия И.О."
#Master_CUserPhoneNumber#  |  мобильный телефон пользователя создателя документа из справочника "Физическое лицо" 
#Master_Department#  |  подразделение пользователя создателя документа
#Master_DocumentBeginDate# | "Период командировки с" в служебной записке на командировку на конструкторе
#Master_DocumentContractorText# | "Куда Организация" в служебной записке на командировку на конструкторе
#Master_DocumentDate#  |  дата создания документа 
#Master_DocumentDateText#  |  дата в формате 1 января 2022 г
#Master_DocumentDaysOnRoad# | "Кол-во дней в пути" в служебной записке на командировку на конструкторе
#Master_DocumentDestination# | "Куда Страна/Город" в служебной записке на командировку на конструкторе
#Master_DocumentEndDate# | "Период командировки по" в служебной записке на командировку на конструкторе
#Master_DocumentLeadTime# | "Кол-во дней" в служебной записке на командировку на конструкторе
#Master_DocumentNote# | "Примечание" в служебной записке на командировку на конструкторе
#Master_DocumentNumber#  |  номер создаваемого документа 
#Master_DocumentPurpose# | Цель командировки в служебной записке на командировку на конструкторе
#Master_DocumentType# | тип документа
#Master_DocumentSubtype#  |  подтип документа
#Master_EndDate# | дата окончания действия доверенности
#Master_HideAgreedUsers# | скрываются согласующие документ по маршруту в печатной форме служебной записки
#Master_HideInitiator# | скрывается составитель в печатной форме служебной записки
#Master_HideImg# | скрывается печать "Зарегистрировано СЭД Лексема" в в печатной форме без согласования в служебной записке
#Master_HideSigner# | скрывается блок с подписантом в печатной форме служебной записки
#Master_IdWorker# | код работника из справочника "Сотрудники"
#Master_MyCompany#  |  компания пользователя создателя документа
#Master_MyCompanyActualAddressText#  |  своя организация: фактический адрес 
#Master_MyCompanyDirector#  |  своя организация: директор в именительном падеже 
#Master_MyCompanyDirectorAccusative#  |  своя организация: директор в винительном падеже 
#Master_MyCompanyDirectorActBasis#  |  своя организация: основание действия директора 
#Master_MyCompanyDirectorDative#  |  своя организация: директор в дательном падеже 
#Master_MyCompanyDirectorGenitive#  |  своя организация: директор в родительном падеже 
#Master_MyCompanyDirectorProf#  |  своя организация: должность директора в именительном падеже 
#Master_MyCompanyDirectorProfGenitive#  |  своя организация: должность директора в родительном падеже 
#Master_MyCompanyDirectorShort#  |  своя организация: короткое ФИО директора 
#Master_MyCompanyEMailAddress#  |  своя организация: email 
#Master_MyCompanyFSS#  |  своя организация: номер ФСС 
#Master_MyCompanyFullName#  |  полное наименование своей организации 
#Master_MyCompanyGAccountant#  |  ФИО Гл. бухгалтера, | 
#Master_MyCompanyGAccountantAccusative#  |  ФИО Гл. бухгалтера в Вин. падеже, | 
#Master_MyCompanyGAccountantDative#  |  ФИО Гл. бухгалтера в Дат. падеже, | 
#Master_MyCompanyGAccountantGenitive#  |  ФИО Гл. бухгалтера в Род. падеже, | 
#Master_MyCompanyGAccountantProf#  |  должность Гл. бухгалтера, | 
#Master_MyCompanyGAccountantProfAccusative#  |  должность Гл. бухгалтера в Вин. падеже 
#Master_MyCompanyGAccountantProfDative#  |  должность Гл. бухгалтера в Дат. падеже, | 
#Master_MyCompanyGAccountantProfGenitive#  |  должность Гл. бухгалтера в Род. падеже, | 
#Master_MyCompanyINN#  |  своя организация: ИНН 
#Master_MyCompanyKPP#  |  своя организация: КПП 
#Master_MyCompanyLegalAddressText#  |  своя организация: юридический адрес 
#Master_MyCompanyMailAddressText#  |  своя организация: почтовый адрес 
#Master_MyCompanyOGRN#  |  своя организация: ОГРН 
#Master_MyCompanyOKATO#  |  своя организация: ОКАТО 
#Master_MyCompanyOKPO#  |  своя организация: OKPO 
#Master_MyCompanyPFR#  |  своя организация: номер ПФР 
#Master_MyCompanyPhone#  |  своя организация: контактный телефон 
#Master_MyCompanyRegistrationDate#  |  своя организация: дата регистрации 
#Master_MyCompanyShortName#  |  короткое наименование своей организации для печати 
#Master_NumTab#  |  табельный номер сотрудника 
#Master_Position#  |  должность пользователя создателя документа
#Master_PositionDative#  |  должность пользователя создателя документа в дательном падеже
#Master_PositionGenitive#  |  должность пользователя создателя документа в родительном падеже
#Master_Recipient# | получатель служебной записки из табличной части "Кому"
#Master_SumInWords#  |  конвертирует число в текст. Используется для атрибута **Вещественное**
#Master_SubjectDetail#  |  список полномочий по доверенности из таблицы документа Доверенность 
#Master_WorkersDetail#  |  список сотрудников: ФИО, дата рождения, паспортные данные, адрес регистрации из таблицы документа Доверенность
#Master_WorkersGenitiveDetail#  |  список сотрудников в винительном падеже
#Master_WorkersAccusativeDetail#  |  список сотрудников в род падеже 
#Master_WorkersGenitivePasportDetail#  |  список сотрудников в винительном падеже c паспортом
#Master_WorkersAccusativePasportDetail#  |  список сотрудников в род падеже с паспортом
#Master_WorkersAccusativePasportDetail#  |  список сотрудников в род падеже  с паспортом
#WorkerNominativePasportList#  |  список сотрудников с паспортами

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

![Рисунок 12 Таблица "Дополнительные атрибуты"](./media/docTableFilled.png)

## Шаблон

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

В поле "Шаблон" доступны инструменты форматирования текста: доступно изменение шрифта текста, выравнивание, создание списков.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- Правило **"Без маршрута"** -  можно вложить файл если маршрут не создан

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

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

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

![Рисунок 13 Типы вложений](./media/image16.png)

Перед отправкой по маршруту документа, созданного на основании этого конструктора, сработает проверка на наличие вложений с указанными типами.

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

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

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

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


![Правило](media/praviloNaDatu.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/predupr.png)

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

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

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

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

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

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

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

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

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

![Текст копия](media/textCopy.png)

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

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

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

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

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

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

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

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

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

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

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

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

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

`#Master_DocumentSubtype# #Master_CUserNameGenitive# на #kolvo# день (-ей)` , которое расшифровывается как <Подтип документа><ФИО инициатора документа в родительном падеже>на<количество> день(-ей).

!!! note
    `#kolvo#` в данном примере используется в качестве дополнительного атрибута документа.

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

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

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

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

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

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

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

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

В данной вкладке настраивается интерфейс документа.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* **Вкл.** - включение или отключение операции в выбранном документе;
* **Название** - задается название операции, например, Создать "Заявление на ежегодный отпуск";
* **Тип документа** - выбирается к какому типу документа необходимо добавить меню операций;
* **Подтип** - выбирается к какому типу документа необходимо добавить меню операций;
* **Условие фильтрации** - задается название типа вида отпуска указанный в [уведомлении](../Настройка внутрисистемных уведомлений/index.md)
* **Служебное наименование** - задается служебное наименование [дополнительного атрибута](#дополнительные_атрибуты_документа), в данном случае **#typeVacation#**.
* **Условие для видимости операции** - указывается условие в зависимости от которого выбранная операция будет доступна для пользователя, например, `not exists (select 1 from comdoc."isAccessOfRoles"(lex."getLogin"(), comdoc."getFilial"(),'user') where "RoleName" ilike '%df_officeworker%')`, в данном условии сказано что операция не будет доступа пользователю имеющий роль **df_officeworker**.

![Атрибут](media/atribut.png)

!!! note
    Если столбцы "Подтип", "Условие фильтрации" и "Служебное наименование" не заполнены, то созданная операция будет отображаться во всех подтипах документа. Кнопка "Операции" отображается только в документах "Заявление от сотрудника".

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

* Создать "Заявление на доп. отпуск"
* Создать "Заявление на ежегодный отпуск"
* Создать "Заявление на перенос отпуска"
* Создать "Универсальный документ"

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

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

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

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

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

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

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

Проверка на зависимость атрибутов осуществляется по записям с активным признаком «Вкл.»

![Зависимые атрибуты](media/zavisimye.png)

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

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

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

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

![Дополнительные проверки](media/dopProverki.png)

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

![Пример](media/primer.png)
![Предупреждение](media/warning2.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_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)

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

Основной атрибут | Зависимые атрибуты | Фильтрация
-----------------|--------------------|-----------
#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)

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример:

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

![alt text](media/image-23.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) -->

## FAQ

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

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


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


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

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


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


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


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