Mikro v16 programlarında, cari hesap açık hesap bakiye ortalama vade bilgilerinin rapor olarak alınabilmesi için kod ve kullanım örneğini aşağıda bulabilirsiniz.

 

Sorgu:

 

CREATE FUNCTION [dbo].[fn_Zkd_Cari_Ortalama_Vade]
(
  @CariKodu NVARCHAR (25)
)
RETURNS DATETIME
AS
BEGIN

DECLARE @BakiyeIzleme FLOAT,
    @Id UNIQUEIDENTIFIER,
    @Vade DATETIME,
    @ReferansTarih DATETIME,
    @OrtalamaVade DATETIME,
    @EvrakTutar FLOAT,
    @BakiyeyeKonuTutar FLOAT


SET @ReferansTarih=dbo.fn_DatePart(GETDATE())

DECLARE @BakiyeKonuKayitlar TABLE
  (
    RecNo UNIQUEIDENTIFIER,
    VadeTarihi DATETIME,
    BakiyeyeKonuTutar FLOAT,
    GunFarki INT
  )
DECLARE @CariHareketler TABLE
  (
    cha_Guid UNIQUEIDENTIFIER,
    cha_cinsi TINYINT,
    cha_evrak_tip TINYINT,
    cha_tarihi DATETIME,
    CHA_VADE_TARIHI DATETIME,
    MEBLAG_SIGN FLOAT,
    TUTAR FLOAT,
    CHA_KAPANAN_MEBLAG FLOAT
  )	

INSERT INTO @CariHareketler
SELECT TOP 100 PERCENT 
          cha_Guid,
          cha_cinsi,
          cha_evrak_tip,
          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
          FROM dbo.CARI_HESAP_HAREKETLERI_VIEW_WITH_INDEX_02 WITH (NOLOCK)
          WHERE (cha_cari_cins=0) AND
              (cha_kod=@CariKodu)
          ORDER BY cha_kod
          

SELECT @BakiyeIzleme=SUM(TUTAR*MEBLAG_SIGN) FROM @CariHareketler
IF @BakiyeIzleme IS NULL SET @BakiyeIzleme=0.0

IF ABS(@BakiyeIzleme)<=0
  RETURN NULL

      DECLARE CariHareketlerCursor 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
          ((@BakiyeIzleme>0 AND MEBLAG_SIGN>0) OR
           (@BakiyeIzleme<0 AND MEBLAG_SIGN<0)) AND
           TUTAR>CHA_KAPANAN_MEBLAG

        ORDER BY CASE WHEN cha_evrak_tip IN (59,46,47) OR cha_cinsi IN (11,16) THEN 1 ELSE 0 END,				
            cha_tarihi DESC,
            CHA_VADE_TARIHI DESC
            
        OPEN CariHareketlerCursor
        FETCH NEXT FROM CariHareketlerCursor INTO @Id, @EvrakTutar, @Vade
        WHILE @@FETCH_STATUS = 0 AND ABS(@BakiyeIzleme)>1
        BEGIN	
        
          IF @BakiyeIzleme>0
            SET @BakiyeyeKonuTutar = dbo.fn_MIN(@BakiyeIzleme,@EvrakTutar) 
              ELSE SET @BakiyeyeKonuTutar =  dbo.fn_MAX(@BakiyeIzleme,@EvrakTutar) 

          SET @BakiyeIzleme = @BakiyeIzleme - @BakiyeyeKonuTutar
                           
          INSERT INTO @BakiyeKonuKayitlar 
            VALUES (@Id,@Vade,@BakiyeyeKonuTutar,dbo.fn_gunfarkibul(@ReferansTarih,@Vade)) 

          FETCH NEXT FROM CariHareketlerCursor INTO @Id, @EvrakTutar, @Vade
        END
        CLOSE CariHareketlerCursor
        DEALLOCATE CariHareketlerCursor



SELECT TOP 100 PERCENT
  @OrtalamaVade=CASE 
          WHEN SUM(BakiyeyeKonuTutar)<>0 THEN DATEADD(DAY,CAST(CAST(SUM(BakiyeyeKonuTutar*GunFarki) / SUM(BakiyeyeKonuTutar) AS DECIMAL) AS INT), @ReferansTarih) 
          ELSE @ReferansTarih 
          END
FROM @BakiyeKonuKayitlar

  RETURN @OrtalamaVade
END
Örnek kullanım
SELECT TOP 100 PERCENT 
  cari_kod AS [CARİ KODU], 
  cari_unvan1 AS [ÜNVANI],
  dbo.fn_CariHesapBakiye('',0,cari_kod,N'',N'',NULL,0,0,0,0,0) AS [BAKİYE],
  dbo.fn_Zkd_Cari_Ortalama_Vade(cari_kod) AS [ORTALAMA VADE]
FROM CARI_HESAPLAR WITH (NOLOCK)
ORDER BY cari_kod

 

Rapor Görüntüsü: