Имя: Пароль:
   
1C
 
null <> null
0 DragfaR
 
10.07.24
14:18
Здравствуйте, подскажите, в запросе сравниваю значение если в поле null тогда 1 иначе 2 (облегчил что бы понять почему так) хоть в поле и значение null всегда выдает 2
18 Chai Nic
 
10.07.24
14:52
Это вопрос философский. Является ли ничто сущностью, и может ли одно ничто быть равным другому.
19 Valdis2007
 
10.07.24
14:53
(14) человек в ужасе...слился похоже...
20 Волшебник
 
10.07.24
14:54
(18) Давайте разбираться. Пустая строка не равна пробелу, а уж тем более символу Ø (пустое множество). Значит имеем разные ничто, не равные друг другу (или враг врагу). Враждуют ли разные ничто? Объединяются ли они в альянсы, чтобы воевать против других ничто-альянсов?
21 Масянька
 
10.07.24
14:54
Понеслась душа в рай.
22 Valdis2007
 
10.07.24
14:54
(18) бесконечность не равна бесконечности это из математики
23 Масянька
 
10.07.24
14:55
(18) Как правило, философские вопросы решаются в уютном месте, хорошей компании и с каким-нибудь напитком.
24 DragfaR
 
10.07.24
15:00
(4) Спасибо)
25 Valdis2007
 
10.07.24
15:07
(23) это предложение?
26 Eiffil123
 
10.07.24
15:36
(18) а то что две Лжи равны, это нормально?
27 sikuda
 
11.07.24
09:11
(23)(26) Философские вопросы? Это вопросы математики!
Ближе к земле, не надо тень на плетень наводить (11)
NULL это пустое множество, это не объект или тип в языке. Это пришло к нас из SQL, там тоже нельзя сравнивать NULL и там тоже есть оператор IS NULL.

А в языке 1С Null = Null! (Но это скорее особый случай неопределенно)
В Исполнителе 1С тоже Null == Null.
php есть null, но он устаревший
java, kotlin есть null, но это аналог Неопределенно
28 Chai Nic
 
10.07.24
16:49
(27) А в SQL?
29 maxab72
 
10.07.24
16:54
"бесконечность не равна бесконечности это из математики"
Бесконечность обычно равна 7. "Лекция о броме"
30 Garikk
 
10.07.24
17:17
(27) не надо тут про математику, математики пусть со своими формулами сидят

корректно ли выражение
Организация = null
Номенклатура = null
Организация=Номенклатура -- что должно быть ложь или истина?
и как с точки зрения математики это описано и как в коде 1С выглядеть должно?

(10) Это вот тут очень правильная отсылка как раз на эту тему
31 youalex
 
10.07.24
17:22
ЗаписатьJSON() - NULL нельзя, но можно Неопределено, которое этот метод пишет как null )
32 СвинТуз
 
10.07.24
17:36
(0)
Так неопытность и заканчивается. Приходит опыт.
Вы молодец, что работаете.
33 floverr
 
10.07.24
20:19
Предлагаю новый метод: :)
Функсия  АЕстьтутьчото(онотутестьилиможетбытьилизатерялось)  Экспорт
.....
возврат евотамнет;
Канесфунксии
ну так... поржал)))
34 dmpl
 
10.07.24
20:31
(30) Результатом сравнения NULL с NULL должно быть NULL.
35 Волшебник
 
10.07.24
20:37
(33) Бред
36 Волшебник
 
10.07.24
20:38
(34) Но по факту результатом равно "ЛОЖЬ"
37 ДедМорроз
 
10.07.24
20:53
Nothing в Visial Basic - это объект,у которого ссылка равна 0,другими словами,пустой указатель,помещенный в тип Variant.
Null и Empty также два разных типа.
В 1С аналогом Nothing можно считать пустую ссылку,но так как в 1с нет общего типа ссылки,то пустая ссылка для каждого типа своя.
Для 1с Null это значение одноименного типа и оно прекрасно сравнивается с таким же значением.
Использование Null в Variant подразумевает,что это не значение,а неизвестно что,поэтому,любая операция сравнения с типом Null возвращает Ложь.
38 Волшебник
 
10.07.24
21:11
(37) Вас не существует. У Вас ошибка в нике.
39 ViSo76
 
11.07.24
01:03
(36) По факту (34) это верный ответ, по тому что сравнение NULL с чем либо будет всегда "неопределенно". NULL это неинициализированное значение. В примере ниже всегда будет 4, так как ИНАЧЕ это подобное "перехвату прерывания"... По этому сравнение нужно делать через вызов проверки на NULL ( ЕСТЬ NULL ).

