Задать вопрос

Как получить значение из результата запроса в 1С?

Есть таблица с товарами и ценами в документе Поставка. Есть справочник контрагентов с таблицей цен для каждого контрагента. Нужно из таблицы цен контрагента вытащить цену на нужный товар. Для этого написал такой код:
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
	Контрагент = Объект.Контрагент;
	СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
	Товар = Элементы.Товары.ТекущиеДанные.Номенклатура;
	СтрокаТабличнойЧасти.Цена = ПолучитьЦены(Контрагент,Товар);	
КонецПроцедуры

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


Но вот получить цену так и не удалось. Где здесь может быть ошибка?

При отладке данного кода такой результат:
{Документ.Поставка.Форма.ФормаДокумента.Форма(40)}: Поле объекта не обнаружено (Цена)
Возврат Результат.Цена;
  • Вопрос задан
  • 34306 просмотров
Подписаться 2 Оценить 1 комментарий
Решения вопроса 2
@gunsmyth
И запрос поправьте.
Функция ПолучитьЦены(Контрагент, Товар)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
    	|	ЦеныКонтрагента.Цена КАК Цена
    	|ИЗ
    	|	Справочник.Контрагенты.Цены КАК ЦеныКонтрагента
        |ГДЕ
    	|	ЦеныКонтрагента.Ссылка = &Контрагент
    	|	И ЦеныКонтрагента.Товар = &Товар";
  Запрос.УстановитьПараметр("Контрагент", Контрагент);
  Запрос.УстановитьПараметр("Товар", Товар);
  Результат = Запрос.Выполнить().Выбрать().Следующий(); 	
  Возврат Результат.Цена;
КонецФункции
Ответ написан
Комментировать
nki
@nki
bezkart.ru готовая система лояльности
все банально
РезультатЗапроса = Запрос.Выполнить();	
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Цена = 0;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	Цена = ВыборкаДетальныеЗаписи.Цена;
КонецЦикла;


Имейте ввиду, что если в результате запроса возвращается несколько строк, то вы получите результат последней строки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@redakoc
Вы получаете таблицу (пусть даже состоящую из одной строки).
Вам нужно не просто результаты запроса читать, а или обходить все строки таблицы в цикле или прямо обращаться к первой строчке таблицы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы