Tutorial: Rundungsfehler in Magento 1.6 beheben

Magento 1+1=1.99Leider ist der altbekannte Rundungsfehler auch in der aktuellen Magento Version 1.6 nicht vollständig behoben. Da Magento die Preise intern teilweise auf 2 Nachkommastellen rundet (weiß der Henker, warum…), entstehen unter bestimmten Voraussetzungen immernoch Abweichungen in der Preisberechnung. Im hier vorliegendem Fall waren es zum Beispiel konfigurierbare Produkte mit Preisen inklusive Mehrwertsteuer.

Das Problem ist zum Glück recht leicht zu beheben. Hierzu muss folgende Funktion der Datei /app/code/core/Mage/Core/Model/Store.php angepasst werden.

1
2
3
4
5
6
7
8
9
10
/**
* Round price
*
* @param mixed $price
* @return double
*/

public function roundPrice($price)
{
return round($price, 2);
}

Ihr seht, dort wird der Preis auf 2 Nachkommastellen gerundet.
Dies ändern wir in 4 Nachkommastellen und speichern die Datei unter /app/code/local/Mage/Core/Model/Store.php (Niemals Änderungen direkt im Core vornehmen!). Schon sollte Magento richtig rechnen.

1
2
3
4
5
6
7
8
9
10
/**
* Round price
*
* @param mixed $price
* @return double
*/

public function roundPrice($price)
{
return round($price, 4);
}

Keine Angst, ausgegeben werden die Preise natürlich trotzdem mit nur 2 Nachkommastellen.

Edit: Einige weitere sinnvolle Ansätze und auch Vorschläge zur Behebung der durch unterschiedliche Rundungen entstehenden Probleme mit Paypal finden sich in den Kommentaren.

Dieser Beitrag wurde unter Magento/eCommerce abgelegt und mit , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

