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