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