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

1С:Предприятие :: 1С:Предприятие 8 общая

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

Глючит выражение для расчета ресурсов СКД
Я
   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 человек.
Рекламное место пустует