Триггеры. Автоматизация работы пользователей
Механизм триггеров позволяет автоматизировать выполнение различных действий пользователей. Использование механизма позволяет сократить время работы пользователей с программой, уменьшить количество ошибок при вводе данных, обеспечить соблюдение регламентов по работе с программой.
Механизм триггеров является универсальным и расширяемым. Можно настроить триггеры для решения ряда задач без привлечения программистов. Например, можно создать триггер, который уведомит клиента о поступление от него денег или оповестит коммерческого директора о выставление клиенту коммерческого предложения на 1 миллион.
При необходимости механизм триггеров может быть расширен для решения различных задач. Расширение механизма триггеров выполняется 1С программистом без внесения изменений в код программы и не влияет на обновление программы в будущем.
Как устроены триггеры?
Триггеры — это настройки программы описывающие события системы, условия и действия которые нужно выполнить. Каждый триггер обязательно содержит:
- Условие срабатывания триггера — событие, которое вызовет срабатывание триггера и условие, при соблюдении которого будет выполнено действие триггера.
- Действие триггера — действие, которое необходимо выполнить при срабатывании триггера и выполнении заданного условия.
Условия срабатывания и действия триггеров являются независимыми от триггера и могут быть использованы одновременно в нескольких триггерах. Например, действие «Отправить сообщение SMS» может быть использовано в триггерах, срабатывающих по условиям «Получена оплата от покупателя» и «Зафиксирован интерес клиента на сумму более. ». Условия срабатывания триггеров и действия триггера настраиваются для каждого триггера отдельно. Например, действие триггера «Отправить сообщение SMS» используется в триггерах «Получена оплата от покупателя» и «Зафиксирован интерес клиента на сумму более. ». Очевидно, что тексты сообщений SMS будет различаться, и их нужно будет настраивать для каждого триггера отдельно.
Программа уже содержит условия срабатывания триггеров и действия триггеров, которые можно использовать в произвольном сочетании при создании новых триггеров. Например, программа содержит условие срабатывания триггера «При записи входящего электронного письма (проверка связи с Интересом клиента)». Данное условие будет выполнено при получении ответа на электронное письмо, отправленное клиенту из документа Интерес клиента. Подробное описание примеров использования поставляемых условий срабатывания триггеров и действий триггеров приведено в статье «Примеры настройки механизма триггеров».
При необходимости можно создавать новые условия срабатывания триггеров. Например, добавить условие срабатывания триггера при создании Коммерческого предложения клиенту (дополнительно можно настроить ограничение по сумме предложения). Более сложные условия создаются программистом 1С.
Новые действия триггеров могут быть добавлены в систему только программистом 1С.
Информация!
Обычно триггеры срабатывают при изменении данных пользователем программы. Но можно настроить триггер, который будет срабатывать по заданному расписанию. Настройка триггеров описана в разделе Настройка срабатывания триггера по расписанию.
Добавление и настройка триггера
Добавлять и настраивать новые триггеры может только администратор системы. Для добавления нового триггера:
- Откройте список триггеров Настройки — НСИ — Триггеры и нажмите кнопку Создать.
- Заполните наименование триггера.
- Выберите условие срабатывания триггера.
- Нажмите на пиктограмму «шестеренка» напротив условия срабатывания триггера и выполните настройку.
- Выберите действие триггера.
- Нажмите на пиктограмму «шестеренка» напротив действия триггера и выполните настройку.
- Включите триггер. Установите флаг Включен.
Добавление нового триггера
Создание нового условия срабатывания триггера
Если в списке условий срабатывания триггера нет подходящего условия, тогда создайте новое условие. Например вы можете настроить условие срабатывания триггера при записи документа Коммерческое предложение. Для этого:
- Откройте список условий срабатывания триггеров Настройки — НСИ — Условия срабатывания триггеров и нажмите кнопку Создать.
- В поле Тип объекта выберите значение Документ.
- В поле Объект обработки выберите объект связанный с триггером, в нашем примере это Коммерческое предложение клиенту.
- В поле Событие выберите При записи.
Создание нового условия срабатывания триггера
Важно!
Не следует выбирать в поле Событие значение, отличное от При записи. Изменение данного значения допускается только программистом 1С.
Описанным способом создаются простые условия срабатывания триггеров. Новые сложные условия добавляются программистом 1С.
Настройка условий срабатывания и действий триггера
Для работы триггера необходимо отдельно выполнить настройки условий и действий триггера. Для этого:
- Найдите и откройте настраиваемый триггер.
- Нажмите на пиктограмму «шестеренка» напротив условия срабатывания триггера и выполните настройку.
- Нажмите на пиктограмму «шестеренка» напротив поля действие триггера и выполните настройку.
Настройка условий срабатывания и действий триггеров
Настройка сложных условий индивидуальна и здесь не описана. Настройка простых условий выполняется в стандартном окне. Например на скриншоте ниже описана настройка условия срабатывания «При записи коммерческого предложения». Установлен отбор по полю «Сумма документа». Условие отработает в случае если сумма предложения больше 1 000 000.
Настройка простых условий
Повторное срабатывание триггера в случае ошибки выполнения
При необходимости можно включить срабатывание триггера в случае невозможности его выполнения. Необходимость повторного срабатывания триггера включается в его настройках.
Настройка отложенного выполнения триггера
Настройку рекомендуется использовать в триггерах, изменяющих данные, например в триггере, который изменяет состояние Интереса. С включенной настройкой триггер изменит состояние Интереса, даже если в момент его срабатывания Интерес был заблокирован для изменения. Дополнительно в настройках можно указать что триггер должен сработать в случае, если в Интересе было изменено состояние (например состояние было изменено пользователем на форме Интереса).
Отложенное выполнение триггеров
При необходимости можно в настройках триггера можно указать, через какой период после срабатывания триггера будет выполнено его действие. Настройка расширяет возможности автоматизации различных операций.
Настройка отложенного выполнения триггера
Настройка срабатывания триггера по расписанию
Обычно триггеры срабатывают при изменении данных пользователем программы. Но можно настроить триггер, который будет срабатывать по заданному расписанию. Для настройки запуска триггера по расписанию нужно:
- Открыть триггер и выбрать условие срабатывания триггера По расписанию.
- Нажать на пиктограмму и выполнить настройку расписания.
Настройка расписания срабатывания триггера
Пример настройки расписания
Для ежедневной работы триггера необходимо в поле Повторять каждые установить 1. На закладке Дневное можно уточнить периодичность срабатывания триггера в течение дня.
Информация
- Открыть список регламентных заданий Настройки — Поддержка и обслуживание — Регламентные и фоновые задания.
- Найти в списке по имени триггера регламентное задание, выделить его и нажать на кнопку Выполнить сейчас.
Важно!
Если база работает на сервере «1С», тогда триггер сработает сразу после настройки и включения. К срабатыванию ранее включенного триггера приводит также изменение его расписания или названия.
Настройка действий триггеров
Настройка действий триггеров индивидуальна. Настройка поставляемых с решением действий описана в разделе Примеры настройки механизма триггеров.
Рассмотрим настройку включенного в программу действия триггера Отправить E-mail. В первую очередь необходимо определить получателя оповещения. Доступно несколько способов определения получателя:
Из объекта — получатель берется из выбранного реквизита объекта вызвавшего срабатывание триггера. На скриншоте ниже выбран реквизит Контакт документа Коммерческое предложение указанного в условие срабатывания триггера.
Указанный — выбирается конкретный получатель оповещения.
Из связанного интереса или другие варианты описаны в разделе документации Примеры настройки механизма триггеров.
Также необходимо заполнить следующие поля:
- Вид контактной информации — в поле уточняется вид e-mail на который будет отправлено сообщение. В поле можно выбрать только вид контактной информации предназначенный для оповещений.
- Использовать шаблон — флаг устанавливается если оповещение создается по шаблону.
Настройка действия Отправить E-mail
Повторное срабатывание триггера
Триггер срабатывает для каждого объекта только один раз. Например настроен триггер который при записи коммерческого предложения на 1 000 000 рублей отправляет SMS сообщение директору. Данный триггер сработает только один раз при записи коммерческого предложения с суммой более 1 000 000. В случае внесения изменений в данное предложение директор повторно не будет оповещен.
Информация!
Триггеры, в которых используется условие срабатывания По расписанию, не имеют ограничения по числу срабатываний.
Журнал работы триггера
Журнал работы триггера предназначен для мониторинга корректности работы триггеров. Поэтому ошибки работы триггеров всегда записываются в журнал работы триггеров. Рекомендуем регулярно формировать отчет Настройки — Отчеты — Журнал работы триггера с установленным отбором Только ошибки. Ошибки в журнале регистрации означают, что триггер не сработал. Для анализа причины появления ошибки необходимо привлечение 1С программиста.
При необходимости мониторинга срабатывания триггеров можно включить регистрацию работы триггера в журнале регистрации. Для этого:
- Выберите триггер в списке Настройки — НСИ — Триггеры.
- Установите флаг Регистрировать в журнале все срабатывания.
Рекомендуем включать данную настройку временно на период отладки работы триггера.
Расширение возможностей механизма триггеров
При необходимости возможности триггеров можно расширить для решения различных бизнес- задач. Данная работа выполняется программистом 1С без внесения изменений в код программы. То есть расширение возможностей триггеров не требует снятия конфигурации с поддержки и как следствие — отказа от автоматического обновления программы.
Создание и настройка триггеров выполняется путем создания новых условий срабатывания триггеров и новых действий триггеров. При этом параметры и логика работы задаются во внешних обработках «1С».
Внешняя обработка состоит из:
- объекта срабатывания триггера;
- параметров работы условия или действия, настраиваемых индивидуально для каждого триггера;
- формы ввода параметров пользователем;
- набора обязательных функций модуля обработки.
Параметры работы условия или действия сохраняются в реквизитах и табличных частях внешней обработки. Формой ввода параметров является форма внешней обработки с именем Форма.
Добавление новых сложных условий срабатывания
Условие срабатывания может быть простым (условие срабатывания триггера проверяется с использованием системы компоновки данных) или сложным (логика проверки описана во внешней обработке «1С»). Для сложного условия срабатывания триггера необходимо:
- Создать внешнюю обработку «1С».
- Открыть форму нового условия срабатывания триггера и загрузить внешнюю обработку «1С».
Загрузка внешней обработки проверки условия срабатывания триггера
Для корректной работы внешняя обработка должна содержать экспортную функцию Выполнить Проверку() и реквизит Объект Проверки. Функция проверяет условие срабатывания триггера для объекта проверки и возвращает результат проверки (Истина или Ложь).
Добавление новых действий триггеров
Для создания нового действия триггера нужно:
- Создать внешнюю обработку «1С».
- Открыть форму нового действия триггера и загрузить внешнюю обработку «1С».
Для корректной работы внешняя обработка должна содержать экспортную функцию Выполнить Действие() и реквизит Объект Действия. Функция выполняет действие для объекта срабатывания триггера и возвращает результат выполнения (Истина или Ложь). В случае, если функция возвращает Ложь будет создана новая запись об ошибки в журнале работы триггера.
Отладка внешних обработок
Внешние обработки для условий и действий триггеров можно отлаживать в конфигураторе. Для этого:
- Включите режим отладки на форме условия или действия триггера и выберите путь ко внешней обработке.
- Откройте внешнюю обработку в конфигураторе «1С» и поставьте точку останова.
- Запустите 1С:Предприятие в режиме отладки.
- Выполнение условия старта проверки условий срабатывания триггера.
Что такое триггер?
Что такое триггер ? столкнулся в книге, вот только там сложновато обьясняют.
- Вопрос задан более трёх лет назад
- 4487 просмотров
Комментировать
Решения вопроса 1
Действие, которое срабатывает при каком-то событии.
Ответ написан более трёх лет назад
Комментировать
Нравится 6 Комментировать
Ответы на вопрос 2
Love Family, Love Code
Хотел написать,что все просто и планировщик в винде понастраивайте и поймете.
Но призадумался,
где-то понимается под триггером условие срабатывания(планировщик), (время. событие)
где-то действие, которое срабатывает при некоторых условиях(база),
https://ru.wikipedia.org/wiki/Триггер_(базы_данных)
где-то все вместе (почти).(wpf xaml)
actions триггер>
Интересен контекст.
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Developer, ex-admin
Хотя бы какой язык изучаете? И в каком контексте?
Обычно триггер это функция, задаваемая программистом, которая срабатывает по какому-либо событию. Вызывается асинхронно системой. По сути то же самое, что и функции обратного вызова (call back).
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- Системное администрирование
- +2 ещё
Выбрать корпус и радиатор охлаждения для ASUS PRIME X670-P?
- 1 подписчик
- 27 окт.
- 59 просмотров
Триггеры
Триггеры представляют специальный тип хранимой процедуры, которая вызывается автоматически при выполнении определенного действия над таблицей или представлением, в частности, при добавлении, изменении или удалении данных, то есть при выполнении команд INSERT, UPDATE, DELETE.
Формальное определение триггера:
CREATE TRIGGER имя_триггера ON [INSERT | UPDATE | DELETE] AS выражения_sql
Для создания триггера применяется выражение CREATE TRIGGER , после которого идет имя триггера. Как правило, имя триггера отражает тип операций и имя таблицы, над которой производится операция.
Каждый триггер ассоциируется с определенной таблицей или представлением, имя которых указывается после слова ON .
Затем устанавливается тип триггера. Мы можем использовать один из двух типов:
- AFTER : выполняется после выполнения действия. Определяется только для таблиц.
- INSTEAD OF : выполняется вместо действия (то есть по сути действие — добавление, изменение или удаление — вообще не выполняется). Определяется для таблиц и представлений
После типа триггера идет указание операции, для которой определяется триггер: INSERT , UPDATE или DELETE .
Для триггера AFTER можно применять сразу для нескольких действий, например, UPDATE и INSERT. В этом случае операции указываются через запятую. Для триггера INSTEAD OF можно определить только одно действие.
И затем после слова AS идет набор выражений SQL, которые собственно и составляют тело триггера.
Создадим триггер. Допустим, у нас есть база данных productsdb со следующим определением:
CREATE DATABASE productdb; GO USE productdb; CREATE TABLE Products ( Id INT IDENTITY PRIMARY KEY, ProductName NVARCHAR(30) NOT NULL, Manufacturer NVARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price MONEY NOT NULL );
Определим триггер, который будет срабатывать при добавлении и обновлении данных:
USE productdb; GO CREATE TRIGGER Products_INSERT_UPDATE ON Products AFTER INSERT, UPDATE AS UPDATE Products SET Price = Price + Price * 0.38 WHERE Id FROM inserted)
Допустим, в таблице Products хранятся данные о товарах. Но цена товара нередко содержит различные надбавки типа налога на добавленную стоимость, налога на добавленную коррупцию и так далее. Человек, добавляющий данные, может не знать все эти тонкости с налоговой базой, и он определяет чистую цену. С помощью триггера мы можем поправить цену товара на некоторую величину.
Таким образом, триггер будет срабатывать при любой операции INSERT или UPDATE над таблицей Products. Сам триггер будет изменять цену товара, а для получения того товара, который был добавлен или изменен, находим этот товар по Id. Но какое значение должен иметь Id такой товар? Дело в том, что при добавлении или изменении данные сохраняются в промежуточную таблицу inserted. Она создается автоматически. И из нее мы можем получить данные о добавленных/измененных товарах.
И после добавления товара в таблицу Products в реальности товар будет иметь несколько большую цену, чем та, которая была определена при добавлении:
Удаление триггера
Для удаления триггера необходимо применить команду DROP TRIGGER :
DROP TRIGGER Products_INSERT_UPDATE
Отключение триггера
Бывает, что мы хотим приостановить действие триггера, но удалять его полностью не хотим. В этом случае его можно временно отключить с помощью команды DISABLE TRIGGER :
DISABLE TRIGGER Products_INSERT_UPDATE ON Products
А когда триггер понадобится, его можно включить с помощью команды ENABLE TRIGGER :
ENABLE TRIGGER Products_INSERT_UPDATE ON Products
Что такое триггер в программировании
Триггер является мощным инструментом контроля изменений данных в БД, а также помогает автоматизировать операции, которые должны выполняться в этом случае. Триггер выполняется после проверки правил обновления данных.
Триггер включает в себя две компоненты:
— ограничения, для реализации которых он создается;
— событие, характеризирующее возникновение ситуации, требующей проверки ограничений.
Предусмотренное действие производится за счет выполнения определенной операции или последовательности операций, с помощью которых реализуется логика, требуемая для удовлетворения ограничений.
События возникают при изменении содержимого таблицы. Действие, вызываемое событием, задается последовательностью запросов SQL и операторов процедурного языка Firebird.
Триггеры являются частью работы транзакции, в которой событие DML изменяет состояние строки. Если транзакция успешно подтверждается, то все действия триггеров принимаются. Если будет выполнен откат транзакции, то все действия триггера будут отменены.
В Firebird триггер определяется запросом CREATE TRIGGER, имеющим следующий формат:
CREATE TRIGGER имя триггера FOR < базовая таблица представление >[ACTIVE INACTIVE]
Определение триггера состоит из заголовка и тела. Заголовок содержит:
— имя создаваемого триггера;
— имя таблицы или модифицируемого представления, для которых создается триггер;
— состояние триггера (активный или неактивный);
— описание связи с событиями, при наступлении которых триггер должен сработать;
— приоритет выполнения триггера над другими триггерами, если те связаны с той же таблицей (представлением).
В заголовке триггера его активность определяется указанием ключевого слова ACTIVE. Триггер можно отключить , если использовать в заголовке триггера ключевое слово INACTIVE. По умолчанию любой триггер создается активным, т.е. не обязательно указывать ключевое слово ACTIVE при определении нового триггера. Явное указание ACTIVE может потребоваться при включении неактивного триггера (как можно модифицировать ранее созданный триггер будет подробно описано далее).
Триггер может выполняться в одной из двух фаз: BEFORE или AFTER. BEFORE указывает на то, что триггер должен сработать до указанных событий, а AFTER активизирует работу триггера после наступления указанных событий.
DELETE, INSERT и UPDATE задают три типа событий, на которые триггер реагирует соответственно при удалении, вставке или обновлении таблицы, для которой создан триггер.
Возможно объединение действий для двух или трех событий DML в одном триггере. В то же время в базе данных может быть создано несколько триггеров, которые ассоциированы с одной и той же таблицей, одним и тем же событием и имеют одну и ту же фазу. При этом для одной таблицы (представления) можно создать не более 32768 триггеров. Порядок выполнения таких триггеров устанавливается с помощью параметра предложения
Значение приоритет триггера может меняться от 0 до 32767. Триггеры с меньшими номерами выполняются первыми. Если же несколько триггеров имеют один и тот же приоритет, то они выполняются в алфавитном порядке их имен.
Тело триггера задает последовательность действий, которая будет реализована СУБД при наступлении контролируемых событий над заданной таблицей или представлением.
Тело триггера, как и тело ХП, состоит из списка объявления используемых локальных переменных и блока выполняемых операторов: [] ,
где и имеют такой же синтаксис, который был описан ранее.
Рассмотрим пример триггера для одного события. Пусть требуется перед удалением записей в таблице Executor сохранять в таблице History информацию о ФИО всех исполнителей ремонтных заявок и дате, до которой данная информация была актуальна. Скрипт для создания триггера Executor Delete, реализующего решение данной задачи, будет выглядеть следующим образом:
CONNECT c:\sqllab.fdb USER SYSDBA PASSWORD masterkey;
/* создание в тексте SQL сценария таблицы History */
CREATE TABLE History (ID INTEGER PRIMARY KEY, Executor List VARCHAR(300), FixDate DATE);
CREATE SEQUENCE Gen History;
/* установка начального значения генератора*/
ALTER SEQUENCE Gen History RESTART WITH 0;
SET TERM !! ; /*установка нового разделителя*/
CREATE TRIGGER Executor Delete FOR Executor ACTIVE BEFORE DELETE
DECLARE VARIABLE Line VARCHAR(32000);
/* вызов хранимой процедуры для записи ФИО всех исполнителей в переменную Line */
EXECUTE PROCEDURE SampleThree(Fio,Executor)
RETURNING VALUES Line; /* вставка строки в таблицу History */ INSERT INTO History VALUES
(NEXT VALUE FOR Gen History, :Line, CURRENT DATE); END!! /*конец оператора CREATE TRIGGER */ SET TERM ; !! /*установка стандартного разделителя */.
В приведенном скрипте сначала производится создание таблицы History, а также определение и установка начального значения генератора GenHistory, используемого для получения уникального значения поля первичного ключа таблицы History. Затем создается триггер ExecutorDelete, который будет запускаться перед наступлением события удаления строки из таблицы Executor. Триггер вызывает ранее созданную процедуру SampleThree, осуществляющую запись в переменную Line ФИО всех исполнителей ремонтных заявок, разделенных запятыми. Значение, полученное в переменной Line и дата, до которой информация была актуальна (дата удаления записей, т.е. текущая дата), записываются в таблицу History с помощью запроса INSERT, размещенного в теле триггера.
Следует обратить внимание на следующие особенности:
— отсутствие точки с запятой перед переменной Line в предложении RETURNINGVALUES;
— использование двоеточия перед переменной Line в списке значений VALUES запроса INSERT. Двоеточие указывает на использование локальной переменной, а не имени столбца таблицы.
Характерной особенностью триггеров является то, что в них может использоваться ряд контекстных переменных, которые нельзя использовать в
Основным средством реализации возможностей триггеров по отслеживанию целостности данных являются контекстные переменные OLD и NEW. Переменные используются в следующем виде: .столбец .
Контекстная переменная OLD ссылается в строке на текущие или предыдущие значения, которые обновляются или удаляются соответственно запросами UPDATE или DELETE в таблице, для которой создан триггер. Таким образом, переменная OLD не используется при вставке, т.к. старого значения не существует.
Переменная OLD является контекстной переменной только для чтения, поэтому попытка присвоить какое-либо значение переменной OLD.столбец будет отклонена.
Контекстная переменная NEW ссылается в строке на новые значения, которые будут вставлены или обновлены соответственно запросами INSERT