Hello,
I was trying hacking on a budget reporting feature in the svn trunk
for my own curiosity. Unfortunately, I apparently suck at Scheme. I
thought the code looked intuitive enough that I could hack up
something simple without much pain but I was wrong. In fact, now I am
frustrated because I seem to be stuck on initializing a variable of
all things.
I was hoping someone who knew Scheme could point out my error for me.
I have never ever touched Scheme before last weekend.
The following snippet of code seems to be the source of my problems:
@@ -140,6 +147,7 @@
(let* ((num-periods (gnc-budget-get-num-periods budget))
(period 0)
(current-col (+ colnum 1))
+ (tdif-dif-total (gnc-numeric-zero))
)
(while (< period num-periods)
(let* (
@@ -170,6 +178,13 @@
(gnc:make-gnc-monetary comm dif-numeric-val)))
)
+ ;; total difference (total period budget to total
period actual)
+ (tdif-dif-total (gnc-numeric-add dif-numeric-val
+ tdif-dif-total GNC-DENOM-AUTO
+ (+ GNC-DENOM-LCD GNC-RND-NEVER)))
+ (tdif-val (if bgt-unset? "."
+ (gnc:make-gnc-monetary comm tdif-dif-total)))
+
(if show-budget?
(begin
(gnc:html-table-set-cell!
With the following error message:
In unknown file:
...
?: 35 [while-helper #<procedure #f (break continue)>]
?: 36 (do ((key (make-symbol "while-key"))) ((catch key (lambda () #) ...)))
?: 37* [catch #<uninterned-symbol while-key b5742cd0> #<procedure #f ()> ...]
?: 38* [#<procedure #f ()>]
?: 39* [#<procedure #f (break continue)> #<procedure #f ()>
#<procedure #f ()>]
?: 40* (do () ((#<primitive-procedure not> (< period num-periods))) ...)
In /opt/gnucash/trunk/share/gnucash/guile-modules/gnucash/report/budget.scm:
153: 41* (let* (# # # # ...) (tdif-dif-total #) (tdif-val #) ...)
182: 42* [#<<gnc-numeric> num: 0 denom: 1> #<<gnc-numeric> num:
-542131 denom: 100>]
/opt/gnucash/trunk/share/gnucash/guile-modules/gnucash/report/budget.scm:182:21:
In expression (tdif-dif-total (gnc-numeric-add dif-numeric-val
tdif-dif-total ...)):
/opt/gnucash/trunk/share/gnucash/guile-modules/gnucash/report/budget.scm:182:21:
Wrong type to apply: #<<gnc-numeric> num: 0denom: 1>
I have also attached the whole patch, in case that matters. Thanks in advance.
Cheers,
Don
ps - please cc me as I am not subscribed to the list
--- budget.scm.orig 2009-01-25 13:27:35.000000000 -0500
+++ budget.scm 2009-01-27 21:28:22.000000000 -0500
@@ -53,9 +53,11 @@
(define optname-show-budget (N_ "Show Budget"))
(define optname-show-actual (N_ "Show Actual"))
(define optname-show-difference (N_ "Show Difference"))
+(define optname-show-total-difference (N_ "Show Total Difference"))
(define opthelp-show-budget (N_ "Display a column for the budget values"))
(define opthelp-show-actual (N_ "Display a column for the actual values"))
(define opthelp-show-difference (N_ "Display the difference as budget - actual"))
+(define opthelp-show-total-difference (N_ "Display the total difference as total period budget - total period actual"))
(define optname-budget (N_ "Budget"))
@@ -117,6 +119,10 @@
(gnc:make-simple-boolean-option
gnc:pagename-display optname-show-difference
"s3" opthelp-show-difference #f))
+ (add-option
+ (gnc:make-simple-boolean-option
+ gnc:pagename-display optname-show-total-difference
+ "s3" opthelp-show-total-difference #f))
;; Set the general page as default option tab
(gnc:options-set-default-section options gnc:pagename-general)
@@ -132,6 +138,7 @@
(show-actual? (get-val params 'show-actual))
(show-budget? (get-val params 'show-budget))
(show-diff? (get-val params 'show-difference))
+ (show-total-diff? (get-val params 'show-total-difference))
)
(define (gnc:html-table-add-budget-line!
@@ -140,6 +147,7 @@
(let* ((num-periods (gnc-budget-get-num-periods budget))
(period 0)
(current-col (+ colnum 1))
+ (tdif-dif-total (gnc-numeric-zero))
)
(while (< period num-periods)
(let* (
@@ -170,6 +178,13 @@
(gnc:make-gnc-monetary comm dif-numeric-val)))
)
+ ;; total difference (total period budget to total period actual)
+ (tdif-dif-total (gnc-numeric-add dif-numeric-val
+ tdif-dif-total GNC-DENOM-AUTO
+ (+ GNC-DENOM-LCD GNC-RND-NEVER)))
+ (tdif-val (if bgt-unset? "."
+ (gnc:make-gnc-monetary comm tdif-dif-total)))
+
(if show-budget?
(begin
(gnc:html-table-set-cell!
@@ -191,6 +206,13 @@
(set! current-col (+ current-col 1))
)
)
+ (if show-total-diff?
+ (begin
+ (gnc:html-table-set-cell!
+ html-table rownum current-col tdif-val)
+ (set! current-col (+ current-col 1))
+ )
+ )
(set! period (+ period 1))
)
)
@@ -236,6 +258,14 @@
(set! current-col (+ current-col 1))
)
)
+ (if show-total-diff?
+ (begin
+ (gnc:html-table-set-cell!
+ html-table 1
+ current-col (_ "Total")) ;; Translators: Abbrevation for "Total Period Difference"
+ (set! current-col (+ current-col 1))
+ )
+ )
(set! period (+ period 1))
)
)
@@ -387,6 +417,8 @@
(get-option gnc:pagename-display optname-show-budget))
(list 'show-difference
(get-option gnc:pagename-display optname-show-difference))
+ (list 'show-total-difference
+ (get-option gnc:pagename-display optname-show-total-difference))
)
)
(report-name (get-option gnc:pagename-general
_______________________________________________
gnucash-devel mailing list
[email protected]
https://lists.gnucash.org/mailman/listinfo/gnucash-devel