Документ "Конструктор документов" предназначен для создания шаблонов документов следующих **типов документа**: Заявление от сотрудника, Локально-нормативный акт (ЛНА), Универсальный документ и Документ на подписание, Доверенности.
С помощью конструктора документов можно создавать подтипы документов с определенной структурой, которые можно будет использовать в заявлениях от сотрудников, ЛНА, универсальных документах или документах на подписание. При создании документов по этим шаблонам от пользователя потребуется лишь заполнять соответствующие поля.
В настройках пользователя в таблице "Настройка прав по подразделениям и подтипам документов" можно выбрать подтипы документов, к которым у пользователя будет доступ. Это позволяет разграничить права пользователя не только по подразделениям и типа документов, но и по подтипам документов. Более подробно про настройку пользователей можно прочесть в разделе [Настройка пользователей](../Настройка пользователей/Настройка пользователей.md).
В рассматриваемом документе создается универсальная структура будущего заявления (или другого типа документа из списка доступных) с определением параметров для автоматического заполнения. На основе созданного шаблона пользователями будут создаваться документы. Общую структуру можно представить в виде следующей схемы:

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

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

После выбора нужного документа откроется реестр документов.
Откроется всплывающее окно "Создание шаблона". В нем необходимо выбрать в какую организацию необходимо скопировать данный документ. Если выбрать ту же организацию, то выбранный документ продублируется в этой же организации, после чего выйдет окно с предложением открыть скопированный документ.
{: .zoom}
Если выбрать другую организацию, напротив поля "Разрешить этот же шаблон для выбранной организации" не ставить галочку и нажать "Создать", то выбранный документ продублируется в выбранную организацию. Код документа при копировании будет изменен.
{: .zoom}
Если выбрать другую организацию, напротив поля "Разрешить этот же шаблон для выбранной организации" поставить галочку, и нажать "Создать", то выбранный документ будет доступен для использования в выбранной организации, а документ дублироваться не будет. Код документа при этом в обоих организациях будет один и тот же.
{: .zoom}
Для переноса конструкторов документов из одной базы в другую необходимо отметить эти документы в реестре и нажать кнопку "Копировать для переноса в другую базу" на верхней панели инструментов.
В открывшемся окне необходимо указать Код организации в базе, в которую переносятся данные. По кнопке "Создать скрипт переноса" будет сформирован скрипт.
Сравниваются конструкторы по наименованию подтипа документа, если такой уже существовал в базе, он будет закрыт и создан новый. В теле скрипта описано создание самого конструктора, недостающих документов "Подтип документа", "Пользовательские типы атрибутов документа".
## Вкладка "Основные характеристики"
Новый созданный документ, выглядит следующим образом:
**Автоматически формировать маршрут** - при включенной опции в документе созданном на конструкторе, например "Заявление от сотрудника", автоматически сформируется маршрут после нажатия на кнопку "Заполнить шаблон". Для автоматического формирования маршрута также необходимо чтобы на данный тип документа был настроен один [шаблон маршрутов](../Настройка шаблонов маршрутов/Настройка шаблонов маршрутов.md). Если настроено несколько, тогда маршрут автоматически не сформируется. Данная опция рекомендуема для удобства работы с различными заявлениями.
**Откл. автоформирование файла для подписания** - отключает автоматическое формирование файла во вложении к документу. Если галочка не стоит,то происходит автоматическая генерация pdf- файла на основании данных карточки во всех документах , построенных на конструкторе, при отправке по маршруту , например Заявление от сотрудника.
**Если опция включена**, то автоматическая генерация pdf- файла не происходит. В некоторых бизнес-процессах данная опция будет лишней - например, в Локально-нормативных актах, где оригиналы документов поставляются из репозитория организации.
**Разрешить редактировать номер** - при включенной опции в документе созданном на конструкторе, например "Универсальный документ", можно вручную задавать номер документа.
{: .zoom}
При выключенной опции, генерация номера документа будет автоматическая.
**Не требовать дату перехода КЭДО** - при включенной опции данный подтип документа может создавать [сотрудник](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/%D0%9A%D0%AD%D0%94%D0%9E/%D0%A1%D0%BE%D1%82%D1%80%D1%83%D0%B4%D0%BD%D0%B8%D0%BA%D0%B8/%D0%A1%D0%BE%D1%82%D1%80%D1%83%D0%B4%D0%BD%D0%B8%D0%BA%D0%B8/), у которого отсутствует дата перехода на КЭДО. Если опция отключена, то создание документа с данным подтипом невозможно без указания даты перехода на КЭДО. По умолчанию для создания любого документа необходимо указывать дату перехода на КЭДО у сотрудника.
**Показывать инфо о графике отпусков** - при включенной опции в панели инструментов в [заявлении от сотрудника](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/%D0%9A%D0%AD%D0%94%D0%9E/%D0%97%D0%B0%D1%8F%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BE%D1%82%20%D1%81%D0%BE%D1%82%D1%80%D1%83%D0%B4%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2/%D0%97%D0%B0%D1%8F%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BE%D1%82%20%D1%81%D0%BE%D1%82%D1%80%D1%83%D0%B4%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2/) появляется кнопка "График отпусков", при нажатии на которую во всплывающем окне отображается данные по графику отпусков сотрудника инициатора.
**Номер п/п** - с помощью данного поля можно упорядочить подтипы в рамках одного типа документа в выпадающем списке. Например, заявления на разные вида отпуска
**Ознакамливать бухгалтера по зп** - по завершению маршрута документа при включенной галочке, бухгалтеру организации направляется автоматическая рассылка о завершении документа. Бухгалтер назначается в [настройках пользователя](../Настройка пользователей/Настройка пользователей.md#вкладка_расчет_зарплаты)
<!--**Кол-во дней от даты создания** - с помощью данного поля устанавливается ограничение от даты создания документа. Например, если для подтипа "Заявление на ежегодный отпуск", выставить ограничение 14 дней, то при заполнении шаблона документа, если дата начала отпуска наступает ранее чем через 14 дней, появится уведомление в системе, что дата не может быть ранее чем 14 дней от сегодняшней даты.
**Запретить создавать под замещением** - при включенной опции выбранный подтип документа нельзя создавать под [замещением](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE %D0%B4%D0%BB%D1%8F %D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8F/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F %D0%B7%D0%B0%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D1%8F/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F %D0%B7%D0%B0%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D1%8F/).
**Напоминать об отправке по маршруту** - при включенной опции выводит информационное сообщение об отправке заявления по маршруту. Работает при условиях, что автоматически формируется маршрут и на данный подтип настроен [один шаблон маршрута](../Настройка шаблонов маршрутов/Настройка шаблонов маршрутов.md)
**Показывать границы таблиц в отчетах** - при включенной опции в печатных формах заявлений, универсальных документов, ЛНА будут отображаться границы у таблиц при их наличии в отчете. При выключенной опции границы будут отсутствовать.
**Запрещать ознакомление, если не создан документ из меню операций** - при включенной опции в выбранном подтипе документа запрещено ознакомление, например, с уведомлением об отпуске, если сотрудник не оформил заявление на отпуск или заявление на перенос через меню операций.
**Редактируемый при активном маршруте до использования ЭП** - при включенной опции в выбранной подтипе разрешено редактирование атрибутов документа во время согласования по маршруту.
Редактировать атрибуты документа возможно только в документах, в которых отсутствует автоматически сгенерированный файл на подписание. Генерацию файла возможно настроить с помощью константы [**КЭДО_ВидыДействия_СоздатьФайл**](../Настройка%20констант/Настройка%20констант.md#система_электронного_и_кадрового_документооборота). Указываются после каких видов действия с документом будет автоматически формироваться печатная форма в формате pdf. Заполняется столбец "Значение (текст)" с кодами видов действия. Видов может быть как один, так и несколько. Если несколько, то перечисляются через запятую.
Поля "Тип документа" и "Подтип документа" позволяют выбрать значение из списка. В случае, если нет требуемого типа документа, необходимо пополнить в документе "Настройка документа" с требуемым типом включить опцию "Форма построена на конструкторе документов".
Поле "Подтип документа" можно заполнить только после заполнения поля "Тип документа". В случае, если нет требуемого подтипа документа, необходимо пополнить справочник "Подтип документа".
Для примера рассмотрим создание шаблона "Заявление от сотрудника" – "Заявление на отпуск без сохранения зп".

Для заполнения поля "Тип документа" необходимо выбрать одно из значений из списка. В реестре "Настройка документов" можно посмотреть более подробную информацию о заведенных типах документов.
В нашем случае требуемый тип – "Заявление от сотрудника".
Для выбора необходимого типа в документе "Конструктор документов" необходимо раскрыть справочник "Тип документа" и выбрать тип карточки.
{: .zoom}
После выбора типа документа необходимо выбрать подтип документа.
Если требуемый подтип отсутствует в выпадающем списке, можно добавить новый подтип через [реестр "Подтип документа"](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/%D0%9A%D0%AD%D0%94%D0%9E/%D0%9F%D0%BE%D0%B4%D1%82%D0%B8%D0%BF%D1%8B %D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2/%D0%9F%D0%BE%D0%B4%D1%82%D0%B8%D0%BF%D1%8B %D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2/) или при помощи вложенной формы.
<p>Новый подтип документа можно создать внутри формы "Конструктор документов" с помощью кнопки <imgsrc="../media/createSubTypeDoc.png"> рядом с выпадающим списком. Необходимо заполнить строковое поле "Наименование" и "Использовать в документе", остальные поля необязательны. После нажатия на кнопку "Сохранить" новый подтип будет выбран автоматически.</p>
{: .zoom}
После создания шаблона документа выбранный для него подтип будет появляться при создании документов, относящихся только к выбранному типу документа. Т.е. если в шаблоне документа был выбран тип "Заявление от сотрудника", то данный шаблон будет доступен только при создании заявления от сотрудника даже при наличии подтипа с таким же наименованием, но для другого типа документа.
Если по выбранному подтипу уже существует не закрытый шаблон, то поле очистится и появятся уведомления:
{: .zoom}
В уведомлениях содержится код шаблона, по которому его можно найти в реестре "Конструктор документов". Про закрытие шаблонов можно прочесть [ниже](#закрытие-шаблона).
### Дополнительные атрибуты документа
После того как два основных поля заполнены, необходимо перейти к заполнению таблицы "Дополнительные атрибуты". Это поля, которые будет необходимо заполнять при создании документа по создаваемому сейчас шаблону документа. В качестве примера добавим шесть дополнительных атрибутов:
- Основной отпуск – кол-во дней <Целое\> –длительностьотпускавднях,вводитсяавторомвручную.
- Основной отпуск –с<Дата\> –датаначалаотпуска,вводитсяавторомвручную.
- Основной отпуск – по <Дата\> –датаокончанияотпуска,вычисляетсянаосновеколичестваднейвотпускеидатыегоначала.
- Причина <Строка\> –причинауходавотпускбезсохраненияЗП,вводитсяавторомвручную.
- Причина (список) <Пользовательскийтипатрибута\> –причинауходавотпускбезсохраненияЗП,авторвыбираетодноизвозможныхзначенийвсписке.
- Компания <Контрагент\> –компания,вкоторуюнаправляетсязаявление,авторвыбираетодноизвозможныхзначенийвсписке.
Это будут единственные изменяемые в тексте документа (заявления от сотрудника) поля, поэтому нужно внимательно отнестись к их созданию и заполнению поля "Шаблон", который содержит макет и основной текст будущего документа.
Для добавления новой строки в таблицу "Дополнительные атрибуты" необходимо нажать на кнопку "Добавить".
{: .zoom}
После нажатия на кнопку добавляется новая строка в таблице.
{: .zoom}
#### Описание полей в таблице "Дополнительные атрибуты": { #описание-полей }
- **"Порядок"** – порядок сортировки, заполняется целыми числами, в зависимости от которых будут упорядочиваться атрибуты для заполнения в документе. Например, атрибут с порядком сортировки, равным 2, будет располагаться ниже атрибута с порядком, равным 1.
- **"Наименование"** – необходимо заполнить наименованием дополнительного атрибута (строковое поле), исходя из которого пользователю должно быть понятно, какое значение должен принимать атрибут. Например: "Год", "Способ получения справки" и пр. Является обязательным для заполнения.
- **"Тип атрибута"** – необходимо заполнить информацией из выпадающего справочника, выбрав тип атрибута. Например, типы атрибута могут быть датой (Date), целым числом (bigint), строкой (string), логическим выражением (bool) и т.д. Также можно подключать сложные справочники, такие как сотрудники ("Работник"), контрагенты ("Контрагент") и т.д. Например, если в качестве типа атрибута было выбрано "Подразделение", то в качестве списка возможных значений атрибута будет использована одна из колонок справочника подразделений, колонка задаётся полем "Наименование в выпадающем списке". Атрибут "Дата и время" может использоваться для типов документов когда важно отразить дату и время, например в заявке на подачу автотранспорта. С помощью атрибута "Время" в документе отображается только время без даты. **"Тип атрибута"** является обязательным для заполнения.
При выборе типа атрибута - **Табличная часть** под блоком **"Дополнительные атрибуты"** появляется дополнительный блок для настройки табличной части в документе. Для использования в документе, в блоке **"Дополнительные атрибуты"** для данного типа атрибута необходимо указать **служебное наименование**, которое заполняется после этого в столбце **Служебное наименование таблицы**.

В столбце **"Маска для ввода, кол-во знаков после запятой"** позволяет установить строгий формат ввода данных пользователем и представлять из себя строку состоящую из обычных и специальных символов. Маска для ввода используется для атрибута **"Строка"**. Количество знаков после запятой используется для атрибута **double**. Ширина колонки задается в пикселях. При проставлении галочки в столбце **"Суммовое поле"** все столбцы с атрибутом **"Целое"** будут суммироваться в конце таблицы.
- **"Служебное наименование"** – наименование, вставляемое в текст шаблона для автозамены в тексте. Обязательная форма написания включает две "#": слева и справа от наименования, наименование прописывается на английском языке, например, #Name#. Именно эти значения будут заменены в тексте шаблона на введенные пользователем значения атрибута после нажатия на кнопку "Заполнить шаблон". Является обязательным для заполнения.
- **"Требовать заполнение"** – обязательность заполнения атрибута. Если в этом поле стоит галочка, документ не получится сохранить и отправить по маршруту, пока соответствующий атрибут не будет заполнен.
- **"Только для чтения"** – используется для вычисляемых полей. Если в этом поле стоит галочка, атрибут будет недоступен для редактирования пользователем напрямую.
- **Сделать невидимым** - используется если необходимо скрыть дополнительный атрибут в карточке документа.
- **Скрыть технический код** - используется если необходимо скрыть технический код атрибута в карточке документа.
- **"Тип группы(Unispr)"** – заполняется в том случае, если поле "Тип атрибута" принимает значение "Пользовательский тип атрибута" ("Base.Unispr"). Заполняется значением из справочника ["Пользовательские типы атрибутов документов"](../Пользовательские типы атрибутов документов/Пользовательские типы атрибутов документов.md). Соответствует полю "Группа" документов справочника, выпадающий список будет содержать все наименования прописанной группы. Используется в том случае, когда атрибут может иметь одно из определенных значений в некоторой группе наименований. Справочник доступен по кнопке "Пользовательские типы атрибутов": <imgsrc="../media/image13.png">
- **"Наименование в выпадающем списке"** – специфичная характеристика выпадающих списков, отвечает за то, какая информация будет отображаться в выпадающем списке для идентификации позиций в справочнике (например, для выпадающего списка "Работник" доступны варианты отображения ФИО работника или его табельного номера, для выпадающего списка "Контрагент" - полное или краткое наименование контрагента ). Выбирается из выпадающего списка, в зависимости от выбранного типа атрибута. По умолчанию устанавливается "NameFull", что означает для справочника "Работник" - ФИО работника, для справочника "Контрагент" - краткое наименование контрагента, для справочника "Пользовательский тип" - поле Наименование, которое будет фильтроваться в зависимости от выбранного типа группы для справочников "Должность" и "Подразделение" - наименование должности и подразделения соответственно. Является обязательным для заполнения, если тип атрибута – справочник. Для некоторых типов атрибутов, возможно использование нескольких наименований.
Наименование | Описание |
---------|----------|
NameFull | Полное отображение ФИО пользователя-создателя|
FullNameDative | ФИО пользователя-создателя документа в дательном падеже |
FullNameGenitive | ФИО пользователя-создателя документа в родительном падеже |
FullNameAccusative | ФИО пользователя-создателя документа в винительном падеже |
NameShort | ФИО пользователя-создателя документа в формате "Фамилия И.О." |
NumTab | Табельный номер пользователя-создателя |
Name | Должность работника (атрибута) в именительном падеже |
NameDative | Должность работника (атрибута) в дательном падеже |
NameGenitive | Должность работника (атрибута) в винительном падеже |
- **"Маска для ввода"** - позволяет установить строгий формат ввода данных пользователем и представлять из себя строку состоящую из обычных и специальных символов. При вводе обычные символы пользователь не может их удалить или заменить, специальные символы задают ограничения на вводимые данные.
* [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. Если тип атрибута "Пользовательское" можно указывать дополнительную информацию по наименованию, например для автоматической проставки суммы вычета на детей при создании заявления. Подробнее можно почитать в разделе [Дополнение к наименованию в пользовательском типе атрибута](../Пользовательские типы атрибутов документов/Пользовательские типы атрибутов документов.md#поля_дополнение_к_наименованию).
- Группа столбцов **"Значение по умолчанию"** используется в случае, если при создании документа реквизит должен быть заполнен неким условленным значением. Для разных типов атрибутов используются разные колонки. Для типов атрибута **"Строка"** требуется заполнить поле в столбце **"Текст"**. Для типов атрибута **"Логическое"** требуется поставить галочку в столбце **"Флаг"**.
Для типа атрибута **"Целое"** или типов атрибутов, которые позволяют в документе выбрать значение из списка, требуется заполнить поле в столбце **"Код/число"** числовым значением.
- **Видимость для ролей** - используется при необходимости настройки отображения данного атрибута при наличии определенной роли у пользователя. Возможно задать как одну роль, так и несколько указанных через запятую. У пользователя имеющего указанную роль атрибут в документе будет отображен, в то время как у пользователя у которого отсутствует одна либо все указанные в данном столбце роли, данный атрибут не будет отображен.
Чтобы прописать вычисление полей, значения которых должны зависеть от остальных полей (т.е. сделать их вычисляемыми), необходимо в 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
```
Есть специальные дополнительные атрибуты с зарезервированными наименованиями и типами, прописывать их в таблице "Дополнительные атрибуты" не надо. Среди таких атрибутов есть:
Поле "Шаблон" – это макет документа, включающий в себя, как правило, большую часть его содержания. В шаблоне должен содержаться текст и определенные ранее атрибуты, включенные в текст при помощи соответствующих значений столбца "Наименование колонки" таблицы "Дополнительные атрибуты".
В поле "Шаблон" доступны инструменты форматирования текста: доступно изменение шрифта текста, выравнивание, создание списков.
Заполненный текст шаблона выглядит следующим образом:
Для дальнейшей работы пользователей с документом необходимо его сохранить, нажав на кнопку "Сохранить"

!!! note
В шаблон можно вставить графические файлы, например логотип компании. Необходимо обратить внимание чтобы используемый графический файл не имел прозрачности.
## Предпросмотр
Для того, чтобы иметь более чёткое представление о том, как будет выглядеть печатная форма при построенном шаблоне, можно воспользоваться кнопкой <imgalt="Предпросмотр"src="../media/previewBtn.png">. При нажатии на кнопку документ конструктора будет сохранён и откроется печатная форма с текстом, внесённом в шаблон. При предпросмотре служебные наименования на конкретные значения не заменяются.
{: .zoom}
## Показать подсказки
Для того, чтобы при работе с конструктором видеть краткие рекомендации по его заполнению, можно воспользоваться кнопкой <imgalt="Показать подсказки"src="../media/showTips.png">.
В верхней части формы появится серый текст:
{: .zoom}
Чтобы скрыть вспомогательный текст, необходимо нажать на кнопку <imgalt="Скрыть подсказки"src="../media/hideTips.png">.
При нажатии на данную кнопку автоматически создается форма шаблона маршрута с выбранными типом и подтипом документа из вкладки "Основная". Подробнее о работе с данной формой можно ознакомиться в статье ["Настройка шаблонов маршрутов"](../Настройка шаблонов маршрутов/Настройка шаблонов маршрутов.md).
В случае, если уже существует другой шаблон с таким же подтипом документа, необходимо, чтобы только один из шаблонов был действующим. Для этого необходимо открыть старую версию шаблона и поставить галочку в поле "Шаблон закрыт/не используется", расположенную в верхней части формы, а затем нажать на кнопку "Сохранить".
Аналогичные действия производятся в том случае, если есть документ с неактуальным подтипом.

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

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

## Вкладка "Ограничения"
### Правила для вложений
В данной вкладке, при необходимости, устанавливаются правила разрешения вложения необходимых данных в документ. В табличной части указывается роль и правило на каком этапе маршрута у данной роли будет возможность вкладывать данные в документ.
- Правило **"Всегда"** - можно вложить файл в любой момент и на любом этапе, и на этапе завершения.
- Правило **"Без маршрута"** - можно вложить файл если маршрут не создан
Галочка напротив поля **Разрешить вкладывать файлы** должна быть проставлена.
!!! note
Если в данной вкладке не заполнены правила, то вкладывать документы во вложении может любой пользователь на любом этапе
В конструкторе есть возможность задавать типы вложений. Для этого их нужно добавить в таблице "Необходимые типы вложений" по кнопке добавить. Типы вложений выбираются из справочника ["Типы вложений"](../Типы вложений/Типы вложений.md)
Перед отправкой по маршруту документа, созданного на основании этого конструктора, сработает проверка на наличие вложений с указанными типами.
Если в конструкторе НЕ заполнена таблица "Необходимые типы вложений", то проверка при отправке по маршруту НЕ сработает.
### Правила на время создания
В данном блоке, при необходимости устанавливается ограничение от даты создания документа. Например, для подтипа "Заявление на ежегодный отпуск", при периоде заявления от 1 до 7 календарных дней не получится создать заявление на этот период ранее чем за календарных 7 дней от текущей даты.
!!! Примечание
Данное правило действуют только на заявление длительностью от 1 до 7 календарных дней. В случае если у заявления период действия от 8 дней и более, ограничение действовать не будет.


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

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

### Служебное наименование
Служебное наименование является необязательным, но рекомендуемым полем, которое должно либо содержать уникальное значение среди документов реестра "Конструктор документов" (на латинице, без спецсимволов и без пробелов), либо одно из "специальных". *Специальные* служебные наименования подключают функции проверок и вычислений. Можно воспользоваться следующими встроенными функциями:
- Для проверки и настройки дат c учетом **рабочих** дней: в поле "Служебное наименование" ввести значение ```CheckDates```; для атрибутов, которые будут проверяться и рассчитываться в зависимости друг от друга, необходимо указать служебные слова ```#bdate#``` (начало периода), ```#edate#``` (конец периода), ```#kolvo#``` (количество дней между датами).
- Для проверки и настройки дат с учетом **календарных** дней: в поле "Служебное наименование" ввести значение ```CheckCalendarDates```; для атрибутов, которые будут проверяться и рассчитываться в зависимости друг от друга, необходимо указать служебные слова ```#bdate#``` (начало периода), ```#edate#``` (конец периода), ```#kolvo#``` (количество дней между датами).
- Для проверки и настройки когда дата начала, например, электронного листа нетрудоспособности, не может быть больше даты окончания: поле "Служебное наименование" ввести значение ```CheckBDateBeforeEDate```; для атрибутов, которые будут проверяться и рассчитываться в зависимости друг от друга, необходимо указать служебные слова ```#bdate#``` (начало периода), ```#edate#``` (конец периода).
!!! note
Служебные наименование должны быть указаны с маленькой буквы
**Разрешить тиражирование уволенным по всем местам работы** и **Атрибут Год** - включает автоматическое тиражирование заявления на те филиалы, в которых сотрудник работал в указанный год, но в данный момент уволен.
Если сотрудник трудоустроен на нескольких организациях холдинга и/или принят также внутренним совместителем на одной из организаций, то при оформлении заявления на отпуск, он должен согласовать заявление по каждому месту работы. Для этого реализована возможность тиражирования данного документа во все организации, и все должности внутри одной организации. По завершению согласования заявления на основном месте работе, оно будет растиражировано по каждому месту работы. В данном блоке можно можно указать данную информацию для совместителя, что ему не нужно будет создавать на каждом месте работы нужное заявление. Информация будет отображаться при заполнении заявления на основном месте работы.
{: .zoom}
{: .zoom}
С помощью инструментов, расположенных в верхней части можно форматировать текст. Например, выбрать шрифт, размер, цвет, начертание (полужирный, курсив или подчеркнутый), выравнивание абзацев.
При необходимости для документов можно настроить информационные сообщения которые будут отображаться в верхней части документа.


С помощью инструментов, расположенных в верхней части можно форматировать текст. Например, выбрать шрифт, размер, цвет, начертание (полужирный, курсив или подчеркнутый), выравнивание абзацев.
С помощью инструментов, расположенных в верхней части можно форматировать текст. Например, выбрать шрифт, размер, цвет, начертание (полужирный, курсив или подчеркнутый), выравнивание абзацев.
Если в таблице указан пользователь, то система не будет автоматически создавать копии документов на все места его работы. В этом случае пользователь должен самостоятельно переключаться на каждое место работы и заполнять заявление на отпуск отдельно для каждой организации, в которой он работает.
Заполненное краткое содержание автоматически заполнится в соответствующем поле в [служебной записке](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/%D0%A1%D0%AD%D0%94/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F%20%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%BA%D0%B0/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F%20%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%BA%D0%B0/).
По умолчанию наименование и тема документа формируется по правилу #Master_DocumentType# № #Master_DocumentNumber# от #Master_DocumentDate#, которое расшифровывается как <Типдокумента> №<Номердокумента> от <Датадокумента>. В поле ниже вы можете задать свое правило.
Правила формируются на основании **служебных наименований** атрибутов документа, как [вычисляемых](#вычисляемые_атрибуты), так и указанных в таблице [Дополнительные атрибуты](#дополнительные_атрибуты_документа). Например, для заявления на ежегодный отпуск можно задать следующее правило:
`#Master_DocumentSubtype# #Master_CUserNameGenitive# на #kolvo# день (-ей)` , которое расшифровывается как <Подтипдокумента><ФИОинициаторадокументавродительномпадеже>на<количество> день(-ей).
!!! note
`#kolvo#` в данном примере используется в качестве дополнительного атрибута документа.
* Скрыть кнопку **<Копировать>** - скрывается кнопка "Операции" в панели инструментов в **универсальных документах** и **доверенностях на конструкторе**;
Данный пример представлен для конструктора группы ["Уведомления Lexema"](../Настройка внутрисистемных уведомлений/Настройка внутрисистемных уведомлений.md) подтипа "Уведомления об отпуске".
* **Условие фильтрации** - задается название типа вида отпуска указанный в [уведомлении](../Настройка внутрисистемных уведомлений/Настройка внутрисистемных уведомлений.md)
* **Служебное наименование** - задается служебное наименование [дополнительного атрибута](#дополнительные_атрибуты_документа), в данном случае **#typeVacation#**.
Если столбцы "Подтип", "Условие фильтрации" и "Служебное наименование" не заполнены, то созданная операция будет отображаться во всех подтипах документа. Кнопка "Операции" отображается только в документах "Заявление от сотрудника".
Данная вкладка предназначена для определения зависимостей атрибутов между собой.
### Зависимые атрибуты
В данном примере представлен конструктор подтипа "Заявление о предоставлении стандартного налогового вычета на ребенка". В блоке "Дополнительные атрибуты", например, по первому ребенку указаны такие атрибуты как **#first#, #firstfio#, #firstdr#, #firstvichet#** и **#firstapp#**.

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

В данном примере указано что при заполнении поля "Первый ребенок" у которого служебное наименование **#first#**, система будет проверять заполнение полей ФИО, Дата рождения, Размер вычета и свидетельство о рождении, так как служебные наименования указаны в вычислениях как зависимые от поля "Первый ребенок". В случае не заполнения зависимых полей, они будут подсвечены красным светом, а также будет выведен текст о необходимости заполнить данные.
При необходимости возможно настроить дополнительные проверки для атрибутов. В данном примере представлен конструктор подтипа "Заявление на перенос ежегодного оплачиваемого отпуска". В блоке "**Дополнительные атрибуты"** указаны атрибуты по датам переноса и количеству дней переноса. При необходимости возможно отключить какие-то проверки по отдельности, для этого необходимо выбрать необходимую проверку и в столбце **"Вкл."** проставить галочку. В столбце **"Колонка для выделения"** перечисляются атрибуты (если их несколько то через запятую), на которые необходимо задать проверки. В столбце **"Сообщение"** задается информационное сообщение, которое выводится в случае незаполнения либо некорректных данных. В столбце **"Правило для проверки"** указывается условие по которому вычисляется проверка по зависимым атрибутам.
В данном примере указано правило: в случае если атрибут **#bdate_new1#** (_Дата начала нового отпуска (период 1)_) меньше либо равна текущей дате, то будет информационное сообщение: **"Дата начала нового отпуска должна быть позже текущей даты"**.
<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>
<td>coalesce(#edate_new2#,'19700101')<>'19700101' and #edate_new2# between #bdate_new1# and #edate_new1#</td>
</tr>
</table>
</body>
</html>
!!! note
Для вычислений проверки **"Перенос создан с даты ранее разрешенной"** необходимо завести константу ```создавать переносы отпусков, начиная с даты (день+месяц)```, заполняется столбец **"Значение (текст)"** числом и месяцем ранее которой не разрешается создавать заявление на перенос ежегодного отпуска.
**Ниже представлен пример проверки на заполнение реквизита в документе для пользователя с определенной должностью**, на примере документа "Заявление на получение справки 2НДФЛ", где #year# является реквизитом документа
Колонка для выделения | Сообщение | Правило для проверки
Данная вкладка предназначена для вычисления зависимостей атрибутов между собой.
В столбце **"Основной атрибут"** заполняется служебное наименование атрибута, который является основным в конструкторе. В столбце **«Зависимые атрибуты»** указываются служебные наименования атрибутов, которые необходимо указать как зависимые от основного атрибута. В столбце **"Вычисление"** указывается условие по которому вычисляется проверка по зависимым атрибутам.
В данном примере представлены вычисления для определения подразделения и должности при выборе сотрудника из выпадающего списка. В качестве основного атрибута для обоих вычислений выступает служебное наименование **#worker#**, для должности - **#prof#**, для подразделения - **#podr#**.
Основной атрибут | Зависимые атрибуты | Вычисления
Данная вкладка предназначена для самостоятельного указания текста для удаленных документах из системы 1С. Если электронный документ был загружен в систему 1С, и при этом соответствующий приказ был помечен на удаление в системе 1С, то указанный текст, он будет отображаться в связанном с приказом заявлении. Для проставления признака должна быть настроена задача ["Проверка документов Лексемы на удаление в 1С"](../sheduler/TaskSheduler.md) в [планировщике](../sheduler/Config.md).
Так как документы, созданные по этому шаблону, не будут относиться к блокам "Заявление от сотрудника", "Локально-нормативные акты" и "Документы на подписание", то шаблон будет для подтипа, относящегося к типу документа "Универсальный документ".
<p>После нажатия на кнопку "Создать" в реестре "Конструктор документов" заполним служебное наименование шаблона значением "AppealToPetrov" (рекомендуется использовать латинский алфавит), выберем тип документа "Универсальный документ" и создадим новый подтип документа: "Обращение". Это делается с помощью кнопки <imgsrc="../media/createSubTypeDoc.png"> справа от поля "Подтип документа".</p>
По нажатию на кнопку "Сохранить" создается новый подтип для типа документа, указанного в поле "* Использовать в документе". Выберем созданный подтип для шаблона документа. В результате заполнены первые три поля, которые определят процесс выбора шаблона пользователями.
{: .zoom}
### Текст шаблона
Заполним текст шаблона, в который будут подставляться атрибуты. Места для подстановки выделяются с двух сторон символом #, текст между ними рекомендуется писать на латинице и достаточно близкий по смыслу к соответствующим атрибутам. Текст шаблона будет выглядеть следующим образом:
{: .zoom}
### Суть обращения
Создадим первый атрибут – суть обращения. Поле, которое увидит пользователь, будет предназначено для ввода текста. Добавим новую строку в таблицу "Дополнительные атрибуты" и заполним наименование, тип атрибута и наименование колонки, а также потребуем обязательное заполнение поля пользователем и сделаем атрибут первым по порядку (порядок сортировки).
Допустим, что при создании документа пользователь должен будет указать его источник: коллцентр, сайт или входящее письмо в организацию. Для заполнения источника обращения создадим пользовательский тип атрибута, чтобы пользователь мог выбрать одно из значений из списка. Сначала перейдем в реестр пользовательских типов при помощи кнопки 
Создадим 3 документа в реестре. У каждого будет одна и та же группа: "источник обращения". Наименования будут служить значениями списка источников.



Теперь можно вернуться в конструктор документов и добавить вторую строку: с источником обращения. В качестве типа атрибута здесь необходимо выбрать "Пользовательский тип атрибута", в Тип группы (Unispr) необходимо ввести группу "источник обращения", в качестве наименования в выпадающем списке необходимо ввести значение "Name".
{: .zoom}
### Адресат
Следующий атрибут – адресат обращения, который будет содержать список подразделений и необязателен для заполнения. Так как уже существует справочник подразделений, можно использовать наименования подразделений в качестве источника данных для атрибута.
В новой строке таблицы "Дополнительные атрибуты" в качестве типа атрибута необходимо выбрать "Подразделение" и заполнить поле Наименование в выпадающем списке значением "Name".
Срочность обработки обращения предполагается оставить в качестве реквизита документа, не отражая его значение в текстовой части. Поле будет в виде опции (поле для галочки, чекбокс). Для этого необходимо в качестве типа атрибута выбрать "Логическое" (bool).
Последним атрибутом в таблице "Дополнительные атрибуты" будет дата создания документа.
{: .zoom}
### Специальные атрибуты
В тексте шаблона присутствуют [специальные атрибуты](#спец-атрибуты), которые мы не стали прописывать в таблице "Дополнительные атрибуты". Это #Master_PositionGenitive#, #Master_CUserNameGenitive# и #Master_CUserNameShort#. Чтобы в них подставились наименование должности и ФИО в родительном падеже и Фамилия И.О. составителя, пользователю не потребуется их явное указание в каких-либо полях.
### Результат
Сохраним созданный шаблон документа:
{: .zoom}
Перейдем к созданию универсального документа по созданному шаблону. Нажмем на кнопку "Создать" в реестре универсальных документов и выберем подтип "Обращение". Загрузятся реквизиты документа, соответствующие созданным нами дополнительным атрибутам, и основной текст. Более подробно о работе в универсальном документе можно прочесть в соответствующей [статье](https://ecm-user-manuals.readthedocs.io/ru/latest/User manuals/%D0%A1%D0%AD%D0%94/%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/%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/).
### Мне нужен в качестве атрибута список ИНН контрагентов. Нужно ли мне заводить для всех контрагентов записи с ИНН в Пользовательских типах атрибутах?
*Нет, необходимо создать атрибут в таблице "Дополнительные атрибуты" со значением "Контрагент" в поле "Тип атрибута", значением "INN" в поле "Наименование в выпадающем списке", а также заполнить поля "Наименование" и "Наименование колонки".*
***Вы можете использовать любой столбец таблиц Contract (для договоров), Contractor (для контрагентов), RP_Worker (для сотрудников), Department (для подразделений), Post (для должностей) в качестве источника данных для создаваемого атрибута. Названия столбцов можно узнать с помощью стандартных средств Microsoft SQL Server Management Studio.***
### После добавления нового документа в Конструкторе документов при создании нового документа в Заявлениях от сотрудника среди подтипов документа выпадает два одинаковых названия.
*Названия подтипов документов дублируются потому, что после создания нового шаблона в Конструкторе документов остался незакрытым шаблон с таким же подтипом. См. раздел [Закрытие шаблона](#закрытие-шаблона).*
### Что писать в Тип группы (Unispr)? Зачем этот столбец? { #chcode }
*Откройте реестр "Пользовательские типы атрибутов документов". В поле Тип группы (Unispr) вы можете внести любое значение, расположенное в столбце "Группа" этого реестра. Тогда атрибут сможет принимать любое из значений в столбце "Наименование", которым соответствует выбранная группа. Для удобства восприятия содержания реестра вы можете воспользоваться фильтром или сортировкой по группе.*
***Помните, что при этом в таблице "Дополнительные атрибуты" в поле "Тип атрибута" должно стоять значение "Пользовательский тип атрибута", а в поле "Наименование в выпадающем списке" – значение "Name".***
### Зачем столбец "Только для чтения"? Ведь нужно, чтобы пользователь заполнял шаблон какими-то значениями.
*Постановка галочки в столбце "Только для чтения" нужна для вычисляемых атрибутов. Их заполнение происходит в sql-процедурах и они зависят от значений других вносимых пользователем атрибутов. Например, дата конца отпуска – вычисляемый атрибут, он зависит от двух атрибутов: даты начала отпуска и количества дней в отпуске.*
### Атрибуты при создании документа располагаются не в том порядке, в каком создавались в таблице в Конструкторе документов.
*Чтобы порядок атрибутов был как в конструкторе, необходимо заполнить столбец "Порядок сортировки" в таблице "Дополнительные атрибуты".*
*Инструкцию по созданию пользовательского типа атрибута см. главу [Пользовательские типы атрибутов документа](../Пользовательские типы атрибутов документов/Пользовательские типы атрибутов документов.md).*
*О том, как использовать созданный пользовательский тип см. раздел [Описание полей в таблице "Дополнительные атрибуты". Тип группы (Unispr)](#описание-ChCode) и [Что писать в Тип группы (Unispr)?](#chcode).*