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

1С:Предприятие ::

Метки: 

Глючит выражение для расчета ресурсов СКД

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

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

ИЛИ

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

будут разные данные по группировке. Правильно работает ЕстьNull(), но мне это кажется странным по логике же они одинаковы.
 
 
   Buster007
 
1 - 28.02.18 - 13:46
с NULL лучше ничего не сравнивать и проблем не будет
   davlen86
 
2 - 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 в запросе и ИСТИНА в коде
   Ненавижу 1С
 
5 - 28.02.18 - 13:57
можно конечно писать: КОГДА НЕ Сумма(Трафик) Есть Null ТОГДА
но имхо, запись ЕстьNull(Сумма(Трафик),Сумма(ТрафикРП)) лаконичней и понятней

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

Подскажите, кто знает, как такое обернуть в ЕстьNull() ?
   Малыш Джон
 
9 - 28.02.18 - 14:01
(4) я к тому что условие в запросе
ВЫБОР КОГДА NULL=NULL ТОГДА

не выполняется
   davlen86
 
10 - 28.02.18 - 14:02
(7) я не вру, в моем случае он выдает неверный результат, а ЕстьNull() верный
 
 Рекламное место пустует
   Ненавижу 1С
 
11 - 28.02.18 - 14:07
(8) внимательней
Выбор Когда НЕ Сумма(Трафик) Есть Null Тогда 
    Сумма(Трафик)
   Малыш Джон
 
12 - 28.02.18 - 14:08
(8) наверное все таки
 Выбор Когда НЕ Сумма(Трафик) Есть Null Тогда Сумма(Трафик)

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

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

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

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

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

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


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