Wo und wie wird der Brutto VK berechnet?

Thema wurde von sirtet, 14. November 2023 erstellt.

  1. sirtet

    sirtet Erfahrener Benutzer

    Registriert seit:
    4. Juli 2012
    Beiträge:
    1.127
    Danke erhalten:
    89
    Danke vergeben:
    90
    Ich versuche gerade ein Rundungs-Problem zu verstehen.
    Dazu hier meine Frage: Wie und wo genau berechnet Gambio den Brutto-VK?
    Und weiter, ob das ev. in letzter Zeit überarbeitet wurde. Ich habe hier einen 4.8.0.2er Shop, und sehe das Problem zum ersten Mal. Jetzt ist unklar, ob ich das bisher übersehen habe, ob etwas an Gambio geändert hat, oder an meiner WAWI von der ich die Artikel hochlade.

    Hintergrund:
    Gambio und meine WAWI (Vario) scheinen bei brutto/netto anders zu rechnen, das zu Rundungsfehlern in der Anzeige im Shop führt:

    Ich habe in meiner WAWI einen Artikel mit BruttoVK 30CHF, MWST 7.7%
    Vario speichert dazu automatisch als NettoVK 27.86.
    Dieser Wert geht per API an den Shop, der das im Frontend dann als 30.01 darstellt:
    27.86 * 1.077 ergibt 30.00522. Dann wird vermutlich etwas wie SQL round(30.00522,2) gemacht, was eben auf 30.01 aufrundet.

    Wenn ich im Shop-Admin im Artikel einen Brutto von 30.- eingebe, ist danach in der DB 27.8552 gespeichert. Dies mit MWST 7.7 ergibt dann 30.0000504, was beim Runden auf zwei Stellen nicht mehr auf 30.01 kippt.

    PS: Im Admin vom Produkt wird übrigens das gerundete 27.86 gezeigt, aber das hat wohl nur mit Ästhetik zu tun.
    upload_2023-11-14_8-22-38.png
     
  2. Kai Schoelzke

    Kai Schoelzke Beta-Held

    Registriert seit:
    30. März 2016
    Beiträge:
    3.972
    Danke erhalten:
    606
    Danke vergeben:
    292
    Vor ganz ganz langer Zeit gab es mal ein Plugin extra für die Schweiz was sich mit den Rundungen befasst hat, vielleicht hast du das damals installiert und das funktioniert jetzt nicht mehr, das war hier irgendwo im Forum, konnte man downloaden, vielleicht kann da ja der Support helfen.
     
  3. Kai Schoelzke

    Kai Schoelzke Beta-Held

    Registriert seit:
    30. März 2016
    Beiträge:
    3.972
    Danke erhalten:
    606
    Danke vergeben:
    292
  4. sirtet

    sirtet Erfahrener Benutzer

    Registriert seit:
    4. Juli 2012
    Beiträge:
    1.127
    Danke erhalten:
    89
    Danke vergeben:
    90
    Danke. Aber nein, das scheint ein anderes Thema zu sein.
    Ich denke, es hat wie beschrieben damit zu tun, dass die beiden Systeme anders umrechnen und runden zwischen Netto und Brutto.
     
  5. ecomplus.dev

    ecomplus.dev Erfahrener Benutzer

    Registriert seit:
    6. Mai 2013
    Beiträge:
    97
    Danke erhalten:
    76
    Danke vergeben:
    28
    Gambio speichert alle Artikel-Preise immer als Netto-Preise. Um Rundungsfehler zu vermeiden, sollte der Netto-Preis immer 4 Stellen haben.

    Verantwortlich für die Preis-Berechnung ist die Klasse xtcPrice.php :rolleyes:
    Einfachste Lösung wäre wenn deine WaWi den Netto-Preis mit 4 Stellen übergibt.
     

    Anhänge:

    • clear.png
      clear.png
      Dateigröße:
      137 Bytes
      Aufrufe:
      10
  6. sirtet

    sirtet Erfahrener Benutzer

    Registriert seit:
    4. Juli 2012
    Beiträge:
    1.127
    Danke erhalten:
    89
    Danke vergeben:
    90
    Schwierig, VARIO speichert selbst nur zwei Stellen, zb. im Fall von Brutto=30... allgemein zwischen 2 und 4 Stellen.
    Scheint so, dass das abhängig ist davon, wie viele Stellen es braucht, um beim Umrechnen auf Brutto einfach nach zwei Dezimalstellen abschneiden zu können, statt das Runden, das Gambio macht...
    EDIT: Nein, nicht ganz, wohl eher Runden mit drei Kommastellen:
    upload_2023-11-17_9-40-11.png
    Verstehe es nicht... egal, muss ich auch nicht.
     
  7. sirtet

    sirtet Erfahrener Benutzer

    Registriert seit:
    4. Juli 2012
    Beiträge:
    1.127
    Danke erhalten:
    89
    Danke vergeben:
    90
    Hmm, gibt's vielleicht in den Shop Einstellungen irgendetwas wo man die Berechnung konfigurieren kann?
     
  8. sirtet

    sirtet Erfahrener Benutzer

    Registriert seit:
    4. Juli 2012
    Beiträge:
    1.127
    Danke erhalten:
    89
    Danke vergeben:
    90
    Danke.
    Durchblicken tue ich da aber nicht: wenn ich nach round suche, finde ich mehrere Treffer wie:
    PHP:
    1041                         $t_price round($p_special_price$this->currencies[$this->actualCurr]['decimal_places']);
    Das scheint aber nur das Runden auf die in der Währung konfigurierten Anzahl Stellen zu sein.

    Es geht mir ja um die Stelle, wo Brutto errechnet wird. Also wenn ich nach tax suche, finde ich das:
    PHP:
     432         public function xtcAddTax($p_price$p_tax_rate$p_consider_currency true)
    433         {
    434                 $t_price = (float)$p_price + (float)$p_price 100 * (float)$p_tax_rate;
    435
    436                 
    if($p_consider_currency)
    437                 {
    438                         $t_price $this->xtcCalculateCurr($t_price);
    439                 }
    440
    441                 $t_price 
    round($t_price, (int)$this->currencies[$this->actualCurr]['decimal_places']);
    442
    443                 
    return $t_price;
    444         }
    Hmm, das ist scheinbar auch nicht das Gesuchte. Da wird auch mit den Stellen der Währung gerundet. Das sind dann 2 bei mir, wie wohl bei den meisten.

    In den Einstellungen gibt es tatsächlich ein Setting für's Umrechnen:
    upload_2023-11-20_10-1-46.png
    Das kann man im UI aber nicht tiefer als 4 setzen (weniger wird als 4 gespeichert).
    Mit der Suche in Texte anpassen finde ich die Bezeichnung des Feldes: Phrase:pRICE_PRECISION_TITLE
    Heisst das also in der DB ähnlich?
    In der DB finde ich das Feld PRICE_PRECISION, das ist normal 4.
    SELECT * FROM configuration WHERE configuration_key = 'PRICE_PRECISION'
    Ah, das ist's? Nein... wenn ich es in der DB auf 3 setze, ändert sich nichts im UI... Und auch nichts am Rundungsfehler im Frontend.
    Und ah ja, wenn ich das im UI auf 5 setze, bleibt in der DB in configuration der Wert von PRICE_PRECISION unverändert...

    Also, falls jemand mehr weiss:
    gerade frage ich mich weiterhin
    1. wo die Netto-Brutto Umrechnung erfolgt
    2. wo der Wert Umrechnungsgenauigkeit für Dezimalstellen gespeichert wird
    3. wo überall er greift (ev. mehr Orte neben brutto-netto und netto-brutto?)
    4. wozu in der DB in configuration der Wert PRICE_PRECISION dient, wenn nicht für die Umrechnung.
     
  9. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    1.197
    Danke erhalten:
    1.081
    Danke vergeben:
    372
    Das ist in die gx_configurations gewandert:
    Code:
    SELECT *  FROM `gx_configurations` WHERE `key` LIKE 'configuration/PRICE_PRECISION';
     
  10. sirtet

    sirtet Erfahrener Benutzer

    Registriert seit:
    4. Juli 2012
    Beiträge:
    1.127
    Danke erhalten:
    89
    Danke vergeben:
    90
    Ah ja. Aber das scheint nur zu beeinflussen, wie viele Stellen in der DB gespeichert werden in products.price. Auf die Umrechnung netto>brutto hat's offensichtlich keinen Einfluss.
    Ich suche also immernoch die Stelle, wo der Rundungsfehler passiert.
    public function xtcAddTax in xtcPrice.php schien mir erst die richtige Stelle, aber das ist nicht der Fall. Sieht man ja schon daran, dass die Stellen-Zahl der Währung genommen wird. Der Rundungsfehler tritt aber auf, weil offensichtlich mit vier Stellen gerundet wird.
     
  11. sirtet

    sirtet Erfahrener Benutzer

    Registriert seit:
    4. Juli 2012
    Beiträge:
    1.127
    Danke erhalten:
    89
    Danke vergeben:
    90
    Mit grep -irn "configuration/PRICE_PRECISION" . wollte ich finden, wo der Wert aus der DB in eine PHP Konstante übernommen wird, finde damit aber nur eine Datei aus dem Updater, die tut nichts zur Sache.
    Wo also passiert das?
     
  12. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    1.197
    Danke erhalten:
    1.081
    Danke vergeben:
    372
    configuration ist sowas wie die Konfigurationsgruppe. Wenn Du nur nach PRICE_PRECISION suchst, findest Du diese Dateien:

    /system/overloads/ProductRepositoryWriter/QuickEditProductRepositoryWriter.inc.php
    /system/classes/properties/PropertiesControl.inc.php
    /admin/includes/modules/categories_view.php
    /admin/includes/modules/set_stored_product_data.inc.php
    /admin/includes/modules/set_product_data.inc.php
    /admin/includes/modules/orders_edit_properties.inc.php
    /admin/includes/functions/general.php
    /admin/includes/classes/categories.php
    /admin/orders_edit_options.php
    /admin/specials.php
    /admin/html/compatibility/product/price_options.inc.php
    /GambioAdmin/Modules/Configuration/App/Data/definitions/configurations.json
    /GambioAdmin/Modules/Configuration/App/Data/definitions/groups.json
     
  13. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    7. November 2022
    Beiträge:
    55
    Danke erhalten:
    34
    Danke vergeben:
    33
    Hab jetzt den Thread jetzt nicht gelesen, aber es gibt unter Einstellungen/System/ Gambio Admin die Einstellung "Umrechnungsgenauigkeit für Dezimalstellen" - Standard = 4
     
  14. sirtet

    sirtet Erfahrener Benutzer

    Registriert seit:
    4. Juli 2012
    Beiträge:
    1.127
    Danke erhalten:
    89
    Danke vergeben:
    90
    @Stephan Hochradl ja, das ist oben schon beschrieben dass dies nicht hilft bei meinem Problem. Es ändert die Genauigkeit, mit der der Netto-Preis gespeichert wird.
    Was mich da interessieren würde ist, warum man das überhaupt einstellen kann, also welche Situationen das erfordern.

    @Dominik Späte Ja, genau das hab ich gesehen.
    Aber das sind zum einen alles Orte wo der Wert angewendet wird, ich suche für's Verständnis noch die Definition, etwas wie
    const PRICE_PRECISION = [Wert aus der DB]...

    Zum anderen sind das ausser /admin/includes/functions/general.php immer Dateien spezifische Bereiche, für die Preisausgabe am Produkt etc. müsste etwas anderes zuständig sein, nicht?
    EDIT: ah, die general.php ist ja in admin/, kann also auch nicht für's Frontend zuständig sein... ja, testhalber umbenannt, Shop läuft weiter.
    Somit sind eigentlich alle Dateien ausgeschlossen. Mein Verdacht ist, dass die Umrechnung irgendwo passiert mit der Genauigkeit hartcodiert. Das deckt sich ja auch damit, dass ein ändern von PRICE_PRECISION in der DB nichts auslöst.
     
  15. sirtet

    sirtet Erfahrener Benutzer

    Registriert seit:
    4. Juli 2012
    Beiträge:
    1.127
    Danke erhalten:
    89
    Danke vergeben:
    90
    Ah... für's Frontend ist tatsächlich xtcPrice.php zuständig...
    Wieso schrieb ich das nur? tax wird doch dazugerechnet auf Zeile 434!

    PHP:
     432         public function xtcAddTax($p_price$p_tax_rate$p_consider_currency true)
    433         {
    434                 $t_price = (float)$p_price + (float)$p_price 100 * (float)$p_tax_rate;
    435
    436                 
    if($p_consider_currency)
    437                 {
    438                         $t_price $this->xtcCalculateCurr($t_price);
    439                 }
    440
    441                 $t_price 
    round($t_price,       1);// (int)$this->currencies[$this->actualCurr]['decimal_places']);
    442
    443                 
    return $t_price;
    444         }
    Und wenn ich die Genauigkeit in Zeile 441 auf 1 Nachkommastelle verbiege, werde ich auch die Rundungsfehler los...
    Das ist etwas gemurkst, aber da ich keine feineren Abstufungen habe als 0.1 genügt das vermutlich vorerst... Sollte ja von Vario gefixt werden vermutlich.
    Ich habe schon mal angefragt dort, wie sie denn netto>>brutto rechnen, dann könnte ich das dort einfügen.

    Was mir noch fehlt, ist die Stelle, die das für den Admin Bereich umrechnet. Aber man kann auch damit leben, dass dort noch falsch gerundet wird. Editieren sollte ich eh nur noch in der WAWI...
     
  16. barbara_schutz

    barbara_schutz Neues Mitglied

    Registriert seit:
    15. Dezember 2023
    Beiträge:
    4
    Danke erhalten:
    0
    Hello,
    Bist du weiter gekommen? Ich habe auch einen Schweizer-Shop und Probleme, dass es nicht auf 5 Rappen rundet.
    Danke für die Info und liebe Grüsse
    Daniela
     
  17. sirtet

    sirtet Erfahrener Benutzer

    Registriert seit:
    4. Juli 2012
    Beiträge:
    1.127
    Danke erhalten:
    89
    Danke vergeben:
    90
    Nein, ich habe ja die temporäre "Lösung" für mich im letzten Beigrag, das definitive muss vom WAWI Hersteller kommen.

    Im Thread hier geht's ja um die schon weiter oben beantwortete Frage Wo und wie wird der Brutto VK berechnet?
    Deine Frage tönt etwas anders. Darum denke ich am besten machst du einen neuen Thread, beschreibst dort was/wo denn genauer dein Problem ist (beschreib ob das beim Warenkorb vorkommt wegen Stück-Multiplikation, weil du Netto eingibst und "gerade" brutto willst, etc...). Kannst mich gerne mit @sirtet erwähnen, damit ich die Frage mitbekomme. Vielleicht weiss ich dann was dazu.