Имя: Пароль:
1C
 
условие в запросе на пустую ссылку
0 selenat
 
05.10.06
15:30
Не срабатывает
|ГДЕ
|  СделкаВзаиморасчета.Сделка<>Null";
СделкаВзаиморасчета.Сделка - поле в запросе, принимающее значения ссылок на документы разного типа. Как правильно сделать проверку на то, что оно не пустое?
1 ТелепатБот
 
гуру
05.10.06
15:30
2 igork1966
 
05.10.06
15:31
СделкаВзаиморасчета.Сделка<>&ПустоеЗначение
3 megalodon
 
05.10.06
15:34
ГДЕ
 СделкаВзаиморасчета.Сделка.Ссылка ЕСТЬ НЕ NULL
4 igork1966
 
05.10.06
15:35
(3) NULL и пустая ссылка разные вещи.
5 megalodon
 
05.10.06
15:37
(3) отловит и пустую ссылку конкретного вида, и Неопределено.
6 selenat
 
05.10.06
15:39
(2) А какое значение параметра установить для ПустоеЗначение? Ссылка ведь на объект составного типа.
7 igork1966
 
05.10.06
15:39
(5) Хм

Неопределено <> NULL
8 Defender aka LINN
 
05.10.06
15:40
(6) см (3). Прокатит.
(7) Ага, мне тоже понравилось :)
9 megalodon
 
05.10.06
15:43
(7) А NULL то нафига ловить? В (0) надо ловить или Неопределено или пустую ссылку какого либо вида.
10 selenat
 
05.10.06
15:46
С вариантом (3) у меня попадают в выборку сделки с пустым значением и типом не определено.
(2) не прокатывает, поскольку не установлен параметр.
Что делаю не так?
11 igork1966
 
05.10.06
15:47
(9) NULL то там откуда появится? Если только у него соединение
12 megalodon
 
05.10.06
15:48
"С вариантом (3) у меня попадают в выборку сделки с пустым значением и типом не определено." - м-дяя... тебе уже ничего не поможет.
13 megalodon
 
05.10.06
15:49
(11) пошевели мозгой, авось доедешь.
14 selenat
 
05.10.06
15:50
(12) Иду трассировщиком по выборке и вижу то, о чем написал в (10.1). Вижу пустое значение и тип не определено. Что я сделал не так?
15 igork1966
 
05.10.06
15:51
(6) p://www.kb.mista.ru/article.php?id=21
16 igork1966
 
05.10.06
15:52
17 igork1966
 
05.10.06
15:53
(13) NULL <> ПустаяСсылка <> Неопределено
Читай (16) внимательно.
18 megalodon
 
05.10.06
15:54
(14) текст запроса покажи
19 megalodon
 
05.10.06
15:55
(17) с этим согласен. ну и что дальше?
20 selenat
 
05.10.06
15:55
(16) т.е. должно быть что-то типа
МассивТипов = Новый Массив();
МассивТипов.Добавить(ТипЗнч(ЗначениеНеизвТипа));
ОписаниеТипов= Новый ОписаниеТипов(МассивТипов,,,);
ЗначениеПустаяСсылка = ОписаниеТипов.ПривестиЗначение(Неопределено);

|ГДЕ Поле = &ПустаяСсылка";

Запрос.УстановитьПараметр("ПустаяСсылка",ЗначениеПустаяСсылка);
?
21 igork1966
 
05.10.06
15:57
(19) СделкаВзаиморасчета.Сделка.Ссылка ЕСТЬ НЕ NULL

Ну и как это соотносится с субжем: "условие в запросе на пустую ссылку" "сделать проверку на то, что оно не пустое?"

Если это запрос к одной таблице без соединения. То твое условие будет всегда истинным и для пустых ссылок на документы и непустых.
22 selenat
 
05.10.06
15:57
(18)
        "ВЫБРАТЬ
        | ДокументыОтгрузки.Ссылка КАК ДокументОтгрузки,
        | СделкаВзаиморасчета.Сделка КАК Сделка
        |ИЗ
        | Документ.РеализацияТоваровУслуг КАК ДокументыОтгрузки
        |ВНУТРЕННЕЕ СОЕДИНЕНИЕ                    
            |  (ВЫБРАТЬ
        |      Взаиморасчеты.Сделка,
        |      Взаиморасчеты.Регистратор
        |   ИЗ
        |      РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(&ДатаНач,&ДатаКон,Запись,) КАК Взаиморасчеты
        |   ГДЕ
        |      Взаиморасчеты.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее
        |   ОБЪЕДИНИТЬ
        |    ВЫБРАТЬ
        |      ВзаиморасчетыК.Сделка,
        |      ВзаиморасчетыК.Регистратор
        |   ИЗ
        |      РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(&ДатаНач,&ДатаКон,Запись,) КАК ВзаиморасчетыК
        |  ГДЕ
        |    ВзаиморасчетыК.Регистратор ССЫЛКА Документ.ОтчетКомиссионераОПродажах
        |    И ВзаиморасчетыК.Регистратор.ЧекПробитНаККМ=Ложь
        |  ) КАК СделкаВзаиморасчета
        |ПО
        |  ДокументыОтгрузки.Ссылка.Сделка=СделкаВзаиморасчета.Сделка
        |ГДЕ
        |  ДокументыОтгрузки.Ссылка.Проведен = Истина
        |  И СделкаВзаиморасчета.Сделка ЕСТЬ НЕ NULL";
23 igork1966
 
05.10.06
16:02
Ну вот видишь, у него Внутреннее соединение. "СделкаВзаиморасчета.Сделка" никогда не будет NULL.
Условие "СделкаВзаиморасчета.Сделка ЕСТЬ НЕ NULL" всегда Истина. ПОсему бесполезно.
24 megalodon
 
05.10.06
16:03
(21) дятел ты, igork1966. Разыменовывание через точку и есть левое соединение. И если СделкаВзаиморасчета.Сделка будет или Неопределено, или пустая ссылка, то значение СделкаВзаиморасчета.Сделка.Ссылка один хрен будет NULL. Учи матчасть.
(22) ты тоже дятел. тебе сказано написать
ГДЕ
СделкаВзаиморасчета.Сделка.Ссылка ЕСТЬ НЕ NULL

а ты написал
ГДЕ
СделкаВзаиморасчета.Сделка ЕСТЬ НЕ NULL
25 selenat
 
05.10.06
16:04
(23) А как правильно это сделать?
26 selenat
 
05.10.06
16:11
(24.2) Кажется получилось. Спасибо! Щас буду более внимательно проверять...
27 igork1966
 
05.10.06
16:11
(24)  Блин пропустил ".Ссылка". Сорри.
Однако вопрос (давно не занимался 8кой), разве так прокатит "СделкаВзаиморасчета.Сделка.Ссылка", если сделка это составной тип?
28 megalodon
 
05.10.06
16:12
(27) а че бы нет то? от нефига делать.
29 igork1966
 
05.10.06
16:15
(28) Блин тормознул тогда я, сорри уж полгода не занимался 8кой + да и занимался совсем немного.
30 megalodon
 
05.10.06
16:16
(29) ну и ты меня прости тогда.
31 selenat
 
05.10.06
16:19
(30) Еще раз спасибо, что пнул в нужную сторону.
32 megalodon
 
05.10.06
16:25
(31) кстати, есть один ньюанс: битые ссылки при таком сравнении примутся за пустые. так что если это критично надо поменять.
41 selenat
 
05.10.06
16:42
(32) Думаю, если битые будут - по отчетам вылезет и будем с ними индивидуально разбираться. Не такое частое явление ИМХО.