Thedefault Invoice style is fairly barren, as you can see in the example given in the "Invoices" section of this chapter. The default invoice style leaves the top part of the form blank, so that you print on company letterhead paper. However, there are some things you can do to change this default appearance.
You must select the Fancy style sheet template, and choose a name for your new style sheet. The new style sheet will appear in the list to the left. Select it, and now use the tabbed window to the right to make modifications. There are 4 tabs available, Colors, General, Images, and Tables. The Colors tab allows you to change the colors of the various sections of the invoice. The General tab allows you to set the Preparer and Prepared for information, and to enable links. The Images tab allows you to import graphics into the style sheet, such as your company logo. Finally, the Tables tab allows you to adjust the spacing around the tables which make up the invoice.
With the style sheet configured, when you print the invoice, you select the style sheet to use from the Options menu. Below is the resultant invoice after applying the style sheet demonstrated above.
The invoices GnuCash produces work fine, but leave something to be desired in terms of customization. Using the typesetting software LaTeX and the script gcinvoice you can make a LaTeX template, into which you pour the information from your GnuCash database to make a professional-looking invoice.
My template can be downloaded from my Github repository. Also included is a bash script you can use to automate running gcinvoice. In both the bash script and the template you will need to edit some global variables to your situation. These are indicated with comments.
By using LaTeX markup in these billing terms, you can make text bold or underlined or similar. By referencing to the variables used in the LaTeX document, you only need to make changes there when something changes.
In the future, I hope to expand on this with a script to add a SEPA Credit Transfer QR code to the invoice, to make payment easier for customers, using the API from the Online SEPA Credit Transfer QR-code generator. UPDATE: I have done this, see my next blog post.
To try out eguile-based reports, you first need to download eguile-gnc.scm and put it into the report folder. On my system -- Ubuntu -- that's/usr/share/gnucash/guile-modules/gnucash/report/eguile-gnc.scm. In general, it should go into the same folder as files such as fancy-invoice.scm.
Restart GnuCash, and the report should then show up somewhere in the reports menu, depending on the menu-path option in the report. The Tax Invoice and Balance Sheet reports (see below) put themselves into the Reports/Business sub-menu.
The processing happens in two passes. Initially the input file is convertedto a Guile script, and then that script is evaluated to produce the finalresult (as a string which is passed back to the report-displaying part of GnuCash).
To simply looping over a list or map (which by default is a bit cumbersome in scheme), GnuCash defines a custom for-loop syntax, which works similar to for loops in some imperative languages. There are three forms of this syntax: For a single list, for multiple lists and for hashes. This for loop syntax should be available in all eguile-based reports (both in the report itself as well as in the eguile templates). This syntax is defined in eguile-utilities.scm, so it might be available in other parts of scheme as well.
This syntax loops over all 's in parallel, assigning each value to the corresponding and evaluates all 's. In other words, it takes the first element of the first , assigns it to the first , takes the first element of the second , assigns it to the second , up to the last and . Then it evaluates each and starts over with the second element of each list, etc.
This syntax loops over all keys and values in a hash, assiging each key to and each value to in turn and evaluating all 's. Note that as always with hashes, the keys from the hash are looped in arbitrary order.
More precise N_ means NOP, no operation. It can be used to mark strings for translation e.g. in array declarations, but doesn't translate them. Then later the translation is called with _. More Details in Translation#Tips for Developers.
I just started using GnuCash for personal finance, and I'm still figuring out how to register different types of movements of money. The issue I'm not sure about now, is how to register reimbursements from my employer.
E.g:From my normal bank account, (I guess you call it checking account). I pay some sort of expense using my debit card or invoice. This is e.g. lunch or internet bill.When I get my paycheck, this is all in one amount, so I split it into "income" and "reimbursements" as income accounts, and then register this as income to the checking account.
In reports, this would show that I earn more money then I really do, and spend more money then I really do.Is there a way to register this, so reports would show my income and expenses correctly?Some sort of way to deduct the amount from the different expense accounts?I am using the android app to load the .gnucash file. I really like the simple graphs there.
I really need something that works for a business that sells consultancy services, engineering services, break fix services and hardware. Quickbooks does this but running accurate reports is a nightmare.
I had looked into business accounting apps on linux once or twice before, and besides GNUcash, pretty much your only options were web-based tools that you could host on your linux machine. Even then, they were limited in features unless you paid for the full version. For now, I just use invoice2go on android and ios, but I could sure use something a little more feature-full.
Update on my WAVE experience so far. Syncing the bank account and credit card accounts was VERY easy (just upload). Entering all the client information was about like you would expect. Entering my chart of accounts was very easy and worked much better that Quickbooks. I have only produced about 3 invoices so far, but they were quick and painless. The only real issue I have had so far is getting our Logo to upload to the invoice template.
With a custom fields I could solve (or at least workaround) the following issues described in separate threads:
- transaction classification
- add the ability to attached scanned images to invoices
- point of sale
- link any transaction to "the other party"
And more:
- I could fill-in bank account number of the other party at bank account transactions - and can later search according the bank account
- make notes to the transactions (it's a good idea to make more extensive notes to complex transactions so as you could remember later what was going on)
- and more
I've just submitted a closely related request ( -feature-request/suggestions/43055517-multiple-attached-urls-identifiers-per-transacti), basically asking for the same with the already existing URL attachment function.
Adding user-defined fields to a customer is essential for me. In Italy it is compulsory to write on each invoice the customer's VAT ID or customer's TAX-ID.
Moreover, you can have different kind of customers if you assign them a special value in a field. For a non-profit organization, or for a club, it is important to distinguish beetween associates and not associates.
For example, if I might have a holiday to Japan with the transactions in various expense accounts like Expenses:Travel:Hotel and Expenses:Travel:Flight. I could tag those individual transactions as #Japan2017 and create a report which filters solely on those transactions. The alternative is sub-accounts and manually creating a report to select the various sub-accounts manually.
Another example would be account-based tags. If I savings across various banks or brokerage accounts but allocate to sub-accounts for different purposes (i.e. saving for child college or retirement) then it would be convenient to create tags for the sub-account such as #CollegeFund or #RetirementFund to then design reports that are based on tags rather than account names (because the report would automatically filter for all accounts with the relevant tag).
Yes, all db tables need the ability to add and display custom fields. I would use this to assign expenses to projects so I could get readily reimbursed, and add phone numbers, url's, interest rates, etc. to account overviews, just to name a few.
This seems easy to implement, either in gnucash core, or in a sister program that opens the GC db's read-only & keeps the additional fields in a separate db which shares primary keys. A third approach would have the sister program use the GC db, calling GC functions/methods, which would hopefully insure db integrity.
It would be nice to be able to customize the availability of fields, like have the above set of fields available on credit card accounts, and another set available on checking accounts. I don't know how easy it would be to implement this.
Custom fields would be of great help for home finances as well. I like keeping track where I made each expense (which shop). then get reports on where I spend most and avoid that place - they must trick me somehow I can't explain it yet :))
I just wanted to add my agreement with David that this feature would potentially eliminate the need for other features like classification. I can think of a million uses for this, and have upvoted as much as possible :).
Being able to add user-defined fields to Job Information would allow me to use jobs to represent vehicles for my auto repair business. I need to add fields like Make, Model and Mileage. I would like to be able to update mileage each time I create a new invoice for that job and have them print on the invoice. This is the only thing holding me back from replacing QuickBooks 2004 with GnuCash.
All of your personal information, including email address, name, and IP address will be deleted from this site. Any feedback you have provided that others have supported will be attributed to "Anonymous". All of your ideas without support will be deleted.
3a8082e126