• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы lira89
  • Дата начала
L

lira89

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

vbs

Сорри, все назад, спутал с ОткрытьПодбор :rolleyes:

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

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

lira89

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

vbs

Попробуй ПриОткрытии() //без параметра, вроде так и должно быть
а в ней поставь
Фак = Форма.Параметр // если он передается ссылкой на справочник

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

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

lira89

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

vbs

Попробуй передать параметры списком значений из одного значения "Факультет"
и в ПриОткрытии используй
Форма.Параметр.Получить
 
L

lira89

Вы бы не могли привести небольшой пример, а то что-то ничего не получается.
 
V

vbs

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

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

lira89

В процедуре ПриОткрытии пишет :
Фак=Форма.Параметр.Получить("Факультет");
Значение не представляет агрегатный объект (Получить)
 
V

vbs

Параметр и Параметры
не перепутала ?
В отладчике посмотри как выглядят переменные Параметры перед вызовом и Параметр при входе в форму списка.
Вроде, механизм стандартный :rolleyes:

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

lira89

Я даже не могу просмотреть в отладчике процедуру ВыборФормы(): ставлю точки прерывания, а оно все равно сразу открывает форму списка и не переходит в отладчик на те точки, которые я поставила в документе.
Поставила проверку
Если ТипЗначенияСтр(Форма.Параметр) = "СписокЗначений" тогда
как вы и посоветовали, но как я поняла из отладчика это условие не выполняется, т.е. не равно "СписокЗначений". Я уже и не знаю что с этим делать, вроде бы все правильно. Еще раз приведу отрывки кода:
В документе в реквизите Специальность:
Код:
Процедура ВыборФормы() 
Если Факультет.Выбран()=1 Тогда
Параметры = СоздатьОбъект("СписокЗначений");
Параметры.ДобавитьЗначение(Факультет,"Факультет");
ОткрытьФорму("Справочник.Специальности.ДляВыбора",Параметры);
КонецЕсли;
И в форме списка Для выбора в справочнике Специальности:
Код:
Процедура ПриОткрытии()
Если ТипЗначенияСтр(Форма.Параметр) = "СписокЗначений" тогда
Фак=Форма.Параметр.Получить("Факультет");
......
Если СпрСпец.Факультет = Фак тогда
СписокЭлементов.ДобавитьЗначение(СпрСпец.ТекущийЭлемент());
.......

И РАЗВЕ ТО, ЧТО Факультет ЭТО РЕКВИЗИТ ДОКУМЕНТА С ТИПОМ СПРАВОЧНИК НИ НА ЧТО НЕ ВЛИЯЕТ? НЕ НАДО СОЗДАВАТЬ ССЫЛКУ НА СПРАВОЧНИК И ДЕЛАТЬ НИКАКУЮ ВЫБОРКУ ИЗ СПРАВОЧНИКА ФАКУЛЬТЕТЫ ?????
 
V

vbs

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


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

lira89

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

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

vbs

А нам же из другого и не надо. Надо же, чтобы открывалась форма списка при нажатии на реквизит документа Специальности и все
Замечательно ! А в процедуру ВыборФормы ты попадаешь ? Видимо, нет ^_^

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

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

lira89

Спасибо за советы и за помощь, действительно, пора бы уже спать. Спокойной ночи.
 
L

lira89

Замечательно ! А в процедуру ВыборФормы ты попадаешь ? Видимо, нет :rolleyes:
совершенно точно, я туда не могу попасть, только не могу понять почему? Может все таки можно в эту процедуру как- нибудь попасть?
 
V

vbs

Чуть свет уж на ногах ? И я у Ваших ног... (с) :rolleyes:

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


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

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

lira89

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

lira89

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!