Having problem to monetary-collector

Christian Stimming stimming@tuhh.de
Tue, 26 Feb 2002 16:03:13 +0100


Martijn van Oosterhout wrote:

 > Unfortunatly, it appears the source of the numeric-collector is 
internal and
 > thus not shipped with the compiled version. Any see what the problem 
is? And
 > what to do about it?


Every bit of code related to the {numeric,commodity}-collector resides 
in the file report-utilities.scm, which lies in src/scm in the 
gnucash-1.6 branch (thus, should be shipped even with compiled versions) 
and in src/report/report-system in the unstable HEAD branch. Code for 
numeric-collector is right before the code for commodity-collector in 
that file. You can browse the HEAD CVS online:


http://www.gnucash.org/lxr/gnucash/source/src/report/report-system/report-utilities.scm

Note that about a week ago I added some code in an admittantly late 
attempt to go away from this procedure-style calls like (c 'add this 
that) and rather use an conventional code like 
(gnc:numeric-collector-add c this that). I think the latter one is much 
more readable. For one thing, you know which sort of collector you are 
talking about. This code is in both CVS branches right now, but it 
didn't make it into any stable release so far.

> c is the collector, currency is just the currentcy we happen to be using, s
> is the split:


I guess you mean c is a commodity-collector, i.e. you had (let ((c 
(gnc:make-commodity-collector)) beforehand.

> ;; debug output of the values going in
> (gnc:debug (c 'getpair currency #f)) 
>   -> (#<gw:wcp <gnc:commodity*> 0x81acb38> #<<gnc-numeric> num: -40950 denom: 100>)
> (gnc:debug (gnc:split-get-amount s))
>   -> #<<gnc-numeric> num: 3709000 denom: 100000>
> 
> ;; Add them up
> (c 'add currency (gnc:split-get-amount s))
> 
> ;; Display to output
> (gnc:debug (c 'getpair currency #f))
>   -> (#<gw:wcp <gnc:commodity*> 0x81acb38> #<<gnc-numeric> num: -3 denom: 0>)
> 
> Huh?
> 
> -40950/100 + 3709000/100000  !=  -3/0
> 
> Two possibilities:
> 
> 1. It doesn't like the differing denominators
> 2. It doesn't like the differing signs

Oh, wasn't a zero denominator supposed to signal an gnc-numeric error 
anyway? Because a zero denominator doesn't make any sense in the first 
place. The code for gnc-numeric can be found in 
http://www.gnucash.org/lxr/gnucash/source/src/engine/gnc-numeric.h and 
there you are anyway -- the error code '-3' stands for 'denominator 
difference' -- for adding two gnc-numerics you need to get them onto a 
common denominator first. Maybe the code of the commodity-collector 
needs to be extended here, but I don't have time and/or a source tree 
available at the moment. You can come back to me about this in a few 
days if you can't get it working by yourself.

Anyway, I greatly appreciate your work here and I'm looking forward to 
hearing more of you about that.

Christian