Umfrage zum Shopware Forum ›
Marcel GörtzMarcel Görtz MitgliedKommentare: 148 Danke erhalten: 23 Mitglied seit: Juni 2011 bearbeitet März 2015
Hallo,

ich möchte im Backend Preise mit 4 Nachkommastellen, also zum Beispiel 0,0512 eingeben können. Ist das realisierbar? Brauche das unbedingt.

Danke im Voraus.

Edit:
Habe es gelöst.
in /engine/backend/modules/articles/artikeln1.inc.php in Zeile 825 hinten die 2 durch eine 4 ersetzen:
$priceregulary[$Tkey][$i] = round($priceArray["price"]*(100+return_tax($_SHOPWARE["EDIT"]["taxID"]))/100,4);
Damit im Warenkorb damit gerechnet wird /engine/core/class/sBasket.php in Zeile 1017:
$getArticles[$key]["amount"] = $quantity * round($price,4);

Kommentare

  • Marcel GörtzMarcel Görtz MitgliedKommentare: 148 Danke erhalten: 23 Mitglied seit: Juni 2011
    Habe doch noch ein Problem.
    Ich brauche die Stelle wo der Artikel den ich in den Warenkorb lege in die Datenbank in s_order_basket geschrieben wird. Da wird nämlich der Brutto Betrag nur mit 2 Nachkommastellen eingetragen und ich weiß nicht wo ich das ändern kann.
  • Marcel GörtzMarcel Görtz MitgliedKommentare: 148 Danke erhalten: 23 Mitglied seit: Juni 2011
    Niemand kann helfen?
  • Stefan HamannStefan Hamann AdministratorKommentare: 2473 Danke erhalten: 442 Mitglied seit: Juni 2010
    Schau mal in die sBasket > sUpdateArticle - dort wird der Artikelpreis je Position im Warenkorb gesetzt!
  • Marcel GörtzMarcel Görtz MitgliedKommentare: 148 Danke erhalten: 23 Mitglied seit: Juni 2011
    Aber das liest ja den Preis aus s_order_basket aus. Genau dort ist der Preis ja aber nur mit 2 Nachkommastellen eingetragen. Es müsste also eigentlich so verändert werden dass wenn ich den Artikel in den Warenkorb lege der Preis aus s_articles_price genauso wie er ist in s_order_basket eingetragen wird, mit allen Nachkommastellen.

    Muss das dann nicht eher in sArticles sein?
  • Marcel GörtzMarcel Görtz MitgliedKommentare: 148 Danke erhalten: 23 Mitglied seit: Juni 2011
    Keine weiteren Vorschläge?
  • Marcel GörtzMarcel Görtz MitgliedKommentare: 148 Danke erhalten: 23 Mitglied seit: Juni 2011
    Keine weitere Hilfe?
  • ottschoottscho MitgliedKommentare: 2551 Danke erhalten: 244 Mitglied seit: Oktober 2010
    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 ;)
    Betrifft die Prozedur sAddArticle aus der Datei core/sBasket.php
  • Marcel GörtzMarcel Görtz MitgliedKommentare: 148 Danke erhalten: 23 Mitglied seit: Juni 2011
    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?
  • ottschoottscho MitgliedKommentare: 2551 Danke erhalten: 244 Mitglied seit: Oktober 2010
    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?
    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.
  • Marcel GörtzMarcel Görtz MitgliedKommentare: 148 Danke erhalten: 23 Mitglied seit: Juni 2011
    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?
  • tastytasty MitgliedKommentare: 41 Danke erhalten: 1 Mitglied seit: Oktober 2011
    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. :-/
  • steffendrucksteffendruck MitgliedKommentare: 8 Danke erhalten: 0 Mitglied seit: Februar 2013
    hier das gleich Problem... Kann jemand helfen?
  • TinaTina MitgliedKommentare: 44 Danke erhalten: 0 Mitglied seit: Juli 2013
    Würde mich auch interessieren. Hat inzwischen jemand eine Lösung für Shopware 4?
  • TinaTina MitgliedKommentare: 44 Danke erhalten: 0 Mitglied seit: Juli 2013
    Ich habe in Shopware 4.1.2 folgende Stellen geändert:

    engine/core/class/sArticles.php Zeile 3319
    return round($money_str, 4);
    
    templates/default/backend/article/view/detail/prices.js Zeile 257, 282 und 291
    decimalPrecision: 4,
    
    templates/default/backend/article/view/variant/list.js Zeile 312
    decimalPrecision: 4
    
    engine/Library/ExtJs/locale/ext-lang-de.js Zeile 303
    format: '0.000,0000/i'
    
    Das Problem bei der ExtJS ist, dass dann sämtliche numerische Werte im Backend vierstellig angezeigt werden. Außerdem wird in der Artikelübersicht der gerundete Preis angezeigt, dann aber mit zwei zusätzlichen Nullen hinten dran, was ja gar keinen Sinn macht. Hat jemand dafür eine Lösung?
  • lobbylobby MitgliedKommentare: 21 Danke erhalten: 1 Mitglied seit: September 2013
    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.
  • artepartep MitgliedKommentare: 3168 Danke erhalten: 476 Mitglied seit: Juli 2010
    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.
  • Patrick SchückerPatrick Schücker AdministratorKommentare: 947 Danke erhalten: 170 Mitglied seit: April 2012
    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
  • artepartep MitgliedKommentare: 3168 Danke erhalten: 476 Mitglied seit: Juli 2010
    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.
    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.
    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.
  • ecom-softwareecom-software MitgliedKommentare: 18 Danke erhalten: 2 Mitglied seit: September 2012
    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,

    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.
  • Martin WeinmayrMartin Weinmayr MitgliedKommentare: 203 Danke erhalten: 26 Mitglied seit: Januar 2014
    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.
  • ecom-softwareecom-software MitgliedKommentare: 18 Danke erhalten: 2 Mitglied seit: September 2012
    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.
    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.
    Danke von 1Martin Weinmayr
  • Martin WeinmayrMartin Weinmayr MitgliedKommentare: 203 Danke erhalten: 26 Mitglied seit: Januar 2014
    Ja da hat du vollkommen recht.
    Und ja ich gebe es zu ich habe genau diese Stelle bei o*id auch schon verändert ;-)
  • BielenbergBielenberg MitgliedKommentare: 1 Danke erhalten: 0 Mitglied seit: März 2014
    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
  • Patrick SchückerPatrick Schücker AdministratorKommentare: 947 Danke erhalten: 170 Mitglied seit: April 2012
    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
  • cabriospasscabriospass MitgliedKommentare: 16 Danke erhalten: 0 Mitglied seit: März 2015
    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}
    
  • Heiner LohausHeiner Lohaus ModeratorKommentare: 925 Danke erhalten: 264 Mitglied seit: Juni 2010
    Nein, der Anzeigefehler liegt bei PayPal.
    Wir können da nichts machen.
    Ist auch nicht das erste mal oder so.

    Heiner
  • PC_BienePC_Biene MitgliedKommentare: 6 Danke erhalten: 1 Mitglied seit: 1. Februar

    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.

Anmelden oder Registrieren, um zu kommentieren.