Leave blank for all. Otherwise, the first selected term will be the default instead of "Any".
Leave blank for all. Otherwise, the first selected term will be the default instead of "Any".
Leave blank for all. Otherwise, the first selected term will be the default instead of "Any".

FAQ Category: (No category)

Yes. IBANs are very long, bank account numbers. LedgerSMB has no problems storing, retrieving and using these without any issue.

Yes. SEPA (Single Euro Payments Area) requires support for very long bank account numbers (IBANs or International Bank Account Numbers). LedgerSMB can store and use these numbers without problems.

The answer to this question depends on what using means to you.

As a user of the web application, yes, there should be absolutely no problem using a recent (as in: no more than 2 or 3 years old) web browser in order to take advantage of all the features available.

As a platform for running a LedgerSMB server, it's simply been too long since it has been last tested. You might be able to make it work at the expense of considerable effort. If you do, please comment on this FAQ or contact the mailing list to let us know about your process and results!

Those running a LedgerSMB server on the Windows platform - that we know of - do so with virtualization techniques such as VirtualBox.

Starting 1.4.17 account hierarchies - which were part of LedgerSMB for a looong time already - will now be used for financial reporting: balance sheet and income statement. In addition to grouping accounts into the subgroups defined by the hierarchy, amounts are aggregated up the tree as well. This article demonstrates how to use this feature. Scroll all the way to the end to see what happens if you don't want to update your configuration (yet).


There are multiple reasons for wanting to use hierarchies. One of those reasons is that expense accounts are currently listed as one long list under Expenses while income accounts are listed as a -usually shorter- list under Income. Personnel expenses are usually spread across multiple expense accounts. With lots of other expense accounts also listed, what's the total expense on personnel?

Another use-case for using hierarchies might be because you're running a "margin business". That is, you're only every buying what you're selling and the cost of goods sold is the large part of your expenses. In cases like this it can be a good idea to use a different setup of the income statement: one where cost of goods sold is immediately subtracted from income, leaving gross margin to cover all other expenses in the company.

In all versions (that I ever used) prior to 1.4.17, there was no way to create a report layout which matches either of the use-cases described above. As off 1.4.17, the account hierarchy in the reports solves exactly this problem.

Example output

As shown in the output below (left) the new balance sheet aggregates numbers into the headings and headings of headings: The "Current assets" heading is the total of allowance for doubtful accounts and Checking account while "All assets" is the tottal of "Current assets" and "Capital assets" heading amounts. On the right, the old balance sheet report is shown. Even though the first-level headings (Capital Assets, Current Assets, ...) were defined in the system, they did not show up in the report.

Please scroll down for a comparison of the income statement report.

Balancesheet with hierarchyBalance sheet previous versions

On the right, there's the old report again to be compared to the new report on the left. The right report shows only the total expenses, while the one on the left shows total expenses, total payroll expenses and total General & administrative expenses.

Income statement with hierarchyPrevious income statement

Additional configuration

The example above has been created using the "General" US Chart of Accounts which can be found in the standard LedgerSMB distribution. The standard version only includes only a single level hierarchies, meaning only "5600 - General & Admin expenses" (and the like).

To create the demo above, I added the other levels (with nodes marked <pre-existing> part of the standard CoA as distributed):

    • CURRENT ASSETS <pre-existing>
    • CAPITAL ASSETS <pre-existing>
    • CURRENT LIABILITIES <pre-existing>
    • 4998 NET MARGIN (P&L Result)
        • ​INCOME <pre-existing>
        • COST OF GOOS SOLD 
        • PAYROLL EXPENSES <pre-existing>​​​

​​​Headings with a heading

In order to build the hierarchy of headings, each heading needs to have a heading on its own, except for the "root" headings "ALL ASSETS", "ALL LIABILITIES" and "TOTAL EQUITY". The P&L is reported as part equity, meaning that the P&L result will have "TOTAL EQUITY" as its parent.

In order to set a heading's parent, go to the Chart of Accounts menu item under the General Journal main menu. Click on the [Edit] link in the column before the last. The resulting screen shows below. The "Heading" dropdown allows selection of any of the other existing headings.Account heading with a heading

Please note that an error will be thrown if you're trying to set the heading of the current heading to one which has the current heading as its own heading: this creates a cycle in the headings which is not supported (where does roll-up begin and end, if you're going round in circles?).

The above is enough to make your Income Statement work. For the Balancesheet, there's one more step to be taken.

Identifying the profit/loss heading

In order to summarize the P&L result as a single line no the balance sheet, the heading which totalizes the profit/loss must be marked as such. This should de done through the main menu item System, under the Defaults submenu as shown below.

Defaults screen - identification of P&amp;amp;L result heading

As you can see, in casu the example above, the heading "4998 -- NET MARGIN" has been selected; exactly the heading which is used as the highest level for the P&L and lowest level at which income and expenses are being reported in the balance sheet.

What if I don't ...

... want to change my configuration (just yet). Will it stop working?

Backward compatibility report

No, it won't: backward compatibility selections have been added to the Income statement and Balance sheet reports. The image below shows the compatibility setting on the Income statement report.Compatibility selection (Income statement)

When running with the "Account category" option, the account category ("Income", "Expense") will be used as the hierarchy instead of the account hierarchies. The output of the income statement from the example above with this setting looks like the picture below, with a balance sheet run with the same compatibility setting right next to it.

Compatibility selection (Balance sheet)

Note that the compatibility report is *not* the default setting, meaning that in order to be provided the default report, the "Account category" "hierarchy" needs to be selected explicitly.

** Work in progress...
Goal: In this tutorial we will install LedgerSMB on Debian Wheezy 7.x.

System requirements
• Debian Wheezy 7.8 at 64 bits
• Apache v2.x
• PostgreSQL 9.0+
• Perl 5.10+

Next actions
• This tutorial is roughly 90% done. When 100% done this note will be remove.
• We need volunteer(s) to complete the remaining 10% of this tutorial. Any volunteer? You are welcome to edit this page now :) So far the below "make test" command returns lots of errors. The following "INSTALL" text file might help to identify the missing steps or errors. https://sourceforge.net/p/ledger-smb/code/HEAD/tree/branches/1.4/INSTALL It is unclear if that "INSTALL" text file is up to date for LedgerSMB

• For installing LedgerSMB 1.3-x on Ubuntu find that other tutorial at http://ledgersmb.org/news/ubuntu-installation-tutorial-ledgersmb-13-series
• For installing LedgerSMB on Ubuntu please consider create a new tutorial for Ubuntu. Please do not hijack this tutorial with Ubuntu instructions, because instructions, commands, and packages for Debian and Ubuntu are similar but different.
• All passwords in this tutorial are: "org" without the quotes. Feel free to change those of course.


Using Terminal as Root run the following command to install the required Perl-modules, required Texlive-modules, and their required dependencies

apt-get install libdata-dumper-simple-perl perl-modules liblocale-maketext-lexicon-perl libdbi-perl libdbd-pg-perl libconfig-any-perl libmime-lite-perl libhtml-linkextractor-perl libnet-tclink-perl libparse-recdescent-perl libmodule-build-perl libperl5.14 libuuid-perl liblocale-gettext-perl libyaml-tiny-perl libtext-iconv-perl libtext-charwidth-perl libmodule-install-perl liblatex-driver-perl libclass-std-perl libconfig-std-perl

Using Terminal as Root run the following command to install the required texlive modules, and their required dependencies. Note that this will download ~1,949 MB and could take long time.

apt-get install texlive-fonts-extra texlive-latex-extra-doc texlive-lang-all texlive-latex-extra texlive-fonts-recommended texlive texlive-doc-en texlive-generic-extra

Using Terminal as Root run the following command to install the required Apache, and related packages

apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert build-essential

Using Terminal as Root run the following four line of commands to install LedgerSMB
cd /tmp
wget http://downloads.sourceforge.net/project/ledger-smb/ledgersmb/
tar xvfz ledgersmb-
mv ledgersmb /usr/local/

In the following steps we will configure Apache for LedgerSMB

Using Terminal as Root run the following command to get full access to Apache
chown -R www-data:www-data /usr/local/ledgersmb

Using Terminal as Root run the following command to connect Apache server with the appropriate config-files
sed -e "s|WORKING_DIR|$PWD|g" /usr/local/ledgersmb/ledgersmb-httpd-2.4.conf.template > /etc/apache2/conf.d/ledgersmb-httpd.conf

Using Terminal as Root run the following command to enable "mod_rewrite" Apache module
a2enmod rewrite

Using Terminal as Root run the following command to restart of Apache
service apache2 restart

Using Terminal as Root run the following command to do some modifications of the configuration-files
mv /usr/local/ledgersmb/ledgersmb.conf.default /usr/local/ledgersmb/ledgersmb.conf

Using Terminal as Root run the following command to restart of Apache again
service apache2 restart

Using Terminal as Root run the following 3 command lines to validate the installation
cd /usr/local/ledgersmb
perl Makefile.PL

Terminal will return the following message
"Auto-install the 12 mandatory module(s) from CPAN?"


Terminal will return the following message
"Auto-install the 4 optional module(s) from CPAN?". "Starman, CGI::Emulate::PSGI, Plack::Builder, Plack::Middleware::Static"


Terminal will return the following message
"Auto-install the 1 optional module(s) from CPAN?". "Image::Size"


Terminal will return the following message
"Auto-install the 1 optional module(s) from CPAN?". "X12::Parser"


Terminal will return the following message
"Auto-install the 2 optional module(s) from CPAN?". "Template::Plugin::Latex, TeX::Encode"


Terminal will return the following message
"Auto-install the 2 optional module(s) from CPAN?". "XML::Twig, OpenOffice::OODoc"


Using Terminal as Root run the following command to resume the compile from source procedure, and install dependencies


Terminal will return the following message
"- Your preferred file format is [2] (OOo=1 ODF=2)."
"Is that OK (y/n) ?"


Using Terminal as Root run the following command to install "Template::Latex" and its dependencies

apt-get install libtemplate-plugin-latex-perl

• Template::Latex is included in Template::Plugin::Latex which is now included in Debian as libtemplate-plugin-latex-perl.
• That command can take a long time. When done it will return the message "PASS".

Using Terminal as Root run the following command to run "test" and resume the compile from source procedure, and install dependencies

make test

Using Terminal as Root run the following command to install the Perl-files LedgerSMB put on Apache

cd /usr/local/ledgersmb
sh install.sh

Terminal will return the following message
"Would you like to configure as much as possible automatically?"


Terminal will return the following message
"Would you like me to automatically choose some CPAN mirror sites for you? (This means connecting to the Internet)"


Terminal will return the following message
"Auto-install the 4 optional module(s) from CPAN? [n]"
"- Starman ...missing."
"- CGI::Emulate::PSGI ...missing."
"- Plack::Builder ...missing."
"- Plack::Middleware::Static ...missing."


Terminal will return the following message
"- TeX::Encode ...missing."
"==> Auto-install the 1 optional module(s) from CPAN? [n]"


Terminal will return the following message
"Which user does your web server run as?"


Notes: Make sure you do not add any space. Type in "www-data" as is without the quotes.

Terminal will return the following message
"Where do we copy the ledgersmb-httpd.conf file to?"


Note: Ensure there are no space

Using Terminal as Root run the following command to restart of Apache again

service apache2 restart

Using Terminal as Root run the following 2 commands to install and configure Posgresql.

apt-get install postgresql-9.1 postgresql-client-9.1 postgresql-contrib-9.1 libaprutil1-dbd-pgsql
su postgres -c psql template1

Terminal will now read as following. This means you successfully entered PosgreSQL.

Using Terminal as Root run the following command to install and configure PosgreSQL. In that command replace with a password of your choosing. Keep the two 'apostrophes'. To reduce the risk of errors, you password must be lower case, letter and numbers only, no symbols, and less than 16 characters.


Using Terminal as Root run the following command to leave PosgreSQL. This will also alter the password for within the database. Then return you to Debian Terminal.


Using Terminal as Root run the following command to alter the password for the unix user "postgres"

passwd -d postgres

Using Terminal as Root run the following command to create ledgersmb database who has full rights on the database with user ledgersmb

adduser ledgersmb

Using Terminal as Root run the following command to switch to "ledgersmb" user

su postgres

Using Terminal as "ledgersmb" user run the following command to switch to continue the ledgersmb database setup

createuser -D -A -P ledgersmb

Terminal will return the following message.
"Enter password for new role:"
Type in a password. To reduce the risk of errors, you password must be lower case, letter and numbers only, no symbols, and less than 16 characters.

createdb -O ledgersmb ledgersmb

Terminal will return the following message.
"Shall the new role be allowed to create more new roles? (y/n)"


Still using Terminal as Root run the following command to reboot your system and resume activating all the above actions


In the following steps we will setup LedgerSMB

Using your favorite modern web browser such as Iceweasel go to http://localhost/ledgersmb/setup.pl

• The name for the company database can only contain letters, digits and underscores;
• Additionally, it must start with a letter;
• Company database names are case insensitive, meaning you can't create two separate company databases called 'Ledgersmb' and 'ledgersmb'."

For the password you type give the password you gave above when you set the database user's password in the database ('postgres' was the example password given).

For the database (=database of the organization) you can choose the company by yourself: type name of Company/Organization, in this example mycompany

Click on “login” button

On the next page select yes and click on "next" button

Then you are directed to the "Database Management Console" page (This could take several minutes because the database for the company will be made)

Choose a language from scroll down menu, such as "us"

Then "Next" button

On the next page, select a option from the scroll-down menu. The default "General.sql" option is best option to see all features.

Click on "Next" button

On the "Enter User" page fill in the data needed according to your choice:

Import: "no"
Assign permission: "choose full permissions"

Click on "Create User" button

On the next screen click on "Start Using LedgerSMB" link

On the log-in page fill here in the data you already have inserted according to the previous pages

Note that the next time you want to login LedgerSMB go to http://localhost/ledgersmb/login.pl

Click on "Login" button

On "Preferences for ***" page, for security reason, you should change your password. Also you can modify your preferences in the listed formats.

Note: A major difference between 1.4- and 1.2-series is the creation of users and their authorizations. Here you simply click on “System” link and then “admin users”.

Enjoy :)

Below is a listing of demos available from different hosting companies:




For real-time help try IRC - you will usually find most of the core team hanging out at irc.freenode.net / #ledgersmb

There are people there who range from users to developers who are willing to help. We have agreed to adopt the Ubuntu code of conduct for our community. Please read it if you plan on joining us.

We also ask that you always use a paste site when pasting more than 2-3 lines. Paste sites include:

Connecting to IRC
Read more about IRC on https://en.wikipedia.org/wiki/Irc and install a irc client and join us.

You can use a browser-based irc client to join the channel.

Dedicated IRC client¶
Connect to freenode network. Most clients have that already pre-configured. If not, connect to the following server:
Server: chat.freenode.net or a server near you.
Port: 6667
Join the #ledgersmb channel.

The best way to get (free) help is to join one of the LedgerSMB mailing lists:

Browse the mailing list archives for past advice.
Announce List
User List
Developer List
SVN commits List
Gmane - LedgerSMB mail lists as RSS and NNTP
ledger.smb.* groups. Nice web reader and list search in relevant lists.

Posting rate stats graph, comp.finance.ledger.smb.user


Latest posts:


Perl is a high-level, general-purpose, interpreted, dynamic programming language. Perl was originally developed by Larry Wall in 1987 [ http://en.wikipedia.org/wiki/Perl ]

Perl 5 is a highly capable, feature-rich programming language with over 24 years of development.

Learn Perl

The Bernard Chan Perl Tutorial


Perl on CPAN
Requires: Perl 5.004, Carp, Exporter, GD (optional)

use Barcode::Code128 'FNC1';
$code = new Barcode::Code128;

This is CODE128 which may not be what you want if you are trying to print barcodes for retail purposes. In the US you would want to use UPC-E (for those reading from Europe, this is similar to EAN there). Different barcode scanners encode information differently so using the wrong type will result in problems.

Recommend readinging before you start:

Also note: Most barcode decoders (on-scanner or otherwise) have to be programmed to know what sort of barcode they are expecting so you don't want to mix these in an environment.

Pdftricks and pstricks can be used to generate barcode images in LaTeX templates.

Q: Brian Wolf
A: Chris Travers
Source: http://permalink.gmane.org/gmane.comp.finance.ledger.smb.user/6822

The simple one:
Sales order: Customer wants to buy something.
Sales invoice: Customer owes for goods and services delivered.

Business-flow-wise, typically you take an order before everything is done necessary for the transaction to hit the books, and convert it to an invoice when everything that has been done for the income to be realized has happened. This typically means:

1) Goods or services are delivered
2) Any approval/error checking the business requires has happened

One big thing in 1.4 is that approval for invoices is possible so instead of two steps you can actually have three (goods ordered, invoice pending approval, and approved/posted to the books).

An other expl:
A sales invoice hits the books, and represents a financial transaction.

A sales order does not show up in the books. It's upstream of any financial transaction, and so anything on it will not be reflected in any financial report or have any transactions on any of the account charts.

So orders are more for managing your workflow. Invoices are for accounting. Your accountants probably do not care about your orders -- all they care about are invoices.

An other example:
A sales order is what I write down when you want to buy something from me. You ask me to ship you 10,000 staples next week. When I actually do ship you the 10,000 stables, I generate an invoice to go with it. Before I ship, I have no receivable asset, but I have 10,000 stables. After I ship, I have a receivable asset posted, but I don't have the 10,000 staples.

If this happens between 10am and 2pm, not a huge difference. If it happens between noon on Dec. 31 and I ship on Jan 4, the next year, this might matter.

Unless I post the order, my factory floor might not actually produce the 10,000 staples, or they shipping department might ship the last 10,000 staples to someone else.

Q: Brian Wolf ( http://permalink.gmane.org/gmane.comp.finance.ledger.smb.user/6417 )
A: Chris Ttravers, John Locke and Michael Richardson

To give folks an idea of where the next release is coming, I figure it is worth posting this and updating it from time to time.

Changelog for 1.4 Series

General Enhancements:
* scripts/* files moved to make inheritance possible (Chris T)
* PostgreSQL contrib dependencies removed, now require Pg 8.4 (Chris T)
* Performance enhancements on menu routines (Chris T and Steven M)
* Removed the Config::Std dependency and moved to Config::General (Chris T)
* Improved error handling using Try::Tiny and die (Chris T)
* Added +/- selection indicators to menu CSS (Chris T)
* Added "dynatable.html" template that can be included in templates (Chris T)
* Dynatable forms obtained through GET now show link back to form (Chris T)
* LedgerSMB->error and Form->error now show db version and company (Chris T)
* Simpler use of Log::Log4perl instead of LedgerSMB::Log (Chris T)
* Changing all auth calls to hit postgres db instead of template1 (Chris T)
* Centralized database commit for new code (Chris T)
* invoice.unit is now unbounded numeric to reduce errors (Chris T, 3516235)
* Invoices with inventory subject to draft/vouchers workflows (Chris T)
* Added Equity (Temp) account type (Chris T)
* Added description field to transaction and invoice screens (Chris T)
* Removed ability to repost/delete transactions (Chris T)
* Partsgroups can now be nested though this is not yet used by LSMB (Chris T)
* Added file attachments to parts (Chris T)
* Added file attachments to customers, vendors, employees, leads etc (Chris T)
* LaTeX format detection now run-time call, not configured (Chris T)
* Bringing back inactivity-based logouts (Chris T)

New RESTful Web Services Framework
* Supports XML and JSON as input formats
* Supports XML and JSON as output formats
* Supports read/write for Contacts:
* Customers
* Vendors
* Employees
* Leads
* More

New Reporting Framework
* Easy bridge between SQL and display (Chris T)
* All reports exportable to CSV (Chris T)
* All reports exportable to PDF (Chris T)
* Unified UI for reports (Chris T)
* Enhanced trial balance allows for partial trial balance (Chris T)
* Enhanced trial balance allows for saved criteria (Chris T)

Customer/Vendor Handling
* Added sales tax id and license number fields for companies (Chris T)
* Simpified database schema (Chris T)
* Full text search of notes for customers/vendors (Chris T)

New CSV Import Module
* Imports GL transactions (Chris T)
* Imports AP batches (Chris T)
* Imports charts of accounts entries (Erik H)
* Imports GIFI tables (Erik H)
* Imports SIC tables (Erik H)
* Imports timecards (Chris T)
* Imports initial inventory and periodic counts (Chris T)
* Extensible
* field maps can be overridden

New Business Reporting Unit System (Chris T)
* Replaces Projects and Departments
* Business reporting units may be nested
* Allows one to do funds accounting, track jobs separately from projects, etc
* Report on any combination of business reporting units (up to one per class)

A lot of people are wondering how to manage their migration to LedgerSMB from SQL-Ledger. While there is no one simple answer that will suit everyone's situation, there is some general advice.

First thing to know is - you are among friends. LedgerSMB is built on a community of people who want to see the software and it's users succeed. Information is freely shared, and as long as you are prepared to have a go at helping yourself, we are happy to jump right in and help you do that!

We now have a mailing list, whether you are actively working on migrating to LedgerSMB or even if you are staying with SQL-Ledger for now and want some friendly community support, join up the User List to get SQL-Ledger to LedgerSMB migration help

The best course of action depends on your situation:

I am running SQL-Ledger 2.8.0+

Short answer: roll-back to a backup or test the new experimental support for migrating to LedgerSMB 1.3.x

Update 2012-03-22: LedgerSMB 1.3.x: Experimental support for migrating from SQL-Ledger via Setup.pl

Update 2011: LedgerSMB 1.3.x: Take a look at this documents in cvs for the latest info:

Currently we have an automated migration path under development for installations of SQL-Ledger-2.8.0. We can however give (free) case-by-case assistance if you are stuck at 2.8.0 and want to move to LedgerSMB - it may be fairly straightforward for your case, we just can't guarantee it across the board yet.

If you can revert to an SL version prior to 2.8.0 without data loss (ie, you upgraded but haven't entered any new data and can restore your old version) then you can migrate most easily by reverting to your previous SL install, then following the advice below for users not yet on 2.8.0

If you have upgraded to SQL-Ledger 2.8.0 and have new transactions in it that are not in your old backup (or you don't have a prior backup) then your best bet is to wait until LedgerSMB 1.3.0 is released, or contact us on the lists or IRC channel for specific advice on the best way to migrate. We plan to have a direct migration path for 2.8.0 users once 1.3.0 is out.

I am running an older SQL-Ledger (pre-2.8.0)

Short answer: Jump in, the water's great

Excellent, this is right now the easiest migration path. Current recommendation is that you migrate to LedgerSMB 1.1.12 which includes some important security fixes and data integrity controls not found in any SQL-Ledger version, but if you want to jump straight up to 1.2 you have options there as well.

I want the easiest, quickest way to LedgerSMB

Short answer: Upgrade to LedgerSMB 1.1.12

The best way is to upgrade to the latest 1.1.x release (1.1.12 as of this writing). These releases contain fixes for some serious security flaws not fixed in any SQL-Ledger version and several improvements for data integrity. It is also a clean GPL'd release without any licensing concerns for translations, contributions etc.

From Chris Travers' list email April 14 2007:

The upgrade to 1.1.x should be as simple as any SQL-Ledger upgrade. However, we do tighten some of the integrity controls and occasionally people run into problems cases where the data in the db is in an inconsistant state. If you do, write for help or contact us on #irc and we can help you sort through it.

Note that currently the upgrade from 1.1.x to the 1.2.x series involves some changes to user authentication and template variables which might require some manual intervention for some installs. This migration path might be smoothed out a bit as time goes by, so if you are feeling cautious, stay with 1.1.x until you are comfortable with moving to 1.2.x or directly 1.3.x.

However, if you want to get the pain out of the way, or just want to be running the latest and greatest...

I want the latest, shiniest LedgerSMB

Short answer: Great! Go straight for LedgerSMB 1.2.x

From Chris Travers' list email April 14 2007:

The upgrade from 1.1.x to 1.2.x is a little rough. We have made a number of changes, which although they are again good security design, break a lot of backwards compatability. These include:
1) User information is stored in the database (we have a script to migrate users)
2) No server writeable and executable perl scripts ;-)

Remember, you might have some small issues with migrating from anything up to 1.2.x currently. That's OK though - there is plenty of expedient help available and most of the hiccups are easily fixed up. Try the users mailing list, or for rapid-response support try the IRC channel - there are usually a few members from the core team online to help you out of any migration issue you might have.

Yes, its Open source. The tools we use (Perl, PostsgreSQL, Apache ++) is also Open source.
Open source means that the source code of the software is available for free to everyone and you can modify the code and distribute it yourself. https://en.wikipedia.org/wiki/Open_source

Look for a place to contribute. This means not only programming, but also documentation, theme design, art work, or architectural design. Join the mailing list.


FAQ Category: Installation

In general: neither. The advice is to have the full source tree in /opt/ledgersmb/<version>.

Installing the LedgerSMB modules in the standard Perl search path works, but interferes with running different versions side-by-side.

To undo installation in /usr/local:

  • remove /usr/local/share/perl/5.XX.X/LedgerSMB/
  • delete /usr/local/share/perl/5.XX.X/LedgerSMB.pm; and
  • find and remove the .pl files that come in LedgerSMB's project root directory and bin/ and LedgerSMB/Scripts/ directories.

The default configuration limits access to the /ledgersmb/login.pl page to connections from localhost ( only for maximum security.

If you want to allow connections from other locations, it's highly advisable to use encrypted (VPN) connections to access your ledger in order to maintain good security.

Make sure you have TexLive installed. Older TeTeX was recommended but according to Ubuntu repositories, TexLive is the new package to install.

You can install this with the following command:

apt-get install texlive-latex-extra


The table below lists the compatibility of LedgerSMB versions with PostgreSQL versions. Products for which support has ceased due to End-of-Life date being reached are not listed and should not be used.

PostgreSQL compatibility
PostgreSQL 1.3.x 1.4.x 1.5 planned
8.4 yes no no
9.0 yes yes no
9.1 yes yes yes
9.2 yes yes yes
9.3 yes yes yes
9.4  yes yes yes

Versions 1.0, 1.1 and 1.2 are not in this table due to the fact that they're past End of Life.

FAQ Category: Localization / Internationalization

The short answer is that TeX doesn't know how to deal with UTF-8 (or rather non-ASCII) characters. XeTeX has been designed to work around these limitations. The easiest way to generate PDFs is to install Xe(La)TeX and use the 'xedemo' templates - these templates have been 'ported' from LaTeX to XeLaTeX.

Distribution specific install instructions listed below.

Debian / Ubuntu 

Install texlive-xetex that includes xelatex

apt-get install texlive-xetex

but you need to patch LaTeX::Driver
Install liblatex-{driver,encode,table}-perl for latex

apt-get install liblatex-{driver,encode,table}-perl

and libmoosex-followpbp-perl for Template::Plugin::Latex

apt-get install libmoosex-followpbp-perlafter that:

apt-get install libtemplate-plugin-latex-perl  (or cpan Template::Plugin::Latex)


LedgerSMB xelatex configuration

Install xelatex and change the LedgerSMB configuration from the menu:
System -> System Defaults -> Templates directory
Change to "xedemo"

Change a path

From the mailing list: (Chris Travers)
Right now, I am open to suggestions on a better approach, as the Template::Latex api's don't seem to work to do this, but I resorted to changing the paths in LaTeX::Driver::Paths directly (find the location with locate LaTeX/Driver/Paths.pm). This file gets written at installation time for the LaTeX::Driver module and so I consider it reasonably editable.

locate LaTeX/Driver/Paths.pm

If locate is not installed you can do:  find /usr . |grep "LaTeX/Driver/Paths.pm"
/usr/share/perl5/LaTeX/Driver/Paths.pm  ( Debian / Ubuntu )

Make a backup copy of  LaTeX/Driver/Paths.pm (you have to have root priviliges to do this or use sudo)

cp /usr/share/perl5/LaTeX/Driver/Paths.pm /usr/share/perl5/LaTeX/Driver/Paths.pm.backup(Change the path to your path for LaTeX/Driver/Paths.pm)

User your text editor to edit LaTeX/Driver/Paths.pm  (you have to have root priviliges to do this or use sudo)

In LaTeX/Driver/Paths.pm change

$program_path{pdflatex} = '/path/to/pdflatex;


$program_path{pdflatex} = '/path/to/xelatex';


This is the error you get, if you do not change:
/usr/share/perl5/LaTeX/Driver/Paths.pm  (Debian path)  :


latex error - pdflatex exited with errors:
l.26 \RequireXeTeX
! Fatal fontspec error: "cannot-use-pdftex"
! The fontspec package requires either XeTeX or LuaTeX to function.
! You must change your typesetting engine to, e.g., "xelatex" or "lualatex"
! instead of plain "latex" or "pdflatex".
! See the fontspec documentation for further information.
! For immediate help type H <return>.
l.38 }


The utf8 character "hack fix"

Before making this change will UTF8 characters appear as squares in the PDF file. To print utf8 characters in pdf files, you must make the following change:

These are the steps:
su root
open /usr/share/perl5/LaTeX/Driver.pm
in your text editor
go to line 174 on Debian Squeeze (6.x) and line 176 on Debian Wheexy (7.x)
you see "write_file( ..." there

".tex", $source


".tex", {binmode=>':utf8'}, $source


Font fix

In order for Verdana to work, install the package ttf-mscorefonts-installer (Debian/Ubuntu)

apt-get install ttf-mscorefonts-installer

In versions 1.3.28 and up, the demo templates no longer depend on Verdana though, but use the non-proprietary Liberation font set, which can be installed using

apt-get install fonts-liberation


Code reference to LedgerSMB

The code for this is LedgerSMB/Template/Latex.pm

The templates use the Template Toolkit scripting language to generate actual content.
Depending on the typesetting language, the files use
* (Xe)LaTeX; or
* plain text
as the typesetting system.

While LaTeX and XeLaTeX are extremely similar, some differences exist, mainly in the area of font selection and document preamble.

Latex cheat sheet - http://www.stdout.org/~winston/latex/

Latex in 157 minutes - http://tobi.oetiker.ch/lshort/lshort.pdf

The LATEX Font Catalogue - http://www.tug.dk/FontCatalogue/about.html

Guide in Norwegian: http://dag.at.ifi.uio.no/latex-links/uiofonts.pdf


There's a section dedicated to translation. That should help you to get started.
The basic idea is that everything you can learn from the web about translating with gettext applies to LedgerSMB's gettext translation as well, with the note that you should be able to find a recent POT file in the repository next to the source code for the latest development version (trunk) and the latest stable release (1.3).

FAQ Category: Contributing

We ask that all IRC members follow the Ubuntu Code of Conduct.

We also ask that you always use a paste site when pasting more than 2-3 lines. Paste sites include:

FAQ Category: Administration

Assuming you have created a backup file using setup.pl, you can restore your database using the command:

 $ pg_restore [options] your_backup.bak

It should be pointed out that it's not possible to restore a backup to a database with a different name than the one you made the backup from!

If the database to restore into doesn't exist: replace [options] with -C new_database.
If you want to restore replacing an existing database: replace [options] with --clean -C new_database.

Note: You need to restore the roles backup before restoring the data backup.

In the 'setup.pl' administrative interface, there are 2 buttons:

  • Backup database
  • Backup roles

One creates a backup of the content of your database. The other creates a backup of the roles.

Roles are elements which are required to exist before creation of a database, and assign fine-grained access control.

When restoring, you need both files and you need to restore the roles before the database.

  [work in progess...]&#13;&#13;

The PDF and PS invoices are generated using a program called LaTeX which handles the layout and typesetting. The actual LaTeX files are creating using Template Toolkit with extensions for LaTeX. These extensions are in the Template::Latex package available from CPAN. The software then generates a LaTeX file which is then processed to create a PDF or PS.

Typically the first thing to do is to install a LaTeX distribution like TexLive (distributed with many Linux distributions and available for OSX and Windows). This provides LaTeX and many of the modules needed. In general I recommend that if your distro has a texlive-extras package that you install this too.

After this is installed, you must then install Template::Latex. This can be done by typing on the command line:

Note: Debian & Ubuntu look below.

cpan Template::Latex

This will also install a number of dependencies including LaTeX::Driver, which will need to know where your LaTeX binaries are. It is usually pretty good at finding them.

If things go wrong and you can't get it to work, the following commands may provide useful diagnostic information when requesting help:

>From the LedgerSMB application directory:
perl -MLedgerSMB::Template::Latex -e print

>From the doc/manual directory in the LedgerSMB application directory:
pdflatex LedgerSMB-manual

Debian & Ubuntu note:
Template::Latex is included in Template::Plugin::Latex which is now in Debian as
libtemplate-plugin-latex-perl. (It has migrated to Debian Testing ('wheezy')).
Install with apt-get install libtemplate-plugin-latex-perl

Ref: Latex in templates & Debian squeeze and xelatex

How the LaTeX templates work
<a href="http://permalink.gmane.org/gmane.comp.finance.ledger.smb.user/6347


With answers from Chris Travers, Robert James Clay

FAQ Category: Accounting

I have made a payment to a vendor, but entered an incorrect date, far in
the future. Consequently the payment does not show when I try to reconcile
the relevant bank statement.

How do I back-out the incorrectly entered payment?

Cash/Vouchers/Reverse Payment.

Then when you are done adding the payments you want to reverse,
approve the batch.

Tested on: LedgerSMB 1.3.15.
source: http://permalink.gmane.org/gmane.comp.finance.ledger.smb.user/6087

Short answer: Yes

LedgerSMB can tie product sales to a tax class so that VAT can automatically be split off into the required VAT accounts on a sale, and when cancelling an invoice, automatically perform the reverse bookings.

Each product can be 'attached' to an account and the associated % will be applied automatically.

Quite a few users find some of the terminology and accounting processes a little confusing at first. Some of the more popular small business accounting packages tend to hide these aspects of book-keeping from users for simplicity, so with the current user interface there is often some new ideas to grasp.

First step is the manual - the LedgerSMB manual is free and highly recommended reading.

If you would like some background on general accounting practices, there is an (unassociated) tutorial So, you want to learn Bookkeeping" which seems a good place to start.

Another excellent resource is second-hand book stores. Lots of MBA studends sell off their textbooks (presumably to finance their first business rather than pay of gambling debts) so second-hand bookstores will often have very good texts on accounting at bargain prices - these can make great reference books.

Finally it would be remiss not to recommend securing the services of an accountant to help you out with the finer points from time to time, should you feel the need or have a legal obligation to do so.

Wikipedia articles:

FAQ Category: Support

Active support

Versions 1.4 and higher are under active development and are supported by the community.

End of life

If you're looking for help on how to use EOL-ed versions, please try mailing the users mailing list. If you're looking someone to create bugfixes, please check with one of the parties providing commercial support.

Version 1.3 has been declared end-of-life on 2015-12-23. The last release in the series is 1.3.47. No further releases will be made by the community.

LedgerSMB versions 1.0, 1.1 and 1.2 won't be maintained any further due to the fact that there are some known security issues which can't be fixed.

Is there a place where we could buy some consulting for LedgerSMB?
or a minimal setup according to our specs?

Take a look at Commercial Support