Rapor satış ve satış iade değerlerini yana yana sütunlar halinde ay bazında gruplayabilmek için Stored Procedure üzerinden hazırlanmakta ve listelenmektedir. Öncelikle 21 - Perakende Satış İrsaliyeleri, 02 - Perakende Satış İadesi İrsaliyeleri ay bazında gruplanıp alt alta sorgulandıktan sonra dönen sonuçlar temp tablo içerisine satış ve satış iade miktar ve tutarları yan yana gelecek şekilde yerleştirilmekte ve listelenmektedir. Procedure'e ait 3 parametre bulunmaktadır.
Not: Grup alanı boş olan veya grup alanı dolu olsa bile grup kartı açılmamış olan ürünlerin miktar ve tutarları rapora yansımayacaktır.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
create procedure URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI (@sirket varchar(2), @yil int, @rapor_turu tinyint) as
declare @URUN_GRUBU varchar(50), @FIS_TIPI smallint, @ISLEM_AYI smallint, @SI_MIKTAR decimal(29,8), @SI_TUTAR decimal(29,8)
if (@rapor_turu = 0) begin /*SATISLAR VE IADELER*/
declare URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_CURSOR cursor local for
Select
G.ADI [Ürün Grubu],
SD.TIP [Satış/İade],
month(SD.TARIH)[İşlem Ayı],
isnull(Sum(dbo.fn_CalcQuantity1(SD.MIKTAR,SK.CARPAN1,SK.BOLEN1,SK.CARPAN2,SK.BOLEN2,SD.BRM)),0) [Satış Miktarı],
isnull(Sum(dbo.fn_CalcNetAmount(SD.MIKTAR, SD.FIYAT, SD.KDVDH, SD.KDV, SD.ISKTUTAR, SD.ISK1, SD.ISK2, SD.ISK3, SF.ISKONTOT, SF.TOPLAM, SF.KDVT, SF.MASRAF, SK.CARPAN1, SK.BOLEN1, SK.CARPAN2, SK.BOLEN2, SK.BRM1, 2, 0, 2)),0) [Satış Tutarı]
From SFISD SD Left Join SFIS SF On SD.SIRKET = SF.SIRKET And SD.TIP = SF.TIP And SD.FISNO = SF.FISNO
Left Join SKART SK On SD.SIRKET = SK.SIRKET And SD.MKOD = SK.KOD
Left Join GRUP G On SK.GRUP = G.KOD And G.TIP = 3
where SD.SIRKET=@sirket and SD.TIP in(2,21) and G.ADI is not null and datepart(yyyy,SD.TARIH)=@yil
Group By G.ADI,SD.TIP,month(SD.TARIH)
Order By G.ADI,month(SD.TARIH),SD.TIP
end
else if (@rapor_turu = 1) begin/*SATISLAR*/
declare URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_CURSOR cursor local for
Select
G.ADI [Ürün Grubu],
SD.TIP [Satış/İade],
month(SD.TARIH)[İşlem Ayı],
isnull(Sum(dbo.fn_CalcQuantity1(SD.MIKTAR,SK.CARPAN1,SK.BOLEN1,SK.CARPAN2,SK.BOLEN2,SD.BRM)),0) [Satış Miktarı],
isnull(Sum(dbo.fn_CalcNetAmount(SD.MIKTAR, SD.FIYAT, SD.KDVDH, SD.KDV, SD.ISKTUTAR, SD.ISK1, SD.ISK2, SD.ISK3, SF.ISKONTOT, SF.TOPLAM, SF.KDVT, SF.MASRAF, SK.CARPAN1, SK.BOLEN1, SK.CARPAN2, SK.BOLEN2, SK.BRM1, 2, 0, 2)),0) [Satış Tutarı]
From SFISD SD Left Join SFIS SF On SD.SIRKET = SF.SIRKET And SD.TIP = SF.TIP And SD.FISNO = SF.FISNO
Left Join SKART SK On SD.SIRKET = SK.SIRKET And SD.MKOD = SK.KOD
Left Join GRUP G On SK.GRUP = G.KOD And G.TIP = 3
where SD.SIRKET=@sirket and SD.TIP in(21) and G.ADI is not null and datepart(yyyy,SD.TARIH)=@yil
Group By G.ADI,SD.TIP,month(SD.TARIH)
Order By G.ADI,month(SD.TARIH),SD.TIP
end
else if (@rapor_turu = 2) begin/*IADELER*/
declare URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_CURSOR cursor local for
Select
G.ADI [Ürün Grubu],
SD.TIP [Satış/İade],
month(SD.TARIH)[İşlem Ayı],
isnull(Sum(dbo.fn_CalcQuantity1(SD.MIKTAR,SK.CARPAN1,SK.BOLEN1,SK.CARPAN2,SK.BOLEN2,SD.BRM)),0) [Satış Miktarı],
isnull(Sum(dbo.fn_CalcNetAmount(SD.MIKTAR, SD.FIYAT, SD.KDVDH, SD.KDV, SD.ISKTUTAR, SD.ISK1, SD.ISK2, SD.ISK3, SF.ISKONTOT, SF.TOPLAM, SF.KDVT, SF.MASRAF, SK.CARPAN1, SK.BOLEN1, SK.CARPAN2, SK.BOLEN2, SK.BRM1, 2, 0, 2)),0) [Satış Tutarı]
From SFISD SD Left Join SFIS SF On SD.SIRKET = SF.SIRKET And SD.TIP = SF.TIP And SD.FISNO = SF.FISNO
Left Join SKART SK On SD.SIRKET = SK.SIRKET And SD.MKOD = SK.KOD
Left Join GRUP G On SK.GRUP = G.KOD And G.TIP = 3
where SD.SIRKET=@sirket and SD.TIP in(2) and G.ADI is not null and datepart(yyyy,SD.TARIH)=@yil
Group By G.ADI,SD.TIP,month(SD.TARIH)
Order By G.ADI,month(SD.TARIH),SD.TIP
end
if object_id('tempdb..#URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_TMP') IS NOT NULL drop table #URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_TMP
create table #URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_TMP (
URUN_GRUBU varchar(50) collate database_default,
ISLEM_AY smallint,
ISLEM_AYI varchar(15) collate database_default,
SATIS_MIKTAR decimal(29,8),
SATIS_TUTAR decimal(29,8),
IADE_MIKTAR decimal(29,8),
IADE_TUTAR decimal(29,8)
)
open URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_CURSOR
fetch next from URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_CURSOR into @URUN_GRUBU, @FIS_TIPI, @ISLEM_AYI, @SI_MIKTAR, @SI_TUTAR
while @@fetch_status = 0 begin
declare @AY_ISMI varchar(15) select @AY_ISMI=''
if @ISLEM_AYI = 1 begin select @AY_ISMI='OCAK' end
else if @ISLEM_AYI = 2 begin select @AY_ISMI='ŞUBAT' end
else if @ISLEM_AYI = 3 begin select @AY_ISMI='MART' end
else if @ISLEM_AYI = 4 begin select @AY_ISMI='NİSAN' end
else if @ISLEM_AYI = 5 begin select @AY_ISMI='MAYIS' end
else if @ISLEM_AYI = 6 begin select @AY_ISMI='HAZİRAN' end
else if @ISLEM_AYI = 7 begin select @AY_ISMI='TEMMUZ' end
else if @ISLEM_AYI = 8 begin select @AY_ISMI='AĞUSTOS' end
else if @ISLEM_AYI = 9 begin select @AY_ISMI='EYLÜL' end
else if @ISLEM_AYI = 10 begin select @AY_ISMI='EKİM' end
else if @ISLEM_AYI = 11 begin select @AY_ISMI='KASIM' end
else if @ISLEM_AYI = 12 begin select @AY_ISMI='ARALIK' end
if exists(select URUN_GRUBU from #URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_TMP where URUN_GRUBU=@URUN_GRUBU and ISLEM_AYI=@AY_ISMI) begin
if @FIS_TIPI = 21 begin
update #URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_TMP set SATIS_MIKTAR=SATIS_MIKTAR+@SI_MIKTAR, SATIS_TUTAR=SATIS_TUTAR+@SI_TUTAR where URUN_GRUBU=@URUN_GRUBU and ISLEM_AYI=@AY_ISMI
end
else if @FIS_TIPI = 2 begin
update #URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_TMP set IADE_MIKTAR=IADE_MIKTAR+@SI_MIKTAR, IADE_TUTAR=IADE_TUTAR+@SI_TUTAR where URUN_GRUBU=@URUN_GRUBU and ISLEM_AYI=@AY_ISMI
end
end
else begin
if @FIS_TIPI = 21 begin
insert into #URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_TMP( URUN_GRUBU, ISLEM_AY, ISLEM_AYI, SATIS_MIKTAR, SATIS_TUTAR, IADE_MIKTAR, IADE_TUTAR)
values( @URUN_GRUBU, @ISLEM_AYI, @AY_ISMI, @SI_MIKTAR, @SI_TUTAR, 0, 0)
end
else if @FIS_TIPI = 2 begin
insert into #URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_TMP( URUN_GRUBU, ISLEM_AY, ISLEM_AYI, SATIS_MIKTAR, SATIS_TUTAR, IADE_MIKTAR, IADE_TUTAR)
values( @URUN_GRUBU, @ISLEM_AYI, @AY_ISMI, 0, 0, @SI_MIKTAR, @SI_TUTAR)
end
end
fetch next from URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_CURSOR into @URUN_GRUBU, @FIS_TIPI, @ISLEM_AYI, @SI_MIKTAR, @SI_TUTAR
end
close URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_CURSOR
deallocate URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_CURSOR
if (@rapor_turu = 0) begin /*SATISLAR VE IADELER*/
select
URUN_GRUBU [Ürün Grubu],
ISLEM_AYI [İşlem Ayı],
SATIS_MIKTAR [Satış Miktarı],SATIS_TUTAR [Satış Tutarı],
IADE_MIKTAR [İade Miktarı],IADE_TUTAR [İade Tutarı],
SATIS_MIKTAR - IADE_MIKTAR [Net Satış Miktarı],
SATIS_TUTAR - IADE_TUTAR [Net Satış Tutarı]
from #URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_TMP order by URUN_GRUBU,ISLEM_AY
end
else if (@rapor_turu = 1) begin /*SATISLAR*/
select
URUN_GRUBU [Ürün Grubu],
ISLEM_AYI [İşlem Ayı],
SATIS_MIKTAR [Satış Miktarı],SATIS_TUTAR [Satış Tutarı]
from #URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_TMP order by URUN_GRUBU,ISLEM_AY
end
else if (@rapor_turu = 2) begin /*IADELER*/
select
URUN_GRUBU [Ürün Grubu],
ISLEM_AYI [İşlem Ayı],
IADE_MIKTAR [İade Miktarı],IADE_TUTAR [İade Tutarı]
from #URUN_GRUBU_VE_AY_BAZINDA_SATIS_ANALIZI_TMP order by URUN_GRUBU,ISLEM_AY
end