Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 14:59

Как выбрать цену из справочника Номенклатура по названию товара

Автор bkmz_1_, 15 янв 2016, 17:35

0 Пользователей и 1 гость просматривают эту тему.

bkmz_1_

Как выбрать цену из справочника Номенклатура по названию товара?
Я пишу так:


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

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



отладчик показывает что в "Выборка" ошибка чтения значения.

Что я не правильно делаю?

Vladimir_Sh

1. Условие по "строке" - это зло!
2. Вам СЮДА здесь обсуждалось подобное. Ошибка не в запросе, а в том как Вы пытаетесь просмотреть результат в отладке.
Если я Вам помог, нажми - Спасибо!

bkmz_1_

Ничего я не понял из ссылки. Дело в том что проблема не в том что я не могу прочитать в отладчике, код не делает то что я хочу.
Я в консоле выполняю запрос этот и он возвращает результат. А если выполняю в конфигурации в документе то ничего не происходит.
Цена в табличной части документа не появляется.


Vladimir_Sh

Код делает ровно то что Вы написали. Проверяйте следующее:
1. Что передается в параметр запроса. Аналогичное сделайте в консоли. (Вплоть до символа и пробелов и прочего.)
2. Куда вы это передаете?

У вас в строке (т.е. в "Стр") есть ссылка на Номенклатуру? Если да то переделайте запрос под ссылку так будет меньше возможности ошибиться.
Если я Вам помог, нажми - Спасибо!

Rasty

то что в выборке смотрится либо в цикле

Пока Выборка.Следующий() Цикл
    блаблабла
КонецЦикла

Либо после Выборка.Следующий()
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

bkmz_1_

Я прошу прощение за свою не расторопность, но я смутно понимаю что надо смотреть. Вот это имелось ввиду?



И что дальше мне делать? Где ошибка?
Добавлено: 15 янв 2016, 18:15


Цитата: Rasty от 15 янв 2016, 18:02
Либо после Выборка.Следующий()

Так?


Rasty

поставте точку остановы на месте выборка.следующий() потом посмотрите значение "выборка.следующий()" если истина, то есть данные, если ложь, то данных нет
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

bkmz_1_


Rasty

Цитата: bkmz_1_ от 15 янв 2016, 18:38
Ничего оно не выбирает
а я и не заметил, тип наименования ссылка, ну да
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

bkmz_1_

Так что мне делать?
Добавлено: 15 янв 2016, 22:01


Решился вопрос следующим образом


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

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

Добавлено: 15 янв 2016, 22:03


Ошибка была в том что я в условии сравнивал не наименование не с ссылкой. И в том что я использовал процедуру а не функцию.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск