Вы можете привязать выполнение скрипта к событиям таблицы. Он запустится при действиях пользователя с определёнными строками и ячейками. Например, сотрудник заполняет список товаров и их количество — итоговые суммы для товаров рассчитываются автоматически с помощью скрипта и добавляются в ячейки таблицы.
Такая настройка доступна в дизайнере интерфейсов, если вы вынесете переменную типа Таблица на шаблон формы. Эта переменная добавится на поле для моделирования с помощью виджета Строка формы. В настройках виджета отобразится вкладка События Таблицы со следующими опциями:

- Событие при изменении ячейки — срабатывает при каждом символе, введённом в ячейку, отслеживание которой вы настроили в скрипте. Доступно для колонок типа Данные, например Строка, Число, Деньги и т. д.;
- Событие при окончании изменения ячейки — случится после завершения редактирования ячейки, т. е. когда пользователь нажмёт Enter или переместит курсор за пределы ячейки. Доступно для колонок типа Данные;
- Событие при удалении строки;
- Событие при перемещении строки.
Отслеживание этих событий реализуется в клиентских скриптах. В них доступна информация о затронутых данных таблицы: индекс строки, код колонки, предыдущее и новое значения ячейки при её изменении. Подробнее о структуре событий и работе с ними в скриптах читайте в справке ELMA365 TS SDK.
Обратите внимание, в настройках виджета Строка формы есть также вкладка События. Для переменной типа Таблица на этой вкладке событие срабатывает при любом изменении данных. Здесь не доступно отслеживание изменений в определённых ячейках и строках. Оно настраивается только на вкладке События Таблицы.
Пример добавления скрипта к событию таблицы
Рассмотрим на примере, как настроить запуск скрипта после изменения определённых данных в таблице.
Допустим, к товарам могут применяться следующие скидки:
- акционные — привязаны к определённому товару и хранятся в приложении Товары;
- персональные — привязаны к клиенту и хранятся в его карточке в приложении Клиенты.
При создании заказа сотрудник указывает клиента, а также выбирает товары и их количество в таблице Состав заказа. На основе этих данных другие ячейки таблицы заполняются автоматически.

Для этого к событию таблицы привяжите скрипт. В нём пропишите условия выбора скидки и алгоритм расчёта итоговых сумм для заказанных товаров.
Предварительные настройки
Рассмотрим настройки, которые выполняются до создания скрипта и его привязки к событию таблицы.
В разделе Работа с клиентами создайте три приложения:
- Клиенты. Карточка клиента содержит поле Персональная скидка, % (personalnaya_skidka) — свойство типа Число.
- Товары. В карточке товара есть следующие поля:
- Цена (price) — свойство типа Деньги;
- Есть скидка на товар (active_discount) — свойство типа Выбор «да/нет»;
- Скидка, % (discount) — свойство типа Число;
- Цена со скидкой (discount_price) — свойство типа Деньги.
- Заказы. В карточке заказа есть два поля:
- Клиент (client) — свойство типа Приложение. В её настройках укажите приложение Клиенты, чтобы для расчёта стоимости заказанных товаров получать размер персональной скидки;
- Состав заказа (order) — свойство типа Таблица.
Эта таблица состоит из следующих колонок типа Данные:
- Позиция (item) — свойство типа Приложение. В её настройках укажите приложение Товары, чтобы получать данные о наличии акционной скидки и суммы с учётом такой скидки. Заполняется пользователем вручную;
- Цена за единицу без скидки (price) — свойство типа Деньги. Отображает исходную стоимость позиции из её поля Цена (price);
- Есть скидка на товар (on_discount) — свойство типа Выбор «да/нет». Показывает, что при расчёте итоговой суммы применена акционная скидка из карточки товара;
- Применена персональная скидка (personal_discount_applied) — свойство типа Выбор «да/нет». Показывает, что при расчёте итоговой суммы применена персональная скидка из карточки клиента;
- Цена за единицу со скидкой (discount_price) — свойство типа Деньги. Отображает результат расчёта стоимости единицы товара с учётом применённой скидки;
- Количество (amount) — свойство типа Число. Пользователь указывает в этой ячейке таблицы количество заказываемых позиций. Это число учитывается в автоматическом расчёте итоговой суммы;
- Итог (total) — свойство типа Деньги. Заполняется автоматически и отображает результат полученных в скрипте вычислений.
Используя данные из указанных приложений, можно настроить скрипт и автоматически заполнять ряд ячеек таблицы.
Настроить скрипт и привязать его выполнение к событию таблицы
- Перейдите в меню настроек приложения Заказы, выберите пункт Настройка формы и откройте шаблон формы приложения в дизайнере интерфейсов.
- На вкладке Шаблон перейдите в настройки контекстной переменной типа Таблица, нажав на значок шестерёнки.

- Чтобы после выбора клиента и заказанных позиций автоматически заполнялись суммы товаров, привяжите скрипт к событию таблицы. Для этого перейдите на вкладку События Таблицы и в поле Событие при окончании изменения ячейки создайте функцию calculateTotal(). В ней пропишите условия для выполнения скрипта:
- Заполнить поле Клиент (client).
- Указать значения в следующих ячейках таблицы Состав заказа (order):
- Позиция (item) — выбрать товары, которые заказал клиент;
- Количество (amount) — добавить количество заказанных товаров.
После этого в скрипте автоматически проверяется наличие скидок и рассчитывается итоговая сумма для каждой выбранной позиции по следующему принципу:
- если у товара есть своя скидка — используется она;
- если нет — персональная скидка клиента.
Пример скрипта для автоматического расчёта итоговой суммы по товару
// Добавление функции, которая выполнится при окончании изменения ячеек таблицы |
- Сохраните скрипт и опубликуйте форму приложения Заказы.