1.7'deki yuvarlama sorunlarının durumu nedir?


27

Magento CE 1.7 kullanıyoruz ve çeşitli yuvarlama sorunlarımız var. Çeşitli hesaplamalarda 0,01 EUR fark vardır.

Temel sorun, makale fiyatlarının dahil edilmesi olabilir. vergi.

Yardımcı programcılar Mage_Core_Model_Store::roundPrice(), 4 basamaklı hassasiyetle hesaplama yönteminin üzerine yazmışlar . Ancak bu PayPal ödemelerinde sorunlara yol açıyor gibi görünüyor.

Bu sorunların bir çözümü var mı?

DÜZENLE:

Biz aslında temelde yuvarlama 4 basamaklı ekleyen resmi çekirdek yama çalıştı \Mage_Tax_Model_Sales_Total_Quote_Shipping::_round, \Mage_Tax_Model_Sales_Total_Quote_Subtotal::_deltaRoundve \Mage_Tax_Model_Sales_Total_Quote_Tax::_deltaRoundbir kupon yuvarlama sorunu değil PayPal sorunu çözüyorsa hangi.


Hatırladığım kadarıyla Magento 4 ondalık basamağı olan fiyatları depolar. Bu nedenle, fiyatlar 4 ondalık basamakla girilirse hesaplama doğrudur. Ama yanılıyor olabilirim.
user487772,

1
Ne demek "4 dec. İle giriş"? Ancak Magento Yuvarlama 2 Aralık ile çalışır. puan. Ayrıca PayPal arayüzünün 2 Aralık ile çalıştığını düşünüyorum. Puan - bu sorunun başladığı yer gibi görünüyor.
Alex,

Doğru hatırlıyorsam, 4 ondalık basamakla admin fiyatlarına girdiyseniz, 4 ondalık basamakla db'ye kaydedilir. Ardından, çıkış sırasında 2 noktaya yuvarlanır, ancak 4 ondalık basamaklı fiyat yuvarlanacağından yuvarlama doğru olur.
kullanıcı487772

Tabii - fakat özellikle yüzde tabanlı kupon kodları söz konusuysa, toplam hesaplama ile ilgili sorunlarımız var.
Alex,

Oh, o zaman sorunuzu yanlış anladım. Üzgünüm.
user487772

Yanıtlar:


10

Tanımlanan senaryoları kapsayan çekirdek Magento vergi modülündeki bazı yuvarlama sorunlarının farkındayız. Halen yaklaşan 1.13 sürümü için bu konular üzerinde çalışıyoruz. Bu yuvarlama sorunları, sepetteki satır öğelerinin doğru şekilde toplanıp toplanmayacağını belirleyen basit bir Paypal kontrolünü tetikliyor. Fabian'ın yaması kısa vadede Paypal kontrolüyle ilgileniyor gibi görünüyor.

Magento Vergi modülünü nasıl geliştirebileceğimize dair herhangi bir sorunuz, yorumunuz veya öneriniz varsa, lütfen vergilerden sorumlu ürün müdürü olduğum için benimle iletişime geçmekten çekinmeyin.

Saygılar, Chuck


Harika! Hangi sorunların ele alınacağını göstermek için bir tür test paketi var mı?
Alex,

1
Chuck, doğrulamak için kullanıcı bilgilerinizi ayarlayabilir misiniz?
Benmarks

Testler sadece dahilidir. Bilinen yuvarlama sorunları hakkında daha fazla ayrıntıya kadar - bu biraz ilginç. Bir müşteri, belirli fiyat yapılandırmaları, vergi oranı, indirimler, vb. Kullanarak belirli vergi yapılandırmaları ile ilişkili olduğunu görecektir. kaçınılması gereken tehlikeli yapılandırmalar gibi yapılandırmalar (küçük köşe kasaları).
Chuck,

Biraz konu dışı, ancak CE 1.8 baskısı olacağı anlamına mı geliyor?
Sergei Guk

Evet - CE sürümleri EE sürümlerini yaklaşık bir ay geciktirdi. Bir sonraki EE sürümü 1.13.
Chuck

7

Andreas Vogt sayesinde, Paypal'in yuvarlak hatasını düzeltmek için bir modül yapıyorum. Andreas bana birkaç tane hacklenmiş dosya verdi ve ben modülü yaptım. Toplamların doğru olup olmadığını kontrol eder ve değilse düzeltilir.

Çekirdek kesmek Afaik vahşi doğada test edilir. Bir çok kişi modülü istedi, ama hiçbiri çalıştığı konusunda bana geri bildirimde bulunmadı. Ama birim test edildi! (sadece yeniden yazmaların işe yarayıp yaramadığını, çünkü paypal sorununun ne olduğu hakkında hiçbir fikrim yoktu ;-))

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


1
Hm .. Hangi hatayı tam olarak düzeltir? Cart-line-items-transfer bug gibi görünüyor. Aslında araba transferini kapattık. Ve 4 basamaklı yuvarlama yaması ile mi uygulanacak?
Alex,

