Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 дек 2024, 02:36

8.2 СКД запрос с выводом итогов только по определенным группировкам

Автор CARtMEN, 03 дек 2014, 22:23

0 Пользователей и 1 гость просматривают эту тему.

CARtMEN

    Здравствуйте! В общем дело в том, что необходимо было сделать отчет по остаткам и движениям товаров. В отчете также необходимо было видеть документы, которыми были сделаны движения.
   
    Запрос в СКД был составлен следующий:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ТоварыНаСкладах.Регистратор,
ТоварыНаСкладах.ВидДвижения,
ТоварыНаСкладах.Склад,
ТоварыНаСкладах.Номенклатура КАК Номенклатура,
СУММА(ТоварыНаСкладах.Количество) КАК Количество,
ТоварыНаСкладах.Период
ПОМЕСТИТЬ ВтОбороты
ИЗ
РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
ГДЕ
ТоварыНаСкладах.Период МЕЖДУ &ДатаОт И &ДатаПо

СГРУППИРОВАТЬ ПО
ТоварыНаСкладах.Регистратор,
ТоварыНаСкладах.ВидДвижения,
ТоварыНаСкладах.Склад,
ТоварыНаСкладах.Номенклатура,
ТоварыНаСкладах.Период
;

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

СГРУППИРОВАТЬ ПО
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0),
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних1.Цена, 0),
ТоварыНаСкладахОстатки.Склад,
ТоварыНаСкладахОстатки.Номенклатура,
ЕСТЬNULL(ВтОбороты.Регистратор, ""),
ЕСТЬNULL(ВтОбороты.Период, ""),
ТоварыНаСкладахОстатки.КоличествоОстаток * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) + ВЫБОР
КОГДА ЕСТЬNULL(ВтОбороты.Количество, 0) <> 0
И ВтОбороты.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
ТОГДА ВтОбороты.Количество * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)
ИНАЧЕ -(ВтОбороты.Количество * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0))
КОНЕЦ

    Но тут проблема появилась в том, что итоги по остатка запрос показывает неправильные. Т.к. строки с выводимыми документами дублируют показатели остатков.
   
    Буду рад советам и критике.

Теги: скд 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск