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

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

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

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

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

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

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


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


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


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

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

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

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


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

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

**Ознакамливать бухгалтера по зп** - по завершению маршрута документа при включенной галочке, бухгалтеру организации направляется автоматическая рассылка о завершении документа. Бухгалтер назначается в [настройках пользователя](../Настройка пользователей/index.md#вкладка_расчет_зарплаты)
**Запретить создавать под замещением** - при включенной опции выбранный подтип документа нельзя создавать под [замещением](https://ecm-user-manuals.readthedocs.io/ru/latest/User%20manuals/Функция%20замещения/).
**Напоминать об отправке по маршруту** - при включенной опции выводит информационное сообщение об отправке заявления по маршруту. Работает при условиях, что автоматически формируется маршрут и на данный подтип настроен [один шаблон маршрута](../Настройка шаблонов маршрутов/index.md)
**Показывать границы таблиц в отчетах** - при включенной опции в печатных формах заявлений, универсальных документов, ЛНА будут отображаться границы у таблиц при их наличии в отчете. При выключенной опции границы будут отсутствовать.
**Запрещать ознакомление, если не создан документ из меню операций** - при включенной опции в выбранном подтипе документа запрещено ознакомление, например, с уведомлением об отпуске, если сотрудник не оформил заявление на отпуск или заявление на перенос через меню операций.

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

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

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

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

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

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

В уведомлениях содержится код шаблона, по которому его можно найти в реестре "Конструктор документов". Про закрытие шаблонов можно прочесть [ниже](#закрытие-шаблона).
### Дополнительные атрибуты документа
После того как два основных поля заполнены, необходимо перейти к заполнению таблицы "Дополнительные атрибуты". Это поля, которые будет необходимо заполнять при создании документа по создаваемому сейчас шаблону документа. В качестве примера добавим шесть дополнительных атрибутов:
- Основной отпуск – кол-во дней <Целое\> – длительность отпуска в днях, вводится автором вручную.
- Основной отпуск – с <Дата\> – дата начала отпуска, вводится автором вручную.
- Основной отпуск – по <Дата\> – дата окончания отпуска, вычисляется на основе количества дней в отпуске и даты его начала.
- Причина <Строка\> – причина ухода в отпуск без сохранения ЗП, вводится автором вручную.
- Причина (список) <Пользовательский тип атрибута\> – причина ухода в отпуск без сохранения ЗП, автор выбирает одно из возможных значений в списке.
- Компания <Контрагент\> – компания, в которую направляется заявление, автор выбирает одно из возможных значений в списке.
Это будут единственные изменяемые в тексте документа (заявления от сотрудника) поля, поэтому нужно внимательно отнестись к их созданию и заполнению поля "Шаблон", который содержит макет и основной текст будущего документа.
Для добавления новой строки в таблицу "Дополнительные атрибуты" необходимо нажать на кнопку "Добавить".

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

#### Описание полей в таблице "Дополнительные атрибуты": { #описание-полей }
- **"Порядок"** – порядок сортировки, заполняется целыми числами, в зависимости от которых будут упорядочиваться атрибуты для заполнения в документе. Например, атрибут с порядком сортировки, равным 2, будет располагаться ниже атрибута с порядком, равным 1.
- **"Наименование"** – необходимо заполнить наименованием дополнительного атрибута (строковое поле), исходя из которого пользователю должно быть понятно, какое значение должен принимать атрибут. Например: "Год", "Способ получения справки" и пр. Является обязательным для заполнения.
- **"Тип атрибута"** – необходимо заполнить информацией из выпадающего справочника, выбрав тип атрибута. Например, типы атрибута могут быть датой (Date), целым числом (bigint), строкой (string), логическим выражением (bool) и т.д. Также можно подключать сложные справочники, такие как сотрудники ("Работник"), контрагенты ("Контрагент") и т.д. Например, если в качестве типа атрибута было выбрано "Подразделение", то в качестве списка возможных значений атрибута будет использована одна из колонок справочника подразделений, колонка задаётся полем "Наименование в выпадающем списке". Атрибут "Дата и время" может использоваться для типов документов когда важно отразить дату и время, например в заявке на подачу автотранспорта. С помощью атрибута "Время" в документе отображается только время без даты. **"Тип атрибута"** является обязательным для заполнения.
При выборе типа атрибута - **Табличная часть** под блоком **"Дополнительные атрибуты"** появляется дополнительный блок для настройки табличной части в документе. Для использования в документе, в блоке **"Дополнительные атрибуты"** для данного типа атрибута необходимо указать **служебное наименование**, которое заполняется после этого в столбце **Служебное наименование таблицы**.

В столбце **"Маска для ввода, кол-во знаков после запятой"** позволяет установить строгий формат ввода данных пользователем и представлять из себя строку состоящую из обычных и специальных символов. Маска для ввода используется для атрибута **"Строка"**. Количество знаков после запятой используется для атрибута **double**. Ширина колонки задается в пикселях. При проставлении галочки в столбце **"Суммовое поле"** все столбцы с атрибутом **"Целое"** будут суммироваться в конце таблицы.
- **"Служебное наименование"** – наименование, вставляемое в текст шаблона для автозамены в тексте. Обязательная форма написания включает две "#": слева и справа от наименования, наименование прописывается на английском языке, например, #Name#. Именно эти значения будут заменены в тексте шаблона на введенные пользователем значения атрибута после нажатия на кнопку "Заполнить шаблон". Является обязательным для заполнения.
- **"Требовать заполнение"** – обязательность заполнения атрибута. Если в этом поле стоит галочка, документ не получится сохранить и отправить по маршруту, пока соответствующий атрибут не будет заполнен.
- **"Только для чтения"** – используется для вычисляемых полей. Если в этом поле стоит галочка, атрибут будет недоступен для редактирования пользователем напрямую.
- **Сделать невидимым** - используется если необходимо скрыть дополнительный атрибут в карточке документа.
- **Скрыть технический код** - используется если необходимо скрыть технический код атрибута в карточке документа.
- **"Тип группы(Unispr)"** – заполняется в том случае, если поле "Тип атрибута" принимает значение "Пользовательский тип атрибута" ("Base.Unispr"). Заполняется значением из справочника ["Пользовательские типы атрибутов документов"](../Пользовательские типы атрибутов документов/index.md). Соответствует полю "Группа" документов справочника, выпадающий список будет содержать все наименования прописанной группы. Используется в том случае, когда атрибут может иметь одно из определенных значений в некоторой группе наименований. Справочник доступен по кнопке "Пользовательские типы атрибутов":
Колонка для выделения |
Сообщение |
Правило для проверки |
#bdate_new1# |
Дата начала нового отпуска должна быть позже текущей даты |
#bdate_new1#::date <= now()::date |
#bdate_new2# |
Дата начала нового отпуска должна быть позже текущей даты |
coalesce(#bdate_new2#,'19700101')<>'19700101' and #bdate_new2#::date <= now()::date |
#bdate_new2# |
Дата начала отпуска в следующем году. Скорректируйте #bdate_new1_name# #bdate_new1# |
#year#::integer < date_part('year'::text,#bdate_new2#::date)::integer |
#bdate_new1# |
Дата начала отпуска в следующем году. Скорректируйте #bdate_new1_name# #bdate_new1# |
#year#::integer < date_part('year'::text,#bdate_new1#::date)::integer |
#bdate_new2# |
Заявление подается минимум за 3 дня до даты отпуска |
coalesce(#bdate_new2#,'19700101')<>'19700101' and #bdate_new2#::date < now()::date + interval '1 day' * 3 |
#bdate_new1#,#bdate_new2# |
Заявление подается минимум за 3 дня до даты отпуска. Скорректируйте #bdate_new1_name# #bdate_new1# |
#bdate_new1#::date < now()::date + interval '1 day' * 21 |
#kolvo_new2# |
Количество переносов (часть 1 + часть 2) меньше чем в основном отпуске |
#kolvo# > coalesce(#kolvo_new1#,0) + coalesce(#kolvo_new2#,0) and coalesce(#kolvo_new2#,0) <> 0 |
#kolvo_new2# |
Количество переносов (часть 1 + часть2) больше чем в основном отпуске |
#kolvo# < coalesce(#kolvo_new1#,0) + coalesce(#kolvo_new2#,0) and coalesce(#kolvo_new2#,0) <> 0 |
#kolvo_new1# |
Количество переносов (часть 1) больше чем в основном отпуске |
#kolvo# < coalesce(#kolvo_new1#,0) |
#kolvo_new1# |
Количество переносов (часть 1) меньше чем в основном отпуске |
#kolvo# > coalesce(#kolvo_new1#,0) and coalesce(#kolvo_new2#,0) = 0 |
#bdate_new1#,#bdate_new2# |
Непрерывный период хотя бы одного отпуска в год должен составлять не менее 14 дней. |
"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" |
#bdate_new1# |
Перенос отпуска оформлен только на выходные дни. Скорректируйте #bdate_new1_name# #bdate_new1# |
"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) ))
" |
#bdate_new2# |
Перенос отпуска оформлен только на выходные дни. Скорректируйте #bdate_new2_name# #bdate_new2# |
"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
" |
#bdate_new1# |
Перенос создан с даты ранее разрешенной |
#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 |
#bdate_new2# |
Перенос создан с даты ранее разрешенной |
#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 |
#bdate_new2# |
Пересечение отпусков, скорректируйте период |
coalesce(#bdate_new2#,'19700101')<>'19700101' and #bdate_new2# between #bdate_new1# and #edate_new1# |
#bdate_new1# |
Пересечение отпусков, скорректируйте период |
coalesce(#bdate_new1#,'19700101')<>'19700101' and #bdate_new1# between #bdate_new2# and #edate_new2# |
#edate_new1# |
Пересечение отпусков, скорректируйте период |
coalesce(#edate_new1#,'19700101')<>'19700101' and #edate_new1# between #bdate_new2# and #edate_new2# |
#edate_new2# |
Пересечение отпусков, скорректируйте период |
coalesce(#edate_new2#,'19700101')<>'19700101' and #edate_new2# between #bdate_new1# and #edate_new1# |
#bdate# |
На текущий календарный год отпуск запланирован, для корректировки периода предоставления отпуска необходимо оформить перенесение отпуска |
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) |
#Master_DocumentDate# |
Заявление на перенос отпуска будущего месяца создаются только в период с 10 по 17 число текущего месяца |
date_part('day',now()) not in (10,11,12,13,14,15,16,17) |
!!! 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#)



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



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



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



## Пример
Так как документы, созданные по этому шаблону, не будут относиться к блокам "Заявление от сотрудника", "Локально-нормативные акты" и "Документы на подписание", то шаблон будет для подтипа, относящегося к типу документа "Универсальный документ".
### Наименование, тип, подтип
После нажатия на кнопку "Создать" в реестре "Конструктор документов" заполним служебное наименование шаблона значением "AppealToPetrov" (рекомендуется использовать латинский алфавит), выберем тип документа "Универсальный документ" и создадим новый подтип документа: "Обращение". Это делается с помощью кнопки
справа от поля "Подтип документа".

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

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

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

### Источник обращения {#источник}
Допустим, что при создании документа пользователь должен будет указать его источник: коллцентр, сайт или входящее письмо в организацию. Для заполнения источника обращения создадим пользовательский тип атрибута, чтобы пользователь мог выбрать одно из значений из списка. Сначала перейдем в реестр пользовательских типов при помощи кнопки 
Создадим 3 документа в реестре. У каждого будет одна и та же группа: "источник обращения". Наименования будут служить значениями списка источников.



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

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

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

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

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

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

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

## FAQ
### Мне нужен в качестве атрибута список ИНН контрагентов. Нужно ли мне заводить для всех контрагентов записи с ИНН в Пользовательских типах атрибутах?
*Нет, необходимо создать атрибут в таблице "Дополнительные атрибуты" со значением "Контрагент" в поле "Тип атрибута", значением "INN" в поле "Наименование в выпадающем списке", а также заполнить поля "Наименование" и "Наименование колонки".*
***Вы можете использовать любой столбец таблиц Contract (для договоров), Contractor (для контрагентов), RP_Worker (для сотрудников), Department (для подразделений), Post (для должностей) в качестве источника данных для создаваемого атрибута. Названия столбцов можно узнать с помощью стандартных средств Microsoft SQL Server Management Studio.***
### После добавления нового документа в Конструкторе документов при создании нового документа в Заявлениях от сотрудника среди подтипов документа выпадает два одинаковых названия.
*Названия подтипов документов дублируются потому, что после создания нового шаблона в Конструкторе документов остался незакрытым шаблон с таким же подтипом. См. раздел [Закрытие шаблона](#закрытие-шаблона).*
### Что писать в Тип группы (Unispr)? Зачем этот столбец? { #chcode }
*Откройте реестр "Пользовательские типы атрибутов документов". В поле Тип группы (Unispr) вы можете внести любое значение, расположенное в столбце "Группа" этого реестра. Тогда атрибут сможет принимать любое из значений в столбце "Наименование", которым соответствует выбранная группа. Для удобства восприятия содержания реестра вы можете воспользоваться фильтром или сортировкой по группе.*
***Помните, что при этом в таблице "Дополнительные атрибуты" в поле "Тип атрибута" должно стоять значение "Пользовательский тип атрибута", а в поле "Наименование в выпадающем списке" – значение "Name".***
### Зачем столбец "Только для чтения"? Ведь нужно, чтобы пользователь заполнял шаблон какими-то значениями.
*Постановка галочки в столбце "Только для чтения" нужна для вычисляемых атрибутов. Их заполнение происходит в sql-процедурах и они зависят от значений других вносимых пользователем атрибутов. Например, дата конца отпуска – вычисляемый атрибут, он зависит от двух атрибутов: даты начала отпуска и количества дней в отпуске.*
### Атрибуты при создании документа располагаются не в том порядке, в каком создавались в таблице в Конструкторе документов.
*Чтобы порядок атрибутов был как в конструкторе, необходимо заполнить столбец "Порядок сортировки" в таблице "Дополнительные атрибуты".*
### Как создать пользовательский тип атрибута?
*Инструкцию по созданию пользовательского типа атрибута см. главу [Пользовательские типы атрибутов документа](../Пользовательские типы атрибутов документов/index.md).*
*О том, как использовать созданный пользовательский тип см. раздел [Описание полей в таблице "Дополнительные атрибуты". Тип группы (Unispr)](#описание-ChCode) и [Что писать в Тип группы (Unispr)?](#chcode).*