Выбор из справочника с отбором в управляемой форме

Новая тема
"Требуется при выборе реквизита открыть ФормуВыбора справочника с отбором по списку кодов.

****************************************
&НаКлиенте

Процедура РеквизитНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;
УстановитьОтбор(Элемент.Имя);

КонецПроцедуры
*****************************************
&НаКлиенте

Процедура УстановитьОтбор(ИмяЭлемента)

СписокОтбора = ПолучитьСписокОтбора(ИмяЭлемента); //получили список нужных кодов для отбора

 Форма = ПолучитьФорму("Справочник.ИмяСправочника.ФормаВыбора",,);

ЭлементОтбора = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение =  Новый ПолеКомпоновкиДанных("Код");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = СписокОтбора;
 
Форма.Открыть();

КонецПроцедуры
**************************************************

Форма открывается с необходимым отбором, но при выборе значения из этой формы в поле реквизита оно не встает.

Нашла на форумах что в модуль формы выбора справочника нужно добавить

*************************************************
 &НаКлиенте

Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)

 ОповеститьОВыборе(ВыбранноеЗначение);

КонецПроцедуры
*************************************************

Не помогло. При отладке туда даже не заходит... При двойном клике на выбранном элементе справочника форма выбора закрывается но поле остается пустым."
"> Не помогло. При отладке туда даже не заходит...
Потому как сама отключила
СтандартнаяОбработка = Ложь;"
Ну да, иначе открывалось две формы выбора, одна с отбором и одна без
Конечно, ведь ты потом в процедуре установки выбора сама открываешь форму.
>При отладке туда даже не заходит...
Потому что "Процедура ОбработкаВыбора" надо писать на той же форме, где РеквизитНачалоВыбора. Как событие этого реквизита.
И в ней написать что-то типа:
Реквизит= ВыбранноеЗначение

А "ОповеститьОВыборе(ВыбранноеЗначение)" надо написать в обработке события "Выбор" и "ВыборЗначения" в форме выбора, как события элемента "Список".
"Во первых Вы не передали владельца формы при вызове "ПолучитьФорму" поэтому и не возвращается выбранное значение
Во вторых, 1С рекомендует использовать не "ПолучитьФорму" а "ОткрытьФорму" и туда передавайте параметры открытия формы, т.е. у Вас должно быть что-то типа:

&НаКлиенте
Процедура РеквизитНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СписокОтбора = ПолучитьСписокОтбора(Элемент.Имя); //получили список нужных кодов для отбора
ПараметрыФормы = Новый Структура ("Отбор", СписокОтбора );
ОткрытьФорму("Справочник.ИмяСправочника.ФормаВыбора",ПараметрыФормы ,Элемент);  
КонецПроцедуры"
Если делаю через ОткрытьФорму, то форма открывается без отбора. Отбор должен быть Код в списке СписокОтбора . Через ОткрытьФорму я так понимаю можно только установить Код равно СписокОтбора?
В процедуру ОбработкаВыбора не приходит совсем, то есть я понимаю что Форма справочника значение вобще не передает.
какой у Вас код в процедуре ПолучитьСписокОтбора?
"Skromnyi, спасибо огромное, все получилось!

ПараметрыФормы = Новый Структура ("Отбор", СписокОтбора );
Форма = ПолучитьФорму("Справочник.ИмяСправочника.ФормаВыбора",ПараметрыФормы,);
ЭлементОтбора = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение =  Новый ПолеКомпоновкиДанных("Код");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = СписокОтбора;
//изменения, вот это вставила и все заработало
Форма.Параметры.РежимВыбора = Истина;
Форма.ВладелецФормы = ЭтаФорма.Элементы.ИмяРеквизита;
//конец изменений
Форма.Открыть();

, а с ОткрытьФорму на форумах пишут , что можно сделать отбор только с видом Равно"
"нет, не только равно. Если Вы передаете массив в качестве параметра, то автоматом будет "ВСписке".
В предыдущем посте я немного ошибся, надо поменять строки:

СписокОтбора = ПолучитьСписокОтбора(Элемент.Имя); //получили список нужных кодов для отбора
УсловияОтбора = Новый Структура ("Код", СписокОтбора);
ПараметрыФормы = Новый Структура ("Отбор", УсловияОтбора );



 
"
Читают тему
(гостей: 1)

Быстрый переход