Berekende waarde uit vorige record van doorlopend formulier gebruiken

Status
Niet open voor verdere reacties.

Roetsjie

Gebruiker
Lid geworden
9 nov 2011
Berichten
7
Hallo allemaal,

Ik ben bezig met een rapport op te zetten, met daarin een doorlopend formulier en loop daar tegen een probleem aan. Het lukt mij namelijk niet om een berekende waarde van een vorige record mee te nemen in het volgende totaal. Het gaat om bedragen waar rente over word berekend. Deze rente kan verschillend zijn.
Dit lukt niet met een Sum() aangezien er eerst nog een hoeveelheid rente word berekend.

Om het probleem even wat duidelijker te maken:
voor het gemak is het rentepercentage 50%
(mocht niet meerdere spaties gebruiken, vandaar de puntjes)
...........................bedrag.....rente......totaal
datum 1 .................. 2 ......... 1 ......... 3
datum 2 .................. 4 ......... 2 .......... 6
totaal t/m mand 1 .... 6 ......... 3 .......... 9

maand 1 .................. 9 ......... 4.5 ...... 13.5
datum 3 .................. 3 ......... 1.5 ....... 4.5
totaal t/m maand 2 ... 12 ......... 6 ......... 18


Ik hoop dat het probleem zo enigzins duidelijk is. Zo niet dan probeer ik het nog meer te verduidelijken.
Alvast heel erg bedankt voor de hulp!
 
Jammer genoeg snap ik het nog steeds niet; wat wil je nu meenemen naar een volgend record? Het oogt als het subtotaal van de eerste maand. Heb je daar een groepering op?
 
Sorry dat had ik er inderdaad bij moeten vermelden.
Maand 1 word inderdaad getotaliseerd en deze waarde moet meegenomen worden aan het begin van de volgende maand (maand 2) en vervolgens word daar weer rente over berekend. Vervolgens komen de andere waarden van maand 2 erbij en word dat het totaal van maand 2.
Nu heb ik dat geprobeerd door te verwijzen naar het maandtotaal maar dan krijg ik het totaal voor de huidige maand.
 
Je kunt dat beter met een Lopend Totaal doen in je query; dan heb je voor elk record het vorige totaal beschikbaar. Zo'n Lopend totaal query maakt gebruik van de functie DSUM. Een voorbeeldje:

Code:
SELECT DatePart('yyyy',[OrderDatum]) AS Jaar, DatePart('m',[OrderDatum]) AS Maand, Sum(Orders.Bedrag) AS Totaal, Format(DSum("Bedrag","Orders","Year([OrderDatum])<=" & [Jaar] & " And Month([OrderDatum])<=" & [Maand]),"Currency") AS RunTot
FROM Orders
GROUP BY DatePart('yyyy',[OrderDatum]), DatePart('m',[OrderDatum])
ORDER BY DatePart('yyyy',[OrderDatum]), DatePart('m',[OrderDatum]);

Probeer hem eens uit, zou ik zeggen! Wel uiteraard veldnamen en Tabelnaam aanpassen...
 
Alvast bedankt voor de reactie OctaFish. Ik heb het gevoel dat ik nu wel in de goede richting zit.

Echter er is nog een klein probleempje. Bij het Lopend Totaal word bij het tweede jaar 'stiekem' het totaal van dezelfde maand van vorig jaar erbij geteld.

Bijgevoegd een link naar een plaatje van het queryresultaat
http://www.mijnbestand.nl/Bestand-77T6LNXWTMPL.jpg
(hem als plaatje bijvoegen lukte me niet)
 
Daar kan ik weinig van zeggen zonder de query te zien. Of een voorbeeldje van de db met wat testgegevens mag ook natuurlijk!
 
Is niet stiekem, maar de manier waarop de query werkt! Hij doet exact wat 'm gevraagd wordt namelijk... Uiteraard kan je ook sommeren per jaar; dan ziet de query er zo uit (zoek de verschillen!)

Code:
SELECT DatePart('yyyy',[Datum offerte]) AS Jaar, DatePart('m',[Datum offerte]) AS Maand, Sum(Offertes.[Netto Offerte]) AS Totaal, CDbl(DSum("[Netto Offerte]","Offertes","Year([Datum offerte])=" & [Jaar] & " And Month([Datum offerte])<=" & [Maand])) AS RunTot
FROM Offertes
GROUP BY DatePart('yyyy',[Datum offerte]), DatePart('m',[Datum offerte])
ORDER BY DatePart('yyyy',[Datum offerte]), DatePart('m',[Datum offerte]);
Ik heb de veldopmaak van het totaal nu aangepast, zodat je met Eigenschap de notatie Valuta kunt kiezen. Dan lijnt hij de bedragen rechts uit i.p.v. links.
 
Haha ik weet dat hij precies doet wat er gevraagd word.
Ik zie alleen zelf even niet in waar er gevraagd word dat hij na 1 jaar zo'n gekke telling moet aanhouden.

bijgevoegd een voorbeelddatabase met de 1ste query die je opgegeven hebt.
http://www.mijnbestand.nl/Bestand-6YUXYANLGZMX.rar
uploaden werkte weer niet.
 
Hier de functie waar het om gaat.

Code:
RunTot: CDbl(Format(DSum("[klant premie betaald]";"Premie";"Year([Datum])[B][COLOR="blue"]=[/COLOR][/B]" & [Jaar] & " And Month([Datum])<=" & [Maand]);"Standaard"))

Kun je wat makkelijker zien wat er veranderd moet worden :)
 
Door het wijzigen van de notatie naar een double haalt nog steeds niet de fout uit de berekening

Namelijk dat bij de eerste maand van 2011, zowel maand 1 van 2011 als maand 1 van 2010 word gebruik voor het lopend totaal. Is het mogelijk dat het totaal gewoon blijft doorlopen?

Ik heb al geprobeerd om een beetje te spelen met de query, maar ik krijg het niet voor elkaar.
 
Het gaat ook niet om het omzetten naar een getal via CDbl. Als je goed kijkt, zie je de verschillen hopelijk wat beter...

Code:
"Year([OrderDatum])[B][COLOR="blue"]<=[/COLOR][/B]" & [Jaar]
"Year([OrderDatum])[B][COLOR="red"]=[/COLOR][/B]" & [Jaar]
 
Die heb ik inderdaad over het hoofd gezien, maar dat lost het probleem slechts deels op.

Door te zeggen =" & [Jaar] klopt de telling voor elk jaar wel, maar de telling begint bij januari van een nieuw jaar weer op nul.
 
Dat wou je toch ook? De eerste oplossing die ik gaf telt door vanaf het eerste record. In Januari 2011 pakt hij dus het totaal van December 2010 erbij. Veel meer smaken kan ik ook niet verzinnen...
 
Nou bij de eerste oplossing was het zo dat in januari 2011 het totaal van januari 2010 erbij werd geteld en niet de rest van 2010.
En in februari 2011 werd er een totaal gemaakt van januari, februari 2010 en januari, februari 2011 bij elkaar opgeteld.

Maar het kan zijn dat ik gewoon weer wat over het hoofd zie.

Zou je jouw volledige query willen neerzetten met hoe hij volgens jou goed is?

Ieder geval ben ik je al erg dankbaar voor de hulp tot nu toe!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan