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

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

Автор 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

Поиск