Привет, нужно отобрать номенклатуру которой не было в документах "Пступление ТМЗ" за указанный период. Если пишу так(без периода) то работает как надо(выводит те номенклатуры которых нет в было в доках)
ВЫБРАТЬ
Ном.Ссылка,
ПоступлениеТоваровУслугТовары.Номенклатура
ИЗ
Справочник.Номенклатура КАК Ном
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
ПО (ПоступлениеТоваровУслугТовары.Номенклатура = Ном.Ссылка)
ГДЕ
Ном.ЭтоГруппа = &ЭтоГруппа
И ПоступлениеТоваровУслугТовары.Номенклатура ЕСТЬ NULL
Однако если добавляю так :
И ПоступлениеТоваровУслугТовары.Ссылка.Дата МЕЖДУ &Дата И &ДатаКон
(2) а не работало из-за того, что у меня было левое соединение, а когда пишем "ГДЕ" то он сначала выбирает все данные и только потом "отсекает" по условию? Из-за этого не работало?
(4) Да, условие ГДЕ по дате отсекает записи, в которых получился Null, ведь Null не находится между Дата и ДатаКон, он вообще никогда ни с чем не сравнивается. И таким образом получается (5).
Впрочем, "ПоступлениеТоваровУслугТовары.Дата МЕЖДУ &Дата И &ДатаКон" можно превратить в "(ПоступлениеТоваровУслугТовары.Дата МЕЖДУ &Дата И &ДатаКон ИЛИ ПоступлениеТоваровУслугТовары.Ссылка ЕСТЬ Null)", но это и некрасиво, и неоптимально, поэтому лучше условие переносить в связь. Хотя в редких случаях такой вариант может пригодиться.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой