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.