Имя: Пароль:
1C
1С v8
Помогите с запросом
0 Alex-tlt
 
09.07.18
14:41
Суть такая. У меня есть два документа (РН и ДЗ). Надо сравнить номенклатуру и выбрать из ДЗ только те, которых нет в РН. Пишу такой запрос.

ВЫБРАТЬ
    ДополнительныеЗатратыСписокНоменклатуры.Номенклатура КАК Номенклатура
ИЗ
    Документ.ДополнительныеЗатраты.СписокНоменклатуры КАК ДополнительныеЗатратыСписокНоменклатуры,
    Документ.РасходнаяНакладная КАК РасходнаяНакладная
ГДЕ
    ДополнительныеЗатратыСписокНоменклатуры.Ссылка = &СсылкаДок
    И ДополнительныеЗатратыСписокНоменклатуры.Номенклатура <> РасходнаяНакладная.СписокНоменклатуры.Номенклатура
    И РасходнаяНакладная.СписокНоменклатуры.Ссылка = &Ссылка

Если в условии делаю проверку на равенство, то все работает, но мне нужна не совпадающая номенклатура в документах, а наоборот. Ставлю <> и запрос выдает мне всю номенклатуру ДЗ.
Что я не так делаю? Подскажите пожалуйста.
1 novichok79
 
09.07.18
14:42
(0) ДЗ левое соединение РН по ДЗ.Номенклатура = РН.Номенклатура Где РН.Номенклатура Есть NULL
2 Малыш Джон
 
09.07.18
14:43
Ты все не так делаешь)

Используй левое соединение и поставь условие, где значение из правой таблицы есть null
3 Alex-tlt
 
09.07.18
14:47
Спасибо, сейчас попробую. Пробовал соединениями, но на нулл не проверял.

Малыш Джон, а можешь сказать как правильно сделать?
А то я только разбираюсь, и многое не знаю...
4 AceVi
 
09.07.18
14:53
Документ.ДополнительныеЗатраты.СписокНоменклатуры КАК  ДополнительныеЗатратыСписокНоменклатуры  ЛЕВОЕ СОЕДИНЕНИЕ ДополнительныеЗатратыСписокНоменклатуры,
    Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладная
ПО ДополнительныеЗатратыСписокНоменклатуры.Номенклатура = РасходнаяНакладная.Номенклатура
ГДЕ РасходнаяНакладная.Номенклатура ЕСТЬ NULL
5 Alex-tlt
 
09.07.18
15:06
ВЫБРАТЬ
    ДополнительныеЗатратыСписокНоменклатуры.Номенклатура КАК Номенклатура
ИЗ
    Документ.ДополнительныеЗатраты.СписокНоменклатуры КАК ДополнительныеЗатратыСписокНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
        ПО ДополнительныеЗатратыСписокНоменклатуры.Номенклатура = РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
ГДЕ
    ДополнительныеЗатратыСписокНоменклатуры.Ссылка = &СсылкаДок
    И РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
    И РасходнаяНакладнаяСписокНоменклатуры.Номенклатура ЕСТЬ NULL

Вот, что получилось. Но теперь запрос ничего не выдает. Пустая ТЗ.
6 crasler
 
09.07.18
15:13
Попробуй так

ВЫБРАТЬ
    ДополнительныеЗатратыСписокНоменклатуры.Номенклатура КАК Номенклатура
ИЗ
    Документ.ДополнительныеЗатраты.СписокНоменклатуры КАК ДополнительныеЗатратыСписокНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
        ПО ДополнительныеЗатратыСписокНоменклатуры.Номенклатура = РасходнаяНакладнаяСписокНоменклатуры.Номенклатура И РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
ГДЕ
    ДополнительныеЗатратыСписокНоменклатуры.Ссылка = &СсылкаДок
    И РасходнаяНакладнаяСписокНоменклатуры.Номенклатура ЕСТЬ NULL
7 Alex-tlt
 
09.07.18
15:17
crasler спасибо!!! Все сразу заработало! А почему так? Можно объяснить вкратце, если не сложно
8 Alex-tlt
 
09.07.18
15:17
Ведь по сути то запросы, которые предлагали тоже должны были работать
9 crasler
 
09.07.18
15:26
Предыдущий запрос работал только если бы допустим был только один документ ДЗ и один РН, т.к. условие после ГДЕ обрабатывается уже после соединения таблиц.
10 Alex-tlt
 
09.07.18
15:28
Спасибо! Теперь понятно.