Настройка событий для типа данных «Таблица»

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

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

table-events-1

  • Событие при изменении ячейки — срабатывает при каждом символе, введённом в ячейку, отслеживание которой вы настроили в скрипте. Доступно для колонок типа Данные, например Строка, Число, Деньги и т. д.;
  • Событие при окончании изменения ячейки — случится после завершения редактирования ячейки, т. е. когда пользователь нажмёт Enter или переместит курсор за пределы ячейки. Доступно для колонок типа Данные;
  • Событие при удалении строки;
  • Событие при перемещении строки.

Отслеживание этих событий реализуется в клиентских скриптах. В них доступна информация о затронутых данных таблицы: индекс строки, код колонки, предыдущее и новое значения ячейки при её изменении. Подробнее о структуре событий и работе с ними в скриптах читайте в справке ELMA365 TS SDK.

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

Пример добавления скрипта к событию таблицы

Рассмотрим на примере, как настроить запуск скрипта после изменения определённых данных в таблице.

Допустим, к товарам могут применяться следующие скидки:

  • акционные — привязаны к определённому товару и хранятся в приложении Товары;
  • персональные — привязаны к клиенту и хранятся в его карточке в приложении Клиенты.

При создании заказа сотрудник указывает клиента, а также выбирает товары и их количество в таблице Состав заказа. На основе этих данных другие ячейки таблицы заполняются автоматически.

table-events-2

Для этого к событию таблицы привяжите скрипт. В нём пропишите условия выбора скидки и алгоритм расчёта итоговых сумм для заказанных товаров.

Предварительные настройки

Рассмотрим настройки, которые выполняются до создания скрипта и его привязки к событию таблицы.

В разделе Работа с клиентами создайте три приложения:

  1. Клиенты. Карточка клиента содержит поле Персональная скидка, % (personalnaya_skidka) — свойство типа Число.
  2. Товары. В карточке товара есть следующие поля:
    • Цена (price) — свойство типа Деньги;
    • Есть скидка на товар (active_discount) — свойство типа Выбор «да/нет»;
    • Скидка, % (discount) — свойство типа Число;
    • Цена со скидкой (discount_price) — свойство типа Деньги.
  3. Заказы. В карточке заказа есть два поля:
    • Клиент (client) — свойство типа Приложение. В её настройках укажите приложение Клиенты, чтобы для расчёта стоимости заказанных товаров получать размер персональной скидки;
    • Состав заказа (order) — свойство типа Таблица.

Эта таблица состоит из следующих колонок типа Данные:

  • Позиция (item) — свойство типа Приложение. В её настройках укажите приложение Товары, чтобы получать данные о наличии акционной скидки и суммы с учётом такой скидки. Заполняется пользователем вручную;
  • Цена за единицу без скидки (price) — свойство типа Деньги. Отображает исходную стоимость позиции из её поля Цена (price);
  • Есть скидка на товар (on_discount) — свойство типа Выбор «да/нет». Показывает, что при расчёте итоговой суммы применена акционная скидка из карточки товара;
  • Применена персональная скидка (personal_discount_applied) — свойство типа Выбор «да/нет». Показывает, что при расчёте итоговой суммы применена персональная скидка из карточки клиента;
  • Цена за единицу со скидкой (discount_price) — свойство типа Деньги. Отображает результат расчёта стоимости единицы товара с учётом применённой скидки;
  • Количество (amount) — свойство типа Число. Пользователь указывает в этой ячейке таблицы количество заказываемых позиций. Это число учитывается в автоматическом расчёте итоговой суммы;
  • Итог (total) — свойство типа Деньги. Заполняется автоматически и отображает результат полученных в скрипте вычислений.

Используя данные из указанных приложений, можно настроить скрипт и автоматически заполнять ряд ячеек таблицы.

Настроить скрипт и привязать его выполнение к событию таблицы

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

После этого в скрипте автоматически проверяется наличие скидок и рассчитывается итоговая сумма для каждой выбранной позиции по следующему принципу:

  • если у товара есть своя скидка — используется она;
  • если нет — персональная скидка клиента.

Пример скрипта для автоматического расчёта итоговой суммы по товару

  1. Сохраните скрипт и опубликуйте форму приложения Заказы.