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

Тема в разделе "1C и всё что с ней связано", создана пользователем rubi, 6 июн 2009.

  1. rubi

    rubi Гость

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

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

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

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

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Соединение конечно должно быть левое. Возможно условие
    обрубает.
    Попробуйте дописать ИЛИ(ОптовыеЦеныНоменклатурыСрезПоследних.ТипЦен ЕСТЬ NULL)
     
  3. rubi

    rubi Гость

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

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

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

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

Поделиться этой страницей