09.12.2009
При выборе ссылочного значения в поле ввода иногда возникает необходимость специальным образом обработать выбирамемое значение.
Например, в документе, нужно выбрать поставщика. Но нужно вмешаться в процесс выбора значения и кроме ссылки на поставщика получить еще и другую информацию о поставщике. Например, его полное наименование и ИНН, которые являются реквизитами поставщика.
Для того, чтобы вмешаться в процесс выбора значения используется событие ОбработкаВыбора() элемента формы Поле. Это событие поставляется расширением поля формы для поля ввода. Обработчик этого события имеет такой синтаксис: ОбработкаВыбора(<Элемент>, <ВыбранноеЗначение>, <СтандартнаяОбработка>).
Во втором параметре (ВыбранноеЗначение) платформа передает в обработчик то значение, которое выбрал пользователь. В данном случае это будет ссылка на поставщика. Но проблема заключается в том, что обработчик ОбработкаВыбора() исполняется на клиенте, то есть объявление процедуры выглядит так:
Копировать в буфер обмена&НаКлиенте
Процедура ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
А на клиенте возможности ссылки очень сильно ограничены. В частности, от нее нельзя через точку получить значения реквизитов.
Поэтому для того, чтобы в этой ситуации получить значения реквизитов ссылки, нужно из этого обработчика вызвать серверную функцию и в ней получить нужные реквизиты. Например так:
Копировать в буфер обмена&НаКлиенте Процедура ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) ИНН = ПолучитьРеквизитВыбранногоЗначения(ВыбранноеЗначение); КонецПроцедуры &НаСервереБезКонтекста Функция ПолучитьРеквизитВыбранногоЗначения(ВыбранноеЗначение) Возврат ВыбранноеЗначение.ИНН; КонецФункции
При этом следует иметь ввиду два момента:
Подробнее об использовании события ОбработкаВыбора() можно прочитать в синтакс-помощнике: Интерфейс (управляемый) - Поле формы - Расширение поля ввода - События.