Olivier, I just saw that you recently applied this fix to the
account/account.py file:
**********************************************************
- if abs(amount) < 10 ** -int(config['price_accuracy']):
+ # Check that the move balances, the tolerance for debit/credit must
+ # be smaller than the smallest value according to price accuracy
+ # (hence the +1 below)
+ # Example:
+ # difference == 0.01 is OK iff price_accuracy <= 1!
+ # difference == 0.0001 is OK iff price_accuracy <= 3!
+ if abs(amount) < 10 ** -(int(config['price_accuracy'])+1):
**********************************************************
But... shouldn't it better be "if abs(amount) < 0.5 * 10
**-(int(config['price_accuracy'])):"?
For example, with price_accuracy 2 we have this
For 0.01
Original: 0.01 < 10 ** -2 => False
Current: 0.01 < 10 ** -(2+1) => False
Proposal: 0.01 < 0.5 * 10 ** -2 => False
For 0.007 (that would be rounded to 0.01 given the price accuracy)
Original: 0.007 < 10 ** -2 => True (This was the
original bug)
Current: 0.007 < 10 ** -(2+1) => False
Proposal: 0.007 < 0.5 * 10 ** -2 => False
For 0.003 (that would be rounded to 0.00 given the price accuracy)
Original: 0.003 < 10 ** -2 => True
Current: 0.003 < 10 ** -(2+1) => False (this is the problem
of your patch)
Proposal: 0.003 < 0.5 * 10 ** -2 => True
I mean, on the original version, an amount like 0.009 would pass the test, but
afterwards it could be rounded to 0.01 causing havoc*
* For an account move with two lines: 10.09 on the debit, 10.08 on the
credit (unbalanced!), Python calculates a difference as 0.0099999999999997868
(that is less than 0.01!).
Your patch prevents this, but also means that an amount like 0.002 will
not pass even when it would be rounded to 0.00 on the move lines!
--
Cannot validate invoices with foreign currency
https://bugs.launchpad.net/bugs/452854
You received this bug notification because you are a member of OpenERP
Accounting Experts, which is a direct subscriber.
Status in OpenObject Addons Modules: Fix Released
Bug description:
Hello,
have stumbled upon interesting problem. Latvian Lats (LVL) is the base currency
for Accounting. Try to issue (or encode received from supplier) invoice in
Euros(EUR). The same would happen between any other currencies too.
Invoice totals:
Total w/o VAT (Untaxed): 1158,00 EUR
Tax VAT 21% : 243,18 EUR
Total: 1401,18 EUR
Try to Confirm invoice and you will get "You can not validate a non balanced
entry !"
Made some investigation what is wrong, and have found that the problem is.
Obviously the totals are calculated perfectly right, but as the base currency
for accounting is different from the currency we are issuing invoice the
accounting moves are done in the base currency, in this case LVL.
So goes the currency exchange
Total w/o VAT (Untaxed): 1158,00 EUR ->(813,8470320 ~813,85 LVL)
Tax VAT 21% : 243,18 EUR ->(170,9078767 ~170,91 LVL)
Total: 1401,18 EUR ->(984,7549087 ~984,75 LVL)
Which again are technically right, with one difference, that the totals for
posting are now not dependent on each other anymore. They are being rounded
before posting.
If you would issue invoice in a base currency the difference is in 0.01LVL,
which is lost during rounding process. Notice the Total sum.
Example:
Total w/o VAT (Untaxed): 813,85 LVL
Tax VAT 21% : 170,91 LVL (VO_VAT * 21% = 170,9085000)
Total: 984,76 LVL (VO_VAT + VAT_21)
To deal around floating point storage in Python (as well as other programming
languages), allowed difference between sums are allowed 0.0001. This is the
place where postings do not pass validate(...) function in "account.py".
This is right as balance between credit and debit should be equal. What should
be done - accountant would probably create write-off entry for the missing sum
to make the balance right. This functionality is missing in OpenERP, and is
fundamental for foreign trade.
Any ideas?
P.S. version 5.0.6.
Kaspars
_______________________________________________
Mailing list: https://launchpad.net/~openerp-expert-accounting
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-expert-accounting
More help : https://help.launchpad.net/ListHelp