Задача.
Например, на форме расположен реквизит «Услуга» с типом «СправочникСсылка.Номенклатура», значением которого по логике может быть только элемент номенклатуры, который является услугой. Соответственно, необходимо сделать так, чтобы при открытии формы выбора из данного поля ввода отображались только те позиции номенклатуры, у которых установлен флаг «Услуга» в значение Истина.
Решение.
Для поля ввода реквизита «Услуга» воспользуемся событием «НачалоВыбора», чтобы установить необходимый отбор. Кроме этого для удобства уберем иерархический просмотр, чтобы не отображались группы номенклатуры.
1 2 3 4 5 6 7 8 9 |
Процедура УслугаНачалоВыбора(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ФормаНоменклатуры = Справочники.Номенклатура.ПолучитьФормуВыбора(,ЭлементыФормы.Услуга); ФормаНоменклатуры.Отбор.Услуга.Использование = Истина; ФормаНоменклатуры.Отбор.Услуга.ВидСравнения = ВидСравнения.Равно; ФормаНоменклатуры.Отбор.Услуга.Значение = Истина; ФормаНоменклатуры.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Ложь; ФормаНоменклатуры.Открыть(); КонецПроцедуры |
Далее для поля ввода реквизита «Услуга» воспользуемся событием «ОбработкаВыбора», чтобы передать ему выбранное значение.
1 2 3 |
Процедура УслугаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Услуга = ВыбранноеЗначение; КонецПроцедуры |
В случаях, когда выбор значений должен происходить из поля ввода строки табличного поля, следует в событии «ТабличноеПолеУслугаНачалоВыбора» в методе «ПолучитьФормуВыбора» передать вторым параметром в качестве владельца само ТабличноеПоле:
1 |
ФормаНоменклатуры = Справочники.Номенклатура.ПолучитьФормуВыбора(,ЭлементыФормы.ТабличноеПоле); |
А в обработке выбора табличного поля прописать:
1 2 3 4 |
Процедура ТабличноеПолеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) ТекСтрока = Элемент.ТекущиеДанные; ТекСтрока.Услуга = ВыбранноеЗначение; КонецПроцедуры |
ист. http://1c-kod.ru/