Custom .scm script: Query account balance
John Ralls
jralls at ceridwen.us
Wed Oct 5 02:53:38 EDT 2016
> On Oct 5, 2016, at 1:35 AM, Eric Wheeler <gnucash-devel at lists.ewheeler.net> wrote:
>
> On Tue, 4 Oct 2016, Derek Atkins wrote:
>
>> Hi,
>>
>> Eric Wheeler <gnucash-devel at lists.ewheeler.net> writes:
>>
>>> Hello all,
>>>
>>> I would like to update our invoice .scm template to include a balance from
>>> an account containing the customer's name (this is separate from any
>>> accounts receivable, it is a retainer liability account).
>>>
>>> I tried digging through the account piechart.scm and the taxinvoice.scm to
>>> see if I can come up with a way to query the account something like this:
>>>
>>> gnc:account-get-comm-balance-at-date append("Liabilities::Retainers::" coyname)
>>
>> First, you probably don't need the double-colons.
>>
>>> But I'm not sure how to pass today's date. It's been years since I've
>>> written scheme so any help would be greatly appreciated!
>>
>> (current-time) ?? Or perhaps (localtime (current-time)) -- depending
>> on what you need.
>
> I'm still trying to get to the point where I can specify an account
> (hard-coded) by name in my report to get that account's balance.
>
> I can map all of numerical values for balanaces, but they report all 0s
> for all accounts. This makes me think that "current-time" is being
> evaluated as the epoch, perhaps because it is an invalid data type for the
> gnc:account-get-balance-at-date function.
>
> Do you know how the gnc:account-get-balance-at-date function expects date
> to be represented?
>
> (display (append
> (map
> (lambda (x) (gnc:gnc-numeric-num (gnc:account-get-balance-at-date x (current-time) 0)))
> (gnc-account-get-descendants-sorted (gnc-get-current-root-account))
> ))
> )
>
It's calling gnc:account-get-comm-balance-at-date (src/report/report-system/report-utilities.scm:462) which in turn sets the date in the query with xaccQueryAddDateMatchTS (ibid:489). That "TS" on the end means it's looking for a timespec, a struct containing an int64_t of seconds since the epoch and an int32_t of nanoseconds (always 0 in GnuCash, so we're working slowly on replacing timespecs with just an int64_t of seconds). You'll find functions for creating timespecs in src/app-utils/date-utilities.scm.
Regards,
John Ralls
More information about the gnucash-devel
mailing list