Microsoft Certified Partner

 

 

POSitive Raporları - 05 - 03 (Ürün Grubu ve Ay Bazında Satış Analizi)


Ürün grubu ve ay bazında satış analizi raporunun çalışma şekli;
 
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.
 
@sirket
Varchar(2)
Fiş hareketlerine ait şirket kodu
@yil
int
Fiş hareketleri tarihine ait yıl bilgisi (filtreleme kriteri olarak kullanılmaktadır.)
@rapor_turu
tinyint
Raporlama sırasında listelenecek değer sütunlarının hangileri olacağını belirleyen parametredir.

0 - Satış ve iade miktar ve tutar değerleri listelenecek
1 - Sadece satış miktar ve tutar değerleri listelenecek
2- Sadece iade miktar ve tutar değerleri listelenecek
 
 
 
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.
 
Raporda yer alan sütunlar;
 
Ürün Grubu
Ürün kartının grup alanında yazılan grup kodunun grup kart tanımlarındaki isim değeri.
Satış Ayı
Satış işleminin gerçekleştiği ay (Parametrede gönderilen yıla ait aylar)
Satış Miktarı
21 - Perakende Satış İrsaliyelerine ait net satış miktarları
Satış Tutarı
21 - Perakende Satış İrsaliyelerine ait net satış tutarları (KDV ve Iskonto değerleri düşülmüş tutar)
İade Miktarı
02 - Perakende Satış İadesi irsaliyelerine ait net satış miktarları
İade Tutarı
02 - Perakende Satış İadesi irsaliyelerine ait net satış tutarları (KDV ve Iskonto tutarları düşülmüş tutar)
 
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL Cümlesi
 
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