Имя: Пароль:
1C
1С v8
Помогите обойти "Divide by zero error encountered"
,
0 BigShmax
 
17.06.12
13:17
строка запроса вызывающая ошибку  :
|   СУММА(МатериальныеЗатраты.Стоимость / ВложенныйЗапрос.Стоимость) КАК КоэффициентПоМатериальнымЗатратам,

воткнул  условие :

|     Выбор Когда ЕстьNull(СУММА(ВложенныйЗапрос.Стоимость), 0) = 0 Тогда 0 Иначе СУММА(МатериальныеЗатраты.Стоимость / ВложенныйЗапрос.Стоимость) Конец КАК КоэффициентПоМатериальнымЗатратам,

ошибка та же  :(   -     чтобы убедиться   что   деление  вывзывающее ошибку именно тут , воткнул :

|           1 КАК КоэффициентПоМатериальнымЗатратам,

и все считается :-((((   как корректно    проверку поставить в этом делении?


текст ошибки : Ошибка при выполнении операции над данными:
Microsoft OLE DB Provider for SQL Server: Divide by zero error encountered.
HRESULT=80040E14, SQLSrvr: SQLSTATE=22012, state=1, Severity=10, native=8134, line=1
1 Torquader
 
17.06.12
13:24
Есть мнение, что Null не равно 0.
2 Steel_Wheel
 
17.06.12
13:25
Есть мнение, что
ВложенныйЗапрос.Стоимость == 0
3 BigShmax
 
17.06.12
13:26
(2)   а   вот это
Выбор Когда ЕстьNull(СУММА(ВложенныйЗапрос.Стоимость), 0) = 0 Тогда 0

что не проверяет  ВложенныйЗапрос.Стоимость  на равность нулю?
4 Steel_Wheel
 
17.06.12
13:28
(3) Я бы попробовал обвернуть Вложенный запрос таким образом, чтобы от него брать не результат функции Сумма, а просто поле.

Трудно сказать, в чем именно ошибка, т.к. неясны условия соединения таблиц вложенного запроса и внешнего
5 Steel_Wheel
 
17.06.12
13:31
Еще смотри, ты проверяешь на NULL и делишь 2 разные функции:
1) Твоя проверка ЕстьNull(СУММА(ВложенныйЗапрос.Стоимость), 0)
2) а тут делишь СУММА(МатериальныеЗатраты.Стоимость / ВложенныйЗапрос.Стоимость)

Сумма по полю ВложенныйЗапрос.Стоимость может быть ненулевой, а какая-то строка таблицы может иметь нули. Переделай выражение 2) как

СУММА(МатериальныеЗатраты.Стоимость / СУММА(ВложенныйЗапрос.Стоимость) )
6 BigShmax
 
17.06.12
13:39
сейчас попробую  :
|     Выбор Когда ЕстьNull(СУММА(ВложенныйЗапрос.Стоимость), 0) = 0 Тогда 0 Иначе СУММА(МатериальныеЗатраты.Стоимость / СУММА(ВложенныйЗапрос.Стоимость)) Конец КАК КоэффициентПоМатериальнымЗатратам,
7 BigShmax
 
17.06.12
13:40
недопустимо использование вложенных агрегируюущих функций конструктор говорит :-(
8 Rie
 
17.06.12
13:43
(7) Смотря что тебе надо подсчитать, конечно...
Но можешь воткнуть ВЫБОР КОГДА ... = 0 ТО 0 ИНАЧЕ ... КОНЕЦ внутрь СУММА().
9 Steel_Wheel
 
17.06.12
13:52
Оберни свой вложенный запрос:

ВЫБРАТЬ
ВложенныйЗапрос.Измерение1 Как
...
ВложенныйЗапрос.Измерение2 Как
Сумма(ISNULL(ВложенныйЗапрос.Стоимость, 0) ) Как
Из ВложенныйЗапрос КАк ЗапросОбертка

И не используй вложенные агрегирующие функции, а ссылайся на поля запроса-обертки
10 ptiz
 
17.06.12
13:53
Скобки надо правильно расставлять
|     Выбор Когда ЕстьNull(СУММА(ВложенныйЗапрос.Стоимость), 0) = 0 Тогда 0 Иначе СУММА(МатериальныеЗатраты.Стоимость) / СУММА(ВложенныйЗапрос.Стоимость) Конец КАК КоэффициентПоМатериальнымЗатратам,
11 BigShmax
 
17.06.12
13:56
(10)  спасибо  конструктор сожрал.  ща запущу  буду поглядеть что из этого выйдет
2 + 2 = 3.9999999999999999999999999999999...