После обработки события формы Перед записью на сервере в СУБД открывается транзакция записи и начинается процесс записи данных прикладного объекта в базу данных, который представлен на рисунке 3.34.

Рис. 3.34. Последовательность действий и событий при записи объекта. Продолжение
Прежде всего вызывается событие объекта Перед записью. В этом событии можно отказаться от записи данных. Причем эта проверка будет выполняться всегда, независимо от того, каким способом данные объекта записываются.
После обработки события Перед записью данные записываются в базу данных, но транзакция не закрывается.
После записи данных вызывается еще одно событие объекта – При записи. Это событие предназначено для того, чтобы выполнить действия над дополнительными данными, которые неразрывно связаны с основными данными объекта и не могут быть изменены независимо от основных данных. Поскольку это событие обрабатывается в транзакции записи основных данных, гарантируется синхронность изменения основных и вспомогательных данных. Либо и те и другие будут записаны, либо и те и другие изменения будут отменены при отмене транзакции.
После обработки события объекта При записи, пока транзакция открыта, на сервере вызывается событие формы При записи на сервере. Назначение этого обработчика аналогично предыдущему – чтобы записать в базу данных дополнительную информацию, связанную с данными записываемого объекта. Ведь совсем не обязательно, что все исходные данные для записи дополнительной информации находятся в самом объекте. Они могут находиться и в форме. Как раз для таких случаев и предназначено это событие.
Описание процедуры, обрабатывающей это событие, выглядит следующим образом (листинг 3.31).
Листинг 3.31. Объявление обработчика события «При записи на сервере»
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Находясь в этом обработчике, важно понимать, что имеет смысл работать только с теми данными объекта, которые доступны через ТекущийОбъект. Здесь ТекущийОбъект – это именно то, что было записано в информационную базу.
Те данные, которые доступны через основной реквизит формы Объект, – это «старые» данные, то, что было в форме, когда она «приехала» на сервер. Изменять эти данные бесполезно, потому что после выхода из этого обработчика они будут заменены данными, содержащимися в ТекущийОбъект.
Иногда имеет смысл их анализировать. Например, в случае записи нового объекта тут будет следующая ситуация. Объект.Ссылка, скорее всего, будет содержать пустую ссылку (т. к. пока новый объект не записан, у него нет ссылки). В то же время ТекущийОбъект.Ссылка будет содержать уже конкретное значение ссылки на этот элемент в информационной базе. Конечно, все это справедливо только в том случае, если не выполнялось программное изменение ссылки до или после записи.
Итак, по поводу этого обработчика можно сделать следующие замечания: