вторник, 14 октября 2014 г.

1с запрос: задвоенное начальное и конечное количество

Это происходит, когда используется Регистратор, либо Авто.
Начальный, конечный остатки и обороты получаем отдельными запросами:


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

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Номенклатура,
    ВложенныйЗапрос.Характеристика

УПОРЯДОЧИТЬ ПО
    ВложенныйЗапрос.Номенклатура.Наименование