Создание обработчиков изменения полей модели

Материал из Lexema.ru
Перейти к: навигация, поиск

У разработчика прикладных конфигураций Lexema.ru есть возможность создания программных сценариев на языке JavaScript, привязанных к полям модели, которые будут вызываться автоматически всякий раз при изменении значений этих полей вне зависимости от экранной формы.

Создание обработчика

Для создания обработчика необходимо открыть модель для редактирования (дерево навигации - раздел "Модели" - пункт "Модели"). Затем необходимо нажать на кнопку в колонке "Редактировать" в строке соответствующего поля:

CreateModelScript.png

В редакторе исходного кода обработчика необходимо текст скрипта. К примеру, сценарий на изменение поля Count (количество) вычисляет значение суммы путём умножения цены на количество:

ModelScriptCodeExample.png

var price = this.AccountPrice(),
    count = this.Count();    
    
this.SumbNDS(price * count);

Обращение к полям модели

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

Для получения значения поля fieldName необходимо написать this.fieldName(). Например:

var price = this.AccountPrice();

Для установки значения newValue поля fieldName необходимо написать this.fieldName(newValue). Например:

this.SumbNDS(price * count);

Возможные проблемы

Циклический вызов обработчиков изменения полей модели может вызвать зависание страницы. Например, если на поле field1 создан обработчик this.field2(newVal), а на поле field2 - обработчик this.field1(newVal), то это приведёт к рекурсивным вызовам бесконечной глубины и, как следствие, к зависанию клиентской части (веб-страницы в браузере). Такой конфигурации обработчиков следует избегать.

Проверка работоспособности скрипта

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

В примере, описанном выше, обработчик был назначен полю Count (количество) в табличной части документа RequestTest (заявка на поставку). Любое изменение значения поля Count приводит к автоматическому пересчёту значения поля SumbNDS (сумма с НДС):

ModelScriptTesting.png