tutorial on multi-currency accounting

Chris Shoemaker c.shoemaker at cox.net
Mon Mar 5 11:26:57 EST 2007

On Sun, Mar 04, 2007 at 11:56:20PM -0500, Mike Alexander wrote:
> --On February 22, 2007 4:09:22 AM -0400 Peter Selinger 
> <selinger at mathstat.dal.ca> wrote:
> > I have also written a fairly detailed critique of multi-currency
> > accounting in GnuCash, with some suggestions for how it could be
> > improved. Unlike the tutorial above, this second document is specific
> > to GnuCash, but must be read after the tutorial:
> >
> > http://www.mathstat.dal.ca/~selinger/accounting/gnucash.html
> I thought I would let folks know that I've been working on some changes 
> similar to the ones suggested on this page.  As might be expected, it's 
> not as simple as it seems and I don't know if the result will be useful 
> or not, although it looks somewhat promising.  I thought I'd mention it 
> here in case anyone else is thinking about working on this.  If so let 
> me know so we can compare notes.  I'm making all these changes under 
> control of a new preference and if it is off GnuCash behaves as before. 
> When I get something working I'll submit a patch in case anyone is 
> interested in it.

Mike, Peter, et al.,

I should have spoken up eariler, but have been pretty busy.  I just now 
skimmed Peter's reports, and wanted to comment.

First off, Peter's assessment of GnuCash's flaws are fundamentally

I went through a similar process of research and conclusion about a
year ago, when I started the register-rewrite branch.  It turned out
to be a lot more work than I expected, because I hadn't yet realized
_why_ multi-currency didn't work in the existing register.  Relative
to GnuCash, my conclusion was that the existing register design is
fundamentally incapable of being used to "do multi-currency"
correctly.  This is the cause of many of the very long-standing open
bugs regarding multi-currency support.  

So, when figuring out how to make it work correctly, I found that I
had to not only re-implement, but also re-design the register and many
of the functions that ensure balanced transaction entry.  The good
news is that I believe that GnuCash's foundational Transaction and
Split data structures can accomodate the "right way".

Mathematically, the contraints and relationships in a multi-currency
transaction are exactly the same as in a "stock" transaction, with
capital gains/losses.

Peter's recommendation that the register show the currency in each
split is essential to any sort of reasonable interface to accurate

While the use of full-blown trading accounts has some nice properties,
there are also some smaller changes that would still be an
improvement, even if it still meant calculating exchange gains/losses
at report-time.  Those changes would allow someone who wanted to use
trading accounts manually to do so correctly.

Fundamentally, I see this as a UI issue, and I believe that I've
designed the new register in such a way as to support multi-currency
transactions correctly, albeit still with report-time calculation of

Mike, if you're up for it, I encourage you to take a look at the
register-rewrite, and see if it supports multi-currency transactions
correctly.  Even if you're not, I'd be interested to hear more
specifically which improvements you're working on.  (BTW, I know you
have outstanding patches filed in BZ that might relate to this
functionality.  I feel bad that they've been neglected, but the fact is,
everybody's understandably shy to touch some of that messy code.)

Just a status note about register-rewrite: It should be completely
functional, just not very polished and not yet convenient to use.  For
evaluation, I like opening a new register and an old register
side-by-side in adjacent tabs.  (You can do this by double-clicking
accounts in a budget, which still opens the old register.)


> -- 
> Mike Alexander           mta at umich.edu
> Ann Arbor, MI            PGP key ID: BEA343A6
> _______________________________________________
> gnucash-devel mailing list
> gnucash-devel at gnucash.org
> https://lists.gnucash.org/mailman/listinfo/gnucash-devel

More information about the gnucash-devel mailing list