Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Передать значение реквизита табличной части документа в параметр запроса

Передать значение реквизита табличной части документа в параметр запроса
Я
   Яна_22
 
23.05.20 - 14:43
Пожалуйста, подскажите, как передать значение 2х реквизитов табличной части документа в параметры запроса, чтобы заполнить третий реквизит табличной части.
Заранее спасибо!

функция ПолучитьТарифЮриста(Юрист,Услуга)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |    ЕСТЬNULL(СтавкаЮристовСрезПоследних.Стоимость, 0) КАК Тариф
               |ИЗ
               |    РегистрСведений.СтавкаЮристов.СрезПоследних(&Дата, Организация = &Организация) КАК СтавкаЮристовСрезПоследних
               |ГДЕ
               |    СтавкаЮристовСрезПоследних.Юрист = &Юрист
               |    И СтавкаЮристовСрезПоследних.Услуга = &Услуга
               |
               |СГРУППИРОВАТЬ ПО
               |    СтавкаЮристовСрезПоследних.Юрист.Ссылка,
               |    СтавкаЮристовСрезПоследних.Услуга.Ссылка,
               |    ЕСТЬNULL(СтавкаЮристовСрезПоследних.Стоимость, 0)";

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

&НаКлиенте
Процедура ПолучитьТарифЮристов()
Тариф=100;    
ТекДанныеЮ = Элементы.УслугиСебестоимость.ТекущиеДанные;
У = РеквизитФормыВЗначение("ТекДанныеЮ.Услуга");
Ю = РеквизитФормыВЗначение("ТекДанныеЮ.Юрист");
Тариф = ПолучитьТарифЮриста(Ю,У);
ЗначениеВРеквизитФормы(ТекДанныеЮ.Ставка,Тариф);
КонецПроцедуры
 
 
   Ненавижу 1С
 
1 - 23.05.20 - 14:48
У = ТекДанныеЮ.Услуга;
   Ненавижу 1С
 
2 - 23.05.20 - 14:48
ну и наоборот тоже верно
   Яна_22
 
3 - 23.05.20 - 14:55
Не работает.
Тогда и У, и Ю вообще не нужны.
   Яна_22
 
4 - 23.05.20 - 14:57
Оно изначально так было. Не понимаю, как тут "ответ" нажать и прикрепить к сообщению вложение.
&НаСервере
функция ПолучитьТарифЮриста(Юрист,Услуга)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |    ЕСТЬNULL(СтавкаЮристовСрезПоследних.Стоимость, 0) КАК Тариф
               |ИЗ
               |    РегистрСведений.СтавкаЮристов.СрезПоследних(&Дата, Организация = &Организация) КАК СтавкаЮристовСрезПоследних
               |ГДЕ
               |    СтавкаЮристовСрезПоследних.Юрист = &Юрист
               |    И СтавкаЮристовСрезПоследних.Услуга = &Услуга
               |
               |СГРУППИРОВАТЬ ПО
               |    СтавкаЮристовСрезПоследних.Юрист.Ссылка,
               |    СтавкаЮристовСрезПоследних.Услуга.Ссылка,
               |    ЕСТЬNULL(СтавкаЮристовСрезПоследних.Стоимость, 0)";

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

//Ю = РеквизитФормыВЗначение("Объект.УслугиСебестоимость.Юрист");
Запрос.УстановитьПараметр("Юрист",Юрист);
Запрос.УстановитьПараметр("Услуга",Услуга);
РезультатЗапроса=Запрос.Выполнить().Выгрузить();
Возврат РезультатЗапроса;
КонецФункции

&НаКлиенте
Процедура ПолучитьТарифЮристов()
Тариф=100;    
ТекДанныеЮ = Элементы.УслугиСебестоимость.ТекущиеДанные;
//У = РеквизитФормыВЗначение("ТекДанныеЮ.Услуга");

//Ю = РеквизитФормыВЗначение("ТекДанныеЮ.Юрист");
Тариф = ПолучитьТарифЮриста(ТекДанныеЮ.Юрист,ТекДанныеЮ.Услуга);
ЗначениеВРеквизитФормы(ТекДанныеЮ.Ставка,Тариф);
КонецПроцедуры
   Жан Пердежон
 
5 - 23.05.20 - 15:57
(4) ну да, система прям так и говорит: "Я ТАК НЕ РАБОТАЮ!!1"
как передать, вам уже написали,
в конце правильно будет:

ТекДанныеЮ.Ставка = ПолучитьТарифЮриста(ТекДанныеЮ.Юрист,ТекДанныеЮ.Услуга);

ну а то, что запрос - редкостное говно, 
за который бить надо не только по рукам, наверное, отдельная тема
   Яна_22
 
6 - 23.05.20 - 20:08
Уважаемый Жан, если Вы не в состоянии придумать что-то умное для ответа, то  в принципе лучше не пишите ничего. Ну или по крайней мере не здесь. Сходите куда-нибудь на порнохаб - там думаю более для Вас подходящий контингент.
   Ненавижу 1С
 
7 - 23.05.20 - 21:25
(0)

1. результат запроса должен выдавать число строки таблицы (если она не пустая):

РезультатЗапроса = Запрос.Выполнить();
Возврат ?(РезультатЗапроса.Пустой(),0,РезультатЗапроса.Выгрузить()[0].Тариф);

2. вместо инструкции ГДЕ лучше использовать параметры среза последних:

|ГДЕ
               |    СтавкаЮристовСрезПоследних.Юрист = &Юрист
               |    И СтавкаЮристовСрезПоследних.Услуга = &Услуга


убрать и добавить в РегистрСведений.СтавкаЮристов.СрезПоследних(&Дата, Организация = &Организация И Юрист = &Юрист И Услуга = &Услуга)

3. не надо никаких РеквизитФормыВЗначение и ЗначениеВРеквизитФормы в этом случае. Достаточно так:

ТекДанные = Элементы.УслугиСебестоимость.ТекущиеДанные;
ТекДанные.Ставка = ПолучитьТарифЮриста(ТекДанные.Юрист,ТеДанные.Услуга);

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.