Не срабатывает кнопка открытия подчиненного справочника

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

  1. BBDragon

    BBDragon Well-Known Member

    Регистрация:
    4 май 2008
    Сообщения:
    148
    Симпатии:
    0
    Доделываю свою конфигурацию, на очереди создание процедуры проверки повторной госпитализации пациентов. Создаю справочник "БазаПациентов" куда вношу основные данные по самому человеку, к нему подчиненный справочник "Обращение", куда можно заносить данные по всем случаям его госпитализации. На экранной форме справочника "БазаПациентов" дополнительно располагаю кнопку "Обращения", при нажатии на которую должен открываться подчиненный справочник "Обращение" и можно заполнить данные по госпитализации больного (либо просмотреть имеющиеся, если он уже заполнен). Все работает нормально, вот только данная кнопка не срабатывает(
    Код в модуле формы справочника "БазаПациентов", соответствующий этой кнопке:

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

    [​IMG]
     
  2. TimeDontWait

    TimeDontWait Well-Known Member

    Регистрация:
    4 янв 2010
    Сообщения:
    383
    Симпатии:
    0
    Код (Text):
    Процедура ОткрытьОбращения()
    ОткрытьФорму("Справочник.Обращение");
    КонецПроцедуры
    Владелец - это активный элемент справочника, ни к чему создавать ссылки
     
  3. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    А ты не путай справочник через создатьобъект и форму списка твоего справочника. Ты его создал, но ничего в нем не выбрал.

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


    Кроме того в справочнике обращение надо при окрыти написать что-то вроде

    Если ПустоеЗначение(Форма.Параметр) = 0 Тогда
    ИспользоватьВладельца(Форма.Параметр);
    КонецЕСли;
     
  4. BBDragon

    BBDragon Well-Known Member

    Регистрация:
    4 май 2008
    Сообщения:
    148
    Симпатии:
    0
    puh14, вы были правы, все заработало!! Работает даже без добавления кода в справочнике Обращение при открытии :)


    TimeDontWait, ваш метод также работает, только предварительно нужно добавить

    Код ( (Unknown Language)):
    СпрПац.НайтиЭлемент(ТекущийЭлемент());
    Всем огромное спасибо :)
     
  5. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Это излишество. Просто надо так :

    ОткрытьФорму("Справочник.Обращение",ТекущийЭлемент());
     
  6. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Согласен - это оптимально. Не знал что при простой передаче владельца в форму подчиненного справочника автоматом идет фильтр подчиненных элементов.
     
  7. Elgin

    Elgin Гость

    ПОМОТИТИ ПОЖАЛЮСТА у мине ПРОЦЕДУРА (ТОЧКА ) НЕ РАБОТАЕТЬ.....
    ПОМОТИТИ ПОЖАЛЮСТА у мине ПРОЦЕДУРА (ТОЧКА ) НЕ РАБОТАЕТЬ.....
    ПОМОТИТИ ПОЖАЛЮСТА у мине ПРОЦЕДУРА (ТОЧКА ) НЕ РАБОТАЕТЬ.....

    перем память
    перем знак
    перем помять1;
    перем помять2;



    Процедура один() //
    если поле1 = "0" тогда поле1 = "1";
    иначе
    один = 1;
    поле1 = строка(поле1) + строка(один);
    конецесли;
    конецпроцедуры


    Процедура две()
    если поле1 = "0" тогда поле1 = "2";
    иначе
    две = 2;
    поле1 = строка(поле1) + строка(две)
    конецесли;
    конецпроцедуры


    Процедура три()
    если поле1 = "0" тогда поле1 = "3";
    иначе
    три = 3;
    поле1= строка(поле1) + строка(три);
    конецесли;
    КонецПроцедуры


    Процедура четыре ()
    если поле1 = "0" тогда поле1 = "4";
    иначе
    четыре = 4;
    поле1= строка(поле1) + строка(четыре);
    конецесли;
    КонецПроцедуры



    Процедура пять()
    если поле1 = "0" тогда поле1 = "5";
    иначе
    пять = 5;
    поле1= строка(поле1) + строка(пять);
    конецесли;
    КонецПроцедуры


    Процедура щесть()
    если поле1 = "0" тогда поле1 = "6";
    иначе
    щесть = 6;
    поле1= строка(поле1) + строка(щесть);
    конецесли;
    КонецПроцедуры


    Процедура семь()
    если поле1 = "0" тогда поле1 = "7";
    иначе
    семь = 7;
    поле1= строка(поле1) + строка(семь);
    конецесли;
    КонецПроцедуры


    Процедура восемь()
    если поле1 = "0" тогда поле1 = "8";
    иначе
    восемь = 8;
    поле1 = строка(поле1) + строка(восемь);
    конецесли;
    КонецПроцедуры


    Процедура девять()
    если поле1 ="0" тогда поле1 ="9";
    иначе
    девять = 9;
    поле1= строка(поле1) + строка(девять);
    конецесли;
    КонецПроцедуры


    Процедура кнопка0()
    если Стрдлина (память) = 0 тогда поле1 = "0";
    конецесли;
    КонецПроцедуры


    Процедура кнопка00()
    если Стрдлина (память) = 0 тогда поле1 = "00";
    иначе если поле1 = 0 тогда поле1 = "00";
    иначе поле1= строка(поле1) + строка ("00");
    конецесли;
    конецесли;
    КонецПроцедуры


    Процедура КнопкаСЕ()
    поле1 = 0;
    КонецПроцедуры

    Процедура стереть()
    поле1 ="0";
    память = "0";
    КонецПроцедуры


    Процедура умножеть()
    знак = "*";
    память = поле1;
    поле1 = "0";
    КонецПроцедуры


    Процедура плюс()
    знак ="+";
    память = поле1;
    поле1 = "0";
    КонецПроцедуры


    Процедура минус()
    знак = "-";
    память = поле1;
    поле1 = "0";
    КонецПроцедуры


    Процедура розделить()
    знак = "/";
    память = поле1;
    поле1 = "0";
    КонецПроцедуры


    процедура проценть()
    если знак = "*" тогда поле1 =число (память) / число ("100") *число(поле1);
    конецесли;
    КонецПроцедуры



    Процедура равно()
    если знак = "*" тогда поле1 = память * поле1;
    иначеесли знак = "/" тогда поле1 = память/ поле1;
    иначеесли знак = "+" тогда поле1 = память+ поле1;
    иначеесли знак = "-" тогда поле1 = память- поле1;
    конецесли;
    КонецПроцедуры


    Процедура пм()
    Поле1 = -Число(Поле1)
    КонецПроцедуры


    Процедура БакСпейс()
    Поле1 = Лев(Поле1, СтрДлина(Поле1) - 1)
    КонецПроцедуры


    Процедура Алгоритм()
    Поле1 = Число(1) / число(Поле1);
    КонецПроцедуры


    Процедура памят()
    поле2 = поле1;
    КонецПроцедуры


    Процедура кнопкаMR()
    поле1 = поле2;
    КонецПроцедуры

    Процедура кнопкаMC()
    поле2 = "0";
    КонецПроцедуры

    Процедура память1()
    поле2 = Число(поле2) + Число(поле2);
    КонецПроцедуры


    //что бы минусавать памят на екране Число(поле2) минусуем Число (поле2)
    Процедура память2()
    поле2 = Число(поле2) - Число(поле2)
    КонецПроцедуры


    Процедура Точка()
    Поле1=СокрЛП(Поле1+".");
    КонецПроцедуры
     
Загрузка...

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