PDA

Просмотр полной версии : Запрос с условием



DenisSt
08.12.2016, 23:20
Есть справочник Ингредиенты и документ Калькуляция блюд с табличной частью Составляющие.
Необходимо при изменении номенклатуры в форме документа поставить значение "Ккал" из справочника Ингредиенты.


&НаКлиенте
Процедура СоставляющиеНаименованиеИ нгредиентаПриИзменении(Эл� �мент)
Стр=Элементы.Составляющие.� �екущиеДанные;
Стр.Ккал = ПолучитьКкалории(Стр.Наиме нованиеИнгредиента);
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьКкалории(Ингредие� �т)

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ингредиенты.Наименование КАК Наименование,
| Ингредиенты.Ккал КАК Ккал
|ИЗ
| Справочник.Ингредиенты КАК Ингредиенты";

//Запрос.УстановитьПараметр("Наименование", Ингредиент);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Сл� �дующий() Цикл
Если ВыборкаДетальныеЗаписи.На� �менование = Ингредиент Тогда

Результат = ВыборкаДетальныеЗаписи.Кк� �л;
КонецЕсли;
КонецЦикла;


Возврат Результат;
КонецФункции

alexandr_ll
09.12.2016, 06:12
Какой тип значения у Стр.НаименованиеИнгредиен� �а?

Анатолик
09.12.2016, 11:10
А в чем вопрос, не возвращает значение? Что возвращает?

DenisSt
09.12.2016, 11:55
В том что условие не выполняется. Приведу пример.
В пошаговой отладке значение "ВыборкаДетальныеЗаписи.На� �менование" пишется в двойных ковычках, а "Ингредиент" записывается без ковычек. В результате условие выглядит след.образом Если "Рис" = Рис Тогда....

avm3110
12.12.2016, 07:26
В том что условие не выполняется. Приведу пример.
В пошаговой отладке значение "ВыборкаДетальныеЗаписи.На� �менование" пишется в двойных ковычках, а "Ингредиент" записывается без ковычек. В результате условие выглядит след.образом Если "Рис" = Рис Тогда....

(задумчиво) Очень похоже, что вам показывают, что "ВыборкаДетальныеЗаписи.На� �менование" имеет тип "Строка" и поэтому вы видите это "в кавычках", ну а "Ингредиент" - это ссылка, поэтому естественно идет "без кавычек". Хотите кавычки - выбирайте "Ингредиент.Наименование".

Но в вашем случае проблема на самом деле в том, что в контексте "&НаСервереБезКонтекста" 1Ска "знает" что такое ссылка на элемент справочника, а вот процедура в контексте "&НаКлиенте" этого ясен пень "не знает", вот при возврате все и теряется.