• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы BBDragon
  • Дата начала
B

BBDragon

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

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

Скрин экранной формы самого справочника, красным обведена кнопка, которая работает именно так как я и хочу. Но кнопка "Обращения" (внизу) работать отказывается. Дело видимо в синтаксисе, но чтение ЖКК так и не помогло исправить ошибку..

 
T

TimeDontWait

Код:
Процедура ОткрытьОбращения()
ОткрытьФорму("Справочник.Обращение");
КонецПроцедуры
Владелец - это активный элемент справочника, ни к чему создавать ссылки
 
P

puh14

А ты не путай справочник через создатьобъект и форму списка твоего справочника. Ты его создал, но ничего в нем не выбрал.

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


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

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

BBDragon

puh14, вы были правы, все заработало!! Работает даже без добавления кода в справочнике Обращение при открытии :)


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

Код:
СпрПац.НайтиЭлемент(ТекущийЭлемент());

Всем огромное спасибо :)
 
V

vbs

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

СпрПац.НайтиЭлемент(ТекущийЭлемент());

Это излишество. Просто надо так :

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

puh14

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

Согласен - это оптимально. Не знал что при простой передаче владельца в форму подчиненного справочника автоматом идет фильтр подчиненных элементов.
 
E

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+".");
КонецПроцедуры
 
Мы в соцсетях:

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