На самом деле, когда открывается форма с существующими в информационной базе данными, вызывается серверное событие ПриЧтенииНаСервере. В обработчике этого события, в параметре ТекущийОбъект, нам доступен прикладной объект, содержащийся в форме, со всей его функциональностью. Таким образом, здесь мы можем подготовить данные формы, зависящие от данных объекта, к открытию.
Затем вызывается серверное событие формы ПриСозданииНаСервере. Это событие не зависит от того, какие данные форма отображает, и вызывается при открытии у всех форм. Именно в обработчике этого события нужно полностью подготавливать саму форму, ее внешнее представление, к открытию. Для подготовки данных формы лучше использовать событие ПриЧтенииНаСервере.
Таким образом, к моменту передачи формы на клиент и возникновению события ПриОткрытии вся подготовительная работа по открытию формы будет уже сделана. Останется только выполнить какое-то общение с пользователем (показать предупреждение, задать вопрос и т. п.), если это нужно.
В данном решении мы используем обработчик события ПриЧтенииНаСервере. Это событие вызывается только для существующих объектов, при создании новых оно не вызывается. Поэтому для реализации нужной функциональности формы мы можем стандартно сконфигурировать поле РозничнаяЦена недоступным.
Итак, создадим обработчик события формы элемента справочника Товары ПриЧтенииНаСервере и переместим в него код из функции РозничнаяЦена() (листинг 4.26).
Листинг 4.26. Обработчик события «ПриЧтенииНаСервере»
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
Отбор = Новый Структура;
Отбор.Вставить("Товар", ТекущийОбъект.Ссылка);
ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее( , Отбор);
РозничнаяЦена = ЗначенияРесурсов.Цена;
КонецПроцедуры
Отключим свойство Доступность для поля РозничнаяЦена. Поскольку обработчик ПриЧтенииНаСервере будет отрабатывать только для существующих объектов, то для существующих товаров мы заполняем поле РозничнаяЦена последней ценой текущего товара из регистра сведений.
ПРИМЕЧАНИЕ
Этот пример можно посмотреть в демонстрационной конфигурации «06 (вар. 2) Реализация функциональности в клиентских и серверных обработчиках событий формы в зависимости от их назначения».
Как мы видим, функциональность прикладного решения будет такой же, как и в первом случае, но производительность будет выше, так как не будет лишних вызовов сервера с клиента. В результате та же функциональность формы будет реализована за один серверный вызов (рис. 4.45).

Рис. 4.45. Показатели производительности
ПРИМЕЧАНИЕ
Заметим, что при первом открытии формы могут быть лишние серверные вызовы за счет кеширования платформой необходимой информации о форме.