Erstellt vor 3 Jahren

Geschlossen vor 2 Jahren

#1946 closed Fehler (fixed)

normale linetotal Rundungsfehler landen in discount

Erstellt von: grichardson@… Verantwortlicher: grichardson@…
Priorität: normal Meilenstein: 3.0.0
Komponente: kivitendo ERP Version: 2.7.0
Schweregrad: normal Stichworte:
Beobachter:

Beschreibung

Spezialfall bei mehreren Nachkommastellen im sellprice und Anzeige von $discount_total in Druckvorlage:

Das Problem kam in in Commit 21717dcd rein.

      my $parsed_discount      = $form->parse_amount($myconfig, $form->{"discount_$i"});                                                                                                                
      my $linetotal_exact      =                     $form->{"qty_$i"} * $sellprice * (100 - $parsed_discount) / 100 / $price_factor->{factor};                                                         
      my $linetotal            = $form->round_amount($linetotal_exact, 2);                                                                                                                              
      my $discount             = $form->round_amount($form->{"qty_$i"} * $sellprice * $parsed_discount / 100 / $price_factor->{factor} - ($linetotal - $linetotal_exact),                               
                                                     $decimalplaces);          

Es ging bei dem ($linetotal - $linetotal_exact) vermutlich darum, etwaige Rundungsfehler, die durch die Rabattberechnung eingefügt wurden, nachdem linetotal auf 2 Stellen gerundet wird, zu berücksichtigen.

Ein Problem taucht auf, wenn der Verkaufspreis mehrere Nachkommastellen hat und auf der 3. Nachkommastelle >= 5 ist:

Zum Nachstellen:
Menge: 2500
sellprice: 0.04423
qty*sellprice gerundet auf 5 Nachkommastellen ergibt: 110.575

Bei der Berechnung von $discount ergibt ($linetotal - $linetotal_exact) einen Wert von 0.005, das wird zu discount_total dazuaddiert, und nachdem discount_total gerundet wird taucht es mit einem Wert von 0.01 als Gesamtrabatt in der Druckvorlage auf. Und das obwohl überhaupt kein Rabatt bei der Position definiert ist.

Ein schneller Flicken wäre $discount immer auf 0 zu setzen sofern $parsed_discount 0 ist, wenn Rabatt 0 ist muß auch der absolute $discount 0 sein.

Ich habe nicht so ganz verstanden, wie die Rundungsbehandlung bei Rabattrundungsproblemen funktionieren soll, allerdings landen hier auch normale nicht-Rabatt-Rundungsfehler in dieser Behandlung.

Änderungshistorie (3)

comment:1 Geändert vor 2 Jahren durch m.bunkus@…

  • Meilenstein auf 3.0.0 gesetzt

comment:2 Geändert vor 2 Jahren durch grichardson@…

  • Status von new nach assigned geändert
  • Verantwortlicher von m.bunkus@… nach grichardson@… geändert

comment:3 Geändert vor 2 Jahren durch grichardson@…

  • Lösung auf behoben gesetzt
  • Status von assigned nach closed geändert

Ist mit Commit c126984ed1c1e6e1cb84c5f848221f8bf6c0418b behoben, Rabattrundungsfehler sind jetzt unabhängig.

Hinweis: Hilfe zur Verwendung von Tickets finden Sie in TracTickets.