geko2010 Posted November 19, 2013 Share Posted November 19, 2013 Ciao a tutti, ho sfogliato i vari post ma ma non ho trovato soluzioni a riguardo, spero che qualcuno possa aiutarmi. Ho riscontrato degli errori di calcolo nel carrello, anche banali, per il calcolo dell'importo iva. Non si tratta solo di arrotondamenti ma anche di calcoli matematici semplici. Ad esempio: qui di seguito potete ben vedere che l'iva al 22% sull'imponibile di € 36.50 dovrebbe essere: 36.50 x 22/100 = 8.03 (calcolo semplice senza alcun arrotondamento) Invece lo calcola 8.02 Qui invece si tratta di un arrotondamento mancante, infatti l'iva su € 153.57 è di € 33.7854 che arrotondata con modalità classica da € 33.79 il sitema invece "sega" le cifre millesimali senza arrotondarle e diventa € 33.78 Questi errori però non sono sistematici, difatti qui di seguito il calcolo è esatto: Ho ricreato una nuovo voce iva al 22% ed ho aggiornato le regole tasse degli stati. Ho provato a cambiare i l metodo di arrotondamento ma non va bene. Che posso fare??? Link to comment Share on other sites More sharing options...
Guest Posted November 19, 2013 Share Posted November 19, 2013 niente, è il tipo di arrotondamento che applica PS che non funziona come deve. Soluzione ? andare a rivedere tutto il sistema di arrotondamento e sistemarlo saluti Link to comment Share on other sites More sharing options...
geko2010 Posted November 19, 2013 Author Share Posted November 19, 2013 eri ironico? (spero) Link to comment Share on other sites More sharing options...
Guest Posted November 19, 2013 Share Posted November 19, 2013 ironico ? e perchè dovrei esserlo ? hai presentato un problema e ti è stata data risposta, dove leggi l'ironia nella risposta ? Link to comment Share on other sites More sharing options...
geko2010 Posted November 19, 2013 Author Share Posted November 19, 2013 ironico ? e perchè dovrei esserlo ? hai presentato un problema e ti è stata data risposta, dove leggi l'ironia nella risposta ? Scusa, ho interpretato male il tuo: "andare a rivedere TUTTO il sistema di arrotondamento e sistemarlo". Mi sembrava una frase del tipo: "Sto' sito è tutto da rifare!" beh... non ci far caso... mie fantasie... Comunque dimmi. Dove lo trovo il sistema di arrotondamento?? Link to comment Share on other sites More sharing options...
eugenata Posted November 20, 2013 Share Posted November 20, 2013 Ciao geko2010, credo purtroppo che solved abbia ragione. Anche io in alcuni casi ho riscontrato problemi con il sistema di arrotondamento di prestashop. Ho notato che questi errori si verificano quando si importano prodotti da un listino ma non quando si generano da b.o. Prova a verificare questa cosa creando un prodotto di pari importo a quello dove riscontri l'anomalia e mettilo nel carrello per vedere come lo arrotonda. Link to comment Share on other sites More sharing options...
geko2010 Posted November 20, 2013 Author Share Posted November 20, 2013 Ciao geko2010, credo purtroppo che solved abbia ragione. Anche io in alcuni casi ho riscontrato problemi con il sistema di arrotondamento di prestashop. Ho notato che questi errori si verificano quando si importano prodotti da un listino ma non quando si generano da b.o. Prova a verificare questa cosa creando un prodotto di pari importo a quello dove riscontri l'anomalia e mettilo nel carrello per vedere come lo arrotonda. Grazie Eugenata. Purtroppo i casi in cui riscontro il problema sono sui totali delle somme di più prodotti. Nel primo caso però, se notate bene, non si tratta di arrotondamento ma proprio di una moltiplicazione errata! 36.50 x 22/100 = 8.03 non c'è nessun arrotondamento che possa darmi 8.02 !!! Link to comment Share on other sites More sharing options...
Guest Posted November 20, 2013 Share Posted November 20, 2013 si è sempre un errore di arrotondamento, nel senso che ci sono scenari di calcolo che PS non prevede e quindi applica una regola di arrotondamento sballata e questo causa appunto errori come dici. l'errore è sempre causato dalla funzione di arrotondamento di PS la quale non prevede tutti gli scenari possibili Link to comment Share on other sites More sharing options...
geko2010 Posted November 21, 2013 Author Share Posted November 21, 2013 Ho dato un'occhiata ai file delle cartelle classes e controllers ma, per quel poco che capisco, non ho trovato le funzioni di arrotondamento. Link to comment Share on other sites More sharing options...
Guest Posted November 21, 2013 Share Posted November 21, 2013 comincia da qui classes/Cart.php Link to comment Share on other sites More sharing options...
geko2010 Posted November 21, 2013 Author Share Posted November 21, 2013 (edited) l'avevo già guardato e l'unica voce che parla di calcolo delle tasse mi sembra questa: if ($this->_taxCalculationMethod == PS_TAX_EXC) { $row['price'] = Product::getPriceStatic((int)$row['id_product'], false, isset($row['id_product_attribute']) ? (int)($row['id_product_attribute']) : NULL, 2, NULL, false, true, (int)($row['cart_quantity']), false, ((int)($this->id_customer) ? (int)($this->id_customer) : NULL), (int)($this->id), ((int)($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) ? (int)($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) : NULL), $specificPriceOutput); // Here taxes are computed only once the quantity has been applied to the product price $row['price_wt'] = Product::getPriceStatic((int)$row['id_product'], true, isset($row['id_product_attribute']) ? (int)($row['id_product_attribute']) : NULL, 2, NULL, false, true, (int)($row['cart_quantity']), false, ((int)($this->id_customer) ? (int)($this->id_customer) : NULL), (int)($this->id), ((int)($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) ? (int)($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) : NULL)); $tax_rate = Tax::getProductTaxRate((int)$row['id_product'], (int)($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')})); $row['total_wt'] = Tools::ps_round($row['price'] * (float)$row['cart_quantity'] * (1 + (float)($tax_rate) / 100), 2); $row['total'] = $row['price'] * (int)($row['cart_quantity']); } else { $row['price'] = Product::getPriceStatic((int)$row['id_product'], false, (int)$row['id_product_attribute'], 6, NULL, false, true, $row['cart_quantity'], false, ((int)($this->id_customer) ? (int)($this->id_customer) : NULL), (int)($this->id), ((int)($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) ? (int)($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) : NULL), $specificPriceOutput); $row['price_wt'] = Product::getPriceStatic((int)$row['id_product'], true, (int)$row['id_product_attribute'], 2, NULL, false, true, $row['cart_quantity'], false, ((int)($this->id_customer) ? (int)($this->id_customer) : NULL), (int)($this->id), ((int)($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) ? (int)($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) : NULL)); /* In case when you use QuantityDiscount, getPriceStatic() can be return more of 2 decimals */ $row['price_wt'] = Tools::ps_round($row['price_wt'], 2); $row['total_wt'] = $row['price_wt'] * (int)($row['cart_quantity']); $row['total'] = Tools::ps_round($row['price'] * (int)($row['cart_quantity']), 2); } non trovo l'opzione degli arrotondamenti, a parte quella dei decimali. Edited November 21, 2013 by geko2010 (see edit history) Link to comment Share on other sites More sharing options...
Guest Posted November 21, 2013 Share Posted November 21, 2013 non trovo l'opzione degli arrotondamenti, a parte quella dei decimali. [geko2010] se fosse così semplice intervenire su PS sarebbe alla portata di tutti non credi ? io ti ho detto parti da li e poi ti vai a cercare tutte le funzioni in altri file che gestiscono il carrello, fino a trovare la funzione che si occupa degli arrotondamenti Link to comment Share on other sites More sharing options...
atomozero Posted January 16, 2014 Share Posted January 16, 2014 Salve, questo è un problema veramente importante, vorrei risolvere questo errore. Avete qualche consiglio? Link to comment Share on other sites More sharing options...
webdeveloper083 Posted September 9, 2014 Share Posted September 9, 2014 Ciao stesso tuo problema!Come hai risolto? Grazie C. Link to comment Share on other sites More sharing options...
desmowow Posted October 14, 2014 Share Posted October 14, 2014 Buongiorno a tutti, anch'io, purtroppo ho lo stesso problema. Non ho ancora trovato una soluzione ma credo di essere riuscito a isolare il problema: è che l'arrotondamento viene fatto al momento sbagliato. Mi spiego meglio: il mio prodotto X ha prezzo di vendita ( al netto di IVA ) di 28,69 € a cui bisogna aggiungere l' IVA a 22% un cliente effettua un ordine di 10 pezzi del prodotto X Sulla fattura generata da PS si legge imponibile 286,90 € IVA 63,10 € Il che è sbagliato perchè il 22% di 286,90 è 63,118 che arrotondato fa 63,12 € ( abbiamo perso 2 centesimi ) Per quale motivo le tasse generate da PS sono 63,10 invece di 63,12? Perchè PS genera l'IVA su ogni singolo prodotto, poi la arrotonda e poi la moltiplica per il numero di prodotti. In questo caso: l'iva sul singolo prodotto che costa 28,69 è 6,3118...che arrotondato fa 6,31 €...visto che ne ha acquistati 10 sarà 6,31*10 = 63,10 € La soluzione sarebbe moltiplicare prima l'IVA del singolo per il numero di prodotti e poi arrotondare alla fine. Perchè non capita sempre? Perchè se l'IVA calcolata sul prezzo del prodotto genera un numero con solo 2 cifre decimali il problema non si verifica perchè non c'è arrotondamento. Se invece l'iva calcolata supera le 2 cifre decimali si verifica l'errore. Infatti rifacendo il calcolo appena mostrato con un prodotto il cui prezzo di vendita ( al netto di iva ) è di 14,50 € ... tutti i calcoli generati sono giusti. ( infatti l'IVA su ogni singolo prodotto sarà di 3,19 € con solo 2 cifre decimali ) Qualcuno è daccordo? Come si risolve? 1 Link to comment Share on other sites More sharing options...
desmowow Posted October 16, 2014 Share Posted October 16, 2014 Ragazzi ho trovato un post che parla proprio di questo.... Stanno realizzando una nuova versione per risolvere questo tipo di errori... Mi sembra davvero strano però che nessuno se ne sia mai accorto prima d'ora... http://www.prestashop.com/forums/topic/350813-16010-testers-needed/ Link to comment Share on other sites More sharing options...
assisassi Posted October 18, 2014 Share Posted October 18, 2014 Buongiorno a tutti, anch'io, purtroppo ho lo stesso problema. Non ho ancora trovato una soluzione ma credo di essere riuscito a isolare il problema: è che l'arrotondamento viene fatto al momento sbagliato. Mi spiego meglio: il mio prodotto X ha prezzo di vendita ( al netto di IVA ) di 28,69 € a cui bisogna aggiungere l' IVA a 22% un cliente effettua un ordine di 10 pezzi del prodotto X Sulla fattura generata da PS si legge imponibile 286,90 € IVA 63,10 € Il che è sbagliato perchè il 22% di 286,90 è 63,118 che arrotondato fa 63,12 € ( abbiamo perso 2 centesimi ) Per quale motivo le tasse generate da PS sono 63,10 invece di 63,12? Perchè PS genera l'IVA su ogni singolo prodotto, poi la arrotonda e poi la moltiplica per il numero di prodotti. In questo caso: l'iva sul singolo prodotto che costa 28,69 è 6,3118...che arrotondato fa 6,31 €...visto che ne ha acquistati 10 sarà 6,31*10 = 63,10 € La soluzione sarebbe moltiplicare prima l'IVA del singolo per il numero di prodotti e poi arrotondare alla fine. Perchè non capita sempre? Perchè se l'IVA calcolata sul prezzo del prodotto genera un numero con solo 2 cifre decimali il problema non si verifica perchè non c'è arrotondamento. Se invece l'iva calcolata supera le 2 cifre decimali si verifica l'errore. Infatti rifacendo il calcolo appena mostrato con un prodotto il cui prezzo di vendita ( al netto di iva ) è di 14,50 € ... tutti i calcoli generati sono giusti. ( infatti l'IVA su ogni singolo prodotto sarà di 3,19 € con solo 2 cifre decimali ) Qualcuno è daccordo? Come si risolve? La nuova versione 1.6.0.10, come annunciato nel post dedicato, affronta proprio questo problema, che era stato molto discusso ed oggetto di polemiche nei forum internazionali. Il problema, credo, è come dice dsmowow: PS effettua il calcolo dell'IVA nel singolo prodotto, ed eventualmente ne arrotonda il valore tagliando troppi decimali.Questo comporta piccole differenze che si sommano e si moltiplicano, creando degli errori anche importanti. La soluzione è che andrebbero fatti degli arrotondamenti nella visualizzazione, conservando in memoria un numero elevato di decimali per i futuri calcoli (come fanno i fogli elettronici quando si formattano per mostrare es. 2 cifre decimali) Link to comment Share on other sites More sharing options...
desmowow Posted October 19, 2014 Share Posted October 19, 2014 Spero che la versione 1.6.0.10 venga rilasciata presto e che funzioni tutto correttamente....perchè nel frattempo non so cosa dire ai miei cienti. ASSISASSI tu hai trovato qualche stratagemma per poter fare qualche miglioria in attesa della nuova versione? Link to comment Share on other sites More sharing options...
desmowow Posted October 27, 2014 Share Posted October 27, 2014 Salve ragazzi, volevo dirvi che al momento ho trovato una soluzione temporanea al problema: ho creato un override della classe Tools dove è presente la funzione ps_round Questa funzione accetta 2 parametri: il numero reale "$value" e la cifra di cifre decimali "$precision". Non ho fatto altro che forzare il parametro $precision a un minimo di 3 cifre decimali. Il file che ho creato bisogna posizionarlo qui override/classes/Tools.php Il file contiene il seguente codice: class Tools extends ToolsCore{ public static function ps_round($value, $precision = 0) { if($precision<3){ $precision=3; } return parent::ps_round($value, $precision); } } Dopo aver creato questo file bisogna cancellare il fil cache/class_index.php . Dopo averlo cancellato, prestashop lo rigenera in modo corretto. ps. Non so se la modifica può comportare problemi di altro genere....pertanto non l'ho testata a fondo, però risolve il problema della fattura. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now