Имя: Пароль:
1C
 
8.3 управляемые формы
0 Vyacheslav_UZ
 
10.07.16
16:15
Добрый день. Делаю кнопку заполнить на 8.3 Самописная конфигурация. Мне нужно передать с клиента один параметр,который я получаю посредством "ВвестиЗначение" на Сервер где это будет условием для запроса.Как передать "МеждународнееНаименование" это наименование как условия для парметров запроса?

&НаКлиенте
Процедура Заполнить(Отказ)
    ВыбЗнач = Неопределено;
    Если ВвестиЗначение(ВыбЗнач, "Введите значение", "СправочникСсылка.МеждународныеНаименования") Тогда
        Сообщить("Введенное значение: "+ВыбЗнач);
    КонецЕсли;
    МеждународнееНаименование  = ВыбЗнач;
    
КонецПроцедуры

&НаСервере
Процедура РезультатЗапроса(Переменная)
    
    
    ТЗ = Объект.Медикаменты.Выгрузить();
    Тз.Очистить();
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Медикаменты.Наименование,
    |    Медикаменты.ФирмаСтранаПроизводитель,
    |    Медикаменты.ФармакотерапевтическаяГруппа,
    |    Медикаменты.ЛекарственнаяФорма,
    |    Медикаменты.МеждународнееНаименование
    |ИЗ
    |    Справочник.Медикаменты КАК Медикаменты
    |ГДЕ
    |    Медикаменты.МеждународнееНаименование = &МеждународнееНаименование";
    
    Запрос.УстановитьПараметр("МеждународнееНаименование", ?(НЕ(ЗначениеЗаполнено(МеждународнееНаименование)),Неопределено,МеждународнееНаименование));
    
    
    РезультатЗапроса = Запрос.Выполнить();
    
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сообщить(?(НЕ(ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.ЛекарственнаяФорма)),"НЕТ", ВыборкаДетальныеЗаписи.ЛекарственнаяФорма));
        ЗаполнитьЗначенияСвойств(ТЗ,ВыборкаДетальныеЗаписи);
    КонецЦикла;
    
КонецПроцедуры
1 Звездец
 
10.07.16
16:18
Передавай при вызове процедуры. Проблема в чем?
2 Звездец
 
10.07.16
16:19
ты же нигде не вызываешь серверную процедуру
3 Vyacheslav_UZ
 
10.07.16
16:19
Звездец Пример если можно.
4 Звездец
 
10.07.16
16:19
Блин, и пиписька под ником длиннее, а вопрос хм
5 ИсчадиеADO
 
10.07.16
16:22
(4) дык у тебя небось это уже 2ая али 3ая)))
6 ИсчадиеADO
 
10.07.16
16:22
ЗмийГорыныч ептыть
7 jsmith
 
10.07.16
16:25
&НаКлиенте
Процедура ЗаполнитьМедикаменты()

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

&НаСервере
Процедура ЗаполнитьМедикаментыНаСервере(Парам)
    
    
    ТЗ = Объект.Медикаменты.Выгрузить();
    Тз.Очистить();
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Медикаменты.Наименование,
    |    Медикаменты.ФирмаСтранаПроизводитель,
    |    Медикаменты.ФармакотерапевтическаяГруппа,
    |    Медикаменты.ЛекарственнаяФорма,
    |    Медикаменты.МеждународнееНаименование
    |ИЗ
    |    Справочник.Медикаменты КАК Медикаменты
    |ГДЕ
    |    Медикаменты.МеждународнееНаименование = &МеждународнееНаименование";
    
    Запрос.УстановитьПараметр("МеждународнееНаименование", &Парам);
    
    
    ТЗ = Запрос.Выполнить().Выгрузить();
    Объект.Медикаменты.Загрузить(ТЗ);
    
КонецПроцедуры
8 Vyacheslav_UZ
 
10.07.16
16:29
Зделал только тз не заполняет.

