ОбработкаОповещения в управляемых формах

У управляемой формы есть событие ОбработкаОповещения:

Обработчик данного события находится на клиенте и выглядит следующим образом:

Данное событие вызывается у всех открытых форм при вызове метода глобального контекста Оповестить(). Параметры у данного метода такие же, как у обработчика события формы: ИмяСобытия, Параметр, Источник. Тип параметра ИмяСобытия — Строка, остальных — произвольный. Метод Оповестить() доступен только на клиенте.

Для примера создадим в пустой конфигурации справочник Контрагенты и добавим у него реквизит «Адрес»:

А также обработку. На форму обработки добавим реквизит Контрагент с типом СправочникСсылка.Контрагенты и реквизит Адрес с типом Строка, доступный только для чтения. При изменении контрагента сделаем заполнение реквизита Адрес адресом из контрагента:

Создадим нового контрагента:

И выберем его на форме обработки:

Адрес заполнился автоматически. Однако, если сейчас изменить адрес контрагента, то на форме по прежнему останется старый адрес:

Вот здесь как раз можно использовать событие ОбработкаОповещения и метод Оповестить().

В модуле формы обработки добавляем событие ОбработкаОповещения:

Здесь анализируется событие и источник. Если событие равно «Запись_Контрагент» и Источник равен контрагенту на форме, то обновляем адрес контрагента. Условие нужно, чтобы не обновлять впустую адрес, если был вызван метод Оповестить с другим именем события или был записан другой контрагент (не который на форме обработки).

В модуль формы контрагента, в событие ПослеЗаписи добавим следующий код:

Здесь после каждой записи выполняется оповещение всех форм об изменении контрагента. Третьим параметром передается ссылка на записанного контрагента.

Если сейчас выбрать контрагента на форме обработки, а потом изменить его адрес, то адрес автоматически обновится на форме обработки.

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

Также можно в модуле управляемого приложения или в глобальном клиентском модуле подключить процедуру, которая будет выполняться при каждом вызове метода Оповестить(). Для этого в модуле приложения добавим следующую процедуру:

Данная процедура при каждой записи контрагента будет сообщать его наименование. Параметры должны совпадать с параметрами метода Оповестить(). Процедура обязательно должна быть экспортной.

В модуле приложения в обработчике события ПередНачаломРаботыСистемы с помощью метода ПодключитьОбработчикОповещения подключим данную процедуру:

Теперь при каждом вызове метода Оповестить будет вызываться процедура ГлобальнаяОбработкаОповещений, а при любой записи контрагента будет выводиться его наименование (если форма элемента не была закрыта).

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями: