|
про НЕОПРЕДЕЛЕНО в запросе | ☑ | ||
---|---|---|---|---|
0
ДядяМитяй
29.11.21
✎
17:20
|
Объясните мне необъяснимое.
Суть вкратце в том, что надо получить дату из регистра сведений. Но если записи в регистре с нужным отбором нет вообще, то дату берем из справочника. И вот пишем ВЫБРАТЬ Машины.Ссылка КАК Машина ВЫБОР КОГДА СостоянияМашинСрезПоследних.Регистратор = НЕОПРЕДЕЛЕНО ТОГДА Машины.ДатаНачалаЭксплуатации ИНАЧЕ СостоянияМашинСрезПоследних.Регистратор.ДатаКон КОНЕЦ КАК ДатаД ИЗ Справочник.Машины КАК Машины ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияМашин.СрезПоследних(&дата) КАК СостоянияМашинСрезПоследних ПО (СостоянияМашинСрезПоследних.Машина = Машины.Ссылка) ГДЕ Машины.Ссылка = &Машина На Машине, не имеющей записей в регистре не работает, то есть из справочника дату не берет. НО! Если написать ВЫБРАТЬ Машины.Ссылка КАК Машина ВЫБОР КОГДА СостоянияМашинСрезПоследних.Регистратор <> НЕОПРЕДЕЛЕНО ТОГДА СостоянияМашинСрезПоследних.Регистратор.ДатаКон ИНАЧЕ Машины.ДатаНачалаЭксплуатации КОНЕЦ КАК ДатаД ИЗ Справочник.Машины КАК Машины ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияМашин.СрезПоследних(&дата) КАК СостоянияМашинСрезПоследних //, Машина = &Машина ПО (СостоянияМашинСрезПоследних.Машина = Машины.Ссылка) ГДЕ Машины.Ссылка = &Машина Тогда все отрабатывает как задумано. Что это значит? |
|||
1
pechkin
29.11.21
✎
17:21
|
познай разницу NULL и Неопределено
|
|||
2
PuhUfa
29.11.21
✎
17:23
|
(0) а при чем тут неопределено?
|
|||
3
mikecool
29.11.21
✎
17:25
|
(2) +1
|
|||
4
ДядяМитяй
29.11.21
✎
17:26
|
(2) потому что левое соединение. там в консоли пустая строчка, в регистраторе значение Неопределено
|
|||
5
Dmitrii
гуру
29.11.21
✎
17:28
|
Замени строку с ВЫБОР <бла...бла> на строку ЕСТЬNULL(СостоянияМашинСрезПоследних.Регистратор.ДатаКон, Машины.ДатаНачалаЭксплуатации).
И кстати вариант два не может работать как задумано, т.к. условие СостоянияМашинСрезПоследних.Регистратор <> НЕОПРЕДЕЛЕНО выполнится для любой строки, где есть нормальный Регистратор. |
|||
6
ДядяМитяй
29.11.21
✎
17:28
|
(1) Пробовал там где ВЫБОР заменить на ЕСТЬNULL - не работает. Собственно, с этого и начинал. Потом в консоли увидел, что там НЕОПРЕДЕЛНО
|
|||
7
RomanYS
29.11.21
✎
17:30
|
(6) если регистр подчинен регистратору, то неопределенно там быть НЕ МОЖЕТ.
Точнее может, но это точно косяк в данных. |
|||
8
ДядяМитяй
29.11.21
✎
17:31
|
(5) в этом и смысл. Если есть регистратор, значит есть запись регистра, если есть запись регистра, значит дату берем из регистратора
|
|||
9
PuhUfa
29.11.21
✎
17:32
|
(4) ну давай покажи нам чисто срез последних по твоей машине
|
|||
10
ДядяМитяй
29.11.21
✎
17:37
|
(7) (9) чисто срез последних - ничего нет, то есть null, если удастся к этому обратиться. А в случае соединения со спрвочником - неопределено
|
|||
11
PuhUfa
29.11.21
✎
17:38
|
(4) это "потому что" https://its.1c.ru/db/pubqlang/content/45/hdoc
|
|||
12
ДядяМитяй
29.11.21
✎
17:41
|
Вопрос-то не в том, а почему при Неопределено сравнение на равенство работает, а на неравенство - нет.
|
|||
13
ДядяМитяй
29.11.21
✎
17:42
|
(12) ну то есть наоборот. на неравенство работает
|
|||
14
pechkin
29.11.21
✎
17:43
|
сравнение с NULL всегда ложь
|
|||
15
ДядяМитяй
29.11.21
✎
17:44
|
(14) это к чему? там нигде нет NULL. Там Неопределено и пустая дата
|
|||
16
PuhUfa
29.11.21
✎
17:49
|
(15) если у тебя там неопределено и пустая дата - значит у тебя есть какой то срез. если у тебя среза нет то тогда там null. ну или ты там просто чего то не договаривашь.
|
|||
17
fisher
29.11.21
✎
17:54
|
(15) Нету там Неопределено. Не может быть записи РС подчиненного регистратору с Неопределено в регистраторе. А если нет записи по условию соединения, то там Null будет.
|
|||
18
Kassern
29.11.21
✎
18:01
|
(0) Самый простой пример. Решили вы изменить структуру справочника/регистра и добавили реквизит с типом булево. Для некоторых новых объектов вы даже его заполнили и потом бац и решили сделать простенький запрос: ВашОбъект.РеквизитБулево=Ложь в надежде, что все строки, где нет галочки у вас отберутся (ведь у булево всего же 2 значения...). На этом моменте вы познаете, что "Не Истина" не всегда равно "Ложь"))
По вашему топику, в запросах используйте ЕстьNull(Таблица.НужноеПоле,ЗначениеЕслиНул). В этом случае у вас выбор будет работать корректно. |
|||
19
Жан Пердежон
29.11.21
✎
18:02
|
запрос всё-равно попахивает, эта дата в регистре должна быть
|
|||
20
Жан Пердежон
29.11.21
✎
18:18
|
(15) почитай что такое NULL и откуда оно в запросах берется
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |