[gelöst]Rundungsproblem in Provisionsabrechnung

21. Februar 2012 08:41

Hallo zusammen,

bei der Summenbildung im Deckblatt der Provisionsabrechnung bekomme ich es einfach nicht gebacken, dass die Verteterprovisionen centgenau addiert werden.
Z. Z. versuche ich das in den Sections des Reports mit folgenden Code:
Code:
Commission Entry, GroupFooter (3) - OnPreSection()

fProv := ROUND("Commission Amount (LCY)",0.01);
fSumProv += fProv;

fProvMwSt := ROUND("Commission Amount (LCY)",0.01) * ROUND("VAT%" / 100,0.01);
fSumProvMwSt += fProvMwSt;

Den Provisionsbetrag gebe ich dann im Groupfooter so aus:
Code:
fProv + fProvMwSt

Im Footer des Reports bilde ich dann die Summe der Provisionen mit folgendem Ausdruck in der SourceExpr des betreffenden Feldes:
Code:
fSumProv + fSumProvMwSt

Beim nachrechnen fehlen mir dann immer ein paar Cents!? :evil: Ich komme nich dahinter wie ich das vermeiden kann!
Als Beispiel:
Prov Betrag: 123,32 Euro
Prov Betrag: 596,67 Euro
Prov Betrag: 838,76 Euro
Prov Summe: 1558,77 Euro --> richtig wäre aber 1558,75 Euro. 2 Cent falsch irgendwo gerundet, oder!?

Hat jemand eine Idee wie ich das lösen kann?

Danke und viele Grüße
Shunkskill
Zuletzt geändert von shunkskill am 21. Februar 2012 12:42, insgesamt 1-mal geändert.

Re: Rundungsproblem in Provisionsabrechnung

21. Februar 2012 09:03

Also um deine eigentliche Frage zu beantworten: du berücksichtigst nicht, dass zwei Dezimalzahlen mit zwei Nachkommastellen in der Multiplikation ein Ergebnis mit mehr als 2 Nachkommastellen ergeben können. Dieses summierst du auf und in der Footer-Section wird das Ergebnis dann (vermutlich durch die Property DecimalPlaces) wieder auf 2 Stellen gerundet. Hier hilft nur sich auf mathematischer Ebene mit Rundungen zu beschäftigen. Gleich dazu packen würde ich ein Selbststudium zur Prozentrechnung. An diesen Punkt kommt glaube ich jeder Programmierer in seinem Leben.

Aber dein Code hat noch mehr Probleme. Z.B.:
shunkskill hat geschrieben:
Code:
ROUND("VAT%" / 100,0.01);

Das ist bedenklich, auch wenn es wahrscheinlich immer funktioniert (weil die meisten Länder Mehrwertsteuern erheben, die eine Ganzzahl vor dem Prozentzeichen sind). Wenn ein Land z.B. 19,5% Mehrwertsteuer erhebt, rechnest du an dieser Stelle einfach mit 20 Prozent.

Du kannst deinen Code auch erheblich vereinfachen, wenn du die Summen nicht selbst berechnest, sondern das den Report für dich tun lässt (Stichwort TotalFields). Und die doppelte Rundung
Code:
ROUND("Commission Amount (LCY)",0.01)

kannst du in jedem Fall einsparen.

Re: Rundungsproblem in Provisionsabrechnung

21. Februar 2012 09:32

Hallo,

du solltest immer so Rechnen, wie du es anzeigst/ausdruckst.

Addierst du Netto und addierst am Ende die Mwst. aus, solltest du auch so Rechnen. D.h. Netto aufsummieren (pro Bemessungsgruppe: Mwst %,+/-,...), Mwst. aus den Gruppensummen jeweils einzeln ermitteln und ausweisen.
Addierst du Brutto und weist am Ende die Mwst. aus, solltest du das ganze sinngemäß wie bei Netto machen, nur dass du die Mwst- heraus rechnest.

Bei der ganzen Rechnerei kann es allerdings zu Rundungsdifferenzen kommen, die du dann mit Rundungszeilen ausgleichen musst.
Aber evtl. ist es sinnvoller das der Einkaufsrechnung zu überlassen, die sollte das korrekt verarbeiten, wenn du die Summe deiner Provisionen als Sachkontobuchung einträgst.

Gruß, Fiddi

Re: Rundungsproblem in Provisionsabrechnung

21. Februar 2012 12:42

Danke für die Hinweise!
Das Problem liegt darin, dass bei innländische Vertreter auf den Provisionsbetrag noch die MwSt addiert werden soll.
Ich habe das nun wie folgt anpepasst und erfolgreich bei bereits beendeten Provisionsabrechnungen gestestet:
Code:
fProv := ROUND("Commission Amount (LCY)",0.01);
fSumProv += fProv;

fProvMwSt := ROUND(fProv * ("VAT%" / 100),0.01);  //21.02.12
//fProvMwSt := ROUND("Commission Amount (LCY)",0.01) * ROUND("VAT%" / 100,0.01);

fSumProvMwSt += fProvMwSt;

Vorerst auf "gelöst" gesetzt.

CreateTotals für MwSt geht in diesem Fall nicht, oder!?

Danke und Gruß
Shunkskill

Re: Rundungsproblem in Provisionsabrechnung

21. Februar 2012 14:22

shunkskill hat geschrieben:CreateTotals für MwSt geht in diesem Fall nicht, oder!?


Wie meinst du das? Du kannst in jedem Fall ein CREATETOTALS für die Variablen fProv und fProvMwst ausführen. Dann sollte in einem Footer auch der richtige (aufsummierte) Wert angezeigt werden und du könntest dir die Summen-Variablen sparen.