&НаКлиенте
Процедура Заполнить(Отказ)
    ВыбЗнач = Неопределено;
    Если ВвестиЗначение(ВыбЗнач, "Введите значение", "СправочникСсылка.МеждународныеНаименования") Тогда
        Сообщить("Введенное значение: "+ВыбЗнач);
    КонецЕсли;
    МеждународнееНаименование  = ВыбЗнач;
    РезультатЗапроса(МеждународнееНаименование)

КонецПроцедуры

&НаСервере
Процедура РезультатЗапроса(МеждународнееНаименование)
    
    
    ТЗ = Объект.Медикаменты.Выгрузить();
    Тз.Очистить();
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Медикаменты.Наименование,
    |    Медикаменты.ФирмаСтранаПроизводитель,
    |    Медикаменты.ФармакотерапевтическаяГруппа,
    |    Медикаменты.ЛекарственнаяФорма,
    |    Медикаменты.МеждународнееНаименование
    |ИЗ
    |    Справочник.Медикаменты КАК Медикаменты
    |ГДЕ
    |    Медикаменты.МеждународнееНаименование = &МеждународнееНаименование";
    
    Запрос.УстановитьПараметр("МеждународнееНаименование", ?(НЕ(ЗначениеЗаполнено(МеждународнееНаименование)),Неопределено,МеждународнееНаименование));
    
    
    РезультатЗапроса = Запрос.Выполнить();
    
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сообщить(?(НЕ(ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.ЛекарственнаяФорма)),"НЕТ", ВыборкаДетальныеЗаписи.ЛекарственнаяФорма));
        ЗаполнитьЗначенияСвойств(ТЗ,ВыборкаДетальныеЗаписи);
    КонецЦикла;
    
КонецПроцедуры
9 Mankubus
 
10.07.16
16:35
(8) А сообщения выводит?
10 Vyacheslav_UZ
 
10.07.16
16:44
да выводит
11 jsmith
 
10.07.16
16:55
Процедура Заполнить(Отказ)
    ВыбЗнач = Неопределено;
    Если ВвестиЗначение(ВыбЗнач, "Введите значение", "СправочникСсылка.МеждународныеНаименования") Тогда
        Сообщить("Введенное значение: "+ВыбЗнач);
    КонецЕсли;
    МеждународнееНаименование  = ВыбЗнач;
    РезультатЗапроса(МеждународнееНаименование)

КонецПроцедуры

Вызов процедуры РезультатЗапроса(МеждународнееНаименование) происходит безусловно, выбрал юзер значение или нет. Суй его в условие как у меня.
12 jsmith
 
10.07.16
16:57
Запрос.УстановитьПараметр("МеждународнееНаименование", ?(НЕ(ЗначениеЗаполнено(МеждународнееНаименование)),Неопределено,МеждународнееНаименование));

Тернарный оператор ни к чему. Оттого, что ты выставишь параметр в Неопределено, ничего не случится.

Пиши просто.
Запрос.УстановитьПараметр("МеждународнееНаименование", МеждународнееНаименование);
13 jsmith
 
10.07.16
16:58
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сообщить(?(НЕ(ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.ЛекарственнаяФорма)),"НЕТ", ВыборкаДетальныеЗаписи.ЛекарственнаяФорма));
        ЗаполнитьЗначенияСвойств(ТЗ,ВыборкаДетальныеЗаписи);
    КонецЦикла;

Ты пытаешься заполнить таблицу значений выборкой из результата запроса, то есть запихать одну строку в целую таблицу. Это неправильно даже технически.
14 jsmith
 
10.07.16
16:58
В общем, у тебя каша в голове, мой друг.
15 bolder
 
10.07.16
17:01
(10) заполнение тз на сервере не изменяет объект. См.(7).
(14) +100500
16 Vyacheslav_UZ
 
11.07.16
13:34
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сообщить(?(НЕ(ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.МеждународнееНаименование)),"НЕТ", ВыборкаДетальныеЗаписи.МеждународнееНаименование));
        Объект.Медикаменты.Загрузить(ТЗ);
        
    КонецЦикла;
17 RomaH
 
naïve
11.07.16
13:54
такое международнОЕ наименование, что Международнее некуда
18 RomaH
 
naïve
11.07.16
13:55
здесь здание здоровье