Вход | Регистрация
 

Почему результат запроса возвращается с ошибкой?

Почему результат запроса возвращается с ошибкой?
Я
   elsakovm
 
14.10.19 - 15:16
Добрый день. УНФ 1.6
Подскажите пожалуйста, где я неправильно передаю параметры в запрос? Или почему он возвращается с ошибкой? в результате запроса: ошибка чтения значения

&НаКлиенте
Процедура ЗапасыОбновить(Команда)
    
    Организация = Объект.Организация;
    СтруктурнаяЕдиница = Объект.СтруктурнаяЕдиница;
        
    ТекущаяСтрокаТЧ = Элементы.Запасы.ТекущиеДанные;
    Номенклатура = ТекущаяСтрокаТЧ.Номенклатура;

    ТекущаяСтрокаТЧ.КоличествоТекущийОстаток = ОбновитьКолонкуКоличествоТекущийОстатокНаСервере(Организация, СтруктурнаяЕдиница,Номенклатура);

КонецПроцедуры

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

    Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
    Запрос.УстановитьПараметр("Организация",Организация);
    Запрос.УстановитьПараметр("СтруктурнаяЕдиница",СтруктурнаяЕдиница);
    
    РезультатЗапроса = Запрос.Выполнить().Выбрать();
        
    Если РезультатЗапроса.Следующий() Тогда
         Возврат  РезультатЗапроса.КоличествоОстаток;
    Иначе      
        Возврат 0;      
    КонецЕсли;
    
КонецФункции
 
 
   GROOVY
 
1 - 14.10.19 - 15:19
Меня вот интересует зачем выбирать поля значения которых передаются параметрами?
   GROOVY
 
2 - 14.10.19 - 15:20
И почему параметры устанавливаются в ГДЕ, а не в параметрах вирт.таблицы?
   vicof
 
3 - 14.10.19 - 15:34
Права на регистр есть?
   elsakovm
 
4 - 14.10.19 - 15:52
(1) есть способ лучше?
(2) спасибо за подсказку, исправил. Но это не помогло
(3) да, пользователь с полными правами
   silent person
 
5 - 14.10.19 - 15:53
запрос ничего не вернул вот выборка и возвращает ошибку.
   elsakovm
 
6 - 14.10.19 - 15:54
(1) не сразу понял, сори. Да, поправлю
   silent person
 
7 - 14.10.19 - 15:55
результат запроса это вот так : РезультатЗапроса = Запрос.Выполнить();
а дальше проверяй  Если РезультатЗапроса.Пустой() Тогда
   Anton1307
 
8 - 14.10.19 - 15:58
На какой конкретно строчке выскакивает ошибка ?
   elsakovm
 
9 - 14.10.19 - 16:05
   dezss
 
10 - 14.10.19 - 16:06
(9) Он спрашивал про строку кода. На какой из них ошибка?
   elsakovm
 
11 - 14.10.19 - 16:08
(10) а так тишина
   vicof
 
12 - 14.10.19 - 16:08
Поставил точку останова на 
Если РезультатЗапроса.Следующий() Тогда?
   Anton1307
 
13 - 14.10.19 - 16:16
Разъясни ещё раз - у тебя ошибка выскакивает во время исполнения программы ?
Или ты имеешь ввиду (судя по скриншоту), что в отладчике, когда ты пытаешься посмотреть результат запроса, у тебя выскакивает ошибка ?
   elsakovm
 
14 - 14.10.19 - 16:22
(13) не во время исполнения программы. Программа ошибок не выдает. Смотрю в отладчик - в результат запроса - там ошибка чтения значения (на скриншоте)
   ДенисЧ
 
15 - 14.10.19 - 16:24
(14) Если отладку поставить на строчку
    Возврат  РезультатЗапроса.КоличествоОстаток; 
Что он показывает?
   elsakovm
 
16 - 14.10.19 - 16:24
Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    //|    ЗапасыОстатки.Организация КАК Организация,

    //|    ЗапасыОстатки.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница,

    //|    ЗапасыОстатки.Номенклатура КАК Номенклатура,

    |    ЗапасыОстатки.КоличествоОстаток КАК КоличествоОстаток
    |ИЗ
    |    РегистрНакопления.Запасы.Остатки(,            
    |    Номенклатура = &Номенклатура
    | И Организация = &Организация
    | И СтруктурнаяЕдиница = &СтруктурнаяЕдиница) КАК ЗапасыОстатки";

    Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
    Запрос.УстановитьПараметр("Организация",Организация);
    Запрос.УстановитьПараметр("СтруктурнаяЕдиница",СтруктурнаяЕдиница);
        
    РезультатЗапроса = Запрос.Выполнить().Выбрать();
        
    Если РезультатЗапроса.Следующий() Тогда
         Возврат  РезультатЗапроса.КоличествоОстаток;
    Иначе      
        Возврат 0;      
    КонецЕсли;

Вот так стал возвращать значение 0 
Хотя там на самом деле другая цифра
   hhhh
 
17 - 14.10.19 - 16:26
(14) ну точно смотришь отладчиком после команды Следующий()  ?? Потому что если до этого, то программа должна выдать ошибка чтения значения, значит программа отрабатывает идеально, всё правильно делает.
   Anton1307
 
18 - 14.10.19 - 16:27
Ну всё понятно. Значит смотри.

Запрос у тебя не возвращает никаких данных. Поэтому, когда ты ставишь точку останова после выполнения запроса (после строки)
>>> РезультатЗапроса = Запрос.Выполнить().Выбрать()
то отладчик показывает "Ошибка чтения значения", так как читать нечего, выборка пустая.

Во время исполнения программного кода ошибка не возникает. Она (теоретически) могла бы возникнуть на строке
>>> Возврат  РезультатЗапроса.КоличествоОстаток

но исполнение программы до этой строки не доходит, так как условие
>>> РезультатЗапроса.Следующий()
всегда возвращает ЛОЖЬ.

Поэтому, если ты уверен, что запрос должен вернуть какие-то данные, а он не возвращает - проверяй, правильные ли значения параметров ты передаёшь
   elsakovm
 
19 - 14.10.19 - 16:27
(17) да точно
   hhhh
 
20 - 14.10.19 - 16:30
(19) да, вот здесь

 Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
    Запрос.УстановитьПараметр("Организация",Организация);
    Запрос.УстановитьПараметр("СтруктурнаяЕдиница",СтруктурнаяЕдиница);

походу накосячил.

Или на самом деле на текущию секунду остатков нет. Может на какую то дату имеет смысл остатки проверять, а не на текущую?
   elsakovm
 
21 - 14.10.19 - 16:35
(20) да я тоже думаю что где-то в параметрах. Потому что в консоли результат нужный получаю а тут не могу
   elsakovm
 
22 - 14.10.19 - 16:36
(20) но в отладчике все данные вроде красиво подставляются, поэтому так сразу и не поймешь
   elsakovm
 
23 - 14.10.19 - 18:44
Да, все дело было в одном из параметров (а именно в складе)

Сейчас у меня обновляется только текущая строка, не могу сделать перебор по строкам, как правильно будет?


ТекущаяСтрокаТЧ = Элементы.Запасы.ТекущиеДанные;
    Номенклатура = ТекущаяСтрокаТЧ.Номенклатура;
         
    Для Каждого  ТекущаяСтрокаТЧ из Объект.Запасы Цикл        
        ТекущаяСтрокаТЧ.КоличествоТекущийОстаток =  ОбновитьКолонкуКоличествоТекущийОстатокНаСервере(Организация,СтруктурнаяЕдиница,Номенклатура);        
    КонецЦикла ;
   elsakovm
 
24 - 14.10.19 - 18:51
сам себе отвечаю)
Номенклатура = ТекущаяСтрокаТЧ.Номенклатура; в цикл засунуть надо
   ГдеСобакаЗарыта
 
25 - 14.10.19 - 18:52
Запрос в цикле -100 в карму.
   craxx
 
26 - 14.10.19 - 19:25
(25) далеко не всегда.
   Alex87r
 
27 - 14.10.19 - 19:29
(25) это обычное явление


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.