Cari Hesap Bakiye Yaşlandırma Sorgusu

Cari bakiyelerin belirli referans tarihine göre durumlarını göstermektedir.
Vadesi geçen ve vadesi geçmemiş bakiyelerin bilgisini verir. Vadesi geçenlerin de kaç gün geçtiğini, yani yaşının ne olduğunu gösterir.
Mikro v16 programlarında, cari hesap bakiyelerinin belirli gün aralıklarında yaşlandırılması ve rapor olarak alınabilmesi için örnek kod ve kullanım örneğinin aşağıda bulabilirsiniz.
SQL procedure, veri tabanına kayıt edildikten sonra Mikro programlarında yer alan Menü Sorgu Yönetimi uygulamasıyla aşağıda belirtilen şekilde rapor dosyası içeriği eklenip, kullanıcı menülerine kayıt edilebilir.
Örnek ekran görüntüsünde olduğu gibi açık cari hesap bakiyelerinin belirlenen gün aralıklarında yaşlandırma özeti elde edilir.
CREATE PROCEDURE dbo.sp_Zukod_Cari_Bakiye_Yaslandirma
(
@CariIlkKod NVARCHAR(25)='',
@CariSonKod NVARCHAR(25)='',
@CariKodYapisi NVARCHAR(25)='',
@RaporTarihi DATETIME=NULL,
@HangiHesaplar TINYINT=0
)
AS
BEGIN
IF @RaporTarihi IS NULL
SET @RaporTarihi=dbo.fn_DatePart(GETDATE())
DECLARE @CariKodu NVARCHAR(25),
@TmpBakiye FLOAT,
@Id UNIQUEIDENTIFIER,
@KayitTutar FLOAT,
@KapanmamisTutar FLOAT,
@Vade DATETIME
DECLARE @BakiyeyeKonuKayitlar TABLE
(
Id UNIQUEIDENTIFIER,
CariKodu NVARCHAR(25),
KapanmamisTutar FLOAT,
GecikenGun INT
)
SELECT TOP 100 PERCENT
cha_Guid,
cha_kod,
cha_tarihi,
CHA_VADE_TARIHI,
CASE WHEN CHA_CARI_BORC_ALACAK_TIP=0 THEN 1.0 ELSE -1.0 END AS MEBLAG_SIGN,
CHA_CARI_MEBLAG_ANA AS TUTAR,
CAST(0.0 AS FLOAT) CHA_KAPANAN_MEBLAG INTO #CariHareketler
FROM dbo.CARI_HESAP_HAREKETLERI_VIEW_WITH_INDEX_02 WITH (NOLOCK)
LEFT OUTER JOIN CARI_HESAPLAR WITH(NOLOCK) ON (cari_kod=cha_kod)
WHERE (cha_cari_cins=0) AND
(cari_kod >= @CariIlkKod OR @CariIlkKod= N'') AND
(cari_kod <= @CariSonKod OR @CariSonKod = N'') AND
(cari_kod like @CariKodYapisi+'%') AND
(cha_tarihi<=@RaporTarihi)
ORDER BY cha_kod,cha_grupno
DECLARE CariCursor CURSOR LOCAL READ_ONLY FAST_FORWARD FOR
SELECT DISTINCT cha_kod
FROM #CariHareketler
ORDER BY cha_kod
OPEN CariCursor
FETCH NEXT FROM CariCursor INTO @CariKodu
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @TmpBakiye=SUM(TUTAR*MEBLAG_SIGN)
FROM #CariHareketler
WHERE cha_kod=@CariKodu
IF ((@HangiHesaplar=0 AND @TmpBakiye>0) OR
(@HangiHesaplar=1 AND @TmpBakiye<0) OR
(@HangiHesaplar=2 AND @TmpBakiye<>0))
BEGIN
DECLARE HareketCursor CURSOR LOCAL READ_ONLY FAST_FORWARD FOR
SELECT TOP 100 PERCENT
cha_Guid,
(TUTAR-CHA_KAPANAN_MEBLAG)*MEBLAG_SIGN,
CHA_VADE_TARIHI
FROM #CariHareketler
WHERE (cha_kod=@CariKodu) AND
((@TmpBakiye>0 AND MEBLAG_SIGN>0) OR
(@TmpBakiye<0 AND MEBLAG_SIGN<0)) AND
(TUTAR>CHA_KAPANAN_MEBLAG)
ORDER BY CHA_VADE_TARIHI DESC,cha_tarihi DESC
OPEN HareketCursor
FETCH NEXT FROM HareketCursor INTO @Id, @KayitTutar, @Vade
WHILE @@FETCH_STATUS = 0 AND ABS(@TmpBakiye)>1
BEGIN
IF @TmpBakiye>0
SET @KapanmamisTutar = dbo.fn_MIN(@TmpBakiye,@KayitTutar)
ELSE SET @KapanmamisTutar = dbo.fn_MAX(@TmpBakiye,@KayitTutar)
SET @TmpBakiye = @TmpBakiye - @KapanmamisTutar
INSERT INTO @BakiyeyeKonuKayitlar VALUES (@Id,@CariKodu,@KapanmamisTutar,dbo.fn_gunfarkibul(@RaporTarihi,@Vade))
FETCH NEXT FROM HareketCursor INTO @Id, @KayitTutar, @Vade
END
CLOSE HareketCursor
DEALLOCATE HareketCursor
END
FETCH NEXT FROM CariCursor INTO @CariKodu
END
CLOSE CariCursor
DEALLOCATE CariCursor
SELECT TOP 100 PERCENT
cari_kod AS [CARİ KODU],
cari_unvan1 AS [CARİ İSMİ],
SUM(CASE WHEN GecikenGun<=0 THEN KapanmamisTutar ELSE 0.0 END) AS [VADESİ GEÇEN BAKİYE\T],
SUM(CASE WHEN GecikenGun>0 THEN KapanmamisTutar ELSE 0.0 END) AS [VADESİ GEÇMEMİŞ BAKİYE\T],
SUM(KapanmamisTutar) AS [TOPLAM BAKİYE\T],
CASE WHEN SUM(KapanmamisTutar)>0 THEN 'Borç' ELSE 'Alacak' END AS [BAKİYE TİPİ],
SUM(CASE WHEN GecikenGun BETWEEN -30 AND 0 THEN KapanmamisTutar ELSE 0.0 END) AS [30 GÜN\T],
SUM(CASE WHEN GecikenGun BETWEEN -60 AND -31 THEN KapanmamisTutar ELSE 0.0 END) AS [60 GÜN\T],
SUM(CASE WHEN GecikenGun BETWEEN -90 AND -61 THEN KapanmamisTutar ELSE 0.0 END) AS [90 GÜN\T],
SUM(CASE WHEN GecikenGun BETWEEN -120 AND -91 THEN KapanmamisTutar ELSE 0.0 END) AS [120 GÜN\T],
SUM(CASE WHEN GecikenGun <= -121 THEN KapanmamisTutar ELSE 0.0 END) AS [+120 GÜN\T]
FROM @BakiyeyeKonuKayitlar
LEFT OUTER JOIN CARI_HESAPLAR WITH (NOLOCK) ON (cari_kod=CariKodu)
GROUP BY cari_kod, cari_unvan1
HAVING ROUND(SUM(KapanmamisTutar),2)<>0
ORDER BY cari_kod, cari_unvan1
END
Mikro Menü Sorgu Yönetimi için hazırlanacak dosya içeriği
[<
<@P1;NAME=Cari ilk kod,25;TYPE=S;TABLEID=31;FIELDNAME=cari_kod;CHOOSEID=2>
<@P2;NAME=Cari son kod,25;TYPE=S;TABLEID=31;FIELDNAME=cari_kod;CHOOSEID=2>
<@P3;NAME=Cari kod yapısı,25;TYPE=S;TABLEID=31;FIELDNAME=cari_kod;CHOOSEID=2>
<@P4;NAME=Referans tarihi,10;TYPE=T>
<@P5;NAME=Hangi hesaplar,20;TYPE=B;ITEMS=Borçlu hesaplar|0,Alacaklı hesaplar|1,Hepsi|2>
>]
exec dbo.sp_Zukod_Cari_Bakiye_Yaslandirma @P1,@P2,@P3,@P4,@P5
Menü çalıştırıldığında ortaya çıkacak olan parametre formu
Rapor çalıştırıldıktan sonra elde edilen görüntü
Bu konuda bir sorunuz olursa bize yazabilirsiniz.