Запрос
06.06.2009
16:29
#1
Здравствуйте. Составил простой запрос, вычисление количественных и стоимостных остатков на складе. Но проблема в том, что если у данной номенклатуры никогда не была установлена какая-либо цена, то этот артикул (в том числе с характеристикой) не попадает в итоговую выборку.
Вот запрос:
"ВЫБРАТЬ
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК НачОст,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонОст,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток*ОптовыеЦеныНоменклатурыСрезПоследних.Цена КАК СуммаЗакупНачало,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток*ОптовыеЦеныНоменклатурыСрезПоследних.Цена КАК СуммаЗакупКонец,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток*РозничныеЦеныНоменклатурыСрезПоследних.Цена КАК СуммаРеализацияНачало,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток*РозничныеЦеныНоменклатурыСрезПоследних.Цена КАК СуммаРеализацияКонец
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
| &ДатаНач,
| &ДатаКон,
| День,
| ,
| Номенклатура В ИЕРАРХИИ (&МассивНоменклатуры)
| И Склад В ИЕРАРХИИ (&МассивСкладов)) КАК ТоварыНаСкладахОстаткиИОбороты
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон,) КАК РозничныеЦеныНоменклатурыСрезПоследних
|ПО
| РозничныеЦеныНоменклатурыСрезПоследних.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура И
| РозничныеЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон,) КАК ОптовыеЦеныНоменклатурыСрезПоследних
|ПО
| ОптовыеЦеныНоменклатурыСрезПоследних.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура И
| ОптовыеЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры
|ГДЕ ((ОптовыеЦеныНоменклатурыСрезПоследних.ТипЦен = &Оптовая) И (РозничныеЦеныНоменклатурыСрезПоследних.ТипЦен = &Розничная))
Пробовал и вместо ВНУТРЕННЕЕ СОЕДИНЕНИЕ писать ЛЕВОЕ (что по идее правильно, но результат одинаковый), и в выборе писал:
"ВЫБРАТЬ
...
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонОст,
|ВЫБОР
| КОГДА ОптовыеЦеныНоменклатурыСрезПоследних.Цена ЕСТЬ NULL
| Тогда 0
|Иначе
| ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток*ОптовыеЦеныНоменклатурыСрезПоследних.Цена
|КОНЕЦ КАК СуммаЗакупНачало,
...
но тоже не помогает. Подскажите, как переписать запрос, чтобы он не отсекал те записи, для которых нет цены.
Вот запрос:
"ВЫБРАТЬ
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК НачОст,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонОст,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток*ОптовыеЦеныНоменклатурыСрезПоследних.Цена КАК СуммаЗакупНачало,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток*ОптовыеЦеныНоменклатурыСрезПоследних.Цена КАК СуммаЗакупКонец,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток*РозничныеЦеныНоменклатурыСрезПоследних.Цена КАК СуммаРеализацияНачало,
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток*РозничныеЦеныНоменклатурыСрезПоследних.Цена КАК СуммаРеализацияКонец
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
| &ДатаНач,
| &ДатаКон,
| День,
| ,
| Номенклатура В ИЕРАРХИИ (&МассивНоменклатуры)
| И Склад В ИЕРАРХИИ (&МассивСкладов)) КАК ТоварыНаСкладахОстаткиИОбороты
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон,) КАК РозничныеЦеныНоменклатурыСрезПоследних
|ПО
| РозничныеЦеныНоменклатурыСрезПоследних.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура И
| РозничныеЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон,) КАК ОптовыеЦеныНоменклатурыСрезПоследних
|ПО
| ОптовыеЦеныНоменклатурыСрезПоследних.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура И
| ОптовыеЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры
|ГДЕ ((ОптовыеЦеныНоменклатурыСрезПоследних.ТипЦен = &Оптовая) И (РозничныеЦеныНоменклатурыСрезПоследних.ТипЦен = &Розничная))
Пробовал и вместо ВНУТРЕННЕЕ СОЕДИНЕНИЕ писать ЛЕВОЕ (что по идее правильно, но результат одинаковый), и в выборе писал:
"ВЫБРАТЬ
...
| ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонОст,
|ВЫБОР
| КОГДА ОптовыеЦеныНоменклатурыСрезПоследних.Цена ЕСТЬ NULL
| Тогда 0
|Иначе
| ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток*ОптовыеЦеныНоменклатурыСрезПоследних.Цена
|КОНЕЦ КАК СуммаЗакупНачало,
...
но тоже не помогает. Подскажите, как переписать запрос, чтобы он не отсекал те записи, для которых нет цены.
07.06.2009
18:56
#2
Если кому надо будет, то проблема решилась:
Условие обрубает null'овые записи, но можно обойти эту проблему:
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон, ТипЦен = &Оптовая) КАК ОптовыеЦеныНоменклатурыСрезПоследних
|ПО
| ОптовыеЦеныНоменклатурыСрезПоследних.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура И
| ОптовыеЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры
... ну и также для розничных, а условие теперь вообще не нужно. Ну а в списке выборки пришлось оставить следущее:
|ВЫБОР
| КОГДА ОптовыеЦеныНоменклатурыСрезПоследних.Цена ЕСТЬ NULL
| Тогда 0
|Иначе
| ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток*ОптовыеЦеныНоменклатур
ыСрезПоследних.Цена
|КОНЕЦ КАК СуммаЗакупНачало,
Условие обрубает null'овые записи, но можно обойти эту проблему:
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон, ТипЦен = &Оптовая) КАК ОптовыеЦеныНоменклатурыСрезПоследних
|ПО
| ОптовыеЦеныНоменклатурыСрезПоследних.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура И
| ОптовыеЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры
... ну и также для розничных, а условие теперь вообще не нужно. Ну а в списке выборки пришлось оставить следущее:
|ВЫБОР
| КОГДА ОптовыеЦеныНоменклатурыСрезПоследних.Цена ЕСТЬ NULL
| Тогда 0
|Иначе
| ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток*ОптовыеЦеныНоменклатур
ыСрезПоследних.Цена
|КОНЕЦ КАК СуммаЗакупНачало,
Неправильно заполняется титульный лист отчетностиv7: ТиС 9.2. При открытии "Универсальная выгрузка данных в формате XML" - появл. ошибка!
Читают тему
(гостей: 1)