30 Antworten auf Tutorial: Rundungsfehler in Magento 1.6 beheben

  1. Diese Anpassungen sind in einem (nicht sehr bekannten) Modul von Rouven Rieker bereits fertig umgesetzt:
    https://github.com/therouv/Magento-BetterPriceRounding. Die Anpassung behebt einige Rundungsprobleme, aber leider noch nicht alle…

    • Kai Köpke sagt:

      Hallo Andreas, danke für den Hinweis. Das Modul vom Rouven war in meinen Versuchen in der aktuellen Magento Version (1.6.1.0) beim Kunden leider nicht zum Laufen zu kriegen. Daher dieses kleine Tutorial.

  2. nic sagt:

    aber wenn man das ändert, kriegt man ernsthafte probleme mit paypal!!
    http://www.magentocommerce.com/boards/viewthread/266585/
    habt ihr dafür ne lösung??

  3. Fabian sagt:

    Eigentlich unerklärlich, wie so ein Bug immer noch nicht behoben ist. Immerhin sind die Preise nicht so ganz unwichtig für einen Shop …

  4. Daniel Sasse sagt:

    Ich meine es war doch schon einmal behoben in der 1.5er oder nicht?

    • Kai Köpke sagt:

      Zu Teilen wurde es in V1.5 behoben. So ganz leider anscheinend noch nicht, haben wir bald in 1.6 feststellen müssen. Daher war diese kleine Änderung leider noch nötig.

  5. Janine sagt:

    Hallo Kai,

    was sagst du denn bezüglich deines Workarounds und den daraufhin auftretenden Problemen bei der Übergabe an PayPal.
    In meinem Falle kommen dann 90% aller PayPal Zahlung als Fehlerhaft zurück und ich muss sie via Datenbank bzw. Script reaktivieren. Die Zahlung stimmt immer nicht und ich hab dann steuerlich ein Problem.
    Lasse ich das Rundungsproblem aber so, werden mir in der Produktansicht zig Artikel nicht korrekt preislich angezeigt -.-

    Liebe Grüße
    Janine

    • Daniel Sasse sagt:

      Ich meine das mit PayPal liegt an etwas anderem (bin selbst gerade an etwas dran für einen Kunden).

      Im Moment liegen mir 2 Theorien dazu vor:

      1. Die Übergabe im PayPal Modul ist falsch (Steuern, MwSt. Einstellungen werden falsch oder ungenügend berücksichtigt)

      2. Von der PayPal Seite (Entgegennahme der Daten auf der PayPal Seite), hier wird die Art und Weise der Preis Bildung anders gehandhabt, etwa wenn im Warenkorb zzgl. MwSt. eingestellt war dann geht die Gesamtsumme an PayPal und PayPal schlägt dann nochmal die MwSt. drauf.

      Bei der Vielzahl an Steuer Einstellungen und mögliche Scenarien ist es recht schwer einen spezifischen Fehler auszumachen.

      Es soll aber wohl so sein das sich PayPal hier aufgrund eines eigenen Rundungsmechanismus verschluckt in der Berechnung, insbesondere bei Werten mit ,5 – etwa 1,50 €.

      Finde es aber auch sehr bedauerlich das Magento PayPal noch immer mit solchen Kinderkrankheiten kämpft, bzw. das diese xtrem wichtigen Dinge bis heute nicht genügend konfigurierbar sind – das Price Rounding ist sogar im kleinen PrestaShop konfigurierbar!!! 🙁

      Grüße, Daniel

      • Janine sagt:

        Stimme ich dir in allen Punkten zu, als Magento Nutzer und Designer setzt man sich mit solchen Problemen ja gefühlte Ewigkeiten auseinander.
        In meinem Falle ist es leider in der Tat so, das ich PayPal generell nicht aufgeschlüsselt weiterleiten kann. Lasse ich den Rundungsmechanismus von Magento so wie er Standmäßig kommt, kann ich es an PayPal wenigstens als gesammelte Posten weiterleiten.
        Ändere ich den Rundungsmechanismus erhalte ich eben für 90% der PayPal Zahlungen eine Missbrauchswarnung.

        Am Ende machen solche Dinge Magento immer müßig. Ich persönlich verstehe nicht wie sowas nach so langer Zeit immer noch sein kann. Immerhin werden diese Fehler schon seit zig Versionen mit geschleppt.
        Wenn Magento nicht genau das so abbilden würde wie ich mir viele Dinge vorstelle, hätte ich mir vermutlich schon längst ein anderes Shopsystem gesucht.

        Liebe Grüße
        Janine

        • Daniel Sasse sagt:

          Ich bin mittlerweile sehr böse wegen dieses Themas – bei Veröffentlichung der 1.5er wurde es mal ebenso gefixt, aber auch nur weil Deutsche bei der Präsentation in den USA vor Ort waren so viel ich gehört habe und es angesprochen haben vor Ort und man dort wohl keine schlechte Stimmung wollte.

          Ist zwar etwas gewagt zu sagen, aber aus meiner Sicht reine Schikane!
          Natürlich weiß man um diesen Fehler und natürlich wäre man in der Lage es sogar konfigurierbar zu machen, aber warum fixen im Community Produkt? Ist es von Seiten des Herstellers gewünscht das man real mit dem kostenfreien Produkt Umsätze generiert??? Oder bestehen diese Mega-Bugs auch in der Enterprise, Professional & Go Version?

          Grüße, Daniel

          • Kai Köpke sagt:

            Tjo das Problem daran ist, daß in den Staaten (wo nun mal ein Großteil der Magento Entwickler sitzen) Sachen wie Umsatzsteuer und eine Preisauszeichnung wie wir sie kennen und benötigen, offensichtlich nicht wirklich wen interessieren und man es sich daher nunmal so einfach wie möglich macht.

            Ich habe die Hoffnung noch nicht völlig aufgegeben, aber ich bezweifle, daß auch die diesjährige Meet Magento im Mai viel daran ändern wird…

            Zu den anderen Magento Versionen kann auch ich leider nicht viel sagen.

          • Mathis sagt:

            Die Bugs bestehen auch in den Enterprise Modellen

    • Kai Köpke sagt:

      Hallo Janine,

      eine wirkliche Lösung für das Problem habe ich auch noch nicht, allerdings konnte ich es etwas eingrenzen. Magento rechnet nach unseren Änderungen intern mit 4 Nachkommastellen, Paypal bekommt die Preise allerdings immernoch mit nur 2 Nachkommastellen.

      Im Magento Forum gibt es diesbezüglich einige Lösungsansätze, die ich allerdings noch nicht testen konnte.

      Eine schnelle, aber natürlich sehr unsaubere und nicht wirklich zu empfehlende Möglichkeit, ist es, die „Fraud Protection“, also entweder direkt im Paypal-Konto oder in Magento zu deaktivieren. http://www.magentocommerce.com/boards/&/viewthread/222075/P45/#t355633

      Das kann aber einfach keine Lösung sein, denn am Ende kommen in Paypal oft immernoch andere Summen (meist 1 Cent unterschied) heraus, als in Magento. Das kann weder für die Kundenbeziehungen, noch für die Buchhaltung gut sein.

      Es ist ganz einfach traurig, daß solche absoluten Kinderkrankheiten nach über 4 Jahren Entwicklungszeit noch immer nicht behoben sind. In jeder Version kommen neue „tolle“ Features, die oft nur wenige Shops wirklich benötigen, aber solche Selbstverständlichkeiten interessieren dort offensichtlich einfach keinen…

      Wie auch immer, ich bleibe dran und werde, auch wenn ich mit meinen „Entwicklerkünsten“ eher im Webdesign, im Frontend- und Template-Bereich zu Hause bin, weiter nach Lösungen suchen.

  6. Ingo sagt:

    Bzgl. Paypal könnte der Fix hier helfen:

    http://www.collaboration133.com/sales-tax-mismatch-between-magento-checkout-and-paypal-1-cent-01-difference/733/

    Kurzfassung: In der Konfiguration bei PayPal die Option ‚Artikel des Warenkorbs übertragen‘ auf ‚Nein‘ setzen und einen Text für die Warenkorbzusammenfassung eintragen. Ist zwar nicht schön, soll aber funktionieren. Ich konnte es leider nicht testen bisher.

  7. Ingo sagt:

    Nach weiterem Lesen bin ich auf den hier gestoßen:

    http://www.magentocommerce.com/boards/main.php/viewthread/247201/P15/#t373739

    Scheint die einzige Lösung zu sein, die das Problem an der Wurzel packt und einfach die Rundung standardmäßig deaktiviert. Die Preisanzeige wird dadurch jedenfalls behoben. Mal schauen was PayPal dazu sagt… laut o.g. Thread ist das aber auch kein Problem.

  8. dpde sagt:

    Danke für den Hinweis! Werde das demnächst mal ausprobieren.

    Ich fange gerade damit an mich mit Magento zu beschäftigen, bin mir aber in Anbetracht solcher Fehler nicht wirklich sicher ob die Entscheidung die Richtige ist…

  9. Sebastian sagt:

    Ich habe einen anderen Lösungsansatz unter http://auit.de/news/magento-1-7-und-die-steuern-versand-113-article gefunden. Erstmal scheint dieser zu funktionieren (Berechnung + PayPal), allerdings weiß ich nicht ob dieser Hack andere ungewollte Auswirkungen hat

  10. Slaine sagt:

    Gibt es mittlerweile eine Lösung für das Problem mit Paypal?
    Kann hier jemand einen Lösung bestätigen, die dieses Problem endlich aus dem weg räumt?

    Danke und viele Grüße

  11. Fab sagt:

    Der Rundungsfehler entsteht auf der Seite von Paypal und die Bestellungen müssen nachträglich angepasst werden. Der Fehler entsteht dadurch, dass die/der Nettopreis/e nur mit zwei Nachkommastellen nach Paypal übertragen werden und Paypal damit u.U. gar nicht richtig runden kann. Paypal berechnet dann den um einen Cent abweichenden Betrag damit kommt es zu einem Betrugsversuch in Magento. Mehr dazu in diesem Blogartikel: http://fabiankrueger.de/blog/?p=5

  12. Simon sagt:

    Hallo,

    kann es sein, dass es sich hierbei lediglich um ein Konfigurationsprobelm handelt?

    Bei ersten Tests funktioniert alles ohne Code-Modifikation, wenn man im Backend unter System->Konfiguration->Steuern einfach die Berechnungsmethode auf „Einzelpreis“ stellt

    Funktioniert das bei irgendwem nicht?

    MfG
    Simon

    • Alex sagt:

      Hat bei mir leider nicht funktioniert. Habe die Berechnungsmethode auf Einzelpreis gestellt und es dann zweimal getestet: Einmal in Kombi mit „Transfer Cart Line Items“ auf „ja“ und einmal auf „nein“. In beiden Fällen das gleiche Problem.

    • Sascha sagt:

      Hallo Simon,

      in unserem Entwicklungsshop konnte ich Deine Einstellung mit positiven Ergebnissen testen. Bei PayPal bin ich mir aber nicht sicher, ob ich nun den Warenkorb gesammelt oder die Einzelartikel übertragen soll. Hast Du hier einen Hinweis für mich?

      Ich schätze mal, daß es besser ist, die Artikel einzeln zu übertragen, da ja nun PayPal und der Magento-Shop die selben Rundungsmechanismen verwenden, oder?

      Ganz wichtig ist auch, die Änderungen von oben wieder rückgängig zu machen, da sonst ja immer noch unterschiedliche Werte zwischen Shop und PayPal bestehen dürften.

      Vg, Sascha

  13. Christian sagt:

    Habe die 1.7.0.2 Version. Auch hier war das Problem der Rundung nicht behoben.
    Jetzt funktioniert es. DANKE

  14. Matthias sagt:

    Hier findet man ein super Modul, welches sich ebenfalls dem Problem annimmt:
    http://www.magentocommerce.com/boards/main.php/viewthread/247201/P15/#t373739

    Funktioniert bei mir super!

    (Experius_Taxextended.zip)

  15. xonu sagt:

    Behebung für den PayPal-Rundungsfehler in Magento 1.7 ist mit dieser Erweiterung möglich:
    http://www.magentocommerce.com/magento-connect/catalog/product/view/id/20012/

2 Trackbacks/Pingbacks for Tutorial: Rundungsfehler in Magento 1.6 beheben

  1. Blogs aus Mecklenburg-Vorpommern bei ebuzzing.de – Ranking für Januar 2012 | world wide Brandenburg

  2. Blogs aus Mecklenburg-Vorpommern bei ebuzzing.de – Ranking für Februar 2012 | world wide Brandenburg

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.