Имя: Пароль:
 
1C
1С v8
Проверка на NULL в запросе
0 Dmitri446
 
30.11.17
22:15
Помогите добавить проверки на null, не могу допереть как ее сделать, точнее что вместо null выводить если он есть

ВЫБРАТЬ
    |    КонтактныеЛица.Владелец КАК Владелец,
    |    ВЫБОР
    |        КОГДА КонтактныеЛица.РабМесто <> ЗНАЧЕНИЕ(Справочник.РабочиеМеста.ПустаяСсылка)
    |            ТОГДА КонтактныеЛица.РабМесто
    |        ИНАЧЕ Сотрудники.РабочееМесто
    |    КОНЕЦ КАК РабочееМесто
    |ИЗ
    |    Справочник.КонтактныеЛица КАК КонтактныеЛица
    |        ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
    |        ПО КонтактныеЛица.ФизЛицо = Сотрудники.ФизЛицо
    |ГДЕ
    |    (Сотрудники.ФизЛицо.Ссылка = &Ссылка
    |            ИЛИ КонтактныеЛица.ФизЛицо.Ссылка = &Ссылка)
1 hhhh
 
30.11.17
22:22
(0) используй ЕСТЬNULL
2 jsmith82
 
30.11.17
22:26
ЕСТЬNULL(КонтактныеЛица.РабМесто, Сотрудники.РабочееМесто)
3 Мисти
 
30.11.17
23:19
Ну вот, как я знаю ответ - так и тут отвечают два сразу!
А как я не знаю ответ, так мне все объясняют, что я дура вместо ответа.
4 Лефмихалыч
 
30.11.17
23:21
во-первых, "ПОЛНОЕ" замени на "ВНУТРЕННЕЕ"
во-вторых, в данном случае не может у тебя запрос NULL вернуть как раз потому, что соединение в любом случае внутреннее
5 Лефмихалыч
 
30.11.17
23:22
(3) просто у вас вопрос скучный
6 vi0
 
01.12.17
05:46
(0) а что ты хочешь в результате?
какую задачу решаешь?
7 pasha_d
 
01.12.17
10:16
хочешь Null - используй левое соединение
8 dezss
 
01.12.17
11:02
(7) с фига ли?
при полном как раз будут null`ы.
9 HEKPOH
 
01.12.17
11:03
(8) и при полном, и при левом, и при правом
10 Ненавижу 1С
 
01.12.17
11:04
(9) иногда NULL бывает вообще в одной таблице без соединений
11 Ц_У
 
01.12.17
11:07
(3) переведу (5)
у вас профиль скучный :)
12 hhhh
 
01.12.17
11:09
(8) имеется в виду, что при условии

|ГДЕ
    |    (Сотрудники.ФизЛицо.Ссылка = &Ссылка
    |            ИЛИ КонтактныеЛица.ФизЛицо.Ссылка = &Ссылка)

не будет null
13 dezss
 
01.12.17
11:13
(12) а если полное переписать на левое, то типа будут?)))

При таком условии будут null`ы, если в одном из справочников нет ссылки на это физ. лицо.
14 dezss
 
01.12.17
11:15
(13) + кстати, КонтактныеЛица.Владелец тоже может быть null`ом)
15 hhhh
 
01.12.17
11:17
(13) null-ов не будет, они отбросятся при выполнении условия в ГДЕ. Об этом и говорит (4)
16 Buster007
 
01.12.17
11:19
(3) это потому, что у тебя фотки нет )
17 dezss
 
01.12.17
11:19
(15) и куда ж они отбросятся при соединении?
что будет в КонтактныеЛица.Владелец, если КонтактныеЛица.ФизЛицо.Ссылка = &Ссылка будет ложью?
18 Dmitrii
 
01.12.17
11:21
(15) >> null-ов не будет, они отбросятся

Перечитай еще раз запрос.
Ничего там не отбросится
19 hhhh
 
01.12.17
11:21
(17) этой строчки вообще не будет, она не пройдет через ГДЕ
20 hhhh
 
01.12.17
11:22
(18) всё отбросится, это следует из аксиомы

Х ИЛИ NULL = ЛОЖЬ
21 dezss
 
01.12.17
11:23
(19) т.е. ты хочешь сказать, что КонтактныеЛица.Владелец, который описан после ВЫБРАТЬ не будет присутствовать в результате запроса? О_о

мда...пятница, кому-то пора отдохнуть)))
22 dezss
 
01.12.17
11:23
(20) е-мое....
т.е. ты хочешь сказать, что условие КонтактныеЛица.ФизЛицо.Ссылка = &Ссылка вернет Null? О_О
23 undertaker
 
01.12.17
11:24
(11) а у Dmitri446 он не скучный? о_О
24 dezss
 
01.12.17
11:26
(23) ОФФ: он мужик...кто будет просить фотку у мужика)))
25 Dmitrii
 
01.12.17
11:27
(4) >> во-первых, "ПОЛНОЕ" замени на "ВНУТРЕННЕЕ"

Сильно сомневаюсь, что тут нужно ВНУТРЕННЕЕ соединение.
Скорее всего, ЛЕВОЕ. Но оно не избавит от NULL.
26 dezss
 
01.12.17
11:28
(25) а разве в постановке вопроса была задача избавиться от null`а?
вроде ж спросили только про проверку и в (1) и (2) получили ответ на вопрос
27 Dmitri446
 
01.12.17
11:28
Переделал под левое, но с NULL до сих пор чет не врублюсь

ВЫБРАТЬ
    |    ЕСТЬNULL(КонтактныеЛица.Владелец, ЗНАЧЕНИЕ(Справочник.ИТ_КонтактныеЛица.ПустаяСсылка)) КАК Владелец,
    |    ВЫБОР
    |        КОГДА КонтактныеЛица.РабМесто <> ЗНАЧЕНИЕ(Справочник.ИТ_РабочиеМеста.ПустаяСсылка)
    |            ТОГДА КонтактныеЛица.РабМесто
    |        ИНАЧЕ Сотрудники.РабочееМесто
    |    КОНЕЦ КАК РабочееМесто
    |ИЗ
    |    Справочник.ИТ_КонтактныеЛица КАК КонтактныеЛица
    |        ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
    |        ПО КонтактныеЛица.ФизЛицо = Сотрудники.ФизЛицо
    |ГДЕ
    |    Сотрудники.ФизЛицо.Ссылка = &Ссылка
    |    И НЕ Сотрудники.ФизЛицо ЕСТЬ NULL
    |
    |ОБЪЕДИНИТЬ
    |
    |ВЫБРАТЬ
    |    КонтактныеЛица.Владелец,
    |    ВЫБОР
    |        КОГДА КонтактныеЛица.РабМесто <> ЗНАЧЕНИЕ(Справочник.ИТ_РабочиеМеста.ПустаяСсылка)
    |            ТОГДА КонтактныеЛица.РабМесто
    |        ИНАЧЕ Сотрудники.РабочееМесто
    |    КОНЕЦ
    |ИЗ
    |    Справочник.ИТ_КонтактныеЛица КАК КонтактныеЛица
    |        ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
    |        ПО КонтактныеЛица.ФизЛицо = Сотрудники.ФизЛицо
    |ГДЕ
    |    КонтактныеЛица.ФизЛицо.Ссылка = &Ссылка
    |    И НЕ Сотрудники.ФизЛицо ЕСТЬ NULL
28 dezss
 
01.12.17
11:30
(27) в чем конкретно косяк?
какие тебя не устраивают данные?
29 Dmitrii
 
01.12.17
11:32
(27) >> Переделал под левое

Где? В запросе везде ПОЛНОЕ.

У тебя каша в голове.
Скажу уже наконец - что тебе именно надо.
30 hhhh
 
01.12.17
11:32
(27) так может

   |ГДЕ
    |    Сотрудники.ФизЛицо.Ссылка = &Ссылка
    |    И НЕ КонтактныеЛица.ФизЛицо ЕСТЬ NULL
31 Ненавижу 1С
 
01.12.17
11:33
(27)

Сотрудники.ФизЛицо.Ссылка = &Ссылка
И НЕ Сотрудники.ФизЛицо ЕСТЬ NULL

это ПЯТНИЦА!
32 Dmitri446
 
01.12.17
11:33
Не тот код скинул...

В общем мне нужно при выборе физ лица если у него есть контактное лицо выбрать раб место контактного лица, если контактного лица нету то выбрать рабочее место сотрудника и наоборот
33 Ц_У
 
01.12.17
11:34
(23) от пола зависит
34 Dmitri446
 
01.12.17
11:34
ВЫБРАТЬ
        КонтактныеЛица.Владелец,
        ВЫБОР
            КОГДА КонтактныеЛица.РабМесто <> ЗНАЧЕНИЕ(Справочник.ИТ_РабочиеМеста.ПустаяСсылка)
                ТОГДА КонтактныеЛица.РабМесто
            ИНАЧЕ Сотрудники.РабочееМесто
        КОНЕЦ КАК РабочееМесто
    ИЗ
        Справочник.ИТ_КонтактныеЛица КАК КонтактныеЛица
            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
            ПО КонтактныеЛица.ФизЛицо = Сотрудники.ФизЛицо
    ГДЕ
        Сотрудники.ФизЛицо.Ссылка = &Ссылка
        И НЕ Сотрудники.ФизЛицо ЕСТЬ NULL
    
    ОБЪЕДИНИТЬ
    
    ВЫБРАТЬ
        КонтактныеЛица.Владелец,
        ВЫБОР
            КОГДА КонтактныеЛица.РабМесто <> ЗНАЧЕНИЕ(Справочник.ИТ_РабочиеМеста.ПустаяСсылка)
                ТОГДА КонтактныеЛица.РабМесто
            ИНАЧЕ Сотрудники.РабочееМесто
        КОНЕЦ
    ИЗ
        Справочник.ИТ_КонтактныеЛица КАК КонтактныеЛица
            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
            ПО КонтактныеЛица.ФизЛицо = Сотрудники.ФизЛицо
    ГДЕ
        КонтактныеЛица.ФизЛицо.Ссылка = &Ссылка
        И НЕ Сотрудники.ФизЛицо ЕСТЬ NULL
35 hhhh
 
01.12.17
11:35
(29) условие в ГДЕ

  |ГДЕ
    |    (Сотрудники.ФизЛицо.Ссылка = &Ссылка

вревращает ПОЛНОЕ СОЕДИНЕНИЕ в ЛЕВОЕ

идем дальше, вторая строчка

  |            ИЛИ КонтактныеЛица.ФизЛицо.Ссылка = &Ссылка)

превращает ЛЕВОЕ СОЕДИНЕНИЕ во ВНУТРЕННЕЕ.

то есть в запросе (0) фактически внутреннее соединение   ????
36 dezss
 
01.12.17
11:42
(35) Не совсем так. Не забывай, тут ИЛИ, а не И. Если было бы И, то ты был бы прав.

Вместо
       ВЫБОР
            КОГДА КонтактныеЛица.РабМесто <> ЗНАЧЕНИЕ(Справочник.ИТ_РабочиеМеста.ПустаяСсылка)
                ТОГДА КонтактныеЛица.РабМесто
            ИНАЧЕ Сотрудники.РабочееМесто
        КОНЕЦ

Напиши
ЕстьNull(КонтактныеЛица.РабМесто,Сотрудники.РабочееМесто).
Но если оба будут null, то тут тоже будет null.
И, кстати ЗНАЧЕНИЕ(Справочник.ИТ_РабочиеМеста.ПустаяСсылка) <> Null, запомни это очень хорошо!!!
37 dezss
 
01.12.17
11:44
(36) Вторая часть, которая после "Вместо..." для (34)
38 Dmitrii
 
01.12.17
11:45
(35) Если бы тыл прав, то проблемы в (0) не было бы.

А если вникнуть в текст условия ГДЕ, то ты увидишь там "ИЛИ". То есть никакого превращение во ВНУТРЕННЕЕ соединение не произойдёт.
39 dezss
 
01.12.17
11:47
(0) Блин, проще написать, чем объяснить ТС-у...может сам разберется)))
    |ВЫБРАТЬ
    |    ЕСТЬNULL(КонтактныеЛица.Владелец, ЗНАЧЕНИЕ(Справочник.ИТ_КонтактныеЛица.ПустаяСсылка)) КАК Владелец,
    |    ЕстьNull(КонтактныеЛица.РабМесто,Сотрудники.РабочееМесто) КАК РабочееМесто
    |ИЗ
    |    Справочник.ИТ_КонтактныеЛица КАК КонтактныеЛица
    |        ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
    |        ПО КонтактныеЛица.ФизЛицо = Сотрудники.ФизЛицо
    |ГДЕ
    |    Сотрудники.ФизЛицо.Ссылка = &Ссылка
    |    ИЛИ КонтактныеЛица.ФизЛицо.Ссылка = &Ссылка
40 MaxS
 
01.12.17
12:09
Зачем нужны эти ФизЛицо.Ссылка = &Ссылка ?
почему не ФизЛицо = &Ссылка ?
41 dezss
 
01.12.17
12:13
(40) нафиг не нужны...я просто копипастил из запроса тс
42 Мимохожий Однако
 
01.12.17
12:20
(3) ОФФ: Правда матку режет.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn