|
Почему результат запроса возвращается с ошибкой? | ☑ | ||
---|---|---|---|---|
0
elsakovm
14.10.19
✎
15:16
|
Добрый день. УНФ 1.6
Подскажите пожалуйста, где я неправильно передаю параметры в запрос? Или почему он возвращается с ошибкой? в результате запроса: ошибка чтения значения &НаКлиенте Процедура ЗапасыОбновить(Команда) Организация = Объект.Организация; СтруктурнаяЕдиница = Объект.СтруктурнаяЕдиница; ТекущаяСтрокаТЧ = Элементы.Запасы.ТекущиеДанные; Номенклатура = ТекущаяСтрокаТЧ.Номенклатура; ТекущаяСтрокаТЧ.КоличествоТекущийОстаток = ОбновитьКолонкуКоличествоТекущийОстатокНаСервере(Организация, СтруктурнаяЕдиница,Номенклатура); КонецПроцедуры &НаСервереБезКонтекста Функция ОбновитьКолонкуКоличествоТекущийОстатокНаСервере(Организация,СтруктурнаяЕдиница,Номенклатура); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗапасыОстатки.Организация КАК Организация, | ЗапасыОстатки.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница, | ЗапасыОстатки.Номенклатура КАК Номенклатура, | ЗапасыОстатки.КоличествоОстаток КАК КоличествоОстаток |ИЗ | РегистрНакопления.Запасы.Остатки КАК ЗапасыОстатки |ГДЕ | ЗапасыОстатки.Организация = &Организация |И ЗапасыОстатки.Номенклатура = &Номенклатура |И ЗапасыОстатки.СтруктурнаяЕдиница = &СтруктурнаяЕдиница"; Запрос.УстановитьПараметр("Номенклатура",Номенклатура); Запрос.УстановитьПараметр("Организация",Организация); Запрос.УстановитьПараметр("СтруктурнаяЕдиница",СтруктурнаяЕдиница); РезультатЗапроса = Запрос.Выполнить().Выбрать(); Если РезультатЗапроса.Следующий() Тогда Возврат РезультатЗапроса.КоличествоОстаток; Иначе Возврат 0; КонецЕсли; КонецФункции |
|||
1
GROOVY
14.10.19
✎
15:19
|
Меня вот интересует зачем выбирать поля значения которых передаются параметрами?
|
|||
2
GROOVY
14.10.19
✎
15:20
|
И почему параметры устанавливаются в ГДЕ, а не в параметрах вирт.таблицы?
|
|||
3
vicof
14.10.19
✎
15:34
|
Права на регистр есть?
|
|||
4
elsakovm
14.10.19
✎
15:52
|
(1) есть способ лучше?
(2) спасибо за подсказку, исправил. Но это не помогло (3) да, пользователь с полными правами |
|||
5
silent person
14.10.19
✎
15:53
|
запрос ничего не вернул вот выборка и возвращает ошибку.
|
|||
6
elsakovm
14.10.19
✎
15:54
|
(1) не сразу понял, сори. Да, поправлю
|
|||
7
silent person
14.10.19
✎
15:55
|
результат запроса это вот так : РезультатЗапроса = Запрос.Выполнить();
а дальше проверяй Если РезультатЗапроса.Пустой() Тогда |
|||
8
Anton1307
14.10.19
✎
15:58
|
На какой конкретно строчке выскакивает ошибка ?
|
|||
9
elsakovm
14.10.19
✎
16:05
|
||||
10
dezss
14.10.19
✎
16:06
|
(9) Он спрашивал про строку кода. На какой из них ошибка?
|
|||
11
elsakovm
14.10.19
✎
16:08
|
(10) а так тишина
|
|||
12
vicof
14.10.19
✎
16:08
|
Поставил точку останова на
Если РезультатЗапроса.Следующий() Тогда? |
|||
13
Anton1307
14.10.19
✎
16:16
|
Разъясни ещё раз - у тебя ошибка выскакивает во время исполнения программы ?
Или ты имеешь ввиду (судя по скриншоту), что в отладчике, когда ты пытаешься посмотреть результат запроса, у тебя выскакивает ошибка ? |
|||
14
elsakovm
14.10.19
✎
16:22
|
(13) не во время исполнения программы. Программа ошибок не выдает. Смотрю в отладчик - в результат запроса - там ошибка чтения значения (на скриншоте)
|
|||
15
ДенисЧ
14.10.19
✎
16:24
|
(14) Если отладку поставить на строчку
Возврат РезультатЗапроса.КоличествоОстаток; Что он показывает? |
|||
16
elsakovm
14.10.19
✎
16:24
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ //| ЗапасыОстатки.Организация КАК Организация, //| ЗапасыОстатки.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница, //| ЗапасыОстатки.Номенклатура КАК Номенклатура, | ЗапасыОстатки.КоличествоОстаток КАК КоличествоОстаток |ИЗ | РегистрНакопления.Запасы.Остатки(, | Номенклатура = &Номенклатура | И Организация = &Организация | И СтруктурнаяЕдиница = &СтруктурнаяЕдиница) КАК ЗапасыОстатки"; Запрос.УстановитьПараметр("Номенклатура",Номенклатура); Запрос.УстановитьПараметр("Организация",Организация); Запрос.УстановитьПараметр("СтруктурнаяЕдиница",СтруктурнаяЕдиница); РезультатЗапроса = Запрос.Выполнить().Выбрать(); Если РезультатЗапроса.Следующий() Тогда Возврат РезультатЗапроса.КоличествоОстаток; Иначе Возврат 0; КонецЕсли; Вот так стал возвращать значение 0 Хотя там на самом деле другая цифра |
|||
17
hhhh
14.10.19
✎
16:26
|
(14) ну точно смотришь отладчиком после команды Следующий() ?? Потому что если до этого, то программа должна выдать ошибка чтения значения, значит программа отрабатывает идеально, всё правильно делает.
|
|||
18
Anton1307
14.10.19
✎
16:27
|
Ну всё понятно. Значит смотри.
Запрос у тебя не возвращает никаких данных. Поэтому, когда ты ставишь точку останова после выполнения запроса (после строки) >>> РезультатЗапроса = Запрос.Выполнить().Выбрать() то отладчик показывает "Ошибка чтения значения", так как читать нечего, выборка пустая. Во время исполнения программного кода ошибка не возникает. Она (теоретически) могла бы возникнуть на строке >>> Возврат РезультатЗапроса.КоличествоОстаток но исполнение программы до этой строки не доходит, так как условие >>> РезультатЗапроса.Следующий() всегда возвращает ЛОЖЬ. Поэтому, если ты уверен, что запрос должен вернуть какие-то данные, а он не возвращает - проверяй, правильные ли значения параметров ты передаёшь |
|||
19
elsakovm
14.10.19
✎
16:27
|
(17) да точно
|
|||
20
hhhh
14.10.19
✎
16:30
|
(19) да, вот здесь
Запрос.УстановитьПараметр("Номенклатура",Номенклатура); Запрос.УстановитьПараметр("Организация",Организация); Запрос.УстановитьПараметр("СтруктурнаяЕдиница",СтруктурнаяЕдиница); походу накосячил. Или на самом деле на текущию секунду остатков нет. Может на какую то дату имеет смысл остатки проверять, а не на текущую? |
|||
21
elsakovm
14.10.19
✎
16:35
|
(20) да я тоже думаю что где-то в параметрах. Потому что в консоли результат нужный получаю а тут не могу
|
|||
22
elsakovm
14.10.19
✎
16:36
|
(20) но в отладчике все данные вроде красиво подставляются, поэтому так сразу и не поймешь
|
|||
23
elsakovm
14.10.19
✎
18:44
|
Да, все дело было в одном из параметров (а именно в складе)
Сейчас у меня обновляется только текущая строка, не могу сделать перебор по строкам, как правильно будет? ТекущаяСтрокаТЧ = Элементы.Запасы.ТекущиеДанные; Номенклатура = ТекущаяСтрокаТЧ.Номенклатура; Для Каждого ТекущаяСтрокаТЧ из Объект.Запасы Цикл ТекущаяСтрокаТЧ.КоличествоТекущийОстаток = ОбновитьКолонкуКоличествоТекущийОстатокНаСервере(Организация,СтруктурнаяЕдиница,Номенклатура); КонецЦикла ; |
|||
24
elsakovm
14.10.19
✎
18:51
|
сам себе отвечаю)
Номенклатура = ТекущаяСтрокаТЧ.Номенклатура; в цикл засунуть надо |
|||
25
ГдеСобака Зарыта
14.10.19
✎
18:52
|
Запрос в цикле -100 в карму.
|
|||
26
craxx
14.10.19
✎
19:25
|
(25) далеко не всегда.
|
|||
27
Alex87r
14.10.19
✎
19:29
|
(25) это обычное явление
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |