Index: src/report/report-system/html-acct-table.scm =================================================================== --- src/report/report-system/html-acct-table.scm (revision 16576) +++ src/report/report-system/html-acct-table.scm (working copy) @@ -663,7 +663,7 @@ ) ) ) - ;; what the heck is this? how about (case balance-mode blah... + ;; what the heck is this? how about (case balance-mode blah)... (or (and (equal? balance-mode 'post-closing) post-closing-bal) (and (equal? balance-mode 'pre-closing) (let* ((closing-amt (closing account)) @@ -686,14 +686,20 @@ ;; helper to calculate the balances for all required accounts (define (calculate-balances accts start-date end-date) - (if (not (null? accts)) - (cons (cons (car accts) - ;; using the existing function that cares about balance-mode - ;; maybe this should get replaces at some point. - (get-balance-nosub-mode (car accts) start-date end-date)) - (calculate-balances (cdr accts) start-date end-date)) - '() - ) + (define (calculate-balances-helper accts start-date end-date acct-balances) + (if (not (null? accts)) + (begin + ;; using the existing function that cares about balance-mode + ;; maybe this should get replaces at some point. + (hash-set! acct-balances (gncAccountGetGUID (car accts)) + (get-balance-nosub-mode (car accts) start-date end-date)) + (calculate-balances-helper (cdr accts) start-date end-date acct-balances) + ) + acct-balances) + ) + + (calculate-balances-helper accts start-date end-date + (make-hash-table 23)) ) @@ -712,12 +718,7 @@ (let ((this-collector (gnc:make-commodity-collector))) (gnc-commodity-collector-merge this-collector - (if (not (null? acct-balances)) - ;; if the acct matches, return the appropriate balance - (if (equal? acct (caar acct-balances)) - (cdar acct-balances) - ;; otherwise, keep looking - (get-balance (cdr acct-balances) acct)) + (or (hash-ref acct-balances (gncAccountGetGUID acct)) ;; return a zero commodity collector (gnc:make-commodity-collector) ) @@ -732,7 +733,7 @@ ;; sub-accounts. (define (get-balance-sub acct-balances account) ;; its important to make a *new* collector for this, otherwise we're dealing with - ;; pointers to the current collectors in our acct-balances list and that's a + ;; pointers to the current collectors in our acct-balances hash and that's a ;; problem -- the balances get changed. (let ((this-collector (gnc:make-commodity-collector))) ;; get the balance of the parent account and stick it on the collector