Книга: Разработка интерфейса прикладных решений на платформе "1С:Предприятие 8"
Назад: Реализация функциональности в клиентских и серверных обработчиках событий формы в зависимости от их назначения
Дальше: Второй вариант решения

Первый вариант решения

Чтобы обеспечить нужную функциональность формы при ее открытии, все действия будем выполнять в обработчике события ПриОткрытии. Подходящее название, зачем задумываться о назначении других обработчиков? «При открытии» – название события говорит само за себя, значит, в нем все и сделаем.

Для этого создадим форму элемента справочника Товары. Создадим реквизит формы РозничнаяЦена типа Число и перетащим его в дерево элементов формы. Затем создадим обработчик события формы ПриОткрытии и заполним его следующим образом (листинг 4.24).

Листинг 4.24. Обработчик события «ПриОткрытии»

&НаКлиенте

Процедура ПриОткрытии(Отказ)

 

Если НЕ Параметры.Ключ.Пустая() Тогда

РозничнаяЦена = РозничнаяЦена(Объект.Ссылка);

Элементы.РозничнаяЦена.Доступность = Ложь;

 

КонецЕсли;

 

КонецПроцедуры

В этом обработчике мы анализируем значение параметра формы Ключ. Если ссылка, содержащаяся в нем, непустая, то, значит, товар уже существует. Мы узнаем его цену на текущую дату из регистра сведений и присваиваем ее реквизиту РозничнаяЦена. Также мы устанавливаем для поля формы РозничнаяЦена свойство Доступность в значение Ложь.

Теперь поместим в модуль формы функцию для получения актуальной цены товара из регистра сведений, выполняющуюся на сервере без контекста формы (листинг 4.25).

Листинг 4.25. Функция «РозничнаяЦена()»

&НаСервереБезКонтекста

Функция РозничнаяЦена(ТоварСсылка)

 

Отбор = Новый Структура;

Отбор.Вставить("Товар", ТоварСсылка);

ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее( , Отбор);

 

Возврат ЗначенияРесурсов.Цена;

 

КонецФункции

В этой функции мы создаем структуру Отбор, содержащую отбор по измерению регистра Товар, и устанавливаем его равным ссылке на товар, переданной в функцию. Затем при помощи метода ПолучитьПоследнее() мы возвращаем последнюю на текущую дату цену товара.

ПРИМЕЧАНИЕ

Этот пример можно посмотреть в демонстрационной конфигурации «06 (вар. 1) Реализация функциональности в клиентских и серверных обработчиках событий формы в зависимости от их назначения».

Запустим «1С:Предприятие» и откроем форму редактирования одного из товаров. В открывшейся форме поле Розничная цена автоматически заполнится последней ценой этого товара из регистра сведений, при этом поле Розничная цена будет недоступно для редактирования (рис. 4.42).

Однако при открытии формы редактирования существующего товара будут сделаны два обращения на сервер (рис. 4.43).

Рис. 4.43. Показатели производительности

ПРИМЕЧАНИЕ

Заметим, что при первом открытии формы могут быть лишние серверные вызовы за счет кеширования платформой необходимой информации о форме. Но мы будем изучать стандартную ситуацию, когда при открытии формы происходит один вызов сервера.

Для наглядности рассмотрим схему программного взаимодействия клиента и сервера (рис. 4.44).

Рис. 4.44. Схема программного взаимодействия сервера и клиента

Один вызов происходит при открытии формы элемента справочника, и его делает сама платформа.

А вот второго вызова, который происходит при подстановке цены из регистра сведений для существующего товара, могло бы и не быть. Этот лишний серверный вызов произошел с клиента, из обработчика события ПриОткрытии.

Ниже мы покажем, как этого избежать.

Назад: Реализация функциональности в клиентских и серверных обработчиках событий формы в зависимости от их назначения
Дальше: Второй вариант решения