Запрос по остаткам

  • Автор темы rubi
  • Дата начала
R

rubi

#1
Здравствуйте. Составил простой запрос, вычисление количественных и стоимостных остатков на складе. Но проблема в том, что если у данной номенклатуры никогда не была установлена какая-либо цена, то этот артикул (в том числе с характеристикой) не попадает в итоговую выборку.
Вот запрос:
"ВЫБРАТЬ
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК НачОст,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонОст,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток*ОптовыеЦеныНоменклатур
ыСрезПоследних.Цена КАК СуммаЗакупНачало,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток*ОптовыеЦеныНоменклатуры
СрезПоследних.Цена КАК СуммаЗакупКонец,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток*РозничныеЦеныНоменклату
рыСрезПоследних.Цена КАК СуммаРеализацияНачало,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток*РозничныеЦеныНоменклату
рыСрезПоследних.Цена КАК СуммаРеализацияКонец
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
| &ДатаНач,
| &ДатаКон,
| День,
| ,
| Номенклатура В ИЕРАРХИИ (&МассивНоменклатуры)
| И Склад В ИЕРАРХИИ (&МассивСкладов)) КАК ТоварыНаСкладахОстаткиИОбороты
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон,) КАК РозничныеЦеныНоменклатурыСрезПоследних
|ПО
| РозничныеЦеныНоменклатурыСрезПоследних.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура И
| РозничныеЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон,) КАК ОптовыеЦеныНоменклатурыСрезПоследних
|ПО
| ОптовыеЦеныНоменклатурыСрезПоследних.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура И
| ОптовыеЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры
|ГДЕ ((ОптовыеЦеныНоменклатурыСрезПоследних.ТипЦен = &Оптовая) И (РозничныеЦеныНоменклатурыСрезПоследних.ТипЦен = &Розничная))

Пробовал и вместо ВНУТРЕННЕЕ СОЕДИНЕНИЕ писать ЛЕВОЕ (что по идее правильно, но результат одинаковый), и в выборе писал:

"ВЫБРАТЬ
...
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонОст,
|ВЫБОР
| КОГДА ОптовыеЦеныНоменклатурыСрезПоследних.Цена ЕСТЬ NULL
| Тогда 0
|Иначе
| ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток*ОптовыеЦеныНоменклатур
ыСрезПоследних.Цена
|КОНЕЦ КАК СуммаЗакупНачало,
...

но тоже не помогает. Подскажите, как переписать запрос, чтобы он не отсекал те записи, для которых нет цены.
 

unknown181538

НеГуру
28.12.2008
1 417
0
#2
Соединение конечно должно быть левое. Возможно условие
|ГДЕ ((ОптовыеЦеныНоменклатурыСрезПоследних.ТипЦен = &Оптовая) И (РозничныеЦеныНоменклатурыСрезПоследних.ТипЦен = &Розничная))
обрубает.
Попробуйте дописать ИЛИ(ОптовыеЦеныНоменклатурыСрезПоследних.ТипЦен ЕСТЬ NULL)
 
R

rubi

#3
Большое спасибо за совет. Условие и вправду обрубает null'овые записи, но обошел проблему по другому:

|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон, ТипЦен = &Оптовая) КАК ОптовыеЦеныНоменклатурыСрезПоследних
|ПО
| ОптовыеЦеныНоменклатурыСрезПоследних.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура И
| ОптовыеЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры

... ну и также для розничных, а условие теперь вообще не нужно. Ну а в списке выборки пришлось оставить следущее:
|ВЫБОР
| КОГДА ОптовыеЦеныНоменклатурыСрезПоследних.Цена ЕСТЬ NULL
| Тогда 0
|Иначе
| ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток*ОптовыеЦеныНоменклатур
ыСрезПоследних.Цена
|КОНЕЦ КАК СуммаЗакупНачало,

Так что, большое спасибо, проблема вроде бы решилась