On 05/31/2014 03:43 PM, John Ralls wrote:
On May 31, 2014, at 3:14 PM, Marc Shapiro <[email protected]> wrote:

Ooops!  I meant to send this to the list.

Marc

-----------------

All in all it sounds like it would be a lot more work that I am really up to at 
this time.  Of course, learning Scheme/Guile is not really any better.

What I want is to be able to generate a Balance Sheet with all current 
transactions, then add in any budget items and/or future transactions up to an 
arbitrary date in the future to project all of the Balance Sheet accounts as of 
that arbitrary future date.

It seems like it shouldn't be difficult to merge the Budget and Future 
Transaction info from their reports into the Balance Sheet if I already knew 
Guile.  Unfortunately, I don't know Guile.  LISP and its derivatives are just 
way too different from, say, C/C++ or Python for me to easily get the hang of 
it.
Well, you could always write what you need in C or C++ and call it from Python 
with ctypes or a custom wrapper.

Regards,
John Ralls

I think that I have found a simpler solution, but it is not quite working. I have narrowed down where the problem is and I think that this would be very trivial if I understood guile and the gnucash reporting system better, but I don't. If anyone could look at what I have and suggest a fix I would appreciate it.

I am now looking at only the differences between account-summary.scm and sx-summary.scm. These two reports are virtually identical. The format is the same for both of them. The only differences are the title displayed at the top of the report and the values displayed for each account.

The Account Summary (account-summary.scm) has a single report date in the title and the values for each account are the sum of the actual transactions through that date. The Scheduled Transaction summary (sx-summary.scm) has a date range in the title and the values for each account are the sum of the future transactions within that date range.

The following code is a combination of code from both reports. This section begins at line 331 in sx-summary.scm and at line 341 in account-summary.scm. The differences are as follows:

The line "(sx-value-hash (gnc-sx-all-instantiate-cashflow-all from-date-tp to-date-tp))" as well as the entire function "get-balance-fn" are only in sx-summary.scm.

The function "get-total-balance-fn" is only in account-summary.scm and uses date-tp instead of from-date-tp.

Other than the above differences the code in this section is identical.

       (let* (
(sx-value-hash (gnc-sx-all-instantiate-cashflow-all from-date-tp to-date-tp))
               (chart-table #f)                    ;; gnc:html-acct-table
(hold-table (gnc:make-html-table)) ;; temporary gnc:html-table (build-table (gnc:make-html-table)) ;; gnc:html-table reported
               (get-total-balance-fn
                (lambda (account)
                  (gnc:account-get-comm-balance-at-date
                   account from-date-tp #f)))
               (table-env                      ;; parameters for :make-
                (list
                 (list 'start-date from-date-tp)
                 (list 'end-date to-date-tp)
                 (list 'display-tree-depth tree-depth)
                 (list 'depth-limit-behavior bottom-behavior)
                 (list 'report-commodity report-commodity)
                 (list 'exchange-fn exchange-fn)
                 (list 'parent-account-subtotal-mode parent-total-mode)
                 (list 'zero-balance-mode (if show-zb-accts?
                                              'show-leaf-acct
                                              'omit-leaf-acct))
                 (list 'account-label-mode (if use-links?
                                               'anchor
                                               'name))
                 (list 'get-balance-fn
                  (lambda (account start-date end-date)
(let* ((balance-collector (gnc:make-commodity-collector))
                           (guid (gncAccountGetGUID account))
                           (num-bal (hash-ref sx-value-hash guid)))
                      (if num-bal
                          (if (eq? 0 (gnc:gnc-numeric-denom num-bal))
(gnc:warn "Oops, invalid gnc_numeric when looking up SX balance for account GUID " guid ": " num-bal)
                              (begin
                                (balance-collector
                                 'add
                                 (xaccAccountGetCommodity account)
                                 num-bal)
;;(gnc:warn "Yay, we found SX balance for account GUID " guid)
                                ))
;;(gnc:warn "No SX balance for account GUID " guid)
                          )
                      balance-collector)))
                 )
                )

If I run the code as above, I get only the value of the scheduled transactions (identical to sx-summary.scm, even though the function "get-toal-balance-fn" from account-summary.scm is included). If I comment out the lines that are unique to sx-summary.scm then I get values equal to those given by account-summary.scm (as would be expected). If I comment out only the line "(sx-value-hash (gnc-sx-all-instantiate-cashflow-all from-date-tp to-date-tp))" then I get a report error. If I comment out only the function "get-balance-fn" then I get all zeros for the account balances.

My question is: How can I modify this code so that the balance that I get for each account is the sum of what I would get from each of the individual reports? Since I can modify this code, simply by commenting out certain lines, to give me either set of values then it seems that I ought to be able to get it to give me the set of the sums of both values. Unfortunately, I am not familiar enough with either guile, or the gnucash reporting system to figure this one out. Can anyone help me with this?

Marc
_______________________________________________
gnucash-devel mailing list
[email protected]
https://lists.gnucash.org/mailman/listinfo/gnucash-devel

Reply via email to