Preis Nachkommastellen

Versuch es mal hier: $event = $this-\>createEvent( 'Shopware\_Modules\_Basket\_AddArticle\_Start', 'onBasket\_AddArticle\_Start' ); $this-\>subscribeEvent($event); An dieser Stelle wird die Tabelle s_order_basket gefüllt :wink: Betrifft die Prozedur sAddArticle aus der Datei core/sBasket.php

Habe eben gerade herausgefunden wenn ich in der sBasket.php in der Funktion sUpdateArticle $brutto = $this-\>sSYSTEM-\>sMODULES['sArticles']-\>sCalculatingPriceNum($netprice,$queryNewPrice["tax"],false,false,$queryNewPrice); einfach mal in $brutto = $netprice \* 1.19; ändere ist die Summe eines Artikels richtig, allerdings unten die Summe im Warenkorb nicht, die Gesamtsumme aber ist richtig. Und wie bekomme ich es hin dass im Warenkorb der Einzelpreis eines Artikels beispielsweise nicht 0,05 sondern 0,0534 ist?

[quote=“parkkralleshop”]Habe eben gerade herausgefunden wenn ich in der sBasket.php in der Funktion sUpdateArticle $brutto = $this-\>sSYSTEM-\>sMODULES['sArticles']-\>sCalculatingPriceNum($netprice,$queryNewPrice["tax"],false,false,$queryNewPrice); einfach mal in $brutto = $netprice \* 1.19; ändere ist die Summe eines Artikels richtig, allerdings unten die Summe im Warenkorb nicht, die Gesamtsumme aber ist richtig. Und wie bekomme ich es hin dass im Warenkorb der Einzelpreis eines Artikels beispielsweise nicht 0,05 sondern 0,0534 ist?[/quote] Hier wird der Warenkorb zum ersten mal gefüllt bzw. die Tabelle s_order_basket: Prozedur sAddArticle aus der Datei core/sBasket.php Entweder wird hier im Code dann auf 2 Stellen nach dem Komma gerundet, oder nicht jede Preisangabe in den Artikel-Tabellen hat 4 Stellen hinter dem Komma.

Danke erstmal. Noch ein Preis stimmt aber nicht ganz. Nämlich der in der Auftragsbestätigung die dem Kunden per Mail geschickt wird. Da ist der Einzelpreis mit 3 Nachkommastellen drin statt mit 4. Jemand einen Rat?

Altes Thema, alte Shopwareversion. Ich habe allerdings das gleiche Problem mit der 4.0.4. Nun hat sich ja die komplette Struktur verändert und mir fehlt der Ansatzpunkt. :-/

hier das gleich Problem… Kann jemand helfen?

Damit die Preise richtig gerechnet werden, müssen alle round()-Funktionen in engine/core/class/sBasket.php geändert werden von round($var,2); in round($var,4); in der public function sGetBasket() Ich hab außerdem zusätzlich eine Datei angelegt „engine/Library/Enlight/Template/Plugins/modifier.currencyLong.php“ (Kopie von engine/Library/Enlight/Template/Plugins/modifier.currency.php) Dort habe ich nach $currency = Enlight\_Application::Instance()-\>Currency(); den Wert $config['precision'] = 4; hinzugefügt. Die Methode heißt dann natürlich function smarty_modifier_currencyLong($value, $config = null, $position = null) Dann kann man den Modifier currentLong im Template an den stellen nutzen, wo man ihn benötigt. {$row.price|currencyLong} Wer grundsätzlich alle Preise ändern will, kann einfach gleich die engine/Library/Enlight/Template/Plugins/modifier.currency.php anpassen.

Hi, irgendwie ist es schon sehr traurig, dass man an diesen Dateien selbst rumwerkeln soll/muss und diese Fehler nicht von Shopware endlich mal bereinigt werden. Es werden so viele Sachen angepackt, neue Versionen, dauernd neue Updates, neue Projekte, aber das Wesentliche und Wichtige wird einfach nicht gemacht, obwohl das Problem seit der 3er Version schon besteht. :thumbdown: Eine richtige Berechnung ist das A und O einer Shopsoftware! Bitte Shopware packt dieses Thema endlich mal an und sorgt für eine richtige Berechnung.

