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