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

Тема в разделе "1C и всё что с ней связано", создана пользователем lira89, 23 апр 2010.

  1. lira89

    lira89 Well-Known Member

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Сорри, все назад, спутал с ОткрытьПодбор :rolleyes:

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

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

    lira89 Well-Known Member

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Попробуй ПриОткрытии() //без параметра, вроде так и должно быть
    а в ней поставь
    Фак = Форма.Параметр // если он передается ссылкой на справочник

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

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

    lira89 Well-Known Member

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Попробуй передать параметры списком значений из одного значения "Факультет"
    и в ПриОткрытии используй
    Форма.Параметр.Получить
     
  7. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    Вы бы не могли привести небольшой пример, а то что-то ничего не получается.
     
  8. vbs

    vbs Well-Known Member

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

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

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    В процедуре ПриОткрытии пишет :
    Фак=Форма.Параметр.Получить("Факультет");
    Значение не представляет агрегатный объект (Получить)
     
  10. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Параметр и Параметры
    не перепутала ?
    В отладчике посмотри как выглядят переменные Параметры перед вызовом и Параметр при входе в форму списка.
    Вроде, механизм стандартный :rolleyes:

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

    lira89 Well-Known Member

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

    vbs Well-Known Member

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


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

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    А нам же из другого и не надо. Надо же, чтобы открывалась форма списка при нажатии на реквизит документа Специальности и все.
    вот именно что оно не останавливается. Поставила даже две точки останова на строках
    Параметры.ДобавитьЗначение(Факультет,"Факультет");
    ОткрытьФорму("Справочник.Специальности.ДляВыбора",Параметры);
    и ничего не остановилось, а просто открыло пустую форму списка(

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Замечательно ! А в процедуру ВыборФормы ты попадаешь ? Видимо, нет ^_^

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

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

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    Спасибо за советы и за помощь, действительно, пора бы уже спать. Спокойной ночи.
     
  16. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    совершенно точно, я туда не могу попасть, только не могу понять почему? Может все таки можно в эту процедуру как- нибудь попасть?
     
  17. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Чуть свет уж на ногах ? И я у Ваших ног... (с) :rolleyes:

    Я ведь всерьез предлагал

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

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

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    кнопку сделала и повесила на нее процедуру, вроде бы все получилось (ну отбор по факультету работает), только новая загвоздка в том, что открыватся форму списка и при выборе элемента открыватся форма выбранного элемента, а нужно, чтобы наименованиене выбранного элемента добавлялось в реквизит документа.
     
  19. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Передай через параметр
     
  20. lira89

    lira89 Well-Known Member

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

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

Поделиться этой страницей