Difference between revisions of "Custom Reports"

From GnuCash
Jump to: navigation, search
(The GnuCash API: Explain different form of SWIG wrappers)
(gnc:debug and --debug)
Line 55: Line 55:
 
You will need to restart GnuCash '''every time''' you change a report.
 
You will need to restart GnuCash '''every time''' you change a report.
  
If, like me, you run GC from within X11, you best start GC from a X11 terminal window. For debugging you might add log messages with gnc:warn, e.g. <tt>(gnc:warn "here I am")</tt>  
+
You can insert debugging messages with <tt>gnc:debug</tt>, e.g., <tt>(gnc:debug "here I am")</tt>.  Use the <tt>gnucash --debug</tt> flag to switch on your debugging messages. You can also insert warning messages with <tt>(gnc:warn "message")</tt>.  Under X, you must of course run GnuCash from a terminal to see the messages.
 
 
gnc:debug only displays when some environment variable is set. I don't know where and how so I use <tt>gnc:warn</tt> instead.
 
  
 
== Other Resources ==
 
== Other Resources ==

Revision as of 18:43, 24 September 2007

Custom Reports in GnuCash

Unfortunately, at the present time writing a custom report for GnuCash requires a little bit of hacking. This wiki page should contain some information to help you get started, since there is no official documentation.

Note: I am using GnuCash 2.0.1 as I write this.

Example Reports

A good place to start is to examine the source code of the reports included with GnuCash. The location varies a little with different operating systems:

  • On BSD look in /usr/local/share/gnucash/guile-modules/gnucash/report
  • On Gentoo look in /usr/share/gnucash/guile-modules/gnucash/report
  • On OpenSuse look in /opt/gnome/share/gnucash/guile-modules/gnucash/report
  • On Ubuntu look in /usr/share/gnucash/guile-modules/gnucash/report

hello-world.scm is specially written to demonstrate the basic structure of a report.

The GnuCash API

The GnuCash application programming interface is quite intimidating. Luckily, for the reports, most of the stuff needed can be found in the scheme sources. Here some random examples of handy procedures (paths shown refer to the location in a source tarball; might be copied into the location as above in your installation):

  • create a monetary object: gnc:make-gnc-monetary src/engine/gnc-numeric.scm
  • get the amount of a monetary object: gnc:gnc-monetary-amount src/engine/gnc-numeric.scm
  • get an account name: gnc-account-get-name src/engine/swig-engine.c

Watch out for the gnucash version in use: In 2.0.x, the Scheme wrappers were created by G-WRAP, started with gnc: (with a colon) and were written into scheme files of the name gw-something.scm. In 2.1.x and later, the Scheme wrappers are created by SWIG, start with gnc- (a dash, not a colon) and were written into C files of the name swig-something.c. Please keep that in mind if the old documentation points you towards functions like these: Get an account name: gnc:account-get-name src/engine/gw-engine-spec.scm

Programming tools

Any reasonable source/text editor, including emacs and vi, should provide basic syntax support for source-code editing. One of the most basic and important for editings scheme/lisp sources is parenthesis matching. Other scheme environments (such as drScheme) might also be useful for editing the sources, but note that they might allow constructs that are not valid in guile.

Loading the Report

There are two ways to load a report at startup of GnuCash: from a user account, or from the installation tree. You will likely want to use the user account approach.

From a user account

In your home directory, edit ~/.gnucash/config.user to add a line of the form:

    (load-from-path "/path/to/my/personal/report.scm")

You will also have to comment out the line in the code for your report that defines the module:

 ;(define-module (gnucash report my-report-module))

Then restart GnuCash.

See gnucash-user email from Derek Atkins.

From the installed report directory

Alternatively, you can copy the report to the installed report directory. Make sure you have included a module definition as shown above. Then edit the appropriate Scheme file to register your report with the reporting system. You will have to register the report in one of the following places, depending on which submenu you want it to appear.

  • Standard Reports: standard-reports.scm
  • Business Reports: business-reports.scm
  • Utility Reports: utility-reports.scm

Then restart GnuCash.

You will need to restart GnuCash every time you change a report.

You can insert debugging messages with gnc:debug, e.g., (gnc:debug "here I am"). Use the gnucash --debug flag to switch on your debugging messages. You can also insert warning messages with (gnc:warn "message"). Under X, you must of course run GnuCash from a terminal to see the messages.

Other Resources

Old GnuCash Report Information

(may be very out of date)

Learning Scheme