Bir arkadaşımdan aldığım destek sayesinde ortay çıkan çalışma aşağıdadır.
Adat, ortalama Vade hesaplama için kullanılabilecek çok güzel bir function oldu.
create FUNCTION [dbo].[ORTVADE](@FIRMA_ID varchar(10), @YIL_ID int) RETURNS SMALLDATETIMEAS
BEGIN
DECLARE @REFDATE SMALLDATETIME
DECLARE @Bakiye DECIMAL(38,2)
DECLARE @xBA VARCHAR(1)
--Bakiye Tutarının Öğrenilmesi
DECLARE CarıOZET_Cursor CURSOR FOR
SELECT bakıye FROM CarıozetWHERE (FIRMAKODU = @FIRMA_ID) AND (YIL = @YIL_ID)
OPEN CarıOZET_Cursor
--Bakiye Tutarı Belirlendi
FETCH NEXT FROM CarıOZET_CursorINTO @BakiyeCLOSE CarıOZET_CursorDEALLOCATE CarıOZET_CursorIF @Bakiye >= 0 SET @xBA = 'B'
ELSE SET @xBA = 'A'
SET @REFDATE = Getdate()-2000DECLARE @SAdat Float, @SBakiye Float, @Flag int
DECLARE @VADETAR SMALLDATETIME, @BA VARCHAR(1), @BORC Float, @ALACAK float
DECLARE CarıEkstre_Cursor CURSOR FOR
SELECT Vadetar, BA, BORC, ALACAK FROM CarıEkstreWHERE (FIRMAKODU = @FIRMA_ID) AND (YIL = @YIL_ID) AND (BA = @xBA)
ORDER BY VADETAR DESC
OPEN CarıEkstre_CursorFETCH NEXT FROM CarıEkstre_CursorINTO @VADETAR, @BA, @BORC, @ALACAKSET @SAdat=0SET @SBakiye = 0SET @FLAG = @@FETCH_STATUS
WHILE (@FLAG = 0 )
BEGIN
IF @xBA = 'B'
BEGIN
If @SBakiye + @Borc > @BakiyeBEGIN
SET @SAdat=@SAdat + (@Bakiye - @SBakiye) * CONVERT(float, @VADETAR - @RefDate)
SET @SBakiye = @BakiyeSET @Flag=1END
ELSE BEGIN
SET @SBakiye = @SBakiye + @BorcSET @SAdat=@SAdat + @BORC * CONVERT(float, @VADETAR - @RefDate)
END
END
ELSE
BEGIN
If @SBakiye + @Alacak > @BakiyeBEGIN
SET @SAdat=@SAdat + (@Bakiye - @SBakiye) * CONVERT(float, @VADETAR - @RefDate)
SET @SBakiye = @BakiyeSET @Flag=1END
ELSE BEGIN
SET @SBakiye = @SBakiye + @AlacakSET @SAdat=@SAdat + @Alacak * CONVERT(float, @VADETAR - @RefDate)
END
END
FETCH NEXT FROM CarıEkstre_CursorINTO @VADETAR, @BA, @BORC, @ALACAKIF @@FETCH_STATUS <> 0 SET @Flag=1END
CLOSE CarıEkstre_CursorDEALLOCATE CarıEkstre_CursorRETURN @REFDATE + FLOOR(@SAdat / @SBakiye)
END