Hallo zusammen, das Thema wird von uns angepackt. Es ist definitiv nicht vergessen! Um dieses Verhalten zu ändern müssen in Shopware weitreichende Änderungen vorgenommen werden. Dies ist nicht mit ein paar Zeilen Code korrekt zu bewerkstelligen. Die hier genannten Workarounds sind auch nur mit Vorsicht zu genießen. Sinnvoll ist es auf jeden Fall nach einer solchen Änderung einiges zu testen. Zum Beipsiel Kundengruppenpreise / Brutto / Netto / Rabatte / Preisgruppen etc. Von uns wird dies geändert, wenn die Refakturierung der Core Klassen durchgeführt wurde. Dann wird es an den Stellen komplett neue Berechnungen, bzw. dementsprechende Anpassungen geben. Grüße aus dem Münsterland Patrick Schücker

Hallo Patrick, schön, dass mal ein Statement von Euch dazu kommt und nicht vergessen ist. Nur haben wir mittlerweile 2014 und seit 2009 bin ich bei Euch bzw. habe ich die Software von Euch und während dieser Zeit hat sich nichts getan, obwohl alle das dauernd bemängelt haben und immer noch bemängeln. [quote=„Patrick Schücker“] Von uns wird dies geändert, wenn die Refakturierung der Core Klassen durchgeführt wurde. Dann wird es an den Stellen komplett neue Berechnungen, bzw. dementsprechende Anpassungen geben.[/quote] Ich hoffe doch, dass wir alle wenigsten in diesem Jahr mit einer Behebung dieses Problem rechnen können und nicht noch ein paar Jahre darauf warten müssen. Es ist wirklich mehr als wichtig.

[quote=“Patrick Schücker”]Hallo zusammen, das Thema wird von uns angepackt. Es ist definitiv nicht vergessen! Um dieses Verhalten zu ändern müssen in Shopware weitreichende Änderungen vorgenommen werden. Dies ist nicht mit ein paar Zeilen Code korrekt zu bewerkstelligen. Die hier genannten Workarounds sind auch nur mit Vorsicht zu genießen. Sinnvoll ist es auf jeden Fall nach einer solchen Änderung einiges zu testen. Zum Beipsiel Kundengruppenpreise / Brutto / Netto / Rabatte / Preisgruppen etc. Von uns wird dies geändert, wenn die Refakturierung der Core Klassen durchgeführt wurde. Dann wird es an den Stellen komplett neue Berechnungen, bzw. dementsprechende Anpassungen geben. Grüße aus dem Münsterland Patrick Schücker[/quote] Hallo Patrick, danke für deine Antwort nur ist das leider nicht einfach so leicht zu sagen. Meine Entwickler und ich waren schockiert, als wir für einen unseren Kunden genau diese Anpassungen machen mussten und es kann auch nicht sein, dass man als Agentur und Shopware Partner sich mit so einen unsauberen Code herumschlagen muss und mit Funktionen die 500 Zeilen lang sind. Warum gibt es keine zentrale Klasse in der für den gesamten Shop alle Rundungen und Preis Funktionen erledigt werden. Es ist immer doof andere Systeme zu vergleichen, es spricht aber nichts gegen abzuschauen wie das dort gelöst wurde: Beispiel OXID eShop: oxRegistry::getUtils()-\>fRound( $dVatValue ); Dh. ich brauche nur eine Funktion im gesamten Shop anzupassen und damit ist es für den gesamten Shop gültig, damit ist ein PlugIn in 10 Min. fertig und der Shop kann weiterhin aktualisiert werden, nicht wie bei der aktuellen rumgurkerei bei Shopware. Ich kann euch daher nur ans Herz legen hausintern die Refakturierung voranschreiten zu lassen, daher weiter so bitte.

