Problem in Trial Balance report with stocks and multiple currencies

Sherlock Holmes sh025622 at gmail.com
Sun Aug 24 13:21:48 EDT 2025


John,

I'm still working it.  It appears to me that both algorithms may have 
gone a bit awry sometime ago although the "average price" may be okay.  
Specifically, the initial comm-list entry became an else case which 
meant it needed to perform the assignments and, in the "average cost", 
the sign handling doesn't

My WAG was just that.  Just a quick check to see if I was in the right 
area.


Regards,

Sherlock

On 8/24/25 9:16 AM, John Ralls wrote:
>  Sherlock,
>
> What’s this part for? It seems irrelevant to Chang Wang’s example as 
> that doesn’t use trading accounts:
> -
> -       ;; However skip splits in trading accounts as these counterbalance
> -       ;; the actual value and share amounts back to zero
> -       ((eqv? (xaccAccountGetType (xaccSplitGetAccount (car 
> comm-splits)))
> -              ACCT-TYPE-TRADING)
> -        (loop (cdr comm-splits)
> -              sumlist))
> I guess you did a bisect to arrive at the 2019 change date. There were 
> 8 changes to gnc-commodity-utils.scm that day. Which one was the culprit?
>
> Regards,
> John Ralls
>
>
>> On Aug 23, 2025, at 20:18, Sherlock Holmes <sh025622 at gmail.com> wrote:
>>
>> I concur.
>>
>> There are significant differences in the implementation between 
>> gnc:get-exchange-totals and gnc:get-exchange-cost-totals that I 
>> believe are the root cause of the issue.  These differences appear to 
>> date back to May 3, 2019.    As a WAG, I modified 
>> gnc:get-exchange-cost-totals to match gnc:get-exchange-totals in the 
>> attached patch and the issue you've raised appears to be resolved.  I 
>> have not done any further testing,
>>
>> Regards,
>>
>> Sherlock
>>
>>
>> On 8/23/25 2:20 PM, Chang Wang wrote:
>>> Thanks for the reminder. I'll post to the user list in the future.
>>> However, in the above example, there is no gain or loss due to 
>>> currency exchange as the exchange rates are set to 1 so no currency 
>>> gain/loss needs to be booked. And the price source is set to be Last 
>>> up through report date instead of average cost. Therefore, I think 
>>> these are different issues.
>>>
>>> On Sat, Aug 23, 2025 at 3:51 PM John Ralls <jralls at ceridwen.us> wrote:
>>>
>>>     Oddly I just told somebody on IRC the same answer:
>>>     https://bugs.gnucash.org/show_bug.cgi?id=797796
>>>
>>>     Unless you’re willing to submit a PR, this is a user-list topic,
>>>     so in the future please use gnucash-user instead of gnucash-devel.
>>>
>>>     Regards,
>>>     John Ralls
>>>
>>>     > On Aug 23, 2025, at 1:43 PM, Chang Wang
>>>     <wangchang327 at gmail.com> wrote:
>>>     >
>>>     > Hi all,
>>>     > I noticed an issue with the Trial Balance report when using
>>>     stock trading and multiple currencies. Even when transactions
>>>     are balanced, the Trial Balance report appears to break due to
>>>     incorrect calculation of unrealized gains.
>>>     >
>>>     > I've attached an uncompressed minimal example to illustrate
>>>     the problem.
>>>     >
>>>     > Steps to reproduce:
>>>     > Open the attached book.
>>>     > Generate a Trial Balance report with reporting currency set to
>>>     USD, price source set to Last up through report date, and enable
>>>     Show Foreign Currencies and Exchange Rates.
>>>     >
>>>     > Observed behavior:
>>>     > The report shows an Unrealized Gain of $20,800, which is
>>>     incorrect.
>>>     >
>>>     > Expected behavior:
>>>     > The Unrealized Gain should be $200.
>>>     >
>>>     > Explanation:
>>>     > The example contains three transactions:
>>>     > 1) 08/02/2025 - Buy one stock for 10,200 JPY.
>>>     > 2) 08/03/2025 - Exchange 100,000 JPY for 100,000 USD.
>>>     > 3) 08/04/2025 - Buy one stock for 10,400 JPY.
>>>     >
>>>     > The JPY/USD rate is fixed at 1 on all days, so there should be
>>>     no realized or unrealized currency gains. Stock prices are set
>>>     at 10X00 JPY on 08/0X/2025, where X = 1, 2, 3, 4.
>>>     >
>>>     > Therefore, in USD reporting currency, the Trial Balance should
>>>     show unrealized gains as:
>>>     > (10,400 * 2) - 10,200 - 10,400 = 200 JPY = 200 USD
>>>     >
>>>     > Notably, the Balance Sheet report does display the correct
>>>     unrealized gain. And if transaction 3) or transaction 2) is
>>>     removed, the Trial Balance turns out to be correct.
>>>     >
>>>     > I'm not familiar with Scheme, so I wasn't able to locate the
>>>     problem in the source code. I also wasn't able to file a bug on
>>>     Bugzilla, since the registration function appears to be broken.
>>>     >
>>>     > Thanks for your attention,
>>>     > Chang
>>>     > <tb.gnucash>_______________________________________________
>>>
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gnucash.org/pipermail/gnucash-devel/attachments/20250824/003608c4/attachment.htm>


More information about the gnucash-devel mailing list