Добавим на форму создания динамические элементы:
o    нельзя указать дату начала отпуска ранее, чем текущая дата;
o    нельзя указать дату окончания отпуска ранее, чем дата начала;
- будем выводить описание отпуска как инструкцию к форме.
 
Чтобы добавить динамические элементы, воспользуемся дизайнером интерфейсов. Для этого в настройках формы добавим форму создания элемента.
Настройки формы
Создание формы
Создание формы
После этого откроется дизайнер интерфейсов.
![[IMG]](https://community.elma365.com/ru/assets/MiDRgNC40YEgNTExNjgzMTkyMjg4.0)
Форма создания в дизайнере интерфейсов
Виджет Стандартная форма элемента содержит в себе те свойства приложения, которые добавлены на форму создания в её настройках. Удалим этот виджет и добавим свойства по отдельности. Они расположены на боковой панели на вкладке Свойства.
Свойства приложения в дизайнере интерфейсов
Свойства, добавленные на форму создания
Ограничение ввода дат
Ограничить ввод дат можно с помощью сценария.
Важно
Сценарий — это код, который описывает поведение виджета в тех или иных условиях.
Сценарии могут быть:
- Клиентскими — выполняются в браузере пользователя;
 
- Серверными — обрабатываются на сервере ELMA365;
 
- Смешанными — сценарий, который выполняется на стороне клиента и вызывает серверный метод.
 
Серверные сценарии выполняются без ограничения доступа к элементам приложения, клиентские — с ограничением. Например, если в каком-либо приложении ограничен доступ к элементам, то при попытке загрузить элемент, к которому у текущего пользователя нет доступа, клиентский код вернёт ошибку, а серверный выполнится успешно. Аналогично при получении списка элементов, на стороне 
Клиента вернутся только те, к которым есть доступ, на стороне 
Сервера — все.
Как правило, сценарии для виджетов не требуют больших мощностей для реализации, и мы рекомендуем писать их на стороне 
Клиента.
Работа со сценариями осуществляется на языке TypeScript в удобной среде разработки в дизайнере интерфейсов на вкладке 
Сценарии.
Полное описание возможностей сценариев и примеров можно найти в 
TypeScript SDK.
 
Перейдём в настройки свойства Дата начала. На вкладке События создадим сценарий на стороне Клиента для события при изменении значения. Такой сценарий будет выполняться, когда пользователь изменит значение в поле Дата начала.
![[IMG]](https://community.elma365.com/ru/assets/MiDRgNC40YEgNTQxNjgzMTkyMDQx.png)
Создание сценария
Нажмём на кнопку Открыть и перейдём в редактор сценариев. Напишем сценарий, который ограничивает ввод Даты окончания.
Сценарий на изменение значения даты начала
	Код:
	
async function change_startdate(): Promise<void> {
    if (Context.data.date_start) // если заполнена Дата начала
    {
        Context.fields.date_end.data.setFilter((self, global) => global.and( // установить фильтр для Даты окончания
        self.gt(Context.data.date_start!), // значение должно быть больше Даты начала
        ));
    }
    else
    {
        Context.fields.date_end.data.clearFilter(); // сбросить фильтр
    }
}
 Чтобы ограничить ввод даты начала по текущей дате, необходимо использовать сценарий, который вызывается при загрузке формы. Для этого используется системная функция onInit().
Сценарий «onInit»
	Код:
	
async function onInit(): Promise<void> {
    Context.fields.date_start.data.setFilter((self, global) => global.and( // установить фильтр для Даты начала
        self.gte(new Datetime()), // значение должно быть больше и равно текущей дате
        ));
}
 
Опубликуем форму и посмотрим, как она выглядит для пользователя:
Дата начала ограничена по текущей дате
Дата окончания ограничена по дате начала
Добавление инструкции
Добавим инструкцию для пользователя, которая будет загружаться из описания Вида отпуска. Для этого откроем в дизайнере интерфейсов форму создания и добавим свойство Описание в контекст формы.
Важно
Контекст формы — это служебные переменные, которые используются для её настройки. Они нужны для написания сценариев, определяющих поведение формы, а также для получения информации из приложений, загрузки файлов и т. д.
 
Создание свойства в контексте формы
Теперь перейдём в шаблон формы и настроим виджет Инструкция:
Создание свойства в контексте формы
Свяжем свойство Описание с текстом инструкции:
Настройка виджета «Инструкция»
Теперь создадим сценарий, который будет срабатывать при изменении значения свойства Вид отпуска. Он будет подставлять значение поля Описание из приложения Вид отпуска в свойство Описание контекста формы.
Создание сценария
Сценарий
 
	Код:
	
async function change_leave_type(): Promise<void> {
    if (Context.data.leave_type) // если заполнен Вид отпуска
    {
        const leaveType = await Context.data.leave_type.fetch(); // получить данные элемента приложения Вид отпуска
        ViewContext.data.description = leaveType.data.description; // заполнить описание в контексте формы
    }
    else
    {
        ViewContext.data.description = 'Выберите вид отпуска.';
    }
}
 
Опубликуем форму и посмотрим, как она выглядит:
Инструкция на форме создания
Изменённая инструкция на форме создания