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 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ü
Share This