В очередной раз коммерческому понадобилось разобраться почему просела рентабельность по конкретной позиции в определенном магазине.
Пришлось подправить запрос, который они обычно гоняли для этого в Query Reporter. Пусть тут полежит :)
!!! Сейчас всё это есть в бизнес-анализе в модели "Товародвижение FIFO".
Так сложилось исторически, что часть отчетов у нас снаружи супермага живут и понемногу мутируют под текущие потребности.
Код:
-- детализация себестоимости
select lf.name as магазин, ff.article as артикул
,oo.typename as тип_расхода
,ff.saleid as расход, ff.saledate as дата_расхода
,ff.salesum as сумма_расхода_полная
,ff.quantity as количество_расхода
,round(ff.salesum/ff.saleq,4) as цена_расхода
,round(ff.quantity*ff.salesum/ff.saleq,4) as сумма_расхода
,oi.typename as тип_прихода
,(select op.name from saoperation op, smdocuments od where od.doctype=ff.incometype and od.id=ff.incomeid and op.id = od.opcode) as операция
-- ,(select nvl(uo.title,' ') from smuserop uo, smdocuments ud where ud.doctype=ff.incometype and ud.id=ff.incomeid and uo.id = ud.userop(+)) as польз_операция -- пользовательские операции стали использовать мало
,ff.incomeid as приход, ff.incomedate as дата_прихода
,round(ff.incomesum/ff.incomeq,4) as цена_сс
,round(ff.quantity*ff.incomesum/ff.incomeq,4) as сумма_сс
-- , round(ff.incomenovat/ff.incomeq,4) as цена_СС_без_НДС, ff.salenovat as сумма_без_ндс -- цена и сумма себестоимости без НДС пока оказались не нужны
,decode(ff.primecostforced, 0, ' ', 'Неустановленная СС') as неустановленная_сс
from ffmaprep ff -- в ffmaprep только открытый период. заменить на fvmaprep, если нужны и закрытые периоды тоже
, ssobjecttypes oi, ssobjecttypes oo, smstorelocations lf
where oi.objtype=ff.incometype
and oo.objtype=ff.saletype
and lf.id=ff.salelocationfrom
and ff.saletype in ('CS','WO') -- нам были интересны только расходные накладные и кассовые документы. можно добавить другие типы документов или совсем убрать строку.
and ff.salelocationfrom in (select l.id from smstorelocations l where upper(name) like upper('%&МЕСТО_ХРАНЕНИЯ%')) -- тут по запросу напишем часть названия магазина, как оно в супермаге
and ff.article in ('&АРТИКУЛ') -- тут по запросу укажем артикул ТОЧНО (!!!) как в супермаге
-- and ff.saledate>=to_date('&Дата_расхода_начиная_с','DD.MM.YYYY') -- тут можно добавить фильтр по дате
order by ff.saledate asc