Имя: Пароль:
1C
1С v8
Глючит выражение для расчета ресурсов СКД
,
0 davlen86
 
28.02.18
13:32
Доброго дня, уважаемые форумчане! Тут у меня возникла неожиданная ошибка, особенность, не могу понять, прошу помочи гуру 1С. Есть отчет СКД и у него есть ресурс в поле выражение, которого если написать:

Выбор Когда Сумма(Трафик) <> Null Тогда
    Сумма(Трафик)
Иначе
    Сумма(ТрафикРП)
Конец

ИЛИ

ЕстьNull(Сумма(Трафик),Сумма(ТрафикРП))

будут разные данные по группировке. Правильно работает ЕстьNull(), но мне это кажется странным по логике же они одинаковы.
1 Buster007
 
28.02.18
13:46
с NULL лучше ничего не сравнивать и проблем не будет
2 davlen86
 
28.02.18
13:50
(1) Спасибо за совет, но как же быть если без этого не обойтись?
3 Малыш Джон
 
28.02.18
13:53
(0) потому что любое условие с NULL дает ЛОЖЬ, даже NULL = NULL дает ЛОЖЬ.
для этого и придумали условие Есть NULL:

КОГДА НЕ Сумма(Трафик) Есть Null ТОГДА
4 Гипервизор
 
28.02.18
13:57
(3) NULL = NULL дает NULL в запросе и ИСТИНА в коде
5 Ненавижу 1С
 
гуру
28.02.18
13:57
можно конечно писать: КОГДА НЕ Сумма(Трафик) Есть Null ТОГДА
но имхо, запись ЕстьNull(Сумма(Трафик),Сумма(ТрафикРП)) лаконичней и понятней

жаль 1С не реализовала COALESCE - приходится писать вложенные ЕСТЬNULL когда аргументов больше двух
6 davlen86
 
28.02.18
13:57
(3) Пробовал такую же конструкцию, но результат все равно неверный
7 Ненавижу 1С
 
гуру
28.02.18
13:59
(6) не ври, эта конструкция полностью эквивалент ЕСТЬNULL
8 davlen86
 
28.02.18
14:01
(5) в моем случае еще печальнее, вложенными не обойтись или может я не догадался.
Выбор Когда Сумма(Трафик) Есть Null Тогда
    Сумма(Трафик)
Иначе
      Выбор Когда Сумма(ЧекиРП) < 0 ТОгда
         0
      Иначе
         Сумма(ТрафикРП)
      Конец
Конец

Подскажите, кто знает, как такое обернуть в ЕстьNull() ?
9 Малыш Джон
 
28.02.18
14:01
(4) я к тому что условие в запросе

ВЫБОР КОГДА NULL=NULL ТОГДА

не выполняется
10 davlen86
 
28.02.18
14:02
(7) я не вру, в моем случае он выдает неверный результат, а ЕстьNull() верный
11 Ненавижу 1С
 
гуру
28.02.18
14:07
(8) внимательней

Выбор Когда НЕ Сумма(Трафик) Есть Null Тогда
    Сумма(Трафик)
12 Малыш Джон
 
28.02.18
14:08
(8) наверное все таки

Выбор Когда НЕ Сумма(Трафик) Есть Null Тогда Сумма(Трафик)

?
13 davlen86
 
28.02.18
14:11
(11) оу, сори
14 Ненавижу 1С
 
гуру
28.02.18
14:15
(3)(4)

кстати да, на новых релизах, где можно писать в полях логические условия, легко проверить, что запрос

ВЫБРАТЬ
    NULL = NULL КАК Поле1

дает NULL, а не ЛОЖЬ
понятно, что в условиях это эквивалентно
15 Малыш Джон
 
28.02.18
14:22
(14) если выбирать как поле, то любое выражение с NULL дает NULL кроме:

Ложь И NULL дает Ложь
Истина ИЛИ NULL дает Истина

если ничего не напутал)
16 hhhh
 
28.02.18
14:30
СУММА() нормально работает с NULL. То есть если попадаются такие значения, она их игнорирует.