Имя: Пароль:
1C
1С v8
Почему разные результаты у этих запросов?
0 Fuas4
 
12.11.13
17:37
Объясните мне, почему вот этот запрос вернет мне только те записи из регистра остатков, для которых есть установленная цена:
ВЫБРАТЬ
                          |    ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Остаток,
                          |    ТоварыНаСкладахОстатки.Номенклатура,
                          |    ТоварыНаСкладахОстатки.Номенклатура.Артикул КАК Артикул,
                          |    ЦеныНоменклатурыСрезПоследних.Цена
                          |ИЗ
                          |    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
                          |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
                          |        ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
                          |ГДЕ
                          |    ТоварыНаСкладахОстатки.Склад = &Склад
                          |    И ТоварыНаСкладахОстатки.ВНаличииОстаток > 0
                          |    И ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦены

А вот этот запрос вернет все записи из регистра остатков, даже если по ним нет установленных цен:
ВЫБРАТЬ
                | ТоварыНаСкладахОстатки.Номенклатура,
                | ТоварыНаСкладахОстатки.ВНаличииОстаток как Остаток,
                | ТоварыНаСкладахОстатки.Номенклатура.Артикул,
                | ВложенныйЗапрос.Цена
                |ИЗ
                | РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
                |  Левое СОЕДИНЕНИЕ (ВЫБРАТЬ
                |   ЦеныНоменклатуры.Цена КАК Цена,
                |   ЦеныНоменклатуры.Номенклатура КАК Номенклатура
                |  ИЗ
                |   РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
                |  ГДЕ
                |   ЦеныНоменклатуры.ВидЦены = &ВидЦены) КАК ВложенныйЗапрос
                |  ПО ТоварыНаСкладахОстатки.Номенклатура = ВложенныйЗапрос.Номенклатура
                |ГДЕ
                | ТоварыНаСкладахОстатки.Склад = &Склад
                | И ТоварыНаСкладахОстатки.ВНаличииОстаток > 0

Разве левое соединение не должно присоединять ко ВСЕЙ левой таблице записи из правой?
1 zak555
 
12.11.13
17:39
из-за

> И ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦены
2 Fuas4
 
12.11.13
17:40
(1) т.е. это условие накладывается уже на результат запроса, а не на таблицу цен?
3 zak555
 
12.11.13
17:40
ВЫБРАТЬ
                          |    ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Остаток,
                          |    ТоварыНаСкладахОстатки.Номенклатура,
                          |    ТоварыНаСкладахОстатки.Номенклатура.Артикул КАК Артикул,
                          |    ЦеныНоменклатурыСрезПоследних.Цена
                          |ИЗ
                          |    РегистрНакопления.ТоварыНаСкладах.Остатки( , Склад = &Склад) КАК ТоварыНаСкладахОстатки
                          |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
                          |        ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
4 zak555
 
12.11.13
17:40
(2) да
5 Fuas4
 
12.11.13
17:43
(4) Спасибо! Как в (3) умею, просто пытаюсь понять суть :)
6 mikecool
 
12.11.13
17:47
(5) блин, мог бы я что либо делать правильно, но нихера не понимать как - да мне бы цены не было!
7 zak555
 
12.11.13
17:48
(5) ну ты правило написал в 2
8 Fuas4
 
12.11.13
17:48
(6) Учу программировать на уровне интуиции. Дорого :)
9 Fuas4
 
12.11.13
17:49
(7) ога, понял, Еще раз спасибо!
10 mikecool
 
12.11.13
17:52
(8) не, спасибо ,я уж лучше с пониманием как нить