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ü:

yücel bey sonsuz teşekkürler.
o kadar çok mikro kullanıcısını bir dertten kurtardınız ki .
Merhaba, elinize sağlık. Para birimi bazlı nasıl alabiliriz. Örnek : (TL Bakiye -Ort.vade) (USD Bakiye-Ort.Vade) (EUR Bakiye-Ort. Vade) saygılar.
Bu haliyle ekleyemezsiniz. Ortalama vade hesabı yapan sorgunun içeriside de değişiklik yapmak gerekiyor.
Ayrıca firmanızın döviz gruplarını kullanım şekli de önemli.
İyi çalışmalar.
v14 için kod varmı? varsa paylaşır mısınız
Maalesef v14 için hazırda kod yok.
Logo tiger 3 için kullanıla bilir mi hocam?
Doğrudan kullanılamaz fakat veri tabanına hakim birisi muhtemelen uyarlama yapabilir.