P
P
Pavel Bogdanov2016-02-17 11:24:06
1C
Pavel Bogdanov, 2016-02-17 11:24:06

How to get a value from a query result in 1C?

There is a table with goods and prices in the Delivery document. There is a directory of counterparties with a price table for each counterparty. It is necessary to pull out the price for the desired product from the price table of the counterparty. For this I wrote the following code:

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

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

But it hasn't been possible to get a price. Where can there be an error here?
When debugging this code, this is the result:
{Document.Supply.Form.DocumentForm.Form(40)}: Object field not found (Price)
Return Result.Price;

Answer the question

In order to leave comments, you need to log in

2 answer(s)
G
gunsmyth, 2016-02-17
@rebirther23

And fix your request.

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

R
redakoc, 2016-02-17
@redakoc

You get a table (even one row).
You need to not only read the query results, but either bypass all the rows of the table in a loop or directly access the first row of the table.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question