|
Отобрать номенклатуру (запрос)
| ☑ |
0
1ctube
24.01.18
✎
16:19
|
Привет, нужно отобрать номенклатуру которой не было в документах "Пступление ТМЗ" за указанный период. Если пишу так(без периода) то работает как надо(выводит те номенклатуры которых нет в было в доках)
ВЫБРАТЬ
Ном.Ссылка,
ПоступлениеТоваровУслугТовары.Номенклатура
ИЗ
Справочник.Номенклатура КАК Ном
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
ПО (ПоступлениеТоваровУслугТовары.Номенклатура = Ном.Ссылка)
ГДЕ
Ном.ЭтоГруппа = &ЭтоГруппа
И ПоступлениеТоваровУслугТовары.Номенклатура ЕСТЬ NULL
Однако если добавляю так :
И ПоступлениеТоваровУслугТовары.Ссылка.Дата МЕЖДУ &Дата И &ДатаКон
То вообще ничего не выводит. Как исправить?
|
|
1
Timon1405
24.01.18
✎
16:24
|
в общих чертах
Выбрать
Номенклатура.Ссылка из СпрНом...
Где НЕ Номенклатура.ссылка В (Выбрать Нужное из ТЧ товаров за период)
|
|
2
vicof
24.01.18
✎
16:24
|
И ПоступлениеТоваровУслугТовары.Ссылка.Дата МЕЖДУ &Дата И &ДатаКон
надо добавлять не в ГДЕ, а в условие соединения
|
|
3
1ctube
24.01.18
✎
16:26
|
(1) (2) спс, помогло
|
|
4
1ctube
24.01.18
✎
16:27
|
(2) а не работало из-за того, что у меня было левое соединение, а когда пишем "ГДЕ" то он сначала выбирает все данные и только потом "отсекает" по условию? Из-за этого не работало?
|
|
5
vicof
24.01.18
✎
16:43
|
Условие в ГДЕ на правую таблицу превращает левое соединение во внутреннее
|
|
6
Сти
24.01.18
✎
16:54
|
(4) Да, условие ГДЕ по дате отсекает записи, в которых получился Null, ведь Null не находится между Дата и ДатаКон, он вообще никогда ни с чем не сравнивается. И таким образом получается (5).
Впрочем, "ПоступлениеТоваровУслугТовары.Дата МЕЖДУ &Дата И &ДатаКон" можно превратить в "(ПоступлениеТоваровУслугТовары.Дата МЕЖДУ &Дата И &ДатаКон ИЛИ ПоступлениеТоваровУслугТовары.Ссылка ЕСТЬ Null)", но это и некрасиво, и неоптимально, поэтому лучше условие переносить в связь. Хотя в редких случаях такой вариант может пригодиться.
|
|
7
1ctube
24.01.18
✎
16:57
|
(6) (5) спасибо за разъяснение!
|
|