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