Жизненный цикл управляемой формы. Шпаргалка разработчика
Прочитав когда-то давно книжку «Разработка управляемых форм», составил для себя такую схемку-напоминалку для обращения в процессе разработки. С тех пор не раз выручала и избавляла от необходимости лезть в гуглы.
- Описание
- Подробнее
Описание
| Модуль формы (клиент) | Модуль формы (сервер) | Модуль объекта (сервер) |
1. Открытие формы | ||
| ПриЧтенииНаСервере()(1) Только для существующего объекта. Подготовка доп.данных, зависящих от данных объекта. Объект — основной элемент открываемой формы; ТекущийОбъект — объект, прочитанный из БД (доступны экспортные методы объекта) | ОбработкаЗаполнения()(1) Только для нового объекта. Начальное заполнение объекта данными. Доступны ДанныеЗаполнения (ссылка на объект-основание либо структура отбора). В случае "СтандартнаяОбработка = Истина", после обработки заполнения, обрабатываются сначала ДанныеЗаполнения, затем ЗначенияЗаполнения |
ПриСозданииНаСервере() Окончательная подготовка формы (ее представления) к открытию | ||
ПриОткрытии() Действия, связанные с открытием, которые на сервере выполнить невозможно; выполняемые тогда, когда форма наверняка открывается. Последний обработчик перед открытием, в котором можно отказаться от открытия | ||
2. Запись объекта из формы | ||
ПередЗаписью() Анализ готовности вспомогательных данных для записи объекта | ||
1. ОбработкаПроверкиЗаполненияНаСервере() Проверка данных, не относящихся к объекту. Параметр ПроверяемыеРеквизиты содержит массив имен реквизитов формы | Механизм проверки заполнения(2) | |
2. ОбработкаПроверкиЗаполнения() Всё, что относится к проверкам реквизитов основного объекта БД. Параметр ПроверяемыеРеквизиты содержит массив имен реквизитов объекта | ||
ПередЗаписьюНаСервере() Объект — основной реквизит формы объекта; ТекущийОбъект — объект, который реально будет записан в БД. Анализировать данные и дозаполнять реквизиты нужно через ТекущийОбъект, модификация Объекта ни к чему не приведет. Обработчик вызывается только при записи из формы | ||
| Транзакция | ПередЗаписью() Вызывается при любом способе записи. Данные объекта записываются в БД, но транзакция не закрывается | |
ПриЗаписи() Выполняются действия над доп.данными, которые неразрывно связаны с основными данными объекта | ||
ПриЗаписиНаСервере() Предназначение аналогично ПриЗаписи(), но при обработке доп.данных можно использовать данные формы. ТекущийОбъект — данные, которые были записаны в БД, работать следует именно с ним; Объект — данные основного реквизита формы, которые были до записи, его модификация бесполезна. Если это запись нового объекта, то у Объект свойство Ссылка пустое, а у ТекущийОбъект уже заполнено | ||
ПослеЗаписиНаСервере() Действия над формой, которые выполняются только в том случае, когда объект гарантированно записан. ТекущийОбъект загружен в Объект, и теперь следует работать с Объектом, т.к. ТекущийОбъект будет уничтожен после обработчика. Но его можно использовать для вызова экспортных методов объекта | ||
ПослеЗаписи() Действия, которые невозможно выполнить на сервере, или требующие интерактивного взаимодействия с пользователем. Объект гарантированно записан | ||
3. Закрытие формы | ||
ПередЗакрытием() Проверка, можно закрыть форму или нельзя. Если отключить стандартную обработку, то форма будет закрыта, независимо от модифицированности | ||
ПриЗакрытии() Выполняется, если форма 100% закрывается. На момент вызова пользователь форму уже не видит | ||
Примечания:
1) Вызывается только один из двух обработчиков, в зависимости от того, записан объект в БД или создаётся новый;
2) Параметр Отказ нужен для отказа от записи объекта (не будет вызываться обработчик ПередЗаписьюНаСервере()). Чтобы отказаться от проверки заполнения, нужно очистить массив ПроверяемыеРеквизиты. При этом, если в обработчике [1] удалить из массива значение Объект, то обработчик [2] вызываться не будет. Если проверяемый реквизит привязан к функциональной опции, то при ее отключении заполнение реквизита проверяться не будет (имя отсутствует в массиве ПроверяемыеРеквизиты);