ВЫБРАТЬ
    ВЫБОР
        КОГДА NULL = NULL
            ТОГДА 1
        КОГДА NULL <> NULL
            ТОГДА 2
        КОГДА НЕ NULL = NULL
            ТОГДА 3
        ИНАЧЕ
            4
    КОНЕЦ

Результат запроса ниже так же 4, по тому что срабатывает функция проверки на NULL

ВЫБРАТЬ
    ВЫБОР
        КОГДА NULL = NULL
            ТОГДА 1
        КОГДА NULL <> NULL
            ТОГДА 2
        КОГДА НЕ NULL = NULL
            ТОГДА 3
        КОГДА NULL ЕСТЬ NULL
            ТОГДА 4
        ИНАЧЕ
            5
    КОНЕЦ
40 DrZombi
 
11.07.24
07:50
(0) Null не сравнивают, а пишут "Значение Есть Null"
41 Ненавижу 1С
 
11.07.24
08:15
(36) по факту:

ВЫБРАТЬ ТИПЗНАЧЕНИЯ(NULL=NULL) //результат тип NULL
42 Chai Nic
 
11.07.24
08:19
(26) Таковы правила булевой алгебры, на которой базируется вся наша электронная цивилизация.
43 Волшебник
 
11.07.24
11:30
(42) Песня в тему: Булева алгебра
https://suno.com/song/754c51d1-6e69-4130-8d22-099647df4f67
44 Valdis2007
 
11.07.24
11:47
(42) ок, тогда расширим наш мысленный эксперемент

в булевой алгебре есть умножение

NULL * NULL = ?
45 Chai Nic
 
11.07.24
11:53
(44) В булевой алгебре нет NULL, там есть ложь и истина. И ложь*ложь=ложь.
46 Garikk
 
11.07.24
11:55
(34) вот это очень спорное утверждение, именно по этому в SQL и вообще в языках, null зачастую нельзя сравнивать напрямую такие переменные

ты сравниваешь не null с null, а две переменные имеющие какието значения (в т.ч. null)
и в разных ЯП может кардинально различатся поведение с этими сущностями
47 Garikk
 
11.07.24
11:57
(26) Ложь это 0, а 0 == 0, это логично же
48 Волшебник
 
11.07.24
12:31
(45) Я дополню.

В булевой алгебре есть:
конъюнкция (обозначается: И, ∧, *, ·) — логическое умножение
и дизъюнкция (обозначается: ИЛИ, V, +) — логическое сложение

например:
ЛОЖЬ * ЛОЖЬ = ЛОЖЬ
ЛОЖЬ * ИСТИНА = ЛОЖЬ
ИСТИНА * ЛОЖЬ = ЛОЖЬ
ИСТИНА * ИСТИНА = ИСТИНА
49 Ненавижу 1С
 
11.07.24
12:08
(45) в булевой нет, а в SQL есть. Фактически троичная алгебра как булева, дополненная внешним NULL
50 Valdis2007
 
11.07.24
12:32
(45) В булевой алгебре нет NULL

формально да...

но мысленный эксперемент Джордж Буль  нам проводить запретить не может?))

  Пустое множество = NULL  - ?
51 Garykom
 
11.07.24
13:08
(50) "Пустое множество" - означает что оно инициализировано, оно есть но пустое
"NULL" - значение не инициализировано, его нет, тип неизвестен
52 Garykom
 
11.07.24
13:10
(51)+ Любая операция над NULL (кроме IS NULL или IS NOT NULL) должна выдавать или ошибку или NULL
53 Волшебник
 
11.07.24
13:09
(51) Даёшь больше смыслов из пустоты!
54 Garykom
 
11.07.24
13:12
Можно рассматривать "NULL" как "?" = "Неизвестно"

Вопрос: "Сколько яблок в корзине?"
Ответ: NULL (неизвестно), 0, 1, 2 и т.д.
55 Chai Nic
 
11.07.24
13:15
(50) А при чем тут множества? В булевой алгебре нет никаких множеств, там есть переменные, два возможные значения для них и две операции. И операция отрицания (инверсия).
56 Valdis2007
 
11.07.24
13:15
(51) (53)

есть множество всех значений которых нет?

другими словами...

можно определить множество NULLов?
57 Valdis2007
 
11.07.24
13:19
(55)  В булевой алгебре нет никаких множест

здесь Вы неправы

сама булева алгебра определяется через понятие множества

Булевой алгеброй называется непустое множество A с двумя бинарными операциями....