Birden fazla sorun mu var? Dediğim gibi, hiçbir fikrim yok, tam olarak neyin düzeltildiği - eğer birden fazla sorun varsa :(
Fabian Blechschmidt 19:03

5

Her ikisi de, paypal yuvarlama hatası ve% 100 indirim kupon kodları ile karşı karşıyayız. Net fiyatın 5 (3.325) 'te 3. basamakta olduğu sadece fiyatlarda (vergi dahil Eur 3,99 gibi) sorun yaşıyoruz. Bu yüzden vergi de (burada% 20 ile) 3. basamakta 5 (0,665). Bu yüzden eğer hem fiyatı hem de paypal (magento'nun yaptığı) toplamı ekleyip eklerseniz, toplam tutar, taban fiyatından daha yüksek olan Eur 0,01'dir (Eur 4,00).

Doğru cakulasyon net 3,32 net + Eur 0,67 vergi = 3,99 euro olmalıdır

Ayrıca genel bir çözüm bulmaya çalıştığımız için, paypal yuvarlama işlemini deniyoruz!


harika, söyle bana, eğer sorunların varsa, yardım etmeye ve vahşi doğada Bugfix'i görmeye ve gerektiğinde hata ayıklamaya can atıyorum!
Fabian Blechschmidt

1
Bilginize açıkladığımız sorun önümüzdeki sürümde (1.8 CE / 1.13 EE) düzeltildi.
Chuck

@Chuck Bu senaryoyu 1.13.0.1'den Mage_Tax_Model_Sales_Total_Quote_Tax ile test ettim ve sorunu bir 1.12 projesinde geri bırakma değişikliği olarak çözdüm. Çok teşekkürler. 1.8CE için henüz bir ETA var mı?
Jonathan Day

4

Fiyatlar, miktar, iskonto, vergi ve kesinlikleri arasında genel bir ilişki vardır.

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.

Önemli olan, yuvarlatılmış alt toplam ile maks. Hata. 2 kesirli basamak, 5 * 10 ^ -3 anlamına gelir.

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

İndirimler veya vergilerle hesaplamak ve fiyatı yeniden hesaplamak istiyorsanız , bir sonraki açıklama sizin için ilginç olabilir. Lütfen ön uçta herhangi bir dava bilmediğimden, bir stajyer hesaplaması yapılması mümkün olduğunu unutmayın. A) Toplam => Vergi / İndirim => Toplam B) Vergi / İndirim => Toplam => Vergi / İndirim

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

2 hane hassasiyetinde, NO FRACTIONAL DIGITS olan bir oranınız olmalıdır. Örnek: Toplam: 15,15 vergi oranı:% 0,3 => vergi 0,04545 => yuvarlanmış 0,0455 vergi: 0,0455 => toplam: 15,17

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

eğer a hassas ise, y + 2'den küçük olmalıdır.

Lütfen miktarları ele alıyorsanız not alın. Hata çarpılacaktır. Eğer maksimum 10 ^ 5 değerine sahipseniz, 7 hassasiyetine sahip olmalısınız. Bu sadece endişe vericidir;

EK (9.10.2013 Magento Sürüm 1.7.0.2) Brutto <=> Netto ve Vergiler // Amerika <=> eski Avrupa Setleri tamsayılar (Cents) ve haritalama
f (x) = yuvarlak (a * x) a> 1 mükerrer değil. Sözlerime göre: Her fiyat dahil değildir. bir fiyat hariç veya Bazen 2 fiyat dahil. tek fiyat için veya Nasıl hesapladığınıza bağlı olarak 2 farklı sonuç alabilirsiniz.

Almanya'dan gerçek dünya örneği:

Dahil bir fiyat girmeye çalışın. vergiler: 19,95 Fiyatlarımız hariç 16,76 (2 hane) alıyorsunuz. vergiler (% 19). % 19 vergi hesaplarsanız, (16,76 * 0,19) 3,18 elde edersiniz. (Dikkat: 19.95 * 019 / 1.19 ~ 3.19)

Yani 1 Cent fark var. 16,76 => 19,94 16,77 => 19,96

Amerika'da fiyat 19,95 yoktur - netto ülkesi.

Yani mümkün olduğunca orijinal fiyatlarla hesaplayın. Fiyatların dahil edilmesi için girilen fiyatı ve vergileri kullanın (bozuk sayı).

PayPal'ın bu sahtekarlık kontrolü var - şimdi emin değilim - ama PayPal sadece magento tarafından verilen numarayı ekliyor. bkz. http://fabiankrueger.de/blog/magento-und-paypayl-rundungsfehler/ Eğer bu doğru değilse ve PayPal Vergiyi veya Toplamı yeniden hesaplarsa, bu sorun çözülemez, aksi takdirde fiyatlar - yanlış veya doğru - Magento'da daha önce gösterilmiştir . Orada çöz. Benim için iş gibi görünüyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.