Объект "Подписки на события" - предназначен для размещения в общих модулях внешних обработчиков, которые будут исполняться после выполнения определенного обработчика события в модуле объекта или модуле менеджера (при этом изменения в модуль объекта или модуль менеджера не вносятся).
Это процедура, которая будет выполнена после того, как выполнится исходный обработчик события. Таким образом, возникает возможность программного расширения модулей без их модификации (полезно при изменении типовых решений).
Подписки на события описываются в ветке "Общие" окна объектов конфигурации.
Основные свойства объекта 1С "Подписка на событие":
- Источник — типы данных, для которых устанавливается обработчик;
- Событие — событие, для которого установлен обработчик;
- Обработчик — указывается процедура из общего модуля, в которой будет расположен обработчик события.
Источниками событий могут являться прикладные объекты, наборы записей регистров, менеджеры объектов конфигурации. Допускается как множественный выбор объектов, являющихся поставщиками событий, так и выбор всех объектов одного типа (например, все документы).
При определении подписки на событие количество параметров в процедуре- обработчике на один параметр больше, чем у соответствующего обработчика события, располагаемого в модуле объекта (первый параметр содержит сам объект).
1 2 3 |
Процедура ПриИзмененииДокумента(Отказ) ... КонецПроцедуры |
Пример кода процедуры-обработчика:
1 2 3 |
Процедура ПриИзмененииДокумента(Источник, Отказ) ... КонецПроцедуры |
Обработчик события должен удовлетворять следующим требованиям:
- процедура должна быть расположена в общем модуле;
- у общего модуля, в котором расположена процедура, должны быть заданы следующие свойства:
- флаг "Глобальный" снят;
- флаг "Клиент (обычное приложение)" установлен;
- флаг "Клиент (управляемое приложение)" установлен;
- флаг "Сервер" установлен;
- флаг "Внешнее соединение" установлен.
- Количество параметров процедуры должно быть на единицу больше, чем количество параметров, которое имеет обработчик выбранного события.
- существует мнение, что обязателен только флаг "Сервер", другие без разницы, хоть сняты, хоть установлены.
Назначение обработчиков событий доступно также и средствами встроенного языка с помощью операторов:
- ДобавитьОбработчик;
- УдалитьОбработчик.
У объектов, которые могут являться источниками событий, есть свойство ДополнительныеСвойства типа Структура, позволяющее хранить информацию между вызовами событий (например, это новый или старый объект).
События на которые можно назначить обработчик подписки на событие:
- ПриУстановкеНовогоНомера;
- ПриКопировании;
- ОбработкаЗаполнения;
- ПередЗаписью;
- ПриЗаписи;
- ПередУдалением;
- ОбработкаПроведения;
- ОбработкаУдаленияПроведения;
- ОбработкаПроверкиЗаполнения;
ВАЖНО! Подписку на событие можно установить только на объект, а не на форму.
Если в конфигурации создана подписка на событие некоторого объекта, например событие ПередЗаписью() объекта справочника, то при возникновении этого события платформа выполняет следующую последовательность действий:
- выполняется обработчик события ПередЗаписью() в модуле объекта справочника:
- если в ходе выполнения обработчика параметр Отказ принимает значение Истина или вызывается исключение, то обработка события прерывается;
- если на втором шаге обработка события не прерывалась, то выполняются внешние обработчики (подписки на события), определенные для события ПередЗаписью();
- если в ходе выполнения внешнего обработчика параметр Отказ принимает значение Истина или вызывается исключение, то выполнение внешнего обработчика прерывается.
С помощью подписок на события можно организовать выполнение различных проверок, выполняющихся при записи объектов в базу данных.
Особенности обработки подписки на событие 1С:
- При определении на одно событие объекта 1С:Предприятие нескольких подписок на событие процедуры вызываются в произвольном порядке.
-
При определении подписки на событие для разных объектов перечень показываемых событий формируется по принципу:
- должно совпадать количество параметров события;
- должно совпадать имя события.