Имя: Пароль:
1C
 
Как правильно работать с NULL при возврате МАКСИМУМ
0 slitov
 
26.09.17
15:50
Добрый день коллеги, тут параллельно готовлюсь к сертификации на спеца, по основной работе необходимо написать функцию, которая возвращает либо число, либо 0. Но если в запросе использовать МАКСИМУМ, тогда ЕСТЬNULL(..., ...) не отрабатывает. Как правильно обработать данные в таком запросе:

ВЫБРАТЬ
    МАКСИМУМ(ЕСТЬNULL(яШтрихКодыПаллет.НомерПаллеты, 0)) КАК НомерПаллеты
ИЗ
    Справочник.яШтрихКодыПаллет КАК яШтрихКодыПаллет
ГДЕ
    яШтрихКодыПаллет.Дата = &Дата
    И яШтрихКодыПаллет.НомерСмены = &НомерСмены
    И яШтрихКодыПаллет.Владелец = &Владелец


1. Положить запрос во временную таблицу и во втором запросе проверить на NULL
2. Или далее в условии если произвести сравнение ВыборкаДетальныеЗаписи.НомерПаллеты = NULL (проверил, возвращает истину)

Насколько я знаю, NULL нельзя сравнивать. Подскажите как лучше поступить, вдруг на экзамене придется делать такой запрос.
1 Ёпрст
 
26.09.17
15:53
(0) дык, там null-а никогда не будет. Какой смысл пихать туда ЕстьNULL ?
2 slitov
 
26.09.17
15:54
(1) Ну эт понятно, как правильно тогда выполнить то?
3 Ёпрст
 
26.09.17
15:56
(2) НомерПаллеты, тип Число ? Составной тип ?
4 Ёпрст
 
26.09.17
15:57
если число, то просто Максимум(НомерПаллеты) как НомерПаллеты.
усё
5 slitov
 
26.09.17
15:57
Номер это число
6 Филиал-msk
 
26.09.17
15:58
(1) Будет, если выборка пустая
7 Филиал-msk
 
26.09.17
15:58
В смысле вся колонка, не аргумент максимума
8 slitov
 
26.09.17
15:59
(4) Долее мне надо вернуть значение 0 из функции, как правильно обработать результат? Не раз слышал, что NULL сравнивать нельзя.
9 Ёпрст
 
26.09.17
16:00
(8)
Выборка = Запрос.Выполнить().Выбрать():
Если Выборка.Следующий() Возврат Выборка.НомерПалетты;КонецЕсли;
Возврат 0;
10 slitov
 
26.09.17
16:03
(6) Нифига вот что имею:
РезультатЗапроса.Пустой()    Ложь    Булево
(9) Так в выборке есть одно значение, которое NULL, тогда выборка NULL и вернет (((
11 Ёпрст
 
26.09.17
16:05
(10)
да ё
Возврат ?(ЗначениеЗаполнено(Выборка.НомерПалетты,Выборка.НомерПалетты,0);
12 Филиал-msk
 
26.09.17
16:06
(10) ЕСТЬNULL(МАКСИМУМ(яШтрихКодыПаллет.НомерПаллеты), 0)
13 Филиал-msk
 
26.09.17
16:07
У тебя под условия отбора не попадает ни одна строка, поэтому максимум на пустой выборке возвращает тебе null
14 mehfk
 
26.09.17
16:11
(0) Убери агрегатную функцию и сделай упорядочить по НомерПаллеты убыв
15 mehfk
 
26.09.17
16:12
+ первые 1
16 slitov
 
26.09.17
16:16
(11) Спасибо, мне кажется так правильней всего.
(12) Хотя и этот вариант рабочий
(14) И это тоже хороший вариант
Совсем запутался, какой вариант из всех оптимальнее )))
17 Cyberhawk
 
26.09.17
16:27
+(12)
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.