2012-11-23 2 views
5

Magento에서 VAT에 이상한 반올림 문제가 있습니다. 내 제품 설정은 입니다. * 제품 가격 20 % 부가가치세 183.59Magento 세금 반올림 문제

바구니에 30 개 항목을 추가하면 30 * 183.59 = 5507.70이됩니다. 나는 바구니/체크 아웃에서이 값을 볼 수 있으므로 괜찮습니다. 바구니에 단 1 개의 품목 만 있다면 괜찮습니다.

또한 최종 부가가치세는 5507.70 = 917.95 * 1백20분의 20을 것입니다,하지만 난 918.00

받고 있어요 당신이 어떻게 좀 걸릴 경우이 문제를 해결하거나 어떤 생각을 가지고 있습니까? 미리 감사드립니다.

답변

8

결국 해결책을 찾았습니다. 나는 시스템> 부가가치세> 세금 계산 방법을 단위 가격에서 행 합계로 변경하여 더 자세한 내용을 알아 냈다. here

내가 발견 한 문제는 core/store 모델에있다. roundPrice 메서드를 다시 작성하고 반올림 정밀도를 변경해야했습니다. 이전 라운딩 작업 델타에 따라 젠토에서

public function roundPrice($price) 
{ 
    return round($price, 4); 
} 
+1

다시 쓰기는 확실히 적절한 해결책이 아니다! 잘 했어도 효과가 있었지만 PayPal 지급 문제로 이어집니다 (유효한 주문은 '사기로 의심되는 것으로 표시됩니다'). 이 재 작성을 사용할 때주의하십시오! – simonthesorcerer

+0

예, 동의합니다. 변경된 반올림으로 인해 한 곳에서 문제가 해결되었지만 다른 곳에서는 문제가 발생했습니다. 모든 시나리오에서 완벽하게 작동하는 솔루션을 기본적으로 가질 수는 없다고 생각합니다. – Jaro

+1

나는 마침내 공식적인 지식베이스 항목으로 몇 가지 문제를 해결할 수 있었다 : http://www.magentocommerce.com/knowledge-base/entry/magento-ce-18-ee-113-tax-calc – simonthesorcerer

4

정보

라운드 가격.

protected function _deltaRound($price, $rate, $direction, $type = 'regular') 
{ 
    if ($price) { 
     $rate = (string)$rate; 
     $type = $type . $direction; 
     // initialize the delta to a small number to avoid non-deterministic behavior with rounding of 0.5 
     $delta = isset($this->_roundingDeltas[$type][$rate]) ? $this->_roundingDeltas[$type][$rate] : 0.000001; 
     $price += $delta; 
     $this->_roundingDeltas[$type][$rate] = $price - $this->_calculator->round($price); 
     $price = $this->_calculator->round($price); 
    } 
    return $price; 
} 

app/code/core/Mage/Tax/Model/Sales/Total/Quote/Tax.php:1392 app/code/core/Mage/Tax/Model/Sales/Total/Quote/Subtotal.php:719

때때로 이는 높은 델타 계산 오류 ( $this->_calculator->round($price))에 오류를 일으킬 수있다. 예를 들어, 이러한 이유로 일부 가격은 ± 1 센트의 범위에서 달라질 수 있습니다.

솔루션

이 문제를 방지하려면 델타 계산의 정확성을 개선 할 필요가있다.

변경

$this->_roundingDeltas[$type][$rate] = $price - $this->_calculator->round($price); 

$this->_roundingDeltas[$type][$rate] = $price - round($price, 4); 

변화는 두 파일에서 만들 필요가 :

app/code/core/Mage/Tax/Model/Sales/Total/Quote/Tax.php:1392 app/code/core/Mage/Tax/Model/Sales/Total/Quote/Subtotal.php:719

코어 파일을 수정하거나 해킹하지 마십시오! 다시 작성하십시오!

이 솔루션은 Magento 1.9.x의 다른 버전에서 테스트되었지만 이전 버전에서는이 기능이 작동 할 수 있습니다.

P.

변경 roundPrice 변경 기능은 아래에 표시된 것처럼 반올림 오류 문제를 해결할 수 있지만 다른 플랫폼을 유발할 수 있습니다 (예 : 일부 플랫폼에서는 소수점 이하 2 자리까지 반올림해야 함).

app/code/core/Mage/Core/Model/Store.php:995

public function roundPrice($price) 
{ 
    return round($price, 4); 
}