Выбор из справочника с отбором в управляемой форме
15.08.2012
13:50
#1
"Требуется при выборе реквизита открыть ФормуВыбора справочника с отбором по списку кодов.
****************************************
&НаКлиенте
Процедура РеквизитНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
УстановитьОтбор(Элемент.Имя);
КонецПроцедуры
*****************************************
&НаКлиенте
Процедура УстановитьОтбор(ИмяЭлемента)
СписокОтбора = ПолучитьСписокОтбора(ИмяЭлемента); //получили список нужных кодов для отбора
Форма = ПолучитьФорму("Справочник.ИмяСправочника.ФормаВыбора",,);
ЭлементОтбора = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Код");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = СписокОтбора;
Форма.Открыть();
КонецПроцедуры
**************************************************
Форма открывается с необходимым отбором, но при выборе значения из этой формы в поле реквизита оно не встает.
Нашла на форумах что в модуль формы выбора справочника нужно добавить
*************************************************
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
ОповеститьОВыборе(ВыбранноеЗначение);
КонецПроцедуры
*************************************************
Не помогло. При отладке туда даже не заходит... При двойном клике на выбранном элементе справочника форма выбора закрывается но поле остается пустым."
****************************************
&НаКлиенте
Процедура РеквизитНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
УстановитьОтбор(Элемент.Имя);
КонецПроцедуры
*****************************************
&НаКлиенте
Процедура УстановитьОтбор(ИмяЭлемента)
СписокОтбора = ПолучитьСписокОтбора(ИмяЭлемента); //получили список нужных кодов для отбора
Форма = ПолучитьФорму("Справочник.ИмяСправочника.ФормаВыбора",,);
ЭлементОтбора = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Код");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = СписокОтбора;
Форма.Открыть();
КонецПроцедуры
**************************************************
Форма открывается с необходимым отбором, но при выборе значения из этой формы в поле реквизита оно не встает.
Нашла на форумах что в модуль формы выбора справочника нужно добавить
*************************************************
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
ОповеститьОВыборе(ВыбранноеЗначение);
КонецПроцедуры
*************************************************
Не помогло. При отладке туда даже не заходит... При двойном клике на выбранном элементе справочника форма выбора закрывается но поле остается пустым."
15.08.2012
14:18
#2
"> Не помогло. При отладке туда даже не заходит...
Потому как сама отключила
СтандартнаяОбработка = Ложь;"
Потому как сама отключила
СтандартнаяОбработка = Ложь;"
15.08.2012
16:04
#5
>При отладке туда даже не заходит...
Потому что "Процедура ОбработкаВыбора" надо писать на той же форме, где РеквизитНачалоВыбора. Как событие этого реквизита.
И в ней написать что-то типа:
Реквизит= ВыбранноеЗначение
А "ОповеститьОВыборе(ВыбранноеЗначение)" надо написать в обработке события "Выбор" и "ВыборЗначения" в форме выбора, как события элемента "Список".
Потому что "Процедура ОбработкаВыбора" надо писать на той же форме, где РеквизитНачалоВыбора. Как событие этого реквизита.
И в ней написать что-то типа:
Реквизит= ВыбранноеЗначение
А "ОповеститьОВыборе(ВыбранноеЗначение)" надо написать в обработке события "Выбор" и "ВыборЗначения" в форме выбора, как события элемента "Список".
16.08.2012
10:21
#6
"Во первых Вы не передали владельца формы при вызове "ПолучитьФорму" поэтому и не возвращается выбранное значение
Во вторых, 1С рекомендует использовать не "ПолучитьФорму" а "ОткрытьФорму" и туда передавайте параметры открытия формы, т.е. у Вас должно быть что-то типа:
&НаКлиенте
Процедура РеквизитНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СписокОтбора = ПолучитьСписокОтбора(Элемент.Имя); //получили список нужных кодов для отбора
ПараметрыФормы = Новый Структура ("Отбор", СписокОтбора );
ОткрытьФорму("Справочник.ИмяСправочника.ФормаВыбора",ПараметрыФормы ,Элемент);
КонецПроцедуры"
Во вторых, 1С рекомендует использовать не "ПолучитьФорму" а "ОткрытьФорму" и туда передавайте параметры открытия формы, т.е. у Вас должно быть что-то типа:
&НаКлиенте
Процедура РеквизитНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СписокОтбора = ПолучитьСписокОтбора(Элемент.Имя); //получили список нужных кодов для отбора
ПараметрыФормы = Новый Структура ("Отбор", СписокОтбора );
ОткрытьФорму("Справочник.ИмяСправочника.ФормаВыбора",ПараметрыФормы ,Элемент);
КонецПроцедуры"
16.08.2012
11:37
#7
Если делаю через ОткрытьФорму, то форма открывается без отбора. Отбор должен быть Код в списке СписокОтбора . Через ОткрытьФорму я так понимаю можно только установить Код равно СписокОтбора?
В процедуру ОбработкаВыбора не приходит совсем, то есть я понимаю что Форма справочника значение вобще не передает.
В процедуру ОбработкаВыбора не приходит совсем, то есть я понимаю что Форма справочника значение вобще не передает.
16.08.2012
12:55
#9
"Skromnyi, спасибо огромное, все получилось!
ПараметрыФормы = Новый Структура ("Отбор", СписокОтбора );
Форма = ПолучитьФорму("Справочник.ИмяСправочника.ФормаВыбора",ПараметрыФормы,);
ЭлементОтбора = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Код");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = СписокОтбора;
//изменения, вот это вставила и все заработало
Форма.Параметры.РежимВыбора = Истина;
Форма.ВладелецФормы = ЭтаФорма.Элементы.ИмяРеквизита;
//конец изменений
Форма.Открыть();
, а с ОткрытьФорму на форумах пишут , что можно сделать отбор только с видом Равно"
ПараметрыФормы = Новый Структура ("Отбор", СписокОтбора );
Форма = ПолучитьФорму("Справочник.ИмяСправочника.ФормаВыбора",ПараметрыФормы,);
ЭлементОтбора = Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Код");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = СписокОтбора;
//изменения, вот это вставила и все заработало
Форма.Параметры.РежимВыбора = Истина;
Форма.ВладелецФормы = ЭтаФорма.Элементы.ИмяРеквизита;
//конец изменений
Форма.Открыть();
, а с ОткрытьФорму на форумах пишут , что можно сделать отбор только с видом Равно"
16.08.2012
12:58
#10
"нет, не только равно. Если Вы передаете массив в качестве параметра, то автоматом будет "ВСписке".
В предыдущем посте я немного ошибся, надо поменять строки:
В предыдущем посте я немного ошибся, надо поменять строки:
СписокОтбора = ПолучитьСписокОтбора(Элемент.Имя); //получили список нужных кодов для отбора
УсловияОтбора = Новый Структура ("Код", СписокОтбора);
ПараметрыФормы = Новый Структура ("Отбор", УсловияОтбора );
"
Читают тему
(гостей: 1)