Как сделать подписку на событие в 1с
Подписки на события - это общие объекты конфигурации, которые позволяют запускать в общих модулях обработчики событий, возникающих в модулях объектов или модулях менеджеров прикладных объектов конфигурации. То есть, через механизм подписок можно запрограммировать некое действие, не трогая самого модуля объекта и не снимая его с поддержки.
Подписки на событие располагаются в ветке Общие дерева конфигурации. В свойствах подписки, указывается объект, на события которого подписывается, и собственно событие:
Как источники событий для подписки, доступны модули объектов и модули менеджеров объектов. На события формы подписаться нельзя.
- Исполняется процедура из обработчика в модуле объекта / модуле менеджера; если значение параметра Отказ становится истинным, то обработка прерывается
- Исполняется процедура обработчика событий из общего модуля; если значение параметра Отказ становится истинным, то обработка прерывается
Вопрос 06.39 экзамена 1С:Профессионал по платформе. При определении подписки на событие процедура - обработчик должна располагаться:
- в глобальном общем модуле
- в не глобальном общем модуле
- в модуле приложения
- в модуле объекта
Правильный ответ второй. Глобальные общие модули компилируются в момент старта системы; это не нужно в случае подписок.
Вопрос 06.45 экзамена 1С:Профессионал по платформе. При определении подписки на событие количество таких подписок:
- Только одна
- Любое количество, процедуры обработчики должны обязательно располагаться в разных общих неглобальных модулях
- Любое количество, процедуры обработчики могут располагаться как в одном, так и в разных общих неглобальных модулях
Вопрос 06.46 экзамена 1С:Профессионал по платформе. При определении на одно событие объекта 1С:Предприятие нескольких подписок на событие, порядок вызова обработчиков следующий:
- вызывается процедура подписки на событие, определенная последней, остальные не вызываются
- вызывается процедура подписки на событие, определенная первой, остальные не вызываются
- процедуры вызываются в соответствии с порядком создания подписок на событие
- процедуры вызываются в произвольном порядке
Вопрос 06.47 экзамена 1С:Профессионал по платформе. При определении подписки на событие, в случае если в модуле объекта определен соответствующий обработчик этого же события:
- процедура подписки на событие вызываться не будет (событие отрабатывается в модуле объекта)
- процедура модуля объекта вызываться не будет (событие отрабатывается по подписке)
- в начале отработает процедура, расположенная в модуле объекта, затем процедура, определенная по подписке
- в начале отработает процедура, определенная по подписке, затем процедура, расположенная в модуле объекта
- только для одного объекта
- для разных объектов, но только одного вида (например, для нескольких справочников или для нескольких документов)
- для разных объектов
Вопрос 06.49 экзамена 1С:Профессионал по платформе. При определении подписки на событие для разных объектов перечень показываемых событий формируется по принципу:
- должно совпадать количество параметров события
- должно совпадать имя события
- должны выполняться оба вышеприведенных требования
Правильный ответ третий. Соответствие числа параметров события и обработчика проверяется в принципе; если же одним обработчиком обрабатываются сращу несколько событий, то и наименование должно совпадать.
Вопрос 06.50 экзамена 1С:Профессионал по платформе. Процедура, используемая подпиской на событие, должна располагаться в модуле с установленными (взведенными) флажками:
В 1С подписки на события позволяют создать одну процедуру или функцию которая будет выполняться при определенном событии (ПередЗаписью, ПриЗаписи, ОбработкаЗаполнения, ОбработкаПроверкиЗаполнения, ОбработкаФормированияПоВерсииИсторииДанных) у выбранных объектов конфигурации. При этом в самих объектах писать код не нужно, достаточно лишь отметить их в дереве. Есть два варианта поиска подписок. Первый это открывать каждую подписку на события и смотреть источник, но на это можно потратить очень много времени так как например, в типовых конфигурациях очень много подписок. Второй это произвести поиск ссылок на объект.
Как найти подписку на событие
Система произведет поиск и отобразить все ссылки на выбранный объект.
Таким образом происходит поиск всех подписок на событие для объектов конфигурации 1C.
Порядок вызова подписок на событие + особый случай
При разработке или модификации прикладных решений на платформе 1С:Предприятие 8.x очень часто необходимо выполнять какое-либо стандартное действие для группы объектов конфигурации (например, справочников). Для того, чтобы не описывать в модуле каждого объекта проделываемые действия, разработчик может воспользоваться стандартным механизмом платформы - подпиской на событие.
Стандартное поведение
Пусть в нашем примере используется некоторый справочник "ПростойСправочник". Для него созданы подписки на события для каждого события, в которое может вмешаться разработчик. Процедуры-обработчики событий находятся в соответсвующем серверном общем модуле.
Порядок вызова обработчиков подписок такой же, как и при стандартном поведении платформы в работе с данным объектом. Поскольку в нашем примере мы рассматриваем работу со справочником, предлагаю рассмотреть схему вызова обработчиков в зависимости от действий с объектом (см. следующий скриншот).
Как мы видим, на первоначальном этапе вызываются обработчики событий "ОбработкаЗаполнения" (для создания нового элемента) или "ПриКопировании" (для создания элемента на основе существующего). В обоих случаях, после вызова названных обработчиков выполняется процедура "ПриУстановкеНовогоКода", где разработчик может устанавливать префикс в коде или переопределять поведение платформы при присвоении нового кода.
При записи элемента справочника, будь то новый элемент или существующий, вызываются три обработчика: "ОбработкаПроверкиЗаполнения" (на этом этапе обработчик может проверить корректность введенных данных и в случае, если есть ошибки, отказаться от записи), "ПередЗаписью" (пока объект не записан в базу можно корректировать значения реквизитов и проверить какие-либо дополнительные условия) и затем "ПриЗаписи" (запись в базу произведена, но транзакция не закрыта, разработчик может проверить данные после записи и при необходимости отменить транзакцию).
Событие "ПередУдалением" возникает только в случае непосредственного удаления объекта из информационной базы. Обычно, ни один пользователь не обладает правами на непосредственное удаление без проверки ссылочной целостности. Удаление всегда должно производиться обработкой "Удаление помеченных объектов". В последнем случае обработчик "ПередУдалением" тажке вызывается.
Таким образом, если мы создаем элемент справочника и записываем его в информационную базу, платформа выполнит вызов следующих обработчиков событий в указанном порядке:
Касательно других объектов конфигурации работа механизма подписок на события будет аналогичной, могут лишь различаться события и их порядок. Подробнее смотрите в синтаксис-помощнике.
Недокументированная сторона
Теперь рассмотрим интересную ситуацию. Допустим, для нашего справочника "ПростойСправочник" определены три подписки на событие "ПередЗаписью":
По скриншоту не трудно догадаться, что порядок вызова процедур-обработчиков подписок на события соответствует порядку объектов метаданных в ветке "Подписки на события". Эта особенность не описана ни в одной справочной литературе по платформе 1С:Предприятие, поэтому стоит быть осторожным при ее использованиии в конфигурации, так как недокументированные возможности могут меняться от версии к версии 1С:Предприятия и при этом отсутствовать в списке изменений программы.
Отступление
Вы спросите: "Для чего создавать несколько подписок для одного события объекта конфигурации?". Ответ прост. Если разработкой занимаются несколько человек, то вмешательство в созданные механизмы друг друга может привести к некорректной работе программы. В таких случаях самым логичным будет создавать отдельные подписки на события каждому разработчкику в соотетствии с поставленной задачей. Конечно, не исключено, что в дальнейшем они будут объединены в единую процедуру-обработчик.
Не устроил ответ?
Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.
Реклама
Новые задачи (Фриланс)
Новые вакансии
- Ведущего программиста приглашаем 1с от 100 000р. от Millana
Пятница, 28 января, 12:54 - Приглашаем ведущего программист erp, 150 000 от Millana
Пятница, 28 января, 12:49 - Ведущего программиста приглашаем (1С) ЗП от 100 000р. от Millana
Пятница, 28 января, 10:08
Читайте также: