Optellen van velden op basis van voorwaarde

Status
Niet open voor verdere reacties.

vaberg

Gebruiker
Lid geworden
29 jan 2011
Berichten
8
Beste mensen,

Ik ben een beginner met access en probeer een klantsysteem te maken met facturen, waarbij per factuurregel het btw percentage gekozen wordt (19, 6 of 0 procent). Ik wil niet op iedere regel de btw laten bereken, maar als een totaal waarde onderverdeeld per percentage.

Ik heb het al met een som() geprobeerd, maar kan dan geen voorwaarde opgeven. Kan iemand mij in de goede richting helpen.

Alvast bedankt

Vincent
 
Begrijp ik dat je de btw op je hoofdformulier wilt laten uitrekenen, en niet in het subformulier bij de verschillende regels? Ik denk dat je dan een twee DSUM formules moet gebruiken, waarin je een critierium maakt op basis van BTW type of waarde.
 
Ja, per regel geef ik het type hoog, laag of nul en wil deze vervolgens per type opgeteld hebben. Heb je misschien een voorbeeld van een DSUM

Bedankt
 
Helaas voorlopig niet, want onze systemen liggen plat. Ik kan dus niet bij mijn bestanden :( Maar kijk eens in de Help, daar staat redelijk uitgelegd hoe DSUM werkt. Maar hier staat een voorbeeldje.
 
Ik heb de DSUM geprobeerd, maar kom hier niet uit. Misschien maak ik het me zelf moeilijker als het is en sta open voor alternatieven.

Ik doe het volgende formulier factuur wordt geopend. Als eerste wordt de klant geselecteerd en een aantal velden wordt automatisch gevuld.

Vervolgens wordt op regel niveau artikelnummer, omschrijving, aantal, prijs per stuk en soort btw opgegeven (hoog, laag, nul). Op regel niveau wordt ook automatisch excl btw berekend door aantal te vermenigvuldigen met prijs per stuk.

Onderaan het formulier wordt automatisch een optelling van het veld excl btw uitgevoerd. zover gaat alles goed.

Omdat er op regelniveau verschillende btw tarieven kunnen staan, wil ik de formulier velden optellen afhankelijk van het soort tarief en weergeven in een veld onderaan het formulier.

De totalen heb ik niet meegenomen in de tabellen.

Verder heb ik al wat geexperimenteerd met select statements, maar dan krijg ik alleen maar #naam? en mijn vba is van een dermate niveau dat ik niet zondermeer weet hoe ik het daar in moet uitvoeren.
 
Laat eerst een zien wat je hebt geprobeerd met DSUM. Ik kan nog steeds geen db openen, dus ik kan geen voorbeeldje maken...
 
Voor het totaal bedrag excl btw gebruik ik =Som([Totaal ex BTW]) in besturingselementbron.

Ik had gehoopt voor de verschillende percentages ook zo iets dergelijks te gebruiken, waarbij bij elke wijziging automatisch de totale waarde mee zijzigd.

Zoals ik al aangaf, ben ik geen hoogspringer in vba en heb in eerste instantie geprobeerd DSUM op te nemen als besturingselementbron. Dit lukte echter niet en heb vervolgens geprobeerd het op te nemen in vba.

Ik kom nooit in het veld van de totalen en zal moeten wijzigen op ieder moment, dat er een wijziging wordt gemaakt in een van de regels.

dit had ik opgenomen in vba.

Dim btwbedrag As Currency
btwbedrag = DSum(Me.Totaal_ex_BTW, Me.Form, Me.BTW_tarief = "Hoog")

Dit werkt in ieder geval niet.
 
Nee, dat is logisch dat dit niet werkt. Om te beginnen: je probeert, als het al zou werken, de som te nemen van één veld (Me.Totaal_ex_BTW). Hoe je het ook wendt of keert, daar komt altijd hetzelfde getal uit rollen. De functie Som, en ook DSum, wil je nou juist gebruiken over een aantal waarden. Daarbij kun je Som gebruiken op formulieren, om (in een voettekst bijvoorbeeld) een totaal te berekenen over velden op dat formulier, en gebruik je DSUM om totalen te berekenen over gegevens die je juist niet in je bron hebt staan. D-functies gebruik je meestal rechtstreeks op een tabel. Het commando moet er dan ook ongeveer zo uit zien:
DSum("Totaalbedrag", "Verkopen", "[BTW_tarief] = 'Hoog'")
Overigens is dit voorbeeldje uiterst fictief; de kans dat het gaat werken is ongeveer net zo groot als dat België deze maand een kabinet heeft.
 
Als je een voorbeeldje post van je db, dan kijk ik wel even of ik daar wat in kan maken.
 
Ik heb nu de volgende opdracht, nadat het vel btw tarief wordt bijgwerkt:

Private Sub BTW_tarief_AfterUpdate()

Me.btwTotaalHoog = DSum("[Totaal ex BTW]", "tblFactuurregels", "[BTW_Tarief] = 'Hoog'")

End Sub

Dit geeft een resultaat in het veld btwtotaalhoog, maar dit gebeurt pas nadat ik twee keer het btw tarief uit de dropdown heb geselecteerd.

Het tweede wat fout gaat is dat nu alle records met hoog worden geselecteerd, dus ook van de oudere facturen. Hiervoor heb ik het volgende toegevoegd

AND [Factuurid] = '" & me.factuurnumer & "'"

Dit geeft echter programma fout en dat kan te maken hebben dat het record nog niet is weggeschreven.

alvast bedankt
 
Ik ga er vanuit dat het veld FactuurID een numeriek veld is. En in dat geval klopt het laatste deel van je formule niet, met de logische foutmelding als gevolg. Overigens klopt je redenatie prima, want je moet de DSUM inderdaad ook nog filteren op Factuurnummer.
Nu nog het foutje er uithalen:
Me.btwTotaalHoog = DSum("[Totaal ex BTW]", "tblFactuurregels", "[BTW_Tarief] = 'Hoog' AND [Factuurid] = " & me.factuurnumer)
 
Hierbij mijn db hoop dat je er iets mee kan.

Is wat in geexperimenteerd, dus komen wat overbodige velden op het formulier voor.

Verder moesten er wat tabellen en overige formulieren verwijderd worden om het zo klein mogelijk te krijgen.

bedankt
 

Bijlagen

Heb een kleine aanpassing gemaakt als volgt:

Private Sub BTW_tarief_Dirty(Cancel As Integer)
Me.btwTotaalHoog = DSum("[Totaal ex BTW]", "tblFactuurregels", "[BTW_Tarief] = 'Hoog' AND [Factuurid] = '" & Me.FactuurID & "'")
End Sub

Nu gebeurt de aktie nadat het record gewijzigd is en komen er geen foutmeldingen meer.

Het enige waar ik nu nog tegen aanloop, is dat het veld niet meteen wordt geupdate maar pas nadat ik nogmaals het btw tarief selecteer

bedankt
 
Heb het toegevoegd aan de procedure bij verlaten veld en dat lijkt te werken. Echter op het moment dat ik nu het aantal of stuksprijs wijzig, wijzigd dit totaal btw pas nadat ik ook nog een keer het btw tarief heb geselecteerd of een nieuwe regel heb toegevoegd.

Moet deze actie aan ieder veld toegevoegd worden die consequenties heeft voor deze berekening of is er misschien een andere manier om de berekening opnieuw uit te laten voeren

tot zover bedankt voor de hulp
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan