Выбор формы списка и передача параметра

lira89

Well-Known Member
12.03.2010
154
0
#1
Подскажите в чем может быть неточность:
в документе Зачисление есть реквизиты Факультет(тип Справочник.Факультеты) и Специальность(тип Справочник.Специальности,в справочнике есть реквизит Факультет). Надо, чтобы при выборе факультета, открывалась форма списка справочника Специальности со списком только тех специальностей, которые соответствуют данному выбранному факультету.
Я создала форму списка ДляВыбора в справочнике Специальности, где в модуле формы списка ДляВыбора прописала процедуру ПриОткрытии(Фак), где Фак - передающийся параметр из документа. В документе я присвоила реквизиту Специальность процедуру ВыборФормы(), где указала на открытие формы списка ДляВыбора и параметр Факультет(код ниже).
!!!Проблема состоит в том, что у меня даже не открывается никакая форма при нажатии на реквизит документа Специальности. Подскажите в чем проблема. В свойствах реквизита документа во вкладке Дополнительно я установила Форма: ДляВыбора (хотя и при выборе Авто тож не работает)
Код:
Процедура ВыборФормы() 
Если Факультет.Выбран()=1 Тогда
ОткрытьФорму("Справочник.Специальности.ДляВыбора",Факультет);
КонецЕсли;
КонецПроцедуры
 

vbs

Well-Known Member
18.02.2007
1 708
3
#2
Сорри, все назад, спутал с ОткрытьПодбор :rolleyes:

Вроде, все написано правильно, а что в отладчике ? Попадаем ли на процедуру ВыборФормы ?

Может, Факультет.Выбран()=1 не отрабатывает ? Или это вообще проверять не надо ?
 

lira89

Well-Known Member
12.03.2010
154
0
#3
вроде по проверке эта процедура правильная. Возможно проблема не в этом коде, а в коде, который написан в форме списка ДляВыбора:
Код:
Процедура ПриОткрытии(Фак)
СписокЭлементов=СоздатьОбъект("СписокЗначений");
СпрСпец=СоздатьОбъект("СправочникюСпециальности");
.....
Если СпрСпец.Факультет = Фак тогда
СписокЭлементов.ДобавитьЗначение(СпрСпец.ТекущийЭлемент());
.......
КонецПроцедуры
 

vbs

Well-Known Member
18.02.2007
1 708
3
#4
Попробуй ПриОткрытии() //без параметра, вроде так и должно быть
а в ней поставь
Фак = Форма.Параметр // если он передается ссылкой на справочник

и еще раз повторю то, что не отправилось своевременно

Может, Факультет.Выбран()=1 не отрабатывает ? Или это вообще проверять не надо ?
 

lira89

Well-Known Member
12.03.2010
154
0
#5
Переменная Фак пустая, значение выбранного реквизита документа не передается. А в ОткрытьФорму("Справочник.Специальности.ДляВыбора",Факультет);, где факультет - это реквизит документа, который имеет тип Справочник.Факультеты и по нему надо отбирать специальности. Может надо как-то по-другому прописать Факультет? :rolleyes:
 

vbs

Well-Known Member
18.02.2007
1 708
3
#6
Попробуй передать параметры списком значений из одного значения "Факультет"
и в ПриОткрытии используй
Форма.Параметр.Получить
 

lira89

Well-Known Member
12.03.2010
154
0
#7
Вы бы не могли привести небольшой пример, а то что-то ничего не получается.
 

vbs

Well-Known Member
18.02.2007
1 708
3
#8
Процедура ВыборФормы()
Если Факультет.Выбран()=1 Тогда
Параметры = СоздатьОбъект("СписокЗначений");
Параметры.ДобавитьЗначение(Факультет,"Факультет");
ОткрытьФорму("Справочник.Специальности.ДляВыбора",Параметры);
КонецЕсли;

в форме списка
Процедура ПриОткрытии()
Фак = Форма.Параметр.Получить("Факультет");
.....
Если СпрСпец.Факультет = Фак тогда
СписокЭлементов.ДобавитьЗначение(СпрСпец.ТекущийЭлемент());
.......
КонецПроцедуры
 

lira89

Well-Known Member
12.03.2010
154
0
#9
В процедуре ПриОткрытии пишет :
Фак=Форма.Параметр.Получить("Факультет");
Значение не представляет агрегатный объект (Получить)
 

vbs

Well-Known Member
18.02.2007
1 708
3
#10
Параметр и Параметры
не перепутала ?
В отладчике посмотри как выглядят переменные Параметры перед вызовом и Параметр при входе в форму списка.
Вроде, механизм стандартный :rolleyes:

Вообще-то корректно сделать проверку
Если ТипЗначенияСтр(Форма.Параметр) = "СписокЗначений" тогда
Фак=Форма.Параметр.Получить("Факультет");
и т.д.
 

lira89

Well-Known Member
12.03.2010
154
0
#11
Я даже не могу просмотреть в отладчике процедуру ВыборФормы(): ставлю точки прерывания, а оно все равно сразу открывает форму списка и не переходит в отладчик на те точки, которые я поставила в документе.
Поставила проверку
Если ТипЗначенияСтр(Форма.Параметр) = "СписокЗначений" тогда
как вы и посоветовали, но как я поняла из отладчика это условие не выполняется, т.е. не равно "СписокЗначений". Я уже и не знаю что с этим делать, вроде бы все правильно. Еще раз приведу отрывки кода:
В документе в реквизите Специальность:
Код:
Процедура ВыборФормы() 
Если Факультет.Выбран()=1 Тогда
Параметры = СоздатьОбъект("СписокЗначений");
Параметры.ДобавитьЗначение(Факультет,"Факультет");
ОткрытьФорму("Справочник.Специальности.ДляВыбора",Параметры);
КонецЕсли;
И в форме списка Для выбора в справочнике Специальности:
Код:
Процедура ПриОткрытии()
Если ТипЗначенияСтр(Форма.Параметр) = "СписокЗначений" тогда
Фак=Форма.Параметр.Получить("Факультет");
......
Если СпрСпец.Факультет = Фак тогда
СписокЭлементов.ДобавитьЗначение(СпрСпец.ТекущийЭлемент());
.......
И РАЗВЕ ТО, ЧТО Факультет ЭТО РЕКВИЗИТ ДОКУМЕНТА С ТИПОМ СПРАВОЧНИК НИ НА ЧТО НЕ ВЛИЯЕТ? НЕ НАДО СОЗДАВАТЬ ССЫЛКУ НА СПРАВОЧНИК И ДЕЛАТЬ НИКАКУЮ ВЫБОРКУ ИЗ СПРАВОЧНИКА ФАКУЛЬТЕТЫ ?????
 

vbs

Well-Known Member
18.02.2007
1 708
3
#12
А из какого-нибудь другого места не может вызываться открытие формы
ОткрытьФорму("Справочник.Специальности.ДляВыбора",Параметры); ?


Процедура ВыборФормы()
Если Факультет.Выбран()=1 Тогда
Параметры = СоздатьОбъект("СписокЗначений");
Параметры.ДобавитьЗначение(Факультет,"Факультет");
// вот здесь остановись в отладчике и посмотри, чему равна переменная "Параметры", потом по F8 шагай
ОткрытьФорму("Справочник.Специальности.ДляВыбора",Параметры);
КонецЕсли;
 

lira89

Well-Known Member
12.03.2010
154
0
#13
А из какого-нибудь другого места не может вызываться открытие формы
ОткрытьФорму("Справочник.Специальности.ДляВыбора",Параметры); ?
А нам же из другого и не надо. Надо же, чтобы открывалась форма списка при нажатии на реквизит документа Специальности и все.
// вот здесь остановись в отладчике и посмотри, чему равна переменная "Параметры", потом по F8 шагай
вот именно что оно не останавливается. Поставила даже две точки останова на строках
Параметры.ДобавитьЗначение(Факультет,"Факультет");
ОткрытьФорму("Справочник.Специальности.ДляВыбора",Параметры);
и ничего не остановилось, а просто открыло пустую форму списка(

Как я понимаю, то список значений не создается. Что-то не то с переменной Факультет. В эту переменную не попадает значение (например название(наименование) факультета из справочника Факультеты), поэтому и список пустой
 

vbs

Well-Known Member
18.02.2007
1 708
3
#14
А нам же из другого и не надо. Надо же, чтобы открывалась форма списка при нажатии на реквизит документа Специальности и все
Замечательно ! А в процедуру ВыборФормы ты попадаешь ? Видимо, нет ^_^

Похоже, что при клике на реквизите "Специальности" сразу открывается форма списка.
Тогда заведи в табличной части реквизит типа "текст"(Псевдоспециальность), на закладку "дополнительно" повесь "ВыборФормы", а после ее отработки заполняй реквизит "Специальность",
каковой сделай недоступным для редактирования, а заполняться он будет при вызове формы списка (Ну, типа, выбор из возможных значений)

Или, может, уже пора лечь спать, и ну ее, эту 1С ?
Утро-то вечера мудренее.
Главное ведь, чтобы была любовь и не было войны, а форма списка и до утра подождет :rolleyes:
 

lira89

Well-Known Member
12.03.2010
154
0
#15
Спасибо за советы и за помощь, действительно, пора бы уже спать. Спокойной ночи.
 

vbs

Well-Known Member
18.02.2007
1 708
3
#17
Чуть свет уж на ногах ? И я у Ваших ног... (с) :rolleyes:

Я ведь всерьез предлагал
заведи в табличной части реквизит типа "текст"(Псевдоспециальность), на закладку "дополнительно" повесь "ВыборФормы", а после ее отработки заполняй реквизит "Специальность",
каковой сделай недоступным для редактирования, а заполняться он будет при вызове формы списка (Ну, типа, выбор из возможных значений)

Добавлено: А если это реквизит шапки - еще проще - рядом с ним на форме вешаешь кнопку с вызовом ВыборФормы, а сам реквизит делаешь недоступным

А в форме списка использовать Спр.ВыбратьЭлементыПоРеквизиту (ну, если отбор установлен) - экономичнее и точнее будет
 

lira89

Well-Known Member
12.03.2010
154
0
#18
А если это реквизит шапки - еще проще - рядом с ним на форме вешаешь кнопку с вызовом ВыборФормы, а сам реквизит делаешь недоступным
кнопку сделала и повесила на нее процедуру, вроде бы все получилось (ну отбор по факультету работает), только новая загвоздка в том, что открыватся форму списка и при выборе элемента открыватся форма выбранного элемента, а нужно, чтобы наименованиене выбранного элемента добавлялось в реквизит документа.
 

lira89

Well-Known Member
12.03.2010
154
0
#20
Какой параметр и ккуда? Я что-то совсем уже запуталась :rolleyes:
Не могли бы вы привести пару строчек примера, а то я не могу понять как взять параметр из появившейся формы списка (какую-то процедуру надо использовать?) и как его привязать к реквизиту документа

PS: я конечно понимаю, что уже поднадоела, но просто что-то не получается решить эту проблему.