wiki:Булева_алгебра
58 Chai Nic
 
11.07.24
13:25
(57) А, ну да. Ошибся.
59 Волшебник
 
11.07.24
13:26
Как произносится NULL? "нул" или "нал"?
60 Chai Nic
 
11.07.24
13:28
(59) А ещё есть nil, в паскале
61 Garykom
 
11.07.24
13:30
(59) Смотря для кого произносится, для русскоязычных "нулл" для англоязычных "нал"
62 Ненавижу 1С
 
11.07.24
13:31
(59) nʌl
63 Волшебник
 
11.07.24
13:32
(60) (56) В сообщении (11) достаточно полный список всей этой пустой херни
64 Eiffil123
 
11.07.24
13:49
(20) значение НЕОПРЕДЕЛЕНО тоже имеет разные смыслы для разных данных. Например, неопределено для составного поля из строки и числа в целом не тоже самое, что неопределено для ссылочного поля по своему смыслу.

Но НЕОПРЕДЕЛЕНО можно сравнивать через операции = и <>. Почему тогда такой разный подход?
65 Масянька
 
11.07.24
13:54
извините, но практически в тему: как правильно:
-(Выборка.Сумма + Выборка.СуммаНалога) или -Выборка.Сумма - Выборка.СуммаНалога
?
66 Ненавижу 1С
 
11.07.24
14:01
(65) оба варианта допустимы. Мне нравится первый больше
67 VS-1976
 
11.07.24
14:02
(64) По тому что в 1с неопределено это основа любого класса переменных. Это начало начал, от неопределено порождено всё ( мои мысли ).
Разный подход в чём?
68 VS-1976
 
11.07.24
14:11
(65) без разницы, но нужно писать на мой взгляд так, чтобы было легче отлаживать. Вариант со скобками визуально понятнее.
69 Масянька
 
11.07.24
14:06
(66) (68) Я почти Ванга. Ну, ведьма это точно!
70 Garykom
 
11.07.24
14:28
(65) Забыла в ЕСТЬNULL обернуть...
71 Eiffil123
 
11.07.24
14:40
(67) разный подход на сравнение двух неопределено и двух Null в запросах
72 Eiffil123
 
11.07.24
14:41
(65) можно еще так:

(Выборка.Сумма + Выборка.СуммаНалога) * (-1)
73 Valdis2007
 
11.07.24
14:49
(72) количество знаков больше буде чем в предыдущем
74 ДедМорроз
 
11.07.24
20:35
Null нельзя сравнивать с вопросом и неизвестно.
Истина ИЛИ Null даст в результате Null,хотя любое другое значение даст Истина.
75 ДедМорроз
 
11.07.24
20:36
Внутри SQL у переменных есть флаг,что значение есть Null.
76 Волшебник
 
11.07.24
20:46
(74) в языке запросов 1С значение NULL дополнительно преобразуется в ЛОЖЬ
77 DrZombi
 
12.07.24
06:25
Смиритесь, NULL нельзя лишь сравнивать только по прихоти разработчика среды программирования :)
78 maxab72
 
12.07.24
08:12
Побуквоедствую... пустое множество это не из булевой алгебры, а из теории множеств. До сих пор помню, что "критерием квадрируемости плоской фигуры по Жордану является  то, что площадь контура этой фигуры должна представлять собой пустое множество..."
79 Ненавижу 1С
 
12.07.24
08:37
(76) смотри (41)
80 Chai Nic
 
12.07.24
08:46
(77) Ага, в том же Си NULL это всего лишь макроподстановка для обычного 0.
81 Ненавижу 1С
 
12.07.24
09:06
(78) площадь это скалярная величина, какое множество?
82 Волшебник
 
12.07.24
09:07
(79) Там ошибка
83 Ненавижу 1С
 
12.07.24
09:08
(82) ну хорошо, ты можешь считать, что там ошибка, я не против
84 maxab72
 
12.07.24
09:30
(81) которое в некоторых учебниках, например у Сендова, именуют нуль-множеством.
Кроме того площадь величина не только скаляряная, она имеет знак  в зависимости от направления обхода контура... а в некоторых задачах она вообще становится вектором. но все эти мраки я уже успешно из головы выкинул.
85 Волшебник
 
12.07.24
10:11
(83) Выполните запрос:

ВЫБРАТЬ 1
ГДЕ NULL


Результат будет пустой, потому что условие ГДЕ всё отфильтровало.

Запрос эквивалентен следующему:

ВЫБРАТЬ 1
ГДЕ ЛОЖЬ