Servus, Naja das mag ja evtl. Bei der Konkurrenz besser gelöst sein. Aber das genannte System hat dafür viele andere Schwächen. Iframes im backend, modulare Plugins kennen die nicht, Standard Frameworks sind ein Fremdwort etc. Soll heißen, dass jedes System so seine Stärken hat, aber sicher auch seine Schwächen. Edit: aber ich gebe dir recht, das ist nichts was uns Agenturen beschäftigen sollte, da es nunmal Core ist.

[quote=„Martin Weinmayr“]Servus, Naja das mag ja evtl. Bei der Konkurrenz besser gelöst sein. Aber das genannte System hat dafür viele andere Schwächen. Iframes im backend, modulare Plugins kennen die nicht, Standard Frameworks sind ein Fremdwort etc. Soll heißen, dass jedes System so seine Stärken hat, aber sicher auch seine Schwächen.[/quote] Hi Martin, darum geht’s doch gar nicht! Es soll kein System beworben werden, das hier beschriebene Problem und die Sauberkeit vom Code ist dort sicherlich mehr gegeben. Natürlich hat jedes System seine vor und Nachteile, nur dein Kommentar hilft hier sicherlich nicht weiter. Wir arbeiten mit beiden System und sehr gerne mit Shopware, sonst wäre ich auch keine Partnerschaft eingegangen. Im Endeffekt muss man immer das beste System für den Kunden finden und dabei seine eigene Präferenz hinten anstellen.

1 Like

Ja da hat du vollkommen recht. Und ja ich gebe es zu ich habe genau diese Stelle bei o*id auch schon verändert :wink:

Hallo, wie ist der aktuelle Stand bei den Nachkommastellen? Ich friemel mich hier auch seit Tagen durchs System - leider ohne Erfolg Wir benötigen für unseren Shop genaue Preise welche aus mindestens 4 Nachkommastellen berechnet werden. Gruß Bielenberg

Hallo Bielenberg, ich kann dir leider noch nichts neues sagen. Diese Änderung ist bei Shopware nicht ganz trivial und kann eine ganze Menge Nebeneffekte nach sich ziehen. Das ist auch der Grund, warum wir keine quick and dirty Lösung anbieten können. Es muss dafür eine Menge tief im Core geändert werden. Dadurch sind auch sehr umfassende Tests unumgänglich. Dieser Punkt wird aber nach der Refakturierung der Core Klassen angegangen. Diese ist auch Grundlage der Anpassungen und kann daher nicht vorgezogen werden. Grüße aus dem Münsterland Patrick Schücker

Ist mit der 4.3.3 bezüglich der Integration dieses Features bereits etwas geschehen? Wäre eine Erklärung, warum mein SwagPayPal Modul 4 Dezimalstellen übergibt, was in PayPal zu kuriosen Preisanzeigen führt: : exception 'Zend\_Http\_Client\_Exception' with message 'Error in cURL request: SSL certificate problem: unable to get local issuer certificate' in D:\inetpub\wwwroot\*\engine\Library\Zend\Http\Client\Adapter\Curl.php:426 Stack trace: #0 D:\inetpub\wwwroot\*\engine\Library\Zend\Http\Client.php(1073): Zend\_Http\_Client\_Adapter\_Curl-\>write('GET', Object(Zend\_Uri\_Http), '1.1', Array, '') #1 D:\inetpub\wwwroot\*\engine\Shopware\Plugins\Default\Frontend\SwagPaymentPaypal\Components\Paypal\Client.php(105): Zend\_Http\_Client-\>request('GET') #2 D:\inetpub\wwwroot\*\engine\Shopware\Plugins\Default\Frontend\SwagPaymentPaypal\Controllers\Frontend\PaymentPaypal.php(152): Shopware\_Components\_Paypal\_Client-\>\_\_call('setExpressCheck...', Array) #3 D:\inetpub\wwwroot\*\engine\Shopware\Plugins\Default\Frontend\SwagPaymentPaypal\Controllers\Frontend\PaymentPaypal.php(152): Shopware\_Components\_Paypal\_Client-\>setExpressCheckout(Array) #4 D:\inetpub\wwwroot\*\engine\Library\Enlight\Controller\Action.php(159): Shopware\_Controllers\_Frontend\_PaymentPaypal-\>gatewayAction() #5 D:\inetpub\wwwroot\*\engine\Library\Enlight\Controller\Dispatcher\Default.php(528): Enlight\_Controller\_Action-\>dispatch('gatewayAction') #6 D:\inetpub\wwwroot\*\engine\Library\Enlight\Controller\Front.php(228): Enlight\_Controller\_Dispatcher\_Default-\>dispatch(Object(Enlight\_Controller\_Request\_RequestHttp), Object(Enlight\_Controller\_Response\_ResponseHttp)) #7 D:\inetpub\wwwroot\*\engine\Shopware\Kernel.php(141): Enlight\_Controller\_Front-\>dispatch() #8 D:\inetpub\wwwroot\*\vendor\symfony\http-kernel\Symfony\Component\HttpKernel\HttpCache\HttpCache.php(472): Shopware\Kernel-\>handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #9 D:\inetpub\wwwroot\*\engine\Shopware\Components\HttpCache\AppCache.php(256): Symfony\Component\HttpKernel\HttpCache\HttpCache-\>forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL) #10 D:\inetpub\wwwroot\*\vendor\symfony\http-kernel\Symfony\Component\HttpKernel\HttpCache\HttpCache.php(429): Shopware\Components\HttpCache\AppCache-\>forward(Object(Symfony\Component\HttpFoundation\Request), true) #11 D:\inetpub\wwwroot\*\vendor\symfony\http-kernel\Symfony\Component\HttpKernel\HttpCache\HttpCache.php(329): Symfony\Component\HttpKernel\HttpCache\HttpCache-\>fetch(Object(Symfony\Component\HttpFoundation\Request), true) #12 D:\inetpub\wwwroot\*\engine\Shopware\Components\HttpCache\AppCache.php(178): Symfony\Component\HttpKernel\HttpCache\HttpCache-\>lookup(Object(Symfony\Component\HttpFoundation\Request), true) #13 D:\inetpub\wwwroot\*\vendor\symfony\http-kernel\Symfony\Component\HttpKernel\HttpCache\HttpCache.php(193): Shopware\Components\HttpCache\AppCache-\>lookup(Object(Symfony\Component\HttpFoundation\Request), true) #14 D:\inetpub\wwwroot\*\engine\Shopware\Components\HttpCache\AppCache.php(113): Symfony\Component\HttpKernel\HttpCache\HttpCache-\>handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #15 D:\inetpub\wwwroot\*\shopware.php(109): Shopware\Components\HttpCache\AppCache-\>handle(Object(Symfony\Component\HttpFoundation\Request)) #16 {main} Time: 2015-03-28T15:07:20.165488+0100 Channel: core request: {"uri":"/payment\_paypal/express","method":"GET","query":{"controller":"payment\_paypal","action":"express"},"post":[]} session: {"sessionId":"\*","Bot":false,"sOutputNet":false,"sRegister":{"billing":{"country":2}},"sCountry":2,"sState":0,"sArea":1,"sPaymentID":6,"sBasketQuantity":"1","[color=red][b]sBasketAmount":"119.9500"[/b][/color],"sBasketCurrency":1,"sNotifcationArticleWaitingForOptInApprovement":null,"sLastArticle":"40","sPartner":null,"sDispatch":null,"sUserId":null,"sOrderVariables":null}

Nein, der Anzeigefehler liegt bei PayPal. Wir können da nichts machen. Ist auch nicht das erste mal oder so. Heiner

Das Thema ist ja nun schon etwas älter, aber anscheinend hat sich immer noch nichts getan. Oder übersehe ich etwas wesentliches? Ich brauche für unseren Shop auch die Möglichkeit, mit 4 Nachkommastellen zu arbeiten. Aber alle Vorgehensweisen, die ich finden kann, scheinen mir nachher mehr Probleme zu verursachen als wirklich Lösung zu sein.

1 Like

Der aktuelle Stand würde mich auch einmal interessieren. Kann bisher keine Veränderungen erkennen.