Триггеры

Триггер — это действие, которое запускается при добавлении, изменении или удалении записи. Это действие запускается в СУБД. Чаще всего триггеры нужны для математических вычислений. Например, чтобы посчитать общую стоимость заказа при добавлении в заказ нескольких позиций. Формулы такое сделать не могут, т.к. они всегда изменяют поля текущего объекта.

Управление триггерами происходит из таблицы триггеров, которая открывается из карточки поля объекта при нажатии на кнопку в полях: Приемник, Источник и Источник 2. Поле объекта должно существовать иначе кнопки управления триггерами будут не видны. При добавлении триггера в таблицу триггеров появляется следующий диалог.

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

Поля карточки «Триггер»

ПолеОписание
Тип триггераДействие триггера. То, что триггер будет делать.
СвязьУказывается, если действие триггера связано с родительским объектом. Значение поля отображается в формате «Род.объект < Доч.объект (поле-связи)».
ПриемникПоле, значение которое будет изменено триггером.
ИсточникПоле, значение которого будет использоваться триггером для вычисления поля-приемника.
Источник 2Поле, значение которого будет использоваться триггером для вычисления поля-приемника.
ПорядокОпределяет порядок, в котором срабатывают триггеры. Целое число от 0 до 32767. Триггер с меньшим номером срабатывает раньше.
Пересчитать поле-приемникТребуется ли пересчитать поле-приемник при создании или удалении триггера.

Триггеры можно разделить на две группы: Изменяющие и Заменяющие.

Изменяющие триггеры

Изменяющие триггеры изменяют значение поля-приемник, увеличивая или уменьшая его на какое-то значение.
Например: Приемник = Приемник + Источник.
Или: Приемник = Приемник — Источник — Источник 2.

К одному полю-приемнику можно применить несколько изменяющих триггеров.

Тип триггераОписание
Увеличить суммуПриемник = Приемник + Источник [+ Источник 2]
Уменьшить суммуПриемник = Приемник — Источник [- Источник 2]
Увеличить количествоПриемник = Приемник + 1. Приемник увеличивается на 1 при добавлении записи в дочерний объект.
Другими словами приемник увеличится на количество записей дочернего объекта.
Уменьшить количествоПриемник = Приемник — 1. Приемник уменьшается на 1 при добавлении записи в дочерний объект.
Другими словами приемник уменьшиться на количество записей дочернего объекта.

При изменении значения источника приемник пересчитывается соответствующим образом. Тоже происходит при подсчете количества.

Заменяющие триггеры

Заменяющие триггеры заменяют значение поля-приемник результатом вычисления полей-источников.
Например: Приемник = Источник * Источник 2.

К одному полю-приемнику можно применить только один заменяющий триггер.

Тип триггераОписание
СложитьПриемник = Источник + Источник 2
ВычестьПриемник = Источник — Источник 2
УмножитьПриемник = Источник * Источник 2
РазделитьПриемник = Источник / Источник 2

Общие замечания

Примеры с триггерами