|
Тривиальный запрос выдает не все записи - штрихкоды номенклатуры ТЧ документа | ☑ | ||
---|---|---|---|---|
0
vdeemer
23.07.19
✎
08:56
|
Доброго времени суток!
Задача простая - вывести все строки ТЧ документа(ов) Реализация Товаров и Услуг с некоторым отбором (в запросе - проведенные за период по определенному контрагенту) и с выбранным типом штрихкодов. [code] ВЫБРАТЬ РеализацияТоваровУслугТовары.Ссылка, РеализацияТоваровУслугТовары.НомерСтроки КАК НомерСтроки, РеализацияТоваровУслугТовары.Номенклатура, РеализацияТоваровУслугТовары.ЕдиницаИзмерения, Штрихкоды.Штрихкод, РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды ПО РеализацияТоваровУслугТовары.Номенклатура = Штрихкоды.Владелец И РеализацияТоваровУслугТовары.ЕдиницаИзмерения = Штрихкоды.ЕдиницаИзмерения И РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры = Штрихкоды.ХарактеристикаНоменклатуры ГДЕ РеализацияТоваровУслугТовары.Ссылка.Проведен = ИСТИНА И РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаНачала, ДЕНЬ) И КОНЕЦПЕРИОДА(&ДатаОкончания, ДЕНЬ) И РеализацияТоваровУслугТовары.Ссылка.Контрагент = &Контрагент И Штрихкоды.ТипШтрихкода = &ТипШтрихкода [/code] По идее, левое соединение должно вывести все строки ТЧ и - если таковые имеются - штрихкоды указанного типа. Почему-то выдаются только те строки ТЧ, для которых есть ШК выбранного типа. Что я делаю не так? Спасибо. |
|||
1
ДенисЧ
23.07.19
✎
08:58
|
Условия из ГДЕ в ПО перенеси
|
|||
2
Admin_Net_1C
23.07.19
✎
08:59
|
Этот блок условия:
И Штрихкоды.ТипШтрихкода = &ТипШтрихкода перенести в связь левого соединения и Штрихкоды.Штрихкод, заменить на ЕСТЬNULL(Штрихкоды.Штрихкод, "") |
|||
3
vdeemer
23.07.19
✎
09:02
|
на выходе те же яйца, только в профиль(( |
|||
4
vdeemer
23.07.19
✎
09:07
|
(3) прошу прощения, кофе не успело сделать свою работу - все работает, как и надо))
Спасибо! А почему такое поведение? |
|||
5
ДенисЧ
23.07.19
✎
09:09
|
(4) Поптому что условие Штрихкоды.ТипШтрихкода = &ТипШтрихкода в первом варианте запросто превращается в NULL = &ТипШтрихкода , а это всегда ложь
|
|||
6
vdeemer
23.07.19
✎
09:11
|
(5) #векжививекучисьадуракомпомрешь
Спасибо! |
|||
7
Lama12
23.07.19
✎
09:14
|
(4) потому что ты накладываешь условие на правую таблицу. Что б его выполнить нужно выбрать значения которые позволяют сделать разъименования поля "Штрихкоды", а оно Null. Поэтому выполняется как бы внутренний запрос. Не уверен что это верно с точки зрения SQL, но так d 1C работает. А когда условие в соединении, то тут условие накладывается на правую таблицу пока она еще не связана с левой, и условие отрабатывается до соединения.
Думаю В ГДЕ можно было б поставить следующую конструкцию ВЫБОР КОГДА Штрихкоды.ТипШтрихкода ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ Штрихкоды.ТипШтрихкода = &ТипШтрихкода Это вместо Штрихкоды.ТипШтрихкода = &ТипШтрихкода |
|||
8
pasha_d
23.07.19
✎
09:22
|
(3) ты этим не левое, а внутренне соединение делаешь..
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |