1с обработкавыбора очистить выбранное значение
При выборе ссылочного значения в поле ввода иногда возникает необходимость специальным образом обработать выбираемое значение.
Например, в документе, нужно выбрать поставщика. Но нужно вмешаться в процесс выбора значения и кроме ссылки на поставщика получить еще и другую информацию о поставщике. Например, его полное наименование и ИНН, которые являются реквизитами поставщика.
Для того, чтобы вмешаться в процесс выбора значения используется событие ОбработкаВыбора() элемента формы Поле. Это событие поставляется расширением поля формы для поля ввода. Обработчик этого события имеет такой синтаксис:
Во втором параметре (ВыбранноеЗначение) платформа передает в обработчик то значение, которое выбрал пользователь. В данном случае это будет ссылка на поставщика. Но проблема заключается в том, что обработчик ОбработкаВыбора() исполняется на клиенте, то есть объявление процедуры выглядит так:
А на клиенте возможности ссылки очень сильно ограничены. В частности, от нее нельзя через точку получить значения реквизитов.
Поэтому для того, чтобы в этой ситуации получить значения реквизитов ссылки, нужно из этого обработчика вызвать серверную функцию и в ней получить нужные реквизиты. Например так:
При этом следует иметь ввиду два момента:
- Во-первых, для получения реквизитов используется неконтекстный серверный вызов (&НаСервереБезКонтекста). Это важно, т.к. в этом обработчике нельзя использовать контекстные серверные вызовы (&НаСервере).
- Во-вторых, любое обращение к серверу требует дополнительных ресурсов системы и может замедлять работу пользователя, особенно в случае подключения по низкоскоростному каналу связи. Поэтому нужно прежде всего внимательно оценить, а так ли необходимо в этом месте получать реквизиты ссылки или можно обойтись без этого? И если нужно получать несколько реквизитов и при этом используется какой-то сложный алгоритм – нужно постараться реализовать его так, чтобы все необходимые данные получить за один серверный вызов, вернуть их на клиента и на клиенте только поместить их в нужные поля формы, не проводя каких-то сложных вычислений.
При выборе ссылочного значения в поле ввода иногда возникает необходимость специальным образом обработать выбирамемое значение.
Например, в документе, нужно выбрать поставщика. Но нужно вмешаться в процесс выбора значения и кроме ссылки на поставщика получить еще и другую информацию о поставщике. Например, его полное наименование и ИНН, которые являются реквизитами поставщика.
Для того, чтобы вмешаться в процесс выбора значения используется событие ОбработкаВыбора элемента формы Поле. Это событие поставляется расширением поля ввода. Обработчик этого события имеет такой синтаксис:
ОбработкаВыбора(<Элемент>, <ВыбранноеЗначение>, <СтандартнаяОбработка>).
Во втором параметре (ВыбранноеЗначение) платформа передает в обработчик то значение, которое выбрал пользователь. В данном случае это будет ссылка на поставщика.
Но проблема заключается в том, что обработчик ОбработкаВыбора исполняется на клиенте, то есть объявление процедуры выглядит так:
А на клиенте возможности ссылки очень сильно ограничены. В частности, от нее нельзя через точку получить значения реквизитов.
Поэтому для того, чтобы в этой ситуации получить значения реквизитов ссылки, нужно из этого обработчика вызвать серверную функцию и в ней получить нужные реквизиты. Например так:
При этом следует иметь ввиду два момента:
- Во-первых, для получения реквизитов используется неконтекстный серверный вызов (&НаСервереБезКонтекста). Это важно, т.к. в этом обработчике нельзя использовать контекстные серверные вызовы (&НаСервере).
- Во-вторых, любое обращение к серверу требует дополнительных ресурсов системы и может замедлять работу пользователя, особенно в случае подключения по низкоскоростному каналу связи. Поэтому нужно прежде всего внимательно оценить, а так ли необходимо в этом месте получать реквизиты ссылки или можно обойтись без этого? И если нужно получать несколько реквизитов и при этом используется какой-то сложный алгоритм – нужно постараться реализовать его так, чтобы все необходимые данные получить за один серверный вызов, вернуть их на клиента и на клиенте только поместить их в нужные поля формы, не проводя каких-то сложных вычислений.
Подробнее об использовании метода ОбработкаВыбора можно прочитать в синтакс-помощнике: Интерфейс (управляемый) - Поле формы - Расширение поля ввода - События:
Добрый день. Конфигурация бух 3.0. Помогите пожалуйста разобраться с событием обработка выбора. При выборе значения из подчинённой формы не происходит действий на основной форме. Почему так? В основной форме открывается форма списка по команде:
&НаКлиенте
Процедура ЗаполнитьМаршрут(Команда)
Объект.ЭтапыРабот.Очистить(); //очистка табл части документа
ВыбФорма = ПолучитьФорму("Справочник.ТиповыеМаршрутыЗаявок_ЕО.Форма.ФормаВыбора"); //вызов формы выбора этапов
ВыбФорма.Открыть();
В форме выбора такой код:
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
ОповеститьОВыборе(ВыбранноеЗначение);
СтандартнаяОбработка = Ложь;
Так же в основной форме есть процедура обработка выбора
Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
Если ТипЗнч(ЗначениеВыбора) = Тип("СправочникСсылка.ТиповыеМаршрутыЗаявок_ЕО") и ЗначениеЗаполнено(ЗначениеВыбора) Тогда
ОбработатьЗаполнениеСпискаЭтапов(ЗначениеВыбора, Объект.Дата);
КонецЕсли;
И последующее заполнение табличной части основной формы:
&НаКлиенте
Процедура ОбработатьЗаполнениеСпискаЭтапов(Маршрут, Дата)
Для Каждого ТекСтрока из Маршрут.Этапы Цикл
НовСтрока = Объект.ЭтапыРабот.Добавить();
НовСтрока.Этап = ТекСтрока.Этап;
НовСтрока.ВерсияЭтапа = 1;
НовСтрока.СледующийЭтап =ТекСтрока.СледующийЭтап;
НовСтрока.ВерсияСледующегоЭтапа = 1;
НовСтрока.ПервыйЭтап =ТекСтрока.ПервыйЭтап;
НовСтрока.Срок = ТекСтрока.Срок;
НовСтрока.ИсполнительРоль = ПолучитьИсполнителя(ТекСтрока.Этап, Дата);
НовСтрока.НазваниеДокумента = ТекСтрока.Этап.НазваниеДокументаРезультата;
КонецЦикла
не нужно открывать форму так как тут. для УФ реализовали ОткрытьФорму - в нем можно указать владельца формы - конкретный элемент текущей. тогда из формы выбора платформа автоматом передаст выбранное значение. и вот тогда сработает событие ОбработкаВыбора конкретного элемента
(1) И ещё небольшой дополнительный вопрос. бух 2.0 после выбора элемента в форме выбора переменная "ЗначениеВыбора" в процедуре "ОбработкаВыбора" принимается как ссылка на выбранный элемент, т.е. я могу обращаться к реквизитам : Актуальность, ВерсияДанных, Ссылка и т.д. Как я понял это реализовано через такой механизм формы выбора :
В бух 3.0 таких модулей я не обнаружил. Может я конечно и ошибаюсь, но как ещё можно получить значение выбора с возможностью обращения к реквизитам полученного объекта?
Бухгалтерия 2.0, управляемые формы
Необходимо получить список операций накладной запросом (т.к. в разных конфигурациях перечисление для "ВидаОперации" называется по разному; будет параметром), и дать пользователю возможность выбора. На форме: список выбора.
Обнаружил, что после того, как пользователь внес значение со списка - повторный клик на списке вызывает дублирование списка. Хотя список очищаю, перед выполнением запроса.
взял ваш код засунул в обработку = работает, не задваивает fly --> fly
пробуйте событие поставить не в НачалоВыбора
а в НачалоВыбораИзСписка
уберите ДанныеВыбора. так как они лишние, там в расширении формы ДанныеВыбора = Элемент.
fly @ Сегодня, 17:46 ,
Inkognito --> Inkognitofly
1) "пробуйте событие поставить не в НачалоВыбора а в НачалоВыбораИзСписка".
Теперь вообще нет списка. Проверил, процедура вообще не отрабатывает:
П.С. если перенести в процедуру "ПриИзменении" - тоже нет списка.
2) "уберите ДанныеВыбора. так как они лишние, там в расширении формы ДанныеВыбора = Элемент."
Ничего не изменилось
//---------------------------------------------
UPD: Поставил в свойствах поля флажок "РежимВыбораИзСписка" и заработало в процедуре "НачалоВыбора", дублирование исчезло.
Читайте также: