Последовательность вызова обработчиков событий при открытии управляемой формы (УФ)
При открытии формы нового объекта (элемента справочника, документа) и при открытии формы существующего объекта возникает различная последовательность событий.
Форма нового объекта
Если открывается форма нового объекта, то сначала происходит начальное заполнение объекта данными (событие Обработка заполнения в модуле объекта, форма которого открывается), а затем вызываются два события формы: сначала на сервере (При создании на сервере) и затем на клиенте (При открытии). Эти два события позволяют подготовить форму к открытию (рис. 1).
Рис. 1. Последовательность событий при открытии формы нового объекта
№ | Модуль | Метод (процедура) |
1 | Модуль объекта (сервер) | Компиляция и код внизу модуля |
2 | Модуль объекта (сервер) | ОбработкаЗаполнения() |
3 | Модуль формы (сервер) | ПриСозданииНаСервере() |
4 | Модуль формы (клиент) | ПриОткрытии() |
Слева показан клиентский контекст, в котором вызываются события формы. Посередине и справа – серверный контекст, в котором вызываются как события формы, так и события самого прикладного объекта, форма которого открывается.
Форма существующего объекта
Если открывается форма существующего объекта, то последовательность событий будет иной (рис. 2). Сначала на сервере вызываются два события формы. Одно (При чтении на сервере) – чтобы подготовить дополнительные данные, которые зависят от данных объекта. Другое (При создании на сервере) – чтобы максимально подготовить форму к открытию. И наконец, на клиенте вызывается еще одно событие формы (При открытии), чтобы выполнить действия, связанные с открытием формы, которые на сервере выполнить невозможно.
Рис. 2. Последовательность событий при открытии формы существующего объекта
№ | Модуль | Метод (процедура) |
1 | Модуль объекта (сервер) | Компиляция и код внизу модуля |
2 | Модуль формы (сервер) | ПриЧтенииНаСервере() |
3 | Модуль формы (сервер) | ПриСозданииНаСервере() |
4 | Модуль формы (клиент) | ПриОткрытии() |
Из всех перечисленных событий нас прежде всего будут интересовать два события формы: При создании на сервере и При открытии.
Все, что можно сделать на сервере для подготовки формы к открытию, нужно делать в обработчике события При создании на сервере.
В обработчике события При открытии нужно делать только то, что на сервере сделать невозможно. Например, выдать предупреждение, задать вопрос. Или же выполнить те действия, которые выполняются именно тогда, когда форма наверняка открывается. Например, открыть связанную форму, которая «сама по себе» не существует, а существует, только если открыта родительская форма. Потому что обработчик При открытии – последний перед открытием формы, в котором можно отказаться от ее открытия. И если не происходит отказа от открытия родительской формы, то, значит, она наверняка будет открыта.