|
Ошибка чтения значения. Запросы. Отладка. | ☑ | ||
---|---|---|---|---|
0
kachesov
10.10.16
✎
14:22
|
Добрый день!
Пытаюсь получить значение закупочной цены в УПП. Написал следующую функцию с запросом: Функция ПолучитьЗакупочныеЦены(ДатаЦен, Номенклатура) Экспорт ЗакупочнаяЦена = 0; Закупка = "Закупка"; Запрос = Новый Запрос("ВЫБРАТЬ | Цены.Цена КАК Цена |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних( | &Дата, | ТипЦен = &Закупка | И Номенклатура = &Номенклатура) КАК Цены"); Запрос.УстановитьПараметр("Дата", ДатаЦен); Запрос.УстановитьПараметр("Закупка", Закупка); Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Выборка = Запрос.Выполнить().Выбрать(); ЗакупочнаяЦена = Выборка.Цена; Возврат ЗакупочнаяЦена; КонецФункции; Не работает. Ковыряю отладчиком. При вычислении строки Запрос.Выполнить().Выбрать().Цена в поле "Значение" выдаёт "Ошибка чтения значения".. Подскажите пожалуйста, куда дальше копать? Почему может возникать такая ошибка? |
|||
1
polosov
10.10.16
✎
14:24
|
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий(); ЗакупочнаяЦена = Выборка.Цена; |
|||
2
SadrArt
10.10.16
✎
14:28
|
(0) > Запрос.Выполнить().Выбрать().Цена
Шедевр! |
|||
3
Ёпрст
10.10.16
✎
14:28
|
(0)
Если Выборка.Следующий() Тогда Возврат Выборка.Цена; КонецЕсли; Возврат 0; |
|||
4
1dvd
10.10.16
✎
14:31
|
сразу видно семёрошника
|
|||
5
DmitriyDI
10.10.16
✎
14:31
|
(0) потому что следующий возвращает позиционирование на следующей записи выборки, и возвращает Ложь или Истину.
А вот когда запись выбралась т.е. следующий равно истина, тогда в выборке появляются данные. все это можно посмотреть в СП |
|||
6
kachesov
10.10.16
✎
14:41
|
(1) (3) это всё хорошо, но что бы я ни дописывал после строки (см.ниже), её ошибка не исчезнет..
Выборка = Запрос.Выполнить().Выбрать(); (5) СП это что?) не подскажете, что мне нужно поправить?) |
|||
7
1dvd
10.10.16
✎
14:46
|
(6) а у тебя в регистре сведений ЦеныНоменклатуры ТипЦен точно строковый?
|
|||
8
kachesov
10.10.16
✎
14:53
|
(7) в регистре сведений ЦеныНоменклатуры ТипЦен - это измерение с типом СправочникСсылка.ТипыЦенНоменклатуры
|
|||
9
kachesov
10.10.16
✎
14:57
|
(7) и тут я начал подумывать что недостаточно просто написать Запрос.УстановитьПараметр("Закупка", "Закупка")
=) |
|||
10
1dvd
10.10.16
✎
14:59
|
(9) в правильном направлении мыслишь
но и про (3) не забываем |
|||
11
kachesov
10.10.16
✎
15:01
|
(10) спасибо большое, пойду дальше ковыряться..
|
|||
12
kachesov
10.10.16
✎
16:44
|
Функция ПолучитьЦеныДляПФ(Номенклатура) Экспорт
Запрос = Новый Запрос("ВЫБРАТЬ | Цены.Цена КАК Цена |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних( | &Дата, | ТипЦен = &ТипЦен | И Номенклатура = &Номенклатура) КАК Цены"); Запрос.УстановитьПараметр("Дата", Дата); Запрос.УстановитьПараметр("ТипЦен", ТипЦенДляПФ); Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); Возврат Выборка.Цена; КонецФункции; Так выглядит конечный вариант. ТипЦенДляПФ - реквизит с типом СправочникСсылка.ТипыЦенНоменклатуры Моя ошибка была в этом. Я пытался явно указать название созданного типа цен.. |
|||
13
Timon1405
10.10.16
✎
16:49
|
(12) также нужно понимать, что если цена вообще не назначена, то ваша функция выдаст ошибку(выборки вообще не будет).
как это обойти вам подсказывают в (3) |
|||
14
kachesov
10.10.16
✎
16:59
|
(13) это кусочек. так там три метода. Все они в форме документа.
Первый - кнопка, второй - построчная обработка табличной части, третий - заполнение нужным значением. У меня в запросе каждый раз лишь одна номенклатурная позиция, мне не нужна проверка (3). Процедура КоманднаяПанельЗаполнитьЦеныДляПФ(Кнопка) Если ЗначениеЗаполнено(ТипЦенДляПФ) Тогда ЗаполнитьЦеныДляПФ(); Иначе Сообщить("Не заполнен поле ТипЦенДляПФ!"); КонецЕсли; КонецПроцедуры Процедура ЗаполнитьЦеныДляПФ() Экспорт Для Каждого Строка Из Товары Цикл Строка.ЦенаДляПФ = ПолучитьЦеныДляПФ(Строка.Номенклатура); КонецЦикла; КонецПроцедуры Функция ПолучитьЦеныДляПФ(Номенклатура) Экспорт Запрос = Новый Запрос("ВЫБРАТЬ | Цены.Цена КАК Цена |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних( | &Дата, | ТипЦен = &ТипЦен | И Номенклатура = &Номенклатура) КАК Цены"); Запрос.УстановитьПараметр("Дата", Дата); Запрос.УстановитьПараметр("ТипЦен", ТипЦенДляПФ); Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); Возврат Выборка.Цена; КонецФункции; |
|||
15
notebug
10.10.16
✎
17:23
|
Я бы через массив номенклатуры сделал, нежели запрос в цикле
|
|||
16
Cumpuciy
10.10.16
✎
17:25
|
Если Выборка.Следующий() тогда
Возврат Выборка.Цена иначе Возврат 0 КонецЕсли |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |