tutorial on multi-currency accounting

Mike Alexander mta at umich.edu
Wed Mar 7 16:07:08 EST 2007

--On March 7, 2007 9:50:00 AM -0500 Derek Atkins <warlord at MIT.EDU> 

> Mike Alexander <mta at umich.edu> writes:
>> The transaction balancing code in xaccTransGetImbalance assumes all
>> exchange rates are correct.  A transaction involving more than one
>> commodity has an implied exchange rate between the commodities which
>> can be determined by comparing the amount and value fields of the
>> various splits.  This is used to create the new splits to balance
>> the  individual commodity amounts in the transaction.  The bottom
>> line is  that the balancing split will be created using the exchange
>> rate  specified when the transaction was entered which I think is
>> the best we  can do.
> If a user later goes back and changes the exchange rate, will your
> scrubber update the balancing splits?

Do you mean change the exchange rate in that transaction or the 
exchange rate in the price DB?  If you mean the exchange rate in that 
transaction, then you (be definition) are change some of the values or 
amounts in some of the splits and the scrubber will try to fix things 
up.  This isn't something that you would expect people to do often 
since it means they made a mistake entering the transaction initially, 
and the scrubber might not make the optimal adjustment although it 
should make things valid.

If you mean change the exchange rate in the price DB, then no it won't 
change the transaction, because that's not what you want to do.  The 
transaction accurately describes the initial conversion from one 
currency to another.  The Currency account accurately describes the 
unrealized gain/loss resulting from this transaction (if the price DB 
is up to date).  If you later convert some of the money back in the 
other direction a new transaction will be entered which describes that. 
This will affect not only the asset accounts containing the currencies 
but also the currency trading accounts.  The net effect will be to 
change some or all of the unrealized gain/lost into a realized 
gain/loss at that time.  This is described fairly well in Peter's 


More information about the gnucash-devel mailing list