Как обработать выбор значения в поле ввода

30.05.2018

Теги: 1С:ПредприятиеОбработкаВыбораОповеститьОВыбореУправляемаяФормаЭлементФормы

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

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

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

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

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

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

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

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

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

Справка

УправляемаяФорма.ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)

Параметры:

  • ВыбранноеЗначение, тип Произвольный. Результат выбора в подчиненной форме. В случае множественного выбора возвращается массив выбранных значений.
  • ИсточникВыбора, тип Произвольный. Форма, где осуществлен выбор.

Описание:

  • Возникает на клиенте при выборе объекта в одной из подчиненных форм или при вызове в одной из подчиненных форм метода ОповеститьОВыборе.
УправляемаяФорма.ОповеститьОВыборе(ЗначениеВыбора)

Параметры:

  • ЗначениеВыбора, обязательный, тип Произвольный. Результат выбора.

Описание:

  • Посылает оповещение владельцу формы о выполнении выбора или подбора, передает ему выбранное значение. Закрывает форму в соответствии со значением свойства ЗакрыватьПриВыборе. Данное действие аналогично выполнению выбора в форме, открытой для выбора в поле ввода или ячейке табличного поля.

Доступность:

  • Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение (клиент).

Примечание:

  • Может применяться в случае, когда открытие формы выбора или подбора выполнено средствами языка.

Поиск: 1С:Предприятие • Обработка выбора • Оповестить о выборе • Управляемая форма • Элемент формы

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.