Ovako: svrha saldiranja po stranici i prenos na sledecu stranu jeste olaksavanje rucnog racunanja. Neka su listovi knjige oznaceni sa 1,2,3,....N
Neke na prvom listu nema prenosa sa prethodnog lista. Saldo na dnu lista bice
Code:
[Saldo na dnu lista 1]=(Suma svih ulaza na lsitu 1) - (Suma svih izlaza na lsitu 1)
List 2 imase prenos sa lista 1, a to je [Saldo na dnu ista 1], n apozitivnoj strani, kao neki pocetni Ulaz.
Saldo na dnu lista 2 bice:
Code:
[Saldo na dnu lista 2]=[Saldo na dnu ista 1] + (Suma svih ulaza na lsitu 2) - (Suma svih izlaza na lsitu 2)
sto je isto sto i
[Saldo na dnu lista 2]=[(Suma svih ulaza na lsitu 1) - (Suma svih izlaza na lsitu 1)] +(Suma svih ulaza na lsitu 2) - (Suma svih izlaza na lsitu 2)
Za list 3 imacemo:
Code:
[Saldo na dnu lista 3]=
[(Suma svih ulaza na lsitu 1) - (Suma svih izlaza na lsitu 1)]
+[(Suma svih ulaza na lsitu 2) - (Suma svih izlaza na lsitu 2)]
+(Suma svih ulaza na lsitu 3) - (Suma svih izlaza na lsitu 3)
Sada uoci pravilnost:
Code:
[Saldo na dnu lista X] = (Suma svih ulaza na prethodnim listovima)
+ (Suma Ulaza na listu X)
-(Suma svih izlaza na prethodnim listovima)
-(Suma ilaza na listu X)
Kveri koji racuna sume ulaza/izlaza za zadati list X je jednostavan:
Code:
SELECT SUM(Ulaz) As SumaUlaz_X, SUM(Izlaz) AS SumIZlaz_X
FROM
tblKniga WHERE List=X
Ako mu dodamo neke delove dobijemo sve sto nam treba:
Code:
SELECT SUM(Ulaz) AS SumaUlaz_X, SUM(Izlaz) AS SumIZlaz_X,
(SELECT SUM(Ulaz) AS SumUlaz FROM Knjiga AS B WHERE B.List<A.List) AS SumUlazPreX,
(SELECT SUM(Izlaz) AS SumIzlaz FROM Knjiga AS B WHERE B.List<A.List) AS SumIzlazPreX,
FROM
tblKniga AS A
WHERE A.List=X
Poslednji kveri ima sve sto ti treba - sume po pojedinim listovima i sume ulaza i izlaza na svim prethodnim listovima. Dalje znas i sam.
Trik je upotrebiti 'subqueries' ili 'embedded queries' ili 'kveri unutar kverija'. Posto su i vanjski i unutrasnji kveriji na istoj tabeli, moramo da upotrebima 'alias names' - A i B.
Na formama mozes da upotrebis DSUM, na primer:
Code:
txtSumaUlazaPrethodnihListova=Dsum("Ulaz","tblKnjiga","List<" & Me!List)
txtSumaIzlazaPrethodnihListova=Dsum("Ulaz","tblKnjiga","List<" & Me!List)
txtSumaUlazaTekucegLista=Dsum("Ulaz","tblKnjiga","List=" & Me!List)
txtSumaIzlazaTekucegLista=Dsum("Ulaz","tblKnjiga","List=" & Me!List)
Za reporte je bolje koristiti kveri, DSUM je dosta sporo da se izvrsava za svaki rekord. Na formi je OK jer se izvrsava samo jednom. Pa jos ako to spakujes u Form Footer, eto ti Saldo na dnu ekrana. Samo ponekad pritisnes F9 da osvezis rezultat, ili na Form_AfterUpdate za subformu stavis Parent.requey ili nesto slicno i ne treba ti F9.........
Dost je za nekoliko dan, sta mislis?
;-)