Имя: Пароль:
1C
 
Банальное преобразование значения к типу число.
0 antihacker
 
13.07.16
06:04
Всем привет !

    
    ЗапросИтогоКоличествоВозврат = Новый Запрос;

    ЗапросИтогоКоличествоВозврат.Текст = "ВЫБРАТЬ

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

Пишет

Преобразование значения к типу Число не может быть выполнено
         ИтогКолВозврат = РезЗапросИтогоКоличествоВозврат.СуммаКоличество*-1;

Но при этом сообщить(ИтогКолВозврат) показывает -3. То есть он рельно приумножил на минус один и сделал отрицательное число. Так вроде преобразовывает. Не могу понять.
1 zsergey
 
13.07.16
06:09
что-то не договариваешь :)
2 zsergey
 
13.07.16
06:10
в запросе не может быть у количества null, там только число, значит и ошибки преобразования не должно быть...
3 impulse9
 
13.07.16
06:12
На NULL надо проверять только при соединениях таблиц
4 antihacker
 
13.07.16
06:14
zsergey, я так для страховки. А так в начле кода написал еще     ИтогКолВозврат = 0;

   impulse9, ты о том что это лишнее телодвижение ?
5 Лодырь
 
13.07.16
06:20
Дружище, прошу тебя, не пиши пожалуйста конструкции аля ЧтоТо*-1
Пиши -1*ЧтоТо или ЧтоТо*(-1)
6 impulse9
 
13.07.16
06:20
(4) да, лишнее.


Ну и надо делать запрос  к виртуальной таблице оборотов, а не к физической, чтобы работала быстрее
7 antihacker
 
13.07.16
06:28
Лодырь, и так пробовал. Результат не меняеться.
8 antihacker
 
13.07.16
06:33
Опять клюу конфиги ?
9 antihacker
 
13.07.16
06:36
А можно как то в запросе изменить на минусовое число ?
10 catena
 
13.07.16
06:36
Это не весь код. Кажется это запрос в цикле...
11 Лодырь
 
13.07.16
06:38
(7) Результат и не должен изменится, а мозгу будет проще.
12 GROOVY
 
13.07.16
07:00
(10) +100500, и "ЭтотОбъект" доставляет....
13 GROOVY
 
13.07.16
07:00
А ошибка в том, что текущей строки нет.
14 catena
 
13.07.16
07:02
(13)Я ставлю на NULL, который из запроса пришел...
15 GROOVY
 
13.07.16
07:04
(14)  Ага, он по условию и пришел.
16 antihacker
 
13.07.16
07:06
ВЫ про какой  NULL ?  ЕСТЬNULL или  ЕСТЬ НЕ NULL ?
17 GROOVY
 
13.07.16
07:10
Я про функцию СУММА в запросе.
18 catena
 
13.07.16
07:10
(16) ЕСТЬNULL,  ЕСТЬ НЕ NULL, а есть еще совсем-совсем NULL, который из группировки пустого места получается.
19 YurAnt
 
13.07.16
07:11
конкретно с подобной ситуацией не сталкивался, но поигрался бы с ней например как-нибудь так

|И ПартииТоваровНаСкладах.Количество ЕСТЬ НЕ NULL

в

ЕСТЬNULL(ПартииТоваровНаСкладах.Количество,0) <> 0

Кроме того почему то имхается мне, что конструктор должен был
сделать не
|И ПартииТоваровНаСкладах.Количество ЕСТЬ НЕ NULL

а

|И НЕ ПартииТоваровНаСкладах.Количество ЕСТЬ NULL

Для верности еще б и скобок воткнул, хотя вроде ни на что повлиять не должно. (но как уже писали - мозгу проще)
20 YurAnt
 
13.07.16
07:13
(19) + хотя тут конечно вопрос в том, нужны ли нулевые значения (которые 0 а не NULL)
21 alkov
 
13.07.16
07:15
Сумма() по пустой таблице даст NULL
22 GROOVY
 
13.07.16
07:15
И для уверенности Количество НЕ = Есть NULL
23 dmpl
 
13.07.16
07:58
(5) А может просто писать -ЧтоТо?
24 DimVad
 
13.07.16
08:03
(0) А если, скажем, так:
1. Остановиться в отладчике перед циклом.
2. Включить галочку "останавливаться по ошибке".
3. Посмотреть значение "РезЗапросИтогоКоличествоВозврат.СуммаКоличество" как вылетим...

Там скорее всего таки Null будет...
25 Рэйв
 
13.07.16
08:15
(0)Давно бы уже выполнил запрос в консоли и посмотрел что там у тебя лежит и почему не складывает
26 antihacker
 
13.07.16
12:05
alkov , ты попал в точку. Как исправить ? Там по ходу РезЗапросИтогоКоличествоВозврат.Количество()равно 1. Хотя нет никаких возвратов. Вот с этогои коск идет.

Как нужно писать запрос что бы  свершилось РезЗапросИтогоКоличествоВозврат.Количество() = 0 когда нет никаких возвратов ?
27 Nuobu
 
13.07.16
12:07
(26) добавить фиктивное поле в запрос.
28 Лодырь
 
13.07.16
13:20
(23) При -1 возможно, если другое отрицательное число, то лучше написать понятнее. Потом читать все это дело. Возможно вам самим через пару лет.
29 dmpl
 
13.07.16
18:46
(28) Что может быть понятнее унарного минуса?
30 Азазелло
 
13.07.16
21:48
(0) Это замечательная особенность агрегатных функций, по крайней мере в t-sql. За подробностями - на msdn.
Попробуй сделать

ВЫБРАТЬ СУММА(Поле) ИЗ Таблица

, где в Таблице нет ни одной строки. И посмотри на результат.

Правильно:

ВЫБРАТЬ ЕСТЬNULL(СУММА(Поле)) ИЗ Таблица
31 Азазелло
 
13.07.16
21:49
(30) Не увидел комментария (21)
32 mistеr
 
13.07.16
22:27
(26) Исправить так. Вместо

СУММА(ЕСТЬNULL(ПартииТоваровНаСкладах.Количество,0))

писать

ЕСТЬNULL(СУММА(ПартииТоваровНаСкладах.Количество),0)
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.