Значит NULL равно ЛОЖЬ.
86 Valdis2007
 
12.07.24
10:38
(78) Побуквоедствую тоже...


...Общность понятия «множество» дала возможность применять его в любой математической области, и практически вся математика использует язык теории множеств. Однако самому Кантору шаг обобщения дался трудно, и его идеи были встречены современниками по-разному....
87 Valdis2007
 
12.07.24
10:42
(78) Вам возможно как и Кантору процесс обобщения дается ...несколько трудно...
88 maxab72
 
12.07.24
10:51
(87) а я вообще не заморачиваюсь, и не занимаюсь обобщениями. Мне хватает того, что я про NULL узнал на теории баз данных, что при расчете среднего NULL, в отличии от 0 не учитывается. Т.е. среднее арифметическое массива {2, 0} = 1, а {2, NULL} = 2. Остальное выводится логически из этой аксиомы.
89 Ненавижу 1С
 
12.07.24
11:12
(85) Так это не работает. Ведь 2*2=4 и (-2)*(-2)=4 - из этого не следует равенство 2 и -2.
90 maxab72
 
12.07.24
11:23
ВЫБРАТЬ
    ВЫБОР КОГДА NULL = ЛОЖЬ = ИСТИНА ТОГДА "Истина" ИНАЧЕ "Ложь" КОНЕЦ КАК Ответ1,
    ВЫБОР КОГДА NULL = ЛОЖЬ = ЛОЖЬ ТОГДА "Ложь" ИНАЧЕ "Истина" КОНЕЦ КАК Ответ2,
    ВЫБОР КОГДА NULL <> ЛОЖЬ = ИСТИНА ТОГДА "Истина" ИНАЧЕ "Ложь" КОНЕЦ КАК Ответ3,
    ВЫБОР КОГДА NULL <> ЛОЖЬ = ЛОЖЬ ТОГДА "Ложь" ИНАЧЕ "Истина" КОНЕЦ КАК Ответ4

Ответы:
Ответ 1 - Ложь, т.е. NULL не равен Ложь
Ответ 2 - Истина т.е. NULL не равен Ложь
Ответ 3 - Ложь, т.е. NULL равен Ложь
Ответ 4 - Истина т.е. NULL равен Ложь
91 Волшебник
 
12.07.24
11:28
(89) Равенство не следует, но эквивалентность этих уравнений очевидна, а значит можно делать (осторожные) выводы относительно функции.

Например, если f(2)=4 и f(-2)=4, то можно предположить содержимое функции:
f(n) => n*n;

Аналогично, где-то в недрах 1С есть функция, которая в ответ на NULL возвращает ЛОЖЬ, то есть:

Секретная_Функция_Условие_ГДЕ_в_языке_запросов_1С(поле) {
 return ?(поле IS NULL, ЛОЖЬ, поле)
}
92 Ненавижу 1С
 
12.07.24
11:29
(90) у вас только две ветки при троичной логике это неверно:

ВЫБОР
  КОГДА NULL <> ЛОЖЬ = ЛОЖЬ ТОГДА "Ложь"
  КОГДА NULL <> ЛОЖЬ = ИСТИНА ТОГДА "Истина"
  ИНАЧЕ "NULL" КОНЕЦ
93 Ненавижу 1С
 
12.07.24
11:33
(91) никакой "секретной" функции нет, просто булевы предикаты сравниваются с ИСТИНА и в данном случае результаты безусловны совпадают

как вам такое, Илон Маск?

ВЫБРАТЬ
    ЛОЖЬ = NULL КАК Флаг
ПОМЕСТИТЬ Т
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Т.Флаг КАК Флаг
ИЗ
    Т КАК Т
ГДЕ
    Т.Флаг ЕСТЬ NULL
94 Волшебник
 
12.07.24
11:34
(93) Вы неправильно используете NULL. Не умеете его готовить
95 Ненавижу 1С
 
12.07.24
11:34
(94) это обычно пишут, когда аргументов нет
96 Волшебник
 
12.07.24
11:51
(95) Вот просвещайтесь



97 Eiffil123
 
12.07.24
12:01
(88) т.е. среднее от NULL вполне сработает?

upd да, работает. не учитывается при рассчете среднего. забавно
98 Ненавижу 1С
 
12.07.24
11:56
(96) я это и так знал без 1С. Это написано всюду в SQL.
Только это доказывает, что результат NULL.
99 Волшебник
 
12.07.24
11:58
(97) легко

ВЫБРАТЬ 1 КАК П
ПОМЕСТИТЬ Числа
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ NULL;

ВЫБРАТЬ СРЕДНЕЕ(П)
ИЗ Числа


Результат 1,5
100 Волшебник
 
12.07.24
11:58
(98) При чём тут SQL? Да, батенька, Вы совсем поплыли...
101 Ненавижу 1С
 
12.07.24
12:05
(100) аргументов по прежнему нет. Я про высказывание "в языке запросов 1С значение NULL дополнительно преобразуется в ЛОЖЬ"
102 maxab72
 
12.07.24
12:21
(92) "у вас только две ветки при троичной логике это неверно"
Чепуха. Нет тут никакой троичной логики. Если бы была, то чему было бы равно НЕ NULL? Если оно равно ИСТИНА, тогда НЕ НЕ NULL будет равно ЛОЖЬ, а должно быть равно, в силу обратимости операции отрицания, NULL.

Так и запишем, в логику не умеет.
103 Ненавижу 1С
 
12.07.24
12:25
(102) не null дает null
104 JanK
 
12.07.24
12:31
(85) Там второго эксперимента не хватает, который докажет что NULL это не ложь. Но если использовать как конечный предикат будет эквивалентен ложь (и null семантику не в 1c, конечно, придумали).

Второй эксперимент такой:
ВЫБРАТЬ 1
ГДЕ НЕ NULL

P.S. Я как-то для себя таблицы истинности в троичной логике выписывал, вот они (за форматирование прошу сильно не пинать):

Таблица истинности для А Или Б
      	Истина	Ложь	Null
Истина	Истина	Истина	Истина
Ложь	Истина	Ложь	Null
Null	Истина	Null	Null


Таблица истинности для А И Б
      	Истина	Ложь	Null
Истина	Истина	Ложь	Null
Ложь	Ложь	Ложь	Ложь
Null	Null	Ложь	Null
105 maxab72
 
12.07.24
12:30
(103) тогда не имеет смысла проверка IS NULL, потому что null = not null.
106 Ненавижу 1С
 
12.07.24
12:36
(105) неправда. Сравнение с null дает null
107 Eiffil123
 
12.07.24
12:53
(104) как хорошо что в 1С:Предприятие.Элемент нет пустых ссылок, вместо них только Null. Столько чудесного будет ))
108 Ненавижу 1С
 
12.07.24
13:05
(107) одумались что-ли?
109 JanK
 
12.07.24
13:07
(107) Это не так.
В элементе вместо пустых ссылок используется Неопределено (которое по сути соответствует null'у из java и т.п. и не соответствует СУБД NULL'у).
СУБД NULL'ы в элементе в пользовательских таблицах вообще отсутствует.
110 JanK
 
12.07.24
13:10
(108) Нет. Не одумались. Ну или частично.
Всё равно осталось и Неопределено (занимающее место null) и СУБД NULL (пустые ссылки убрали, да).
Конечно с определённых ракурсов идея их прировнять выглядит привлекательно, но это только если забыть про null семантику.
А если не забывать - то совсем не привлекательно. Ведь большая часть прикладных разработчиков даже не знают о существовании NULL семантики. Как они потом будут этим пользоваться?
111 Chai Nic
 
12.07.24
13:23
Хорошо что в 1с8 есть ЗначениеЗаполнено() или в семерке есть ПустоеЗначение(), которое выдает вполне конкретный ответ, независимо от философской категории пустоты.
112 Ненавижу 1С
 
12.07.24
13:28
(110) Если разработчики в 1С не знают про NULL - это печально
113 VS-1976
 
12.07.24
13:57
(96) Истина Или Null это результат оптимизации. Система считает что раз первое выражение истана и присутствует или, тогда второе условие проверять не нужно. истина или ложь = истина всегда. 11111111 or 00000000 = 11111111
114 VS-1976
 
12.07.24
13:55
(101) приведите пример преобразования, скорее всего это результат оптимизации вычисления не более того.
115 Ненавижу 1С
 
12.07.24
13:56
(114) я уже привёл два примера, показывающих, что в результате сравнения получается null
116 Valdis2007
 
12.07.24
14:03
(110) Конечно с определённых ракурсов идея их прировнять выглядит привлекательно...

это только на первый взгляд...

NULL это вынужденный компромис в реляционной теории

в отношении, содержащим кортежы,  количество атрибутов кортежа всегда дожно быть одинаковое...сответственно где-то появляются nullы

естественно это по смысло не неопределено , пустая ссылка итд итп
117 bolder
 
12.07.24
22:33
(0) Не зачет!