¿Cuál es el estado de los problemas de redondeo en 1.7?

27

Estamos utilizando Magento CE 1.7 y tenemos varios problemas de redondeo. En varios cálculos hay una diferencia de 0,01 EUR.

La cuestión básica podría ser que los precios de los artículos son incl. impuesto.

Los coprogramadores sobrescribieron el Mage_Core_Model_Store::roundPrice()método para calcular con una precisión de 4 dígitos. Pero esto parece causar problemas con los pagos de PayPal.

¿Hay una solución para esos problemas?

EDITAR:

Nos intentado un parche oficial núcleo que básicamente agrega 4 dígitos redondeo a \Mage_Tax_Model_Sales_Total_Quote_Shipping::_round, \Mage_Tax_Model_Sales_Total_Quote_Subtotal::_deltaRoundy \Mage_Tax_Model_Sales_Total_Quote_Tax::_deltaRoundel que corrige un problema de redondeo cupón pero no el problema de PayPal.

Alex
fuente
Hasta donde recuerdo, Magento almacena precios con 4 puntos decimales. Entonces, si los precios se ingresan con 4 puntos decimales, el cálculo es correcto. Pero puedo estar equivocado.
user487772
1
¿Qué quiere decir con "entrada con 4 puntos dec."? Pero el redondeo de Magento funciona con 2 dic. puntos. También creo que la interfaz de PayPal funciona con 2 dec. puntos: aquí parece que comienza el problema.
Alex
Si recuerdo correctamente, si ingresa precios en admin con 4 puntos decimales, se guardará en db con 4 puntos decimales. Luego se redondeará a 2 puntos durante la salida, pero el redondeo será correcto ya que el precio con 4 puntos decimales se redondeará.
user487772
Claro, pero principalmente tenemos problemas con el cálculo total, especialmente si hay códigos de cupones basados ​​en porcentajes.
Alex
Oh, entonces entendí mal tu pregunta. Lo siento.
user487772

Respuestas:

10

Somos conscientes de varios problemas de redondeo dentro del módulo impositivo central de Magento que cubren los escenarios que se han descrito. Actualmente estamos trabajando en esos problemas para una próxima versión 1.13. Esos problemas de redondeo están desencadenando un simple cheque de Paypal que determina si las líneas de pedido en el carrito se suman correctamente. Parece que el parche de Fabian se encarga del cheque de Paypal a corto plazo.

Si tiene alguna pregunta, comentario o sugerencia sobre cómo podemos mejorar el módulo de impuestos de Magento, no dude en ponerse en contacto conmigo, ya que soy el gerente de producto responsable de los impuestos.

Saludos, Chuck

Arrojar
fuente
¡Excelente! ¿Hay algún tipo de conjunto de pruebas disponible para mostrar qué problemas se abordarán?
Alex
1
Chuck, ¿te importaría configurar tu información de usuario para verificar?
Benmarks
Las pruebas son solo internas. En cuanto a más detalles sobre problemas de redondeo conocidos, eso es un poco interesante. Un cliente los vería como asociados con ciertas configuraciones de impuestos utilizando combinaciones específicas de precio, tasa de impuestos, descuentos, etc. Nuestro enfoque para 1.13 ha sido identificar configuraciones de impuestos comunes y asegurar que # combinaciones no produzcan matemáticamente errores de redondeo y etiqueten ciertos configuraciones (pequeñas esquinas) como configuraciones peligrosas que deben evitarse.
Chuck
Un poco fuera de tema, pero ¿significa que también habría edición CE 1.8?
Sergei Guk
Sí, el CE libera los retrasos en el lanzamiento de EE en aproximadamente un mes. 1.13 es la próxima versión de EE.
Chuck
7

Gracias a Andreas Vogt, construí un módulo para corregir el error redondo de Paypal. Andreas me dio algunos archivos pirateados básicos e hice el módulo. Comprueba si las sumas son correctas y, si no, se corrige.

Afaik, el truco central, se prueba en la naturaleza. Mucha gente solicitó el módulo, pero ninguno me dio retroalimentación si funciona. ¡Pero es unitario probado! (solo si las reescrituras funcionan, porque no tenía idea de cuál es el problema de PayPal ;-))

https://github.com/magento-hackathon/PaypalRoundBugfix

Fabian Blechschmidt
fuente
1
Hm ... ¿qué error soluciona exactamente? Parece el error de transferencia de carrito, artículos de línea. De hecho, hemos desactivado la transferencia del carrito. ¿Y se aplicará con el parche de redondeo de 4 dígitos?
Alex
¿Hay más de un problema? Como dije, no tengo idea de qué soluciona exactamente, si hay más de un problema :(
Fabian Blechschmidt
5

Nos enfrentamos tanto al error de redondeo de PayPal como al problema con los códigos de cupón de 100% de descuento. Solo tenemos problemas con los precios (como Eur 3,99 con impuestos incluidos), donde el precio neto tiene en el 3er dígito un 5 (3,325). Así también el impuesto (aquí con 20%) tiene en el 3er dígito un 5 (0,665). Entonces, si redondea y agrega ambos precios (lo que hace paypal y magento), el total es Eur 0,01 más que el precio base (Eur 4,00).

El cálculo correcto debe ser Eur 3,32 neto + Eur 0,67 impuesto = Eur 3,99

Como también estamos tratando de encontrar una solución general, le damos una oportunidad al arreglo de redondeo de PayPal.

Walter Huber
fuente
genial, dime si tienes problemas, ¡estoy ansioso por ayudarte y ver el Bugfix en estado salvaje y depurarlo si es necesario!
Fabian Blechschmidt
1
Para su información, el problema que ha descrito se soluciona en nuestra próxima versión (1.8 CE / 1.13 EE).
Chuck
@Chuck Acabo de probar este escenario con Mage_Tax_Model_Sales_Total_Quote_Tax desde 1.13.0.1 y parece haber resuelto el problema como un reemplazo directo en un proyecto 1.12. Muchas gracias. ¿Ya hay una ETA para 1.8CE?
Jonathan Day
4

Existe una relación general entre los precios, la cantidad, el descuento, los impuestos y sus precisiones.

Assume:
x is the price
y is the percentage
s is the rounded sub-total

2 Directions
A) incl. Tax => excl. Tax => incl. Tax
B) excl. => incl. => excl.

La cuestión importante es el subtotal redondeado que estoy calculando con el máximo. Error. 2 dígitos fraccionarios significa 5 * 10 ^ -3

A) x * 10 ^ 2 / (y + 10 ^ 2) // s * (y + 10 ^ 2) / 10 ^ 2

B) x * (y + 10 ^ 2) / 10 ^ 2 // s * 10 ^ 2 / (10 ^ 2 + y)

A)
Subtotal precision 2 fractional digits:
5*10^-3*(y+10^2)/10^2 => (y+10^2)/10^2<1 => no y
3 fractional digits:
5*10^-4*(y+10^2)/10^2 => (y+10^2)/10^2<10 => y<900
4 fractional digits:
5*10^-5*(y+10^2)/10^2 => (y+10^2)/10^2<10^2 => y<90900
(must be a very bad country)

......

B)
Subtotal precision 2 fractional digits:
(5*10^-3)*10^2/(10^2+y) => 10^2/(10^2+y)&lt;1 => every y

Si desea calcular con descuentos o impuestos y desea volver a calcular el precio, la siguiente explicación puede ser interesante para usted. Tenga en cuenta que no conozco ningún caso en el front-end, es posible que haya un cálculo interno. A) Total => Impuesto / Descuento => Total B) Impuesto / Descuento => Total => Impuesto / Descuento

A) x * y / 10 ^ 2 // s * 10 ^ 2 / y

B) x * 10 ^ 2 / y // s * y / 10 ^ 2

A) Subtotal precision 2 fractional digits:
(5*10^-3)*10^2/y => 10^2/y < 1 => y>10^2
Subtotal precision 3 fractional digits:
(5*10^-4)*10^2/y => 10^2/y < 10 => y>10
Subtotal precision 4 fractional digits:
... 10^2/y < 10^2 => y>1

Con una precisión de 2 dígitos, debe tener una tasa SIN DÍGITOS FRACCIONALES. Ejemplo: Total: 15,15 tasa impositiva: 0,3% => impuesto 0,04545 => redondeado 0,0455 impuesto: 0,0455 => total: 15,17

B) Subtotal precision 2 fractional digits:
(5*10^-3)*y/10^2 => y/10^2 &lt; 1 => y < 10^2

si a es la precisión, entonces debe ser y menor que a + 2.

Tenga en cuenta si maneja cantidades. El error se multiplicará. Entonces, si tiene un máximo de 10 ^ 5, debe tener una precisión de 7. ¡Esto es preocupante si está calculando con desplazamiento!

ADEMÁS (10/09/2013 Magento versión 1.7.0.2) Brutto Netto <=> e Impuestos // América <=> viejos aparatos de Europa son enteros (centavos) y el mapeo
f (x) = round (a * x) a> 1 es No es biyectivo. En mis palabras: no para todos los precios incl. existe un precio excl. o A veces hay 2 precios incl. por un precio excl. o puede obtener 2 resultados diferentes dependiendo de cómo calcule

Ejemplo del mundo real de Alemania:

Intenta ingresar un precio incl. impuestos: 19,95 Usted obtiene 16,76 (2 dígitos) como sus precios excl. los impuestos (19%). Si calcula el 19% de impuestos que obtiene (16,76 * 0.19) 3,18. (Tenga en cuenta: 19.95 * 019 / 1.19 ~ 3.19)

Entonces hay 1 centavo de diferencia. 16,76 => 19,94 16,77 => 19,96

No hay precio 19,95 en Estados Unidos - tierra de netto.

Así que calcule con los precios originales lo más lejos posible. Para incluir precios, use el precio ingresado y los impuestos (número desglosado).

PayPal tiene esta verificación de fraude, ahora no estoy seguro, pero PayPal solo agrega el número que le da magento. ver http://fabiankrueger.de/blog/magento-und-paypayl-rundungsfehler/ Si esto no es cierto y PayPal recalcula el Impuesto o el Total, este problema no se puede resolver, de lo contrario, los precios, incorrectos o correctos, se muestran antes en Magento . Resuélvelo allí. Para mí parece funcionar.

Andreas Dyballa
fuente