programınıza ekteki gibi uygulama yapabilirsiniz Devirli Bakiye ya da başka bir adlandırmayla Yürüyen Bakiye (Running Sum) için öncelikle hesap ekstresini alacağımız firmaya ait kayıtları ayrıştırıp ayrı bir tabloya aktaracak sorguyu oluşturuyoruz... SELECT
Hareket.HrkID,
Hareket.Firma,
Hareket.Aciklama,
Hareket.Rakam,
IIf([HarTuruID]=2,[Rakam],[Rakam]*(-1)) AS Bakiye INTO HesapAyirma
FROM
Firma INNER JOIN (HarTuru INNER JOIN Hareket ON HarTuru.HarTuruID = Hareket.HarTuru) ON Firma.FirmaID = Hareket.Firma;
[img=726x347]file:///C:/Users/E_EVIK~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg[/img]
Burada kullanılan bir deyim var; Bakiye: IIf([HarTuruID]=2;[Rakam];[Rakam]*(-1))
Eğer hareket türü 2, yani "Alacak" ise, rakamı aynen kullan. Diğer durumda ise yani "Borç" ise rakamı -1 ile çarparak negatif sayıya çevir... (Burada mantığı ters kurmuş olabilirim o yüzden kullanmadan önce kontrol etmenizde fayda var[img=17x17]file:///C:/Users/E_EVIK~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.gif[/img])
Sonraki adımda ise başka bir sorgu ile ayrıştırdığımız kayıtları hesap ekstresi haline getireceğiz... SELECT
HesapAyirma.HrkID AS TempID,
HesapAyirma.Firma,
HesapAyirma.Aciklama,
Sum(HesapAyirma.Bakiye) AS SumOfBakiye,
Val(DSum("[Bakiye]","HesapAyirma","[HrkID]<=" & [TempID] & " ")) AS DevirliBakiye
FROM HesapAyirma
GROUP BY HesapAyirma.HrkID, HesapAyirma.Firma, HesapAyirma.Aciklama, HesapAyirma.HrkID, HesapAyirma.Rakam;
[img=728x355]file:///C:/Users/E_EVIK~1/AppData/Local/Temp/msohtmlclip1/01/clip_image005.jpg[/img]
TempID' nin bulunma sebebi şu; önceki hareketleri de hesaba katarak DSUM içerisinde o anda bulunduğumuz ID' ye kadar olan bütün kayıtların toplamını hesaplatabilmek için ikinci bir ID tanımlıyoruz...
Sonra asıl formülümüze sıra geliyor... DevirliBakiye: Val(DSum("[Bakiye]";"HesapAyirma";"[HrkID]<=" & [TempID] & " "))
Yapılan işlemin açıklaması ise şöyle; yukarıda izah ettiğimiz mantıkla, tablomuzdaki rakamlardan bulunduğumuz satıra kadar olanların hepsini toplayarak gel, aktif satırı da bu değere ekle... rakamı daha önce + ya da - hale getirdiğimiz için de, bakiyemiz +' ya veya -' ye dönebiliyor böylece...
Sonuç ise şunun gibi oluyor...
Elde edilen sonuçta son sütuna dikkat ederseniz o satırdaki rakama gelene kadar SumOfBakiye sütunu toplanarak geliyor ve o satırdaki değer de toplama ekleniyor... Son satırda ise bu müşteriden 650 TL alacaklı olduğumuz sonucunu çıkarıyoruz...
Örnek çalışmanın olduğu dosyayı da indirip inceleyebilirsiniz...
Ekteki dosyada sonucu alabilmek için önce Hes_Eks_Tb sorgusunu, sonra da HesapEkstresi sorgusunu sırasıyla çalıştırmanız gerekiyor...