Обработка выбора в поле ввода

Печать (Ctrl+P)

При выборе ссылочного значения в поле ввода иногда возникает необходимость специальным образом обработать выбираемое значение.

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

Для того, чтобы вмешаться в процесс выбора значения используется событие ОбработкаВыбора() элемента формы Поле. Это событие поставляется расширением поля формы для поля ввода. Обработчик этого события имеет такой синтаксис: 

ОбработкаВыбора(<Элемент>, <ВыбранноеЗначение>, <СтандартнаяОбработка>).

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

 &НаКлиенте
Процедура ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

А на клиенте возможности ссылки очень сильно ограничены. В частности, от нее нельзя через точку получить значения реквизитов.

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

&НаКлиенте Процедура ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ИНН = ПолучитьРеквизитВыбранногоЗначения(ВыбранноеЗначение); КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьРеквизитВыбранногоЗначения(ВыбранноеЗначение)
Возврат ВыбранноеЗначение.ИНН;
КонецФункции

При этом следует иметь ввиду два момента:

  • Во-первых, для получения реквизитов используется неконтекстный серверный вызов (&НаСервереБезКонтекста). Это важно, т.к. в этом обработчике нельзя использовать контекстные серверные вызовы (&НаСервере).
  • Во-вторых, любое обращение к серверу требует дополнительных ресурсов системы и может замедлять работу пользователя, особенно в случае подключения по низкоскоростному каналу связи. Поэтому нужно прежде всего внимательно оценить, а так ли необходимо в этом месте получать реквизиты ссылки или можно обойтись без этого? И если нужно получать несколько реквизитов и при этом используется какой-то сложный алгоритм – нужно постараться реализовать его так, чтобы все необходимые данные получить за один серверный вызов, вернуть их на клиента и на клиенте только поместить их в нужные поля формы, не проводя каких-то сложных вычислений.

Подробнее об использовании события ОбработкаВыбора() можно прочитать в синтакс-помощнике: Интерфейс (управляемый) – Поле формы – Расширение поля ввода – События.

Previous Article
Next Article

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.