summaryrefslogtreecommitdiff
path: root/doc/manual/LedgerSMB-manual.tex
diff options
context:
space:
mode:
Diffstat (limited to 'doc/manual/LedgerSMB-manual.tex')
-rw-r--r--doc/manual/LedgerSMB-manual.tex3870
1 files changed, 2252 insertions, 1618 deletions
diff --git a/doc/manual/LedgerSMB-manual.tex b/doc/manual/LedgerSMB-manual.tex
index dabe5a98..02425b41 100644
--- a/doc/manual/LedgerSMB-manual.tex
+++ b/doc/manual/LedgerSMB-manual.tex
@@ -1,2431 +1,3065 @@
-\documentclass{article}
+%% LyX 1.4.2 created this file. For more info, see http://www.lyx.org/.
+%% Do not edit unless you really know what you are doing.
+\documentclass[english]{article}
+\usepackage[T1]{fontenc}
+\usepackage[latin1]{inputenc}
+\IfFileExists{url.sty}{\usepackage{url}}
+ {\newcommand{\url}{\texttt}}
+
+\makeatletter
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands.
+\providecommand{\LyX}{L\kern-.1667em\lower.25em\hbox{Y}\kern-.125emX\@}
+%% Bold symbol macro for standard LaTeX users
+\providecommand{\boldsymbol}[1]{\mbox{\boldmath $#1$}}
+
+%% Because html converters don't know tabularnewline
+\providecommand{\tabularnewline}{\\}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
+
\usepackage{metatron}
+
\renewcommand{\abstractname}{Executive Summary}
\newcommand{\mycustomer}[1][]{#1\space}
\newcommand{\myproject}[1][]{#1\space}
\title{Ledger-SMB Manual}
\author{Chris Travers (\metamail{chris})}
\date{\today}
-\begin{document}
-\maketitle
- Copyright \copyright 2006 Metatron Technology Consulting.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
- A copy of the license is included in the section entitled "GNU
- Free Documentation License" (Appendix \ref{fdl}).
+\usepackage{babel}
+\makeatother
+\begin{document}
+Copyright \copyright 2006 Metatron Technology Consulting. Permission
+is granted to copy, distribute and/or modify this document under the
+terms of the GNU Free Documentation License, Version 1.2 or any later
+version published by the Free Software Foundation; with no Invariant
+Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of
+the license is included in the section entitled \char`\"{}GNU Free
+Documentation License\char`\"{} (Appendix \ref{fdl}).
-\tableofcontents
+\tableofcontents{}
\listoffigures
+
\clearpage
+
\part{Ledger-SMB and Business Processes}
+
+
\section{Introduction to Ledger-SMB}
+
+
\subsection{Why Ledger-SMB}
+
+
\subsubsection{Advantages of Ledger-SMB}
+
\begin{itemize}
-\item Flexibility and Central Management
-\item Accessibility over the Internet (for some users)
-\item Data is in a relatively open format
-\item Integration with other tools
-\item One of the best accounting options for Linux users.
-\item Open Source
-\item A flexible, open framework that can be extended or modified to fit your
-business.
-\item Security-conscious development community.
+\item Flexibility and Central Management
+\item Accessibility over the Internet (for some users)
+\item Data is in a relatively open format
+\item Integration with other tools
+\item One of the best accounting options for Linux users.
+\item Open Source
+\item A flexible, open framework that can be extended or modified to fit
+your business.
+\item Security-conscious development community.
\end{itemize}
+
\subsubsection{Key Features}
+
+\begin{itemize}
+\item Accounts Receivable
+
+\begin{itemize}
+\item Track sales by customer
+\item Issue Invoices, Statements, Receipts, and more
+\item Job costing and time entry for customer projects.
+\item Manage sales orders and quotations
+\item Ship items from sales orders
+\end{itemize}
+\item Accounts Payable
+
+\begin{itemize}
+\item Track purchases and debts by vendor.
+\item Issue RFQ's Purchase Orders, etc.
+\item Track items received from purchase orders.
+\end{itemize}
+\item Budgeting
+
+\begin{itemize}
+\item Track expenditures and income across multiple departments.
+\item Track all transactions across departments.
+\end{itemize}
+\item Check Printing
+
+\begin{itemize}
+\item Can customize template for any check form
+\end{itemize}
+\item General Ledger
+\item Inventory Management
+
\begin{itemize}
-\item Accounts Receivable
- \begin{itemize}
- \item Track sales by customer
- \item Issue Invoices, Statements, Receipts, and more
- \item Job costing and time entry for customer projects.
- \item Manage sales orders and quotations
- \item Ship items from sales orders
- \end{itemize}
-\item Accounts Payable
- \begin{itemize}
- \item Track purchases and debts by vendor.
- \item Issue RFQ's Purchase Orders, etc.
- \item Track items received from purchase orders.
- \end{itemize}
-\item Budgeting
- \begin{itemize}
- \item Track expenditures and income across multiple departments.
- \item Track all transactions across departments.
- \end{itemize}
-\item Check Printing
- \begin{itemize}
- \item Can customize template for any check form
- \end{itemize}
-\item General Ledger
-\item Inventory Management
- \begin{itemize}
- \item Track sales and orders of parts
- \item Track cost of goods sold using First In/First Out method
- \item List all parts below reorder point.
- \item Track ordering requirements.
- \item Track, ship, receive, and transfer parts to and from multiple
- warehouses.
- \end{itemize}
-\item Localization
- \begin{itemize}
- \item Provide Localized Translations for Part Descriptions
- \item Provide Localized Templates for Invoices, Orders, Checks, and more.
- \item Select language per customer, invoice, order, etc.
- \end{itemize}
-\item Manufacturing
- \begin{itemize}
- \item Track cost of goods sold for manufactured goods (assemblies)
- \item Create assemblies and stock assemblies, tracking materials on hand.
- \end{itemize}
-\item Multi-company/Multiuser
- \begin{itemize}
- \item One isolated database per company
- \item Users can have localized systems independent of company data set.
- \end{itemize}
-\item Point of Sale
- \begin{itemize}
- \item Run multiple cash registers against main Ledger-SMB installation.
- \item Suitable for retail stores and more.
- \item Supports some POS hardware out of the box.
- \item Third party add-ons available for more functionality.
- \end{itemize}
-\item Price Matrix
- \begin{itemize}
- \item Track different prices for vendors and customers across the board.
- \item Provide discounts to groups of customers per item or across the board.
- \item Store vendors' prices independent of the other last cost in the
- parts record.
- \end{itemize}
-\item Reporting
- \begin{itemize}
- \item All basic financial statements supported.
- \item Customer history, sales data, and additional information can be easily
- displayed.
- \item Open framework allows for ODBC connections to be used to generate
- reports using third party reporting tools.
- \end{itemize}
-\item Tax
- \begin{itemize}
- \item Supports Retail Sales Tax and Value Added Tax type systems
- \item Flexible framework allows one to customize reports to change the tax
- reporting framework to meet any local requirement.
- \end{itemize}
+\item Track sales and orders of parts
+\item Track cost of goods sold using First In/First Out method
+\item List all parts below reorder point.
+\item Track ordering requirements.
+\item Track, ship, receive, and transfer parts to and from multiple warehouses.
+\end{itemize}
+\item Localization
+
+\begin{itemize}
+\item Provide Localized Translations for Part Descriptions
+\item Provide Localized Templates for Invoices, Orders, Checks, and more.
+\item Select language per customer, invoice, order, etc.
+\end{itemize}
+\item Manufacturing
+
+\begin{itemize}
+\item Track cost of goods sold for manufactured goods (assemblies)
+\item Create assemblies and stock assemblies, tracking materials on hand.
+\end{itemize}
+\item Multi-company/Multiuser
+
+\begin{itemize}
+\item One isolated database per company
+\item Users can have localized systems independent of company data set.
+\end{itemize}
+\item Point of Sale
+
+\begin{itemize}
+\item Run multiple cash registers against main Ledger-SMB installation.
+\item Suitable for retail stores and more.
+\item Supports some POS hardware out of the box.
+\item Third party add-ons available for more functionality.
+\end{itemize}
+\item Price Matrix
+
+\begin{itemize}
+\item Track different prices for vendors and customers across the board.
+\item Provide discounts to groups of customers per item or across the board.
+\item Store vendors' prices independent of the other last cost in the parts
+record.
+\end{itemize}
+\item Reporting
+
+\begin{itemize}
+\item All basic financial statements supported.
+\item Customer history, sales data, and additional information can be easily
+displayed.
+\item Open framework allows for ODBC connections to be used to generate
+reports using third party reporting tools.
+\end{itemize}
+\item Tax
+
+\begin{itemize}
+\item Supports Retail Sales Tax and Value Added Tax type systems
+\item Flexible framework allows one to customize reports to change the tax
+reporting framework to meet any local requirement.
+\end{itemize}
\end{itemize}
\subsection{Limitations of Ledger-SMB}
+
\begin{itemize}
-\item No payroll module (Payroll must be done manually)
-\item Some integration limitations
-\item Further development/maintenance requires a knowledge of a relatively
- broad range of technologies.
+\item No payroll module (Payroll must be done manually)
+\item Some integration limitations
+\item Further development/maintenance requires a knowledge of a relatively
+broad range of technologies.
\end{itemize}
\subsection{System Requirements of Ledger-SMB}
+
\begin{itemize}
-\item PostgreSQL
-\item A CGI-enabled Web Server (for example, Apache)
-\item Perl with the DBI and DBD::Pg modules
-\item An operating system which supports the above software (usually Linux,
- though Windows, MacOS X, etc. do work).
-\item \LaTeX\ (optional) is required to create PDF or Postscript invoices.
+\item PostgreSQL
+\item A CGI-enabled Web Server (for example, Apache)
+\item Perl with the DBI and DBD::Pg modules
+\item An operating system which supports the above software (usually Linux,
+though Windows, MacOS X, etc. do work).
+\item \LaTeX{}\ (optional) is required to create PDF or Postscript invoices.
\end{itemize}
\section{User Account and Database Administration Basics}
-These functions are accessed by going to the admin.pl script in the installed
-directory of Ledger-SMB.
+These functions are accessed by going to the admin.pl script in the
+installed directory of Ledger-SMB.
+
\subsection{Companies and Datasets}
-Ledger-SMB stores its information in locale-specific data sets. When a dataset
-is created, it sets various defaults such as currency, a basic chart of accounts
-setup, and so forth. Note that the default setup is for Canada, where the
-author of the software resides.
+Ledger-SMB stores its information in locale-specific data sets. When
+a dataset is created, it sets various defaults such as currency, a
+basic chart of accounts setup, and so forth. Note that the default
+setup is for Canada, where the author of the software resides.
+
+Datasets are generally tracked as PostgreSQL databases. The application
+is designed with the idea that each dataset will represent exactly
+one company. If a customer is working with multiple companies, he/she
+must create a dataset to for each.
-Datasets are generally tracked as PostgreSQL databases. The application is
-designed with the idea that each dataset will represent exactly one company. If
-a customer is working with multiple companies, he/she must create a dataset to
-for each.
\subsection{How to Create a User}
-Users are created by going to the admin.pl page and clicking on "Add User." One
-then fills out the form and when it is saved, the user is created.
+Users are created by going to the admin.pl page and clicking on \char`\"{}Add
+User.\char`\"{} One then fills out the form and when it is saved,
+the user is created.
+
\subsection{Permissions}
-The permissions system is not rigorously enforced within Ledger-SMB, in the
-sense that the permissions API is generally not used in the application itself.
-Instead permissions are used to enable/disable menu options. Setting an
-enforcement of such permissions would require some custom programming at the
-present time. Most organizations, however, find that the current system is
-adequate.
+The permissions system is not rigorously enforced within Ledger-SMB,
+in the sense that the permissions API is generally not used in the
+application itself. Instead permissions are used to enable/disable
+menu options. Setting an enforcement of such permissions would require
+some custom programming at the present time. Most organizations, however,
+find that the current system is adequate.
+
+The checkboxes which are marked enable menu entries. Those that are
+unchecked disable those entries on the menu.
-The checkboxes which are marked enable menu entries. Those that are unchecked
-disable those entries on the menu.
\subsection{User Account Types}
\begin{itemize}
-\item User is a general user of the system
-\item Managers often are able to see a larger amount of data
-\item Administrators have full access to the system
+\item User is a general user of the system
+\item Managers often are able to see a larger amount of data
+\item Administrators have full access to the system
\end{itemize}
\subsection{Other Features}
+
\begin{itemize}
\item Lock System allows one to lock users out of the system while maintenance
-is performed. This is only necessary during upgrades or maintenance which
-results in the RDBMS being offline.
-\item Change Admin Password.
-\item Logout terminates the admin session.
+is performed. This is only necessary during upgrades or maintenance
+which results in the RDBMS being offline.
+\item Change Admin Password.
+\item Logout terminates the admin session.
\end{itemize}
\section{Chart of Accounts}
-The Chart of Accounts provides a basic overview of the logical structure of the
-accounting program. One can customize this chart to allow for tracking of
-different sorts of information.
+
+The Chart of Accounts provides a basic overview of the logical structure
+of the accounting program. One can customize this chart to allow for
+tracking of different sorts of information.
+
\subsection{Introduction to Double Entry Bookkeeping}
-Ledger-SMB is a double entry system, meaning that every transaction consists of
-an equal sum of credits and debits (see below). A transaction is said to be
-balanced when the debits and credits are equal. This is an oversimplification
-and doesn't cover more complex processes involving closing books properly. In
-general customers should be referred to their accountants for information beyond
-the capabilities of the software. This module is just designed to provide
-enough familiarity with the concepts to be able to have an intelligent
-conversation with a bookkeeper or accountant who has specific requirements in
-this regard.
+Ledger-SMB is a double entry system, meaning that every transaction
+consists of an equal sum of credits and debits (see below). A transaction
+is said to be balanced when the debits and credits are equal. This
+is an oversimplification and doesn't cover more complex processes
+involving closing books properly. In general customers should be referred
+to their accountants for information beyond the capabilities of the
+software. This module is just designed to provide enough familiarity
+with the concepts to be able to have an intelligent conversation with
+a bookkeeper or accountant who has specific requirements in this regard.
+
\subsubsection{Account Types}
\begin{itemize}
-\item Assets represent tangible or intangible property or money
-retained by the company. This includes money owed to the company.
-\item Liabilities are money that the company owes others.
-\item Equity is the valuation of the company as a whole. Includes investment
-capital, and money paid out to owners either as dividends or as withdrawals (for
-sole proprietorships). Normally one will have at least three equity accounts:
-One for tracking investment in the business, one for tracking withdrawals or
-dividends, and one for tracking retained earnings.
+\item Assets represent tangible or intangible property or money retained
+by the company. This includes money owed to the company.
+\item Liabilities are money that the company owes others.
+\item Equity is the valuation of the company as a whole. Includes investment
+capital, and money paid out to owners either as dividends or as withdrawals
+(for sole proprietorships). Normally one will have at least three
+equity accounts: One for tracking investment in the business, one
+for tracking withdrawals or dividends, and one for tracking retained
+earnings.
\item Income accounts track the category of money as it is earned by the
-business.
-\item Expense accounts track the category of money flowing out as expenses are
-accrued.
+business.
+\item Expense accounts track the category of money flowing out as expenses
+are accrued.
\end{itemize}
\subsubsection{Debits and Credits}
-Debits and credits are the basic unit of double-entry bookkeeping. When money
-is removed from the business by the owners (as an equity payment) that is a
-debit, while when money is invested in the business, that is a credit. Every
-other transaction is set to balance these concepts. Therefore asset accounts
-normally have a debit balance because this allows for the equity account to be
-debited, while expense accounts normally have a credit balance.
+Debits and credits are the basic unit of double-entry bookkeeping.
+When money is removed from the business by the owners (as an equity
+payment) that is a debit, while when money is invested in the business,
+that is a credit. Every other transaction is set to balance these
+concepts. Therefore asset accounts normally have a debit balance because
+this allows for the equity account to be debited, while expense accounts
+normally have a credit balance.
+
+If the total debits is not equal to the total credits in the chart
+of accounts, something is very wrong, and the customer should get
+technical support immediately.
-If the total debits is not equal to the total credits in the chart of accounts,
-something is very wrong, and the customer should get technical support
-immediately.
\subsubsection{A few Examples}
-One might have a business that rents an office space. When
-rent is due, the accounts payable account would be credited, while the rent
-expense account would be debited. When this is paid, the accounts payable
-account would be debited while the asset account would be credited. This may
-seem backwards, but the result is to reduce by the amount owed for rent the
-amount that the owners can withdraw from the business as a debit. Let's say the
-office rent is \$300.
+One might have a business that rents an office space. When rent is
+due, the accounts payable account would be credited, while the rent
+expense account would be debited. When this is paid, the accounts
+payable account would be debited while the asset account would be
+credited. This may seem backwards, but the result is to reduce by
+the amount owed for rent the amount that the owners can withdraw from
+the business as a debit. Let's say the office rent is \$300.
\begin{itemize}
-\item Rent expense account is debited \$300
-\item Accounts Payable is credited \$300
-\item When this is paid, the checking account is credited \$300
-\item And the Accounts Payable is debited \$300
+\item Rent expense account is debited \$300
+\item Accounts Payable is credited \$300
+\item When this is paid, the checking account is credited \$300
+\item And the Accounts Payable is debited \$300
\end{itemize}
-
-Let us say one performs a small consulting project for \$600. At the completion
-of this project, the following transaction would be made:
+Let us say one performs a small consulting project for \$600. At the
+completion of this project, the following transaction would be made:
\begin{itemize}
-\item Accounts Receivable is debited \$600
-\item Income (Consulting) is credited \$600.
+\item Accounts Receivable is debited \$600
+\item Income (Consulting) is credited \$600.
\end{itemize}
+Then the customer pays the \$600, the following transaction is entered.
-Then the customer pays the \$600, the following transaction is entered.
\begin{itemize}
-\item Accounts Receivable is credited \$600
-\item Payments Received is debited \$600.
+\item Accounts Receivable is credited \$600
+\item Payments Received is debited \$600.
\end{itemize}
\subsection{General Guidelines on Numbering Accounts}
-In general, most drop-down boxes in Ledger-SMB order the accounts by account
-number. Therefore by setting appropriate account numbers, one can affect the
-default values.
-A second consideration is to try to keep things under each heading appropriate
-tot hat heading. Thus setting an account number for a bank loan account in the
-assets category is not generally advisable.
+In general, most drop-down boxes in Ledger-SMB order the accounts
+by account number. Therefore by setting appropriate account numbers,
+one can affect the default values.
+
+A second consideration is to try to keep things under each heading
+appropriate tot hat heading. Thus setting an account number for a
+bank loan account in the assets category is not generally advisable.
+
\subsection{Adding/Modifying Accounts}
These features are listed under System-\textgreater Chart of Accounts.
-One can list the accounts and click on the account number to modify them or
-click on the "add account" option to create new accounts.
+One can list the accounts and click on the account number to modify
+them or click on the \char`\"{}add account\char`\"{} option to create
+new accounts.
\begin{itemize}
\item Headings are just broad categories and do not store values themselves,
-while accounts are used to store the transactional information.
-\item One cannot have an account that is both a summary account (like AR) but
-also has another function.
-\item GIFI is mostly of interest to Canadian customers but it can be used to
-create reports of account hierarchies.
+while accounts are used to store the transactional information.
+\item One cannot have an account that is both a summary account (like AR)
+but also has another function.
+\item GIFI is mostly of interest to Canadian customers but it can be used
+to create reports of account hierarchies.
\end{itemize}
\subsection{Listing Account Balances and Transactions}
-One can list the account balances via the Reports-\textgreater Chart of Accounts report.
-Clicking on the account number will provide a ledger for that account.
+
+One can list the account balances via the Reports-\textgreater Chart
+of Accounts report. Clicking on the account number will provide a
+ledger for that account.
+
\section{Administration}
-This section will cover other (non-Chart of Accounts) aspects to the setup of
-the Ledger-SMB accounting package. These are generally accessed in the System
-submenu.
+This section will cover other (non-Chart of Accounts) aspects to the
+setup of the Ledger-SMB accounting package. These are generally accessed
+in the System submenu.
+
\subsection{Taxes, Defaults, and Preferences}
+
+
\subsubsection{Adding A Sales Tax Account}
-Sales Tax is collected on behalf of a state of national government by the
-individual store. Thus a sales tax account is a liability-- it represents money
-*owed* by the business to the government.
+Sales Tax is collected on behalf of a state of national government
+by the individual store. Thus a sales tax account is a liability--
+it represents money {*}owed{*} by the business to the government.
-To add a sales tax account, one would create an account in the COA as a
-liability account, check all of the "tax" checkboxes, and answer the following
-question as "yes:"
+To add a sales tax account, one would create an account in the COA
+as a liability account, check all of the \char`\"{}tax\char`\"{} checkboxes,
+and answer the following question as \char`\"{}yes:\char`\"{}
-"Include this account on the customer/vendor forms to flag customer/vendor as
-taxable?"
+\char`\"{}Include this account on the customer/vendor forms to flag
+customer/vendor as taxable?\char`\"{}
Once this account is created, one can set the tax amount.
+
\subsubsection{Setting a Sales Tax Amount}
-Go to System-\textgreater Defaults and the tax account will be listed near the bottom of the
-page. The rate can be set there.
+
+Go to System-\textgreater Defaults and the tax account will be listed
+near the bottom of the page. The rate can be set there.
+
\subsubsection{Default Account Setup}
-These accounts are the default accounts for part creation and foreign exchange
-tracking.
+
+These accounts are the default accounts for part creation and foreign
+exchange tracking.
+
\subsubsection{Currency Setup}
-The US accounts list this as USD:CAD:EUR. One can add other currencies in here,
-such as IDR (Indonesian Rupiah), etc. Currencies are separated by colons.
+
+The US accounts list this as USD:CAD:EUR. One can add other currencies
+in here, such as IDR (Indonesian Rupiah), etc. Currencies are separated
+by colons.
+
\subsubsection{Sequence Settings}
-These sequences are used to generate user identifiers for quotations, invoices,
-and the like. If an identifier is not added, the next number will be used.
-A common application is to set invoices, etc. to start at 1000 in order to hide
-the number of issued invoices from a customer.
+These sequences are used to generate user identifiers for quotations,
+invoices, and the like. If an identifier is not added, the next number
+will be used.
+
+A common application is to set invoices, etc. to start at 1000 in
+order to hide the number of issued invoices from a customer.
+
\subsection{Audit Control}
-Auditibility is a core concern of the architects of any accounting system. Such
-ensures that any modification to the accounting information leaves a trail which
-can be followed to determine the nature of the change. Audits can help ensure
-that the data in the accounting system is meaningful and accurate, and that no
-foul play (such as embezzlement) is occurring.
+Auditibility is a core concern of the architects of any accounting
+system. Such ensures that any modification to the accounting information
+leaves a trail which can be followed to determine the nature of the
+change. Audits can help ensure that the data in the accounting system
+is meaningful and accurate, and that no foul play (such as embezzlement)
+is occurring.
+
\subsubsection{Explaining transaction reversal}
+
In paper accounting systems, it was necessary to have a means to authoritatively
-track corrections of mistakes. The means by which this was done was known as
-"transaction reversal."
+track corrections of mistakes. The means by which this was done was
+known as \char`\"{}transaction reversal.\char`\"{}
-When a mistake would be made, one would then reverse the transaction and then
-enter it in correctly. For example, let us say that an office was renting space
-for \$300 per month. Let us say that they inadvertently entered it in as a
-\$200 expense.
+When a mistake would be made, one would then reverse the transaction
+and then enter it in correctly. For example, let us say that an office
+was renting space for \$300 per month. Let us say that they inadvertently
+entered it in as a \$200 expense.
The original transaction would be:
\begin{tabular}{l|r|r}
-Account & Debit & Credit \\
-\hline
-5760 Rent & \$200 & \\
-2100 Accounts Payable & & \$200\\
+Account &
+Debit &
+Credit \tabularnewline
+\hline
+5760 Rent &
+\$200 &
+\tabularnewline
+2100 Accounts Payable &
+&
+\$200\tabularnewline
\end{tabular}
The reversal would be:
\begin{tabular}{l|r|r}
-Account & Debit & Credit \\
-\hline
-5760 Rent & & \$200\\
-2100 Accounts Payable &\$200 & \\
+Account &
+Debit &
+Credit \tabularnewline
+\hline
+5760 Rent &
+&
+\$200\tabularnewline
+2100 Accounts Payable &
+\$200 &
+\tabularnewline
\end{tabular}
-This would be followed by re-entering the rent data with the correct numbers.
-This was meant to ensure that one did not erase data from the accounting books
-(and as such that erasing data would be a sign of foul play).
+This would be followed by re-entering the rent data with the correct
+numbers. This was meant to ensure that one did not erase data from
+the accounting books (and as such that erasing data would be a sign
+of foul play).
-Ledger-SMB has a capability to require such reversals if the business deems this
-to be necessary. When this option is enabled, existing transactions cannot be
-modified and one will need to post reversing transactions to void existing
-transactions before posting corrected ones.
+Ledger-SMB has a capability to require such reversals if the business
+deems this to be necessary. When this option is enabled, existing
+transactions cannot be modified and one will need to post reversing
+transactions to void existing transactions before posting corrected
+ones.
+
+Most accountants prefer this means to other audit trails because it
+is well proven and understood by them.
-Most accountants prefer this means to other audit trails because it is well
-proven and understood by them.
\subsubsection{Close books option}
-The option to close books requires transaction reversal for any transaction up
-to a certain date.
+
+The option to close books requires transaction reversal for any transaction
+up to a certain date.
+
\subsubsection{Audit Trails}
-This option stores additional information in the database to help auditors trace
-individual transactions. The information stored, however, is limited and it is
-intended to be supplemental to other auditing facilities.
-The information added includes which table stored the record, which employee
-entered the information, which form was used, and what the action was. No
-direct financial information is included.
+This option stores additional information in the database to help
+auditors trace individual transactions. The information stored, however,
+is limited and it is intended to be supplemental to other auditing
+facilities.
+
+The information added includes which table stored the record, which
+employee entered the information, which form was used, and what the
+action was. No direct financial information is included.
+
\subsection{Departments}
-Departments are logical divisions of a business. They allow for budgets to be
-prepared for the individual department as well as the business as a whole. This
-allows larger businesses to use Ledger-SMB to meet their needs.
+
+Departments are logical divisions of a business. They allow for budgets
+to be prepared for the individual department as well as the business
+as a whole. This allows larger businesses to use Ledger-SMB to meet
+their needs.
+
\subsubsection{Cost v Profit Centers.}
-In general business units are divided into cost and profit centers. Cost
-centers are generally regarded as business units where the business expects to
-lose money and profit centers are where they expect to gain money. For example,
-the legal department in most companies is a cost center.
+In general business units are divided into cost and profit centers.
+Cost centers are generally regarded as business units where the business
+expects to lose money and profit centers are where they expect to
+gain money. For example, the legal department in most companies is
+a cost center.
-One of the serious misunderstandings people run up against is that Ledger-SMB
-tends to more narrowly define cost and profit centers than most businesses do.
-In Ledger-SMB a cost center is any department of the business that does not
-issue AR transactions. Although many businesses may have cost centers (like
-technical support) where customer fees may subsidize the cost of providing the
-service, in Ledger-SMB, these are profit centers.
+One of the serious misunderstandings people run up against is that
+Ledger-SMB tends to more narrowly define cost and profit centers than
+most businesses do. In Ledger-SMB a cost center is any department
+of the business that does not issue AR transactions. Although many
+businesses may have cost centers (like technical support) where customer
+fees may subsidize the cost of providing the service, in Ledger-SMB,
+these are profit centers.
Ledger-SMB will not allow cost centers to be associated with AR transactions.
-So if you want this functionality, you must create the department as a profit
-center.
+So if you want this functionality, you must create the department
+as a profit center.
+
\subsection{Warehouses}
-Ledger-SMB has the ability to track inventory by warehouse. Inventory items can
-be moved between warehouses, and shipped from any warehouse where the item is in
-stock. We will explore this concept more later.
+Ledger-SMB has the ability to track inventory by warehouse. Inventory
+items can be moved between warehouses, and shipped from any warehouse
+where the item is in stock. We will explore this concept more later.
+
\subsection{Languages}
-Languages allow for goods and services to be translated so that one can
-maintain offices in different countries and allow for different goods and
-service descriptions to be translated to different languages for localization
-purposes.
+
+Languages allow for goods and services to be translated so that one
+can maintain offices in different countries and allow for different
+goods and service descriptions to be translated to different languages
+for localization purposes.
+
\subsection{Types of Businesses}
-One can create types of businesses and then give them discounts across the
-board. For example, one might give a firm that uses one's services as a
-subcontractor a 10\% discount or more.
+
+One can create types of businesses and then give them discounts across
+the board. For example, one might give a firm that uses one's services
+as a subcontractor a 10\% discount or more.
+
\subsection{Misc.}
+
+
\subsubsection{GIFI}
-GIFI is a requirement for Canadian customers. This feature allows one to link
-accounts with Canadian tax codes to simplify the reporting process.
+GIFI is a requirement for Canadian customers. This feature allows
+one to link accounts with Canadian tax codes to simplify the reporting
+process.
+
+It also has another use in that non-Canadians can use this functionality
+to create customized reports by categorizing accounts using this field.
+This allows for a sort of shallow \char`\"{}account hierarchy\char`\"{}
+like some users are used to with other products.
-It also has another use in that non-Canadians can use this functionality to
-create customized reports by categorizing accounts using this field. This
-allows for a sort of shallow "account hierarchy" like some users are used to
-with other products.
\subsubsection{SIC}
-Standard Industrial Classification is a way of tracking the type of business
-that a vendor or customer is in. For example, an accountant would have an SIC
-of 8721 while a graphic design firm would have an SIC of 7336. The
-classification is hierarchical so one could use this field for custom reporting
-and marketing purposes.
+Standard Industrial Classification is a way of tracking the type of
+business that a vendor or customer is in. For example, an accountant
+would have an SIC of 8721 while a graphic design firm would have an
+SIC of 7336. The classification is hierarchical so one could use this
+field for custom reporting and marketing purposes.
+
\subsubsection{Overview of Template Editing}
-The templates for invoices, orders, and the like can be edited from within
-Ledger-SMB. The submenus within the System submenu such as HTML Templates,
-Text Templates and LaTeX templates provide access to this functionality.
+The templates for invoices, orders, and the like can be edited from
+within Ledger-SMB. The submenus within the System submenu such as
+HTML Templates, Text Templates and \LaTeX{} templates provide access
+to this functionality.
+
\subsubsection{Year-end}
-Although the Year-end functionality in Ledger-SMB is very useful, it does not
-entirely make the process simple and painless. One must still manually enter
-adjustments prior to closing the books. The extent to which these adjustments
-are necessary for any given business is a matter best discussed with an
-accountant.
-
-The standard way books are normally closed at the end of the year is by moving
-all adjusted\footnote{Adjustments would be entered via the General Ledger. The
-exact process is beyond the scope of this class, however.} income and expenses
-to an equity account usually called "Retained
-Earnings." Assets and liabilities are not moved. Equity drawing/dividend
-accounts are also moved, but the investment accounts are not. The reasoning
-behind this process is that one wants a permanent record of the amount invested
-in a business, but any dividends ought not to count against their recipients
-when new investors are brought on board.
+Although the Year-end functionality in Ledger-SMB is very useful,
+it does not entirely make the process simple and painless. One must
+still manually enter adjustments prior to closing the books. The extent
+to which these adjustments are necessary for any given business is
+a matter best discussed with an accountant.
+
+The standard way books are normally closed at the end of the year
+is by moving all adjusted%
+\footnote{Adjustments would be entered via the General Ledger. The exact process
+is beyond the scope of this class, however.%
+} income and expenses to an equity account usually called \char`\"{}Retained
+Earnings.\char`\"{} Assets and liabilities are not moved. Equity drawing/dividend
+accounts are also moved, but the investment accounts are not. The
+reasoning behind this process is that one wants a permanent record
+of the amount invested in a business, but any dividends ought not
+to count against their recipients when new investors are brought on
+board.
Ledger-SMB automatically moves all income and expense into the specified
-year-end/retained earnings account. It does not move the drawing account, and
-this must be done manually, nor does it automate the process of making
-adjustments.
+year-end/retained earnings account. It does not move the drawing account,
+and this must be done manually, nor does it automate the process of
+making adjustments.
+
+Contrary to its name, this function can close the books at any time,
+though this would likely be of limited use.
-Contrary to its name, this function can close the books at any time, though this
-would likely be of limited use.
\subsection{Options in the ledger-smb.conf}
-For those who are unfamiliar with Perl as a programming language, the
-ledger-smb.conf configures the software by assigning site-wide variables. Most
-of these should be left alone unless one knows what one is doing. However, on
-some systems some options might need to be changed, so all options are presented
-here for reference:
+For those who are unfamiliar with Perl as a programming language,
+the ledger-smb.conf configures the software by assigning site-wide
+variables. Most of these should be left alone unless one knows what
+one is doing. However, on some systems some options might need to
+be changed, so all options are presented here for reference:
\begin{itemize}
\item \$userspath is the directory where Ledger-SMB will store the user
-accounts. The web server process must be able to read from and write to this
-directory.
-\item \$templates is the directory where the templates are stored.
-\item \$memberfile is the master list of user configuration information
-\item \$sendmail is the command to use to send a message. It must read the
-email from standard input.
-\item \$language allows one to set the language for the login screen and admin
-page.
-\item \$latex tells Ledger-SMB whether LaTeX is installed. LaTeX is required
-for generating Postscript and PDF invoices and the like.
-\item Various environmental variables (\$ENV...) can be set here too. One can
-add paths for searching for LaTeX, etc.
+accounts. The web server process must be able to read from and write
+to this directory.
+\item \$templates is the directory where the templates are stored.
+\item \$memberfile is the master list of user configuration information
+\item \$sendmail is the command to use to send a message. It must read the
+email from standard input.
+\item \$language allows one to set the language for the login screen and
+admin page.
+\item \$latex tells Ledger-SMB whether \LaTeX{} is installed. \LaTeX{} is
+required for generating Postscript and PDF invoices and the like.
+\item Various environmental variables (\$ENV...) can be set here too. One
+can add paths for searching for \LaTeX{}, etc.
\item \%printer can be used to set a hash table of printers for the software.
-The primary example is\\
-\%printer = ( 'Default' =\textgreater 'lpr', 'Color' =\textgreater 'lpr -PEpson' ); \\
-However, this can use any program that can accept print documents (in
-Postscript) from standard input, so there are many more possibilities.
+The primary example is\\
+ \%printer = ( 'Default' =\textgreater 'lpr', 'Color' =\textgreater
+'lpr -PEpson' ); \\
+ However, this can use any program that can accept print documents
+(in Postscript) from standard input, so there are many more possibilities.
\end{itemize}
+I have omitted the variables used to configure Oracle as I do not
+believe it is still supported (it could be with a small amount of
+work though).
-I have omitted the variables used to configure Oracle as I do not believe it is
-still supported (it could be with a small amount of work though).
\section{Goods and Services}
-The Goods and Services module will focus on the definition of goods and services
-and the related accounting concepts.
+The Goods and Services module will focus on the definition of goods
+and services and the related accounting concepts.
+
\subsection{Basic Terms}
+
\begin{description}
-\item[COGS] is Cost of Goods Sold. When an item is sold, then the expense of
-its purchase is accrued as attached to the income of the sale. It is tracked as
-COGS.
-\item[List Price] is the recommended retail price.
-\item[Markup] is the percentage increase that is applied to the last cost to get the sell price.
-\item[ROP] Re-order point. Items with fewer in stock than this will show up on
-short reports.
-\item[Sell Price] is the price at which the item is sold.
+\item [{COGS}] is Cost of Goods Sold. When an item is sold, then the expense
+of its purchase is accrued as attached to the income of the sale.
+It is tracked as COGS.
+\item [{List}] Price is the recommended retail price.
+\item [{Markup}] is the percentage increase that is applied to the last
+cost to get the sell price.
+\item [{ROP}] Re-order point. Items with fewer in stock than this will
+show up on short reports.
+\item [{Sell}] Price is the price at which the item is sold.
\end{description}
\subsection{The Price Matrix}
-It is possible to set different prices for different groups of customers, or for
-different customers individually. Similarly, one can track different prices
-from different vendors along with the required lead time for an order.
+It is possible to set different prices for different groups of customers,
+or for different customers individually. Similarly, one can track
+different prices from different vendors along with the required lead
+time for an order.
+
\subsection{Pricegroups}
-Pricegroups are used to help determine the discount a given customer may have.
+Pricegroups are used to help determine the discount a given customer
+may have.
+
\subsection{Groups}
-Groups represent a way of categorizing POS items for a touchscreen environment.
-It is not fully functional yet, but is sufficient that with some stylesheet
-changes, it could be made to work.
+Groups represent a way of categorizing POS items for a touchscreen
+environment. It is not fully functional yet, but is sufficient that
+with some stylesheet changes, it could be made to work.
+
\subsection{Labor/Overhead}
-Labor/overhead is usually used for tracking manufacturing expenses. It is not
-directly billed to a customer. It is associated with an expense/Cost of Goods
-Sold (COGS) account
+Labor/overhead is usually used for tracking manufacturing expenses.
+It is not directly billed to a customer. It is associated with an
+expense/Cost of Goods Sold (COGS) account
+
\subsection{Services}
-Services include any labor that is billed directly to the customer. It is
-associated with an expense/COGS account and an income account. Services can be
-associated with sales tax.
+Services include any labor that is billed directly to the customer.
+It is associated with an expense/COGS account and an income account.
+Services can be associated with sales tax.
+
\subsubsection{Shipping and Handling as a Service}
-One approach to dealing with shipping and handling is to add it as a service.
-Usually I place the unit as a dollar (USD) and then bill it as \$1 per unit.
-This allows me to add the exact amount of shipping and handling as necessary.
+One approach to dealing with shipping and handling is to add it as
+a service. Create a service called {}``Shipping and Handling'',
+with a sell price \$1 per unit, and a 0\% markup. Bill it as \$1 per
+unit. This allows me to add the exact amount of shipping and handling
+as necessary.
+
\subsection{Parts}
-A part is any single item you might purchase and either might resell or use in
-manufacturing an assembly. It is linked to an expense/COGS
-account, an income account, and an inventory account. Parts can be associated
-with sales tax.
+A part is any single item you might purchase and either might resell
+or use in manufacturing an assembly. It is linked to an expense/COGS
+account, an income account, and an inventory account. Parts can be
+associated with sales tax.
+
\subsection{Assemblies and Manufacturing}
Manufacturers order parts but they sell the products of their efforts.
-Ledger-SMB supports manufacturing using the concept of assemblies. An assembly
-is any product which is manufactured on site. It consists of a selection of
-parts, services, and/or labor and overhead. Assemblies are treated as parts in
-most other regards.
+Ledger-SMB supports manufacturing using the concept of assemblies.
+An assembly is any product which is manufactured on site. It consists
+of a selection of parts, services, and/or labor and overhead. Assemblies
+are treated as parts in most other regards.
-However, one cannot order assemblies from vendors. One must instead order the
-components and stock them once they are manufactured.
+However, one cannot order assemblies from vendors. One must instead
+order the components and stock them once they are manufactured.
%Excersize 1
+
+
\subsubsection{Stocking Assemblies}
-One stocks assemblies in the Stock Assembly entry on the Goods and Services
-submenu. When an assembly is stocked the inventory is adjusted properly.
+One stocks assemblies in the Stock Assembly entry on the Goods and
+Services submenu. When an assembly is stocked the inventory is adjusted
+properly.
+
+The Check Inventory option will cause Ledger-SMB to refuse to stock
+an assembly if the inventory required to produce the assembly would
+drop the part below the reorder point.
-The Check Inventory option will cause Ledger-SMB to refuse to stock an assembly
-if the inventory required to produce the assembly would drop the part below the
-reorder point.
\subsection{Reporting}
+
+
\subsubsection{All Items and Parts Reports}
-The All Items provides a unified view of assemblies, parts, services, and labor
-for the company, while the Parts report confines it to parts.
+The All Items provides a unified view of assemblies, parts, services,
+and labor for the company, while the Parts report confines it to parts.
+
+Types of reports are:
-Types of reports are:
\begin{description}
-\item[Active] lists all items not marked as obsolete.
-\item[On Hand] lists current inventory
-\item[Short] Lists all items which are stocked below their ROP
-\item[Obsolete] Lists all items which are marked as obsolete
-\item[Orphaned] Lists all items which have never had a transaction associated
-with them.
+\item [{Active}] lists all items not marked as obsolete.
+\item [{On}] Hand lists current inventory
+\item [{Short}] Lists all items which are stocked below their ROP
+\item [{Obsolete}] Lists all items which are marked as obsolete
+\item [{Orphaned}] Lists all items which have never had a transaction associated
+with them.
\end{description}
-
One can also list these goods by invoice, order, or quotation.
-For best results, it is a good idea to enter some AR and AP data before running
-these reports.
+For best results, it is a good idea to enter some AR and AP data before
+running these reports.
+
\subsubsection{Requirements}
-This report is designed to assist managers determine the quantities of goods to
-order and/or stock. It compares the quantity on hand with the activity in a
-given time frame and provides a list of goods which need to be ordered and the
-relevant quantity.
+This report is designed to assist managers determine the quantities
+of goods to order and/or stock. It compares the quantity on hand with
+the activity in a given time frame and provides a list of goods which
+need to be ordered and the relevant quantity.
+
\subsubsection{Services and Labor}
-This is similar to the Parts and All Items menu but only supports active,
-obsolete, and orphaned reports.
+
+This is similar to the Parts and All Items menu but only supports
+active, obsolete, and orphaned reports.
+
\subsubsection{Assemblies}
-This is similar to the Parts and All Items reports but it also provides an
-ability to list individual items in the assemblies as well.
+This is similar to the Parts and All Items reports but it also provides
+an ability to list individual items in the assemblies as well.
+
+AP Invoices, Purchase Orders, and RFQ's are not available on this
+report.
-AP Invoices, Purchase Orders, and RFQ's are not available on this report.
\subsubsection{Groups and Pricegroups}
These reports provide a simple interface for locating groups and pricegroups.
The report types are similar to what they are for services.
+
\subsection{Translations}
-One can add translations so that they show up in the customer's native language
-in the issued invoice.
-To issue translations, one must have languages defined. One can then add
-translations to descriptions and part groups.
+One can add translations so that they show up in the customer's native
+language in the issued invoice.
+
+To issue translations, one must have languages defined. One can then
+add translations to descriptions and part groups.
+
\subsection{How Cost of Goods Sold is tracked}
-Cost of Goods Sold is tracked on a First-In, First-out (FIFO) basis. When a
-part is purchased, its cost is recorded in the database. The cost of the item
-is then added to the inventory asset account. When the good is sold, the cost
-of the item is moved to the cost of goods sold account.
-This means that one must actually provide invoices for all goods entered at
-their actual cost. If one enters in \$0 for the cost, the cost of goods sold
-will also be \$0 when the item is sold. We will cover this entire process in
-more depth after we cover the AP and AR units below.
+Cost of Goods Sold is tracked on a First-In, First-out (FIFO) basis.
+When a part is purchased, its cost is recorded in the database. The
+cost of the item is then added to the inventory asset account. When
+the good is sold, the cost of the item is moved to the cost of goods
+sold account.
+
+This means that one must actually provide invoices for all goods entered
+at their actual cost. If one enters in \$0 for the cost, the cost
+of goods sold will also be \$0 when the item is sold. We will cover
+this entire process in more depth after we cover the AP and AR units
+below.
+
\section{AP}
+
+
\subsection{Basic AP Concepts}
-The Accounts Payable module tracks all financial commitments that the company
-makes to other businesses. This includes rent, utilities, etc. as well as
-orders of goods and services.
+
+The Accounts Payable module tracks all financial commitments that
+the company makes to other businesses. This includes rent, utilities,
+etc. as well as orders of goods and services.
+
\subsection{Vendors}
+
A vendor is any business that the company agrees to pay money to.
-One can enter vendor information under AP-\textgreater Vendors-\textgreater Add Vendor. The vendor list
-can be searched under AP-\textgreater Vendors-\textgreater Reports-\textgreater Search.
+One can enter vendor information under AP-\textgreater Vendors-\textgreater
+Add Vendor. The vendor list can be searched under AP-\textgreater
+Vendors-\textgreater Reports-\textgreater Search.
+
+Enter start and end-dates for each vendor. This will make searches
+and drop-down boxes faster when some vendors are no longer actively
+supporting your company.
-In older versions of Ledger-SMB, vendors would continue to populate the list of
-active vendors forever and there was no way to delete them. Now one can enter
-start and end-dates and this can be used to filter out vendors in searches or
-drop-down boxes.
+A few fields that need explanation are:
-A few fields that need explanation are:
\begin{description}
-\item[BIC] Bank Identifier Code is often the same as the S.W.I.F.T. code. This
-is a code for the bank a customer uses for automated money transfers.
-\item[IBAN] International Bank Account Number is related to the BIC and is used
-for cross-border automated money transfers.
-\item[Terms] is the number of days one has to pay the invoice.
-\item[Vendor Number] is automatically generated.
+\item [{BIC}] Bank Identifier Code is often the same as the S.W.I.F.T.
+code. This is a code for the bank a customer uses for automated money
+transfers.
+\item [{IBAN}] International Bank Account Number is related to the BIC
+and is used for cross-border automated money transfers.
+\item [{Terms}] is the number of days one has to pay the invoice.
+\item [{Vendor}] Number is automatically generated.
\end{description}
\subsection{AP Transactions}
-AP Transactions are generally used for items other than goods and services.
-Utilities, rent, travel expenses, etc. could be entered in as an AP transaction.
-If the item is paid partially or in full when the transaction is entered, one
-can add payments to the payment section.
+AP Transactions are generally used for items other than goods and
+services. Utilities, rent, travel expenses, etc. could be entered
+in as an AP transaction.
+
+If the item is paid partially or in full when the transaction is entered,
+one can add payments to the payment section.
All other payments can and should be entered under cash payment (below).
-The PO Number and Order Number fields are generally used to track associations
-with purchase orders sent to vendors, etc. These fields can be helpful for
-adding misc. expenses to orders for reporting purposes.
+The PO Number and Order Number fields are generally used to track
+associations with purchase orders sent to vendors, etc. These fields
+can be helpful for adding misc. expenses to orders for reporting purposes.
The department drop-down box appears when one has created one or more
-departments. A transaction is not required to be associated with a department,
-but one can use this feature for budget tracking.
+departments. A transaction is not required to be associated with a
+department, but one can use this feature for budget tracking.
+
+With AP Transactions, there is no option for internal notes. All notes
+will appear on any printed version of the transaction.
-With AP Transactions, there is no option for internal notes. All notes will
-appear on any printed version of the transaction.
+Note: Printing a transaction does not post it. No data is committed
+until the invoice is posted.
-Note: Printing a transaction does not post it. No data is committed until the
-invoice is posted.
\subsection{AP Invoices}
-AP Invoices are used to enter in the receipt of goods and services. Goods and
-services are deemed entered into the inventory when they are invoiced.
-This screen is reasonably similar to the AP Transaction Screen, though the part
-entry section is a bit different.
+AP Invoices are used to enter in the receipt of goods and services.
+Goods and services are deemed entered into the inventory when they
+are invoiced.
-The AP Invoice section has a capacity to separate internal notes from notes
-printed on the invoice. Note, however, that since these are received invoices,
-it is rare that one needs this ability.
+This screen is reasonably similar to the AP Transaction Screen, though
+the part entry section is a bit different.
+
+The AP Invoice section has a capacity to separate internal notes from
+notes printed on the invoice. Note, however, that since these are
+received invoices, it is rare that one needs this ability.
Note that Ledger-SMB can search for partial part numbers or descriptions.
Also if you have a group you can use this to select the part.
-To remove a line item from an invoice or order, delete the partnumber and click
-update.
+To remove a line item from an invoice or order, delete the partnumber
+and click update.
+
\subsubsection{Correcting an AP Invoice}
-If an invoice is entered improperly, the methods used to correct it will vary
-depending on whether transaction reversal is enforced or not. If transaction
-reversal is not enforced, one can simply correct the invoice or transaction and
-repost.
-If not, one needs to create a *duplicate* invoice with exactly opposite values
-entered. If one part was listed as received, then one should enter a negative
-one for the quantity. Then one can enter the invoice number as the same as the
-old one (though I like to add an R to the end to show that it is a reversing
-transaction). Once this is posted, one can enter the invoice correctly.
+If an invoice is entered improperly, the methods used to correct it
+will vary depending on whether transaction reversal is enforced or
+not. If transaction reversal is not enforced, one can simply correct
+the invoice or transaction and repost.
+
+If not, one needs to create a {*}duplicate{*} invoice with exactly
+opposite values entered. If one part was listed as received, then
+one should enter a negative one for the quantity. Then one can enter
+the invoice number as the same as the old one (though I like to add
+an R to the end to show that it is a reversing transaction). Once
+this is posted, one can enter the invoice correctly.
+
\subsection{Cash payment And Check Printing}
-In general, it is a bad idea to repost invoices/transactions just in order to
-enter a payment. The Cash-\textgreater Payment window allows one to enter payments against
-AP invoices or transactions.
-The printing capability can be used to print checks. The default template is
-NEBS 9085, though you can use 9082 as well (as Quickbooks does).
+In general, it is a bad idea to repost invoices/transactions just
+in order to enter a payment. The Cash-\textgreater Payment window
+allows one to enter payments against AP invoices or transactions.
+
+The printing capability can be used to print checks. The default template
+is NEBS 9085, though you can use 9082 as well (as Quickbooks does).
+
+The source field is used to store an identifying number of the source
+document, such as the check number. One must select the item to have
+it paid, and then enter the amount. One can then print a check.
-The source field is used to store an identifying number of the source document,
-such as the check number. One must select the item to have it paid, and then
-enter the amount. One can then print a check.
\subsubsection{Rapid Payment Entry Screen}
-One can also use the rapid payment entry screen to print multiple checks.
-However, this does not allow you to print the multiple checks to the screen as a
-separate document is created for each check. In this event, one must print
-directly to a printer as postscript.
+One can also use the rapid payment entry screen to print multiple
+checks. However, this does not allow you to print the multiple checks
+to the screen as a separate document is created for each check. In
+this event, one must print directly to a printer as postscript.
+
\subsection{Transaction/Invoice Reporting}
+
+
\subsubsection{Transactions Report}
-This report is designed to help you locate AP transactions based on various
-criteria. One can search by vendor, invoice number, department, and the like.
-One can even search by the shipping method.
+This report is designed to help you locate AP transactions based on
+various criteria. One can search by vendor, invoice number, department,
+and the like. One can even search by the shipping method.
+
+The summary button will show what was placed where, while the details
+button will show all debits and credits associated with the transaction.
-The summary button will show what was placed where, while the details button
-will show all debits and credits associated with the transaction.
+To view the invoice, click on the invoice number. In the detail view,
+to view the account transactions as a whole, click on the account
+number.
-To view the invoice, click on the invoice number. In the detail view, to view
-the account transactions as a whole, click on the account number.
+Open invoices are ones not fully paid off, while paid closed invoices
+are those that have been paid.
-Open invoices are ones not fully paid off, while paid closed invoices are those
-that have been paid.
\subsubsection{Outstanding Report}
-The outstanding report is designed to help you locate AP transactions that are
-not paid yet. The ID field is mostly useful for locating the specific database
-record of a duplicate invoice number exists.
+
+The outstanding report is designed to help you locate AP transactions
+that are not paid yet. The ID field is mostly useful for locating
+the specific database record of a duplicate invoice number exists.
+
\subsubsection{AP Aging Report}
-This report can tell you how many invoices are past due and by how much.
-A summary report just shows vendors while a detail report shows individual
+This report can tell you how many invoices are past due and by how
+much.
+
+A summary report just shows vendors while a detail report shows individual
invoices.
+
\subsubsection{Tax Paid and Non-taxable Report}
-These reports are not generally used in the US because most of the time
-wholesale goods are not taxable. However, for businesses with offices in other
-countries including Canada, it is often important for them to be aware of this
-functionality. In these countries, one generally pays sales tax even on
-wholesale goods and then takes a tax credit for these when when paying the sales
-tax to the country of province. Thus one needs to be able to track taxable and
-non-taxable expenses, and how much was paid. For now, it is sufficient to know
+
+These reports are not generally used in the US because most of the
+time wholesale goods are not taxable. However, for businesses with
+offices in other countries including Canada, it is often important
+for them to be aware of this functionality. In these countries, one
+generally pays sales tax even on wholesale goods and then takes a
+tax credit for these when when paying the sales tax to the country
+of province. Thus one needs to be able to track taxable and non-taxable
+expenses, and how much was paid. For now, it is sufficient to know
that they are there.
+
\subsection{Vendor Reporting}
+
+
\subsubsection{Vendor Search}
+
The Vendor Search screen can be used to locate vendors or AP transactions
associated with those vendors.
The basic types of reports are:
\begin{description}
-\item[All] Lists all vendors
-\item[Active] Lists those vendors currently active
-\item[Inactive] Lists those vendors who are currently inactive.
-time frame.
-\item[Orphaned] Lists those vendors who do not have transactions associated with
-them. These vendors can be deleted.
+\item [{All}] Lists all vendors
+\item [{Active}] Lists those vendors currently active
+\item [{Inactive}] Lists those vendors who are currently inactive. time
+frame.
+\item [{Orphaned}] Lists those vendors who do not have transactions associated
+with them. These vendors can be deleted.
\end{description}
-
-One can include purchase orders, Requests for Quotations, AP invoices, and AP
-transactions on this report as well if they occur between the from and to dates.
+One can include purchase orders, Requests for Quotations, AP invoices,
+and AP transactions on this report as well if they occur between the
+from and to dates.
\subsubsection{Vendor History}
-This report can be used to obtain information about the past goods and services
-ordered or received from vendors. One can find quantities, partnumber, and
-sell prices on this report. This facility can be used to search RFQ's, Purchase
-Orders, and AP Invoices.
+
+This report can be used to obtain information about the past goods
+and services ordered or received from vendors. One can find quantities,
+partnumber, and sell prices on this report. This facility can be used
+to search RFQ's, Purchase Orders, and AP Invoices.
+
\section{AR}
+
+
\subsection{Customers}
-Customers are entered in using the AR-\textgreater Customers-\textgreater Add Customer menu.
-The salesperson is autopopulated with the current user who is logged in.
-Otherwise, it looks fairly similar to the Vendor input screen. Customers, like
-vendors can be assigned languages, but it is more important to do so because
-invoices will be printed and sent to them.
+Customers are entered in using the AR-\textgreater Customers-\textgreater
+Add Customer menu.
+
+The salesperson is autopopulated with the current user who is logged
+in. Otherwise, it looks fairly similar to the Vendor input screen.
+Customers, like vendors can be assigned languages, but it is more
+important to do so because invoices will be printed and sent to them.
+
+The credit limit field can be used to assign an amount that one is
+willing to do for a customer on credit.
-The credit limit field can be used to assign an amount that one is willing to do
-for a customer on credit.
\subsubsection{Customer Price Matrix}
-The price list button can be used to enter specific discounts to the customer,
-and groups of customers can be assigned a pricegroup for the purpose of offering
-specific discounts on specific parts to the customer. Such discounts can be
-temporary or permanent.
+
+The price list button can be used to enter specific discounts to the
+customer, and groups of customers can be assigned a pricegroup for
+the purpose of offering specific discounts on specific parts to the
+customer. Such discounts can be temporary or permanent.
+
\subsection{AR Transactions}
-AR Transactions are where one can add moneys owed the business by customers.
-One can associate these transactions with income accounts, and add payments if
-the item is paid when the invoice is issued.
-The PO number field is used to track the PO that the customer sent. This makes
-it easier to find items when a customer is asking for clarification on a bill,
-for example.
+AR Transactions are where one can add moneys owed the business by
+customers. One can associate these transactions with income accounts,
+and add payments if the item is paid when the invoice is issued.
+
+The PO number field is used to track the PO that the customer sent.
+This makes it easier to find items when a customer is asking for clarification
+on a bill, for example.
+
\subsection{AR Invoices}
-AR Invoices are designed to provide for the delivery of goods and services to
-customers. One would normally issue these invoices at the time when the
-everything has been done that is necessary to get paid by the customer.
-As with AP invoices, one can search for matches to partial part numbers and
-descriptions, and enter initial payments at this screen.
+AR Invoices are designed to provide for the delivery of goods and
+services to customers. One would normally issue these invoices at
+the time when the everything has been done that is necessary to get
+paid by the customer.
+
+As with AP invoices, one can search for matches to partial part numbers
+and descriptions, and enter initial payments at this screen.
+
\subsection{Cash Receipt}
-The Cash-\textgreater Receipt screen allows you to accept prepayments from customers or pay
-single or multiple invoices after they have been posted. One can print a
-receipt, however the current templates seem to be based on check printing
-templates and so are unsuitable for this purpose. This presents a great
-opportunity for improvement.
+
+The Cash-\textgreater Receipt screen allows you to accept prepayments
+from customers or pay single or multiple invoices after they have
+been posted. One can print a receipt, however the current templates
+seem to be based on check printing templates and so are unsuitable
+for this purpose. This presents a great opportunity for improvement.
+
\subsubsection{Cash Receipts for multiple customers}
-The cash-\textgreater receipts screen allows you to accept payments on all open customer
-invoices of all customers at once. One could print (directly to a printer only)
-all receipts to be sent out if this was desired.
+
+The cash-\textgreater receipts screen allows you to accept payments
+on all open customer invoices of all customers at once. One could
+print (directly to a printer only) all receipts to be sent out if
+this was desired.
+
\subsection{AR Transaction Reporting}
-The AR Outstanding report is almost identical to the AP Outstanding report and
-is not covered in any detail in this document.
+The AR Outstanding report is almost identical to the AP Outstanding
+report and is not covered in any detail in this document.
+
\subsubsection{AR Transactions Report}
+
This is almost identical to the AP Transactions Report.
-If a customer's PO has been associated with this transaction, one can search
-under this field as well.
+If a customer's PO has been associated with this transaction, one
+can search under this field as well.
+
\subsubsection{AR Aging Report}
-This report is almost identical to the AP Aging report, with the exception that
-one can print up statements for customer accounts that are overdue. One more
-application is to calculate interest based on balance owed so that these can be
-entered as AR transactions associated with the customer.
+
+This report is almost identical to the AP Aging report, with the exception
+that one can print up statements for customer accounts that are overdue.
+One more application is to calculate interest based on balance owed
+so that these can be entered as AR transactions associated with the
+customer.
+
\subsection{Customer Reporting}
-These reports are almost identical tot he AP Vendor reports and are not
-discussed in these notes.
+
+These reports are almost identical to the AP Vendor reports and are
+not discussed in these notes.
+
\section{Projects}
+
+
\subsection{Project Basics}
-A project is a logical collection of AR and AP transactions, orders, and the
-like that allow one to better manage specific service or product offerings.
-Ledger-SMB does not offer comprehensive project management capabilities, and
-projects are only used here as they relate to accounting.
+
+A project is a logical collection of AR and AP transactions, orders,
+and the like that allow one to better manage specific service or product
+offerings. Ledger-SMB does not offer comprehensive project management
+capabilities, and projects are only used here as they relate to accounting.
One can also add translated descriptions to the project names as well.
-
+
+
\subsection{Timecards}
-Timecards allow one to track time entered on specific services. These can then
-be used to generate invoices for the time entered.
-The non-chargeable is the number of hours that are not billed on the invoice.
+Timecards allow one to track time entered on specific services. These
+can then be used to generate invoices for the time entered.
+
+The non-chargeable is the number of hours that are not billed on the
+invoice.
One can then generate invoices based on this information.
The project field is not optional.
+
\subsection{Projects and Invoices}
-One can select the project id for line items of both AR and AP invoices. These
-will then be tracked against the project itself.
+
+One can select the project id for line items of both AR and AP invoices.
+These will then be tracked against the project itself.
+
\subsection{Reporting}
+
+
\subsubsection{Timecard Reporting}
-The Timecard Report allows one to search for timecards associated with one or
-more projects. One can then use the total time in issuing invoices (this is not
-automated yet).
+The Timecard Report allows one to search for timecards associated
+with one or more projects. One can then use the total time in issuing
+invoices (this is not automated yet).
+
\subsubsection{Project Transaction Reporting}
-The Standard or GIFI options can be used to create different reports (for
-example, for Canadian Tax reporting purposes).
+The Standard or GIFI options can be used to create different reports
+(for example, for Canadian Tax reporting purposes).
+
+This report brings up a summary that looks sort of like a chart of
+accounts. Of one clicks on the account numbers, one can see the transactions
+associated with the project.
-This report brings up a summary that looks sort of like a chart of accounts. Of
-one clicks on the account numbers, one can see the transactions associated with
-the project.
\subsubsection{List of Projects}
This provides a simple way of searching for projects to edit or modify.
+
\subsection{Possibilities for Using Projects}
+
\begin{itemize}
-\item One can use them similar to departments for tracking work done for a
-variety of customers.
-\item One can use them for customer-specific projects, such as this training.
+\item One can use them similar to departments for tracking work done for
+a variety of customers.
+\item One can use them for customer-specific projects, such as this training.
\end{itemize}
+
\section{Quotations and Order Management}
-This unit will introduce the business processes that Ledger-SMB allows. These
-processes are designed to allow various types of businesses to manage their
-orders allow for rudimentary customer relationship management processes to be
-built around this software. In this module, we will introduce the work flow
-options that many businesses may use in their day-to-day use of the software.
+This unit will introduce the business processes that Ledger-SMB allows.
+These processes are designed to allow various types of businesses
+to manage their orders allow for rudimentary customer relationship
+management processes to be built around this software. In this module,
+we will introduce the work flow options that many businesses may use
+in their day-to-day use of the software.
+
\subsection{Sales Orders}
-Sales orders represent orders from customers that have not been delivered or
-shipped yet. These orders can be for work in the future, or for back ordered
-products, or work in progress. A sales order can be generated form an AR
-invoice or from a quotation automatically.
+
+Sales orders represent orders from customers that have not been delivered
+or shipped yet. These orders can be for work in the future, or for
+back ordered products, or work in progress. A sales order can be generated
+form an AR invoice or from a quotation automatically.
+
\subsection{Quotations}
-Quotations are offers made to a customer but to which the customer has not
-committed to the work. Quotations can be created from Sales orders or AR
-Invoice automatically.
+
+Quotations are offers made to a customer but to which the customer
+has not committed to the work. Quotations can be created from Sales
+orders or AR Invoice automatically.
+
\subsection{Shipping}
-The Shipping module (Shipping-\textgreater Shipping) allows one to ship portions or
-entireties of existing sales orders, printing pick lists and packing slips.
+
+The Shipping module (Shipping-\textgreater Shipping) allows one to
+ship portions or entireties of existing sales orders, printing pick
+lists and packing slips.
One can then generate invoices for those parts that were shipped.
-In general, one will be more likely to use these features if they have multiple
-warehouses that they ship from. More likely most customers will just generate
-invoices from orders.
+In general, one will be more likely to use these features if they
+have multiple warehouses that they ship from. More likely most customers
+will just generate invoices from orders.
+
\subsection{AR Work Flow}
+
+
\subsubsection{Service Example}
-A customer contacts your firm and asks for a quote on some services. Your
-company would create a quotation for the job and email it to the customer or
-print it and mail it. Once the customer agrees to pay, one creates an order
-from the quotation.
+A customer contacts your firm and asks for a quote on some services.
+Your company would create a quotation for the job and email it to
+the customer or print it and mail it. Once the customer agrees to
+pay, one creates an order from the quotation.
-When the work is completed, the order is converted into a sales invoice and this
-is presented to the customer as a bill.
+When the work is completed, the order is converted into a sales invoice
+and this is presented to the customer as a bill.
-Note that in some cases, this procedure may be shortened. If the customer
-places an order without asking for a quotation and is offered a verbal quote,
-then one might merely prepare the order.
+Note that in some cases, this procedure may be shortened. If the customer
+places an order without asking for a quotation and is offered a verbal
+quote, then one might merely prepare the order.
+%
\begin{figure}[hbtp]
+
+
+
\caption{Simple AR Service Invoice Workflow Example}
-\input{simple_ar_dataflow}
+
+\input{simple_ar_dataflow}
\end{figure}
+
+
\subsubsection{Single Warehouse Example}
-A customer contacts your firm and asks for a quotation for shipping a part. You
-would create the quotation and when you get confirmation, convert it to an
-order. Once the parts are in place you could go to shipping and ship the part.
+A customer contacts your firm and asks for a quotation for shipping
+a part. You would create the quotation and when you get confirmation,
+convert it to an order. Once the parts are in place you could go to
+shipping and ship the part.
-The billing department can then generate the invoice from the sales order based
-on what merchandise has been shipped and mail it to the customer.
+The billing department can then generate the invoice from the sales
+order based on what merchandise has been shipped and mail it to the
+customer.
Note that this requires that you have the part in your inventory.
+%
\begin{figure}[hbtp]
+
+
+
\caption{AR Workflow with Shipping}
-\input{ar_workflow_ship}
+
+\input{ar_workflow_ship}
\end{figure}
+
+
\subsubsection{Multiple Warehouse Example}
-A customer contacts your firm and asks for a quotation for a number of different
-parts. You would create a quotation and when you get confirmation, convert it
-to an order. When you go to ship the item, you would select the warehouse in
-the drop-down menu, and select the parts to ship. One would repeat with other
-warehouses until the entire order is shipped.
-Then the billing department would go to the sales order and generate the
-invoice. It would then be mailed to the customer.
+A customer contacts your firm and asks for a quotation for a number
+of different parts. You would create a quotation and when you get
+confirmation, convert it to an order. When you go to ship the item,
+you would select the warehouse in the drop-down menu, and select the
+parts to ship. One would repeat with other warehouses until the entire
+order is shipped.
+Then the billing department would go to the sales order and generate
+the invoice. It would then be mailed to the customer.
+
+%
\begin{figure}[hbtp]
+
+
+
\caption{Complex AR Workflow with Shipping}
-\input{ar_workflow_complex}
+
+\input{ar_workflow_complex}
\end{figure}
+
+
\subsection{Requests for Quotation (RFQ)}
-A request for quotation would be a formal document one might submit to a vendor
-to ask for a quote on a product or service they might offer. These can be
-generated from Purchase Orders or AP Invoices
+
+A request for quotation would be a formal document one might submit
+to a vendor to ask for a quote on a product or service they might
+offer. These can be generated from Purchase Orders or AP Invoices
+
\subsection{Purchase Orders}
-A purchase order is a confirmation that is issued to the vendor to order the
-product of service. Many businesses will require a purchase order with certain
-terms in order to begin work on a product. These can be generated from RFQ's or
-AP Invoices.
+
+A purchase order is a confirmation that is issued to the vendor to
+order the product of service. Many businesses will require a purchase
+order with certain terms in order to begin work on a product. These
+can be generated from RFQ's or AP Invoices.
+
\subsection{Receiving}
-The Shipping-\textgreater Receiving screen allows you to track the parts
-received from an existing purchase order. Like shipping, it does not post an
-invoice but tracks the received parts in the order.
+The Shipping-\textgreater Receiving screen allows you to track the
+parts received from an existing purchase order. Like shipping, it
+does not post an invoice but tracks the received parts in the order.
+
\subsection{AP Work Flow}
-\subsubsection{Bookkeeper entering the received items, order completed in full}
-Your company inquires about the price of a given good or service from another
-firm. You submit an RFQ to the vendor, and finding that the price is
-reasonable, you convert it to an order, adjust the price to what they have
-quoted, and save it. When the goods are delivered you convert the
-order into an AP invoice and post it.
+\subsubsection{Bookkeeper entering the received items, order completed in full}
+
+Your company inquires about the price of a given good or service from
+another firm. You submit an RFQ to the vendor, and finding that the
+price is reasonable, you convert it to an order, adjust the price
+to what they have quoted, and save it. When the goods are delivered
+you convert the order into an AP invoice and post it.
+%
\begin{figure}[hbtp]
+
+
+
\caption{Simple AP Workflow}
-\input{simple_ap_workflow}
+
+\input{simple_ap_workflow}
\end{figure}
+
+
\subsubsection{Bookkeeper entering received items, order completed in part}
-Your company inquires about the price of a given good or service from another
-firm, You submit an RFQ to the vendor, and finding that the price is
-acceptable, you convert it into an order, adjusting the price to what they have
-quoted, and save it. When some of the goods are received, you open up the
-purchase order, enter the number of parts received, convert that order into
-an invoice, and post it. Repeat until all parts are received.
+Your company inquires about the price of a given good or service from
+another firm, You submit an RFQ to the vendor, and finding that the
+price is acceptable, you convert it into an order, adjusting the price
+to what they have quoted, and save it. When some of the goods are
+received, you open up the purchase order, enter the number of parts
+received, convert that order into an invoice, and post it. Repeat
+until all parts are received.
+%
\begin{figure}[hbtp]
+
+
+
\caption{AP Workflow with Receiving}
-\input{ap_workflow_ship}
+
+\input{ap_workflow_ship}
\end{figure}
+
+
\subsubsection{Receiving staff entering items}
-Your company inquires about the price of a given good or service from another
-firm, You submit an RFQ to the vendor, and finding that the price is
-acceptable, you convert it into an order, adjusting the price to what they have
-quoted, and save it. When some or all of the goods are received, the receiving
-staff goes Shipping-Receiving, locates the purchase order, and fills in the
-number of items received.
+Your company inquires about the price of a given good or service from
+another firm, You submit an RFQ to the vendor, and finding that the
+price is acceptable, you convert it into an order, adjusting the price
+to what they have quoted, and save it. When some or all of the goods
+are received, the receiving staff goes Shipping-Receiving, locates
+the purchase order, and fills in the number of items received.
-The bookkeeper can then determine when all items have been received and post the
-invoice at that time.
+The bookkeeper can then determine when all items have been received
+and post the invoice at that time.
+%
\begin{figure}[hbtp]
+
+
+
\caption{Complex AP Workflow}
-\input{ap_workflow_complex}
+
+\input{ap_workflow_complex}
\end{figure}
+
+
\subsection{Generation and Consolidation}
+
+
\subsubsection{Generation}
-The Generation screen allows you to generate Purchase Orders based on sales
-orders. One selects the sales orders one wants to use, and clicks "Generate
-Purchase Orders." Then one selects clicks on the parts to order, adjusts the
-quantity if necessary, and clicks "Select Vendor." This process is repeated
-for every vendor required. Then the Generate Orders button is clicked.
+
+The Generation screen allows you to generate Purchase Orders based
+on sales orders. One selects the sales orders one wants to use, and
+clicks \char`\"{}Generate Purchase Orders.\char`\"{} Then one selects
+clicks on the parts to order, adjusts the quantity if necessary, and
+clicks \char`\"{}Select Vendor.\char`\"{} This process is repeated
+for every vendor required. Then the Generate Orders button is clicked.
+
\subsubsection{Consolidation}
-One can consolidate sales and/or purchase orders using this screen. For the
-consolidation to work you must have more than one order associated with the
-relevant customer or vendor.
+
+One can consolidate sales and/or purchase orders using this screen.
+For the consolidation to work you must have more than one order associated
+with the relevant customer or vendor.
+
\subsection{Reporting}
-The reporting functionality in the order management is largely limited to the
-ability to locate purchase orders, sales orders, RFQ's, and quotations.
+
+The reporting functionality in the order management is largely limited
+to the ability to locate purchase orders, sales orders, RFQ's, and
+quotations.
+
\subsection{Shipping Module: Transferring Inventory between Warehouses}
-One can transfer inventory between warehouses if necessary by using the
-Shipping-\textgreater Transfer Inventory screen.
+
+One can transfer inventory between warehouses if necessary by using
+the Shipping-\textgreater Transfer Inventory screen.
+
\section{HR}
-The HR module is currently limited to tracking employees for and their start and
-end dates. It has very little other functionality. One could build payroll
-systems that could integrate with it however.
+
+The HR module is currently limited to tracking employees for and their
+start and end dates. It has very little other functionality. One could
+build payroll systems that could integrate with it however.
+
\section{POS}
-The Point of Sale screen is still fairly rudimentary, and it is one of the least
-mature aspects of Ledger-SMB. It is suitable for small retail environments at
-the moment but not much else.
+The Point of Sale screen is still fairly rudimentary, and it is one
+of the least mature aspects of Ledger-SMB. It is suitable for small
+retail environments at the moment but not much else.
+
\subsection{Sales Screen}
-The sales screen looks very much like a normal invoice entry screen with a few
-differences.
+
+The sales screen looks very much like a normal invoice entry screen
+with a few differences.
\begin{itemize}
-\item The discount text field is not available, nor is the unit field..
-\item The next part number is automatically focused when the data loads for
-rapid data entry.
-\item Hot keys for the buttons are Alt-U for update, Alt-P for print, Alt-O for
-post, and Alt-R for print and post.
-\item Part Groups appear at the bottom of the screen.
+\item The discount text field is not available, nor is the unit field..
+\item The next part number is automatically focused when the data loads
+for rapid data entry.
+\item Hot keys for the buttons are Alt-U for update, Alt-P for print, Alt-O
+for post, and Alt-R for print and post.
+\item Part Groups appear at the bottom of the screen.
\end{itemize}
\subsection{Possibilities for Data Entry}
+
\begin{itemize}
-\item Barcode scanners can be used to scan items in as they are being rung in.
-\item One could use touch screens, though this would ideally require some custom
-stylesheets to make it efficient.
+\item Barcode scanners can be used to scan items in as they are being rung
+in.
+\item One could use touch screens, though this would ideally require some
+custom stylesheets to make it efficient.
\end{itemize}
\subsection{Hardware Support}
-As Ledger-SMB is a web-based application, the web browser usually does not allow
-the page to write to arbitrary files. Therefore hardware support for pole
-displays, etc. is not readily possible from the application itself. In some
-cases, there are add-on packages (such as SL-POS) which offer some additional
-hardware options via simple additional networking programs.
+
+As Ledger-SMB is a web-based application, the web browser usually
+does not allow the page to write to arbitrary files. Therefore hardware
+support for pole displays, etc. is not readily possible from the application
+itself. In some cases, there are add-on packages (such as SL-POS)
+which offer some additional hardware options via simple additional
+networking programs.
Notes for specific types of hardware are as follows:
\begin{description}
-\item[Touch screens:] The default stylesheet is not really usable from a
-touchscreen as the items are often too small. One would need to modify the
-stylesheets to ensure that the relevant items would be reasonable. Setting down
-the resolution would also help.
-\item[Receipt Printers:] ESC/POS printers generally work in text mode. Control
-sequences can be embedded in the template as necessary.
-\item[Pole Displays:] Generally are unsupported in Ledger-SMB without add-on
-patches and special network clients.
-\item[Cash Drawers:] These should be attached to the printer. The control codes
-can then be embedded in the invoices so that the drawer opens whenever an
-invoice is printed.
-\item[Barcode Scanners:] Most customers use decoded barcode scanners through a
-keyboard wedge interface. This allows them to scan items as if they were typing
-them on the keyboard.
+\item [{Touch}] screens: The default stylesheet is not really usable from
+a touchscreen as the items are often too small. One would need to
+modify the stylesheets to ensure that the relevant items would be
+reasonable. Setting down the resolution would also help.
+\item [{Receipt}] Printers: ESC/POS printers generally work in text mode.
+Control sequences can be embedded in the template as necessary.
+\item [{Pole}] Displays: Generally are unsupported in Ledger-SMB without
+add-on patches and special network clients.
+\item [{Cash}] Drawers: These should be attached to the printer. The control
+codes can then be embedded in the invoices so that the drawer opens
+whenever an invoice is printed.
+\item [{Barcode}] Scanners: Most customers use decoded barcode scanners
+through a keyboard wedge interface. This allows them to scan items
+as if they were typing them on the keyboard.
\end{description}
\subsection{Reports}
+
+
\subsubsection{Open Invoices}
-The POS-\textgreater Open screen allows one to find any POS receipts that are
-not entirely paid off.
+
+The POS-\textgreater Open screen allows one to find any POS receipts
+that are not entirely paid off.
+
\subsubsection{Receipts}
-The POS-\textgreater Receipts screen allows one to bring up a basic record of
-the POS terminals. It is not sufficient for closing the till, however, though
-it may help for reconciliation.
-The till column is the last component or octet of the terminal's IP address.
-Therefore it is a good idea to try to avoid having IP addresses where the last
-octet is the same.
+The POS-\textgreater Receipts screen allows one to bring up a basic
+record of the POS terminals. It is not sufficient for closing the
+till, however, though it may help for reconciliation.
+
+The till column is the last component or octet of the terminal's IP
+address. Therefore it is a good idea to try to avoid having IP addresses
+where the last octet is the same.
All entries are grouped by date and source in this report.
+
\section{General Ledger}
+
+
\subsection{GL Basics}
-The General Ledger is the heart of Ledger-SMB. Indeed, Ledger-SMB is designed
-to be as close as possible to a software equivalent of a paper-based accounting
-program (but with no difference between the General Ledger and General Journal).
+The General Ledger is the heart of Ledger-SMB. Indeed, Ledger-SMB
+is designed to be as close as possible to a software equivalent of
+a paper-based accounting program (but with no difference between the
+General Ledger and General Journal).
+
\subsubsection{Paper-based accounting systems and the GL}
-In order to understand the principle of the General Ledger, one must have a
-basic understanding of the general process of bookkeeping using double-entry
-paper-based accounting systems.
+In order to understand the principle of the General Ledger, one must
+have a basic understanding of the general process of bookkeeping using
+double-entry paper-based accounting systems.
+
+Normally when a transaction would be recorded, it would first be recorded
+in the \char`\"{}General Journal\char`\"{} which would contain detailed
+information about the transaction, notes, etc. Then the entries from
+the General Journal would be transcribed to the General Ledger, where
+one could keep closer tabs on what was going on in each account.
-Normally when a transaction would be recorded, it would first be recorded in the
-"General Journal" which would contain detailed information about the
-transaction, notes, etc. Then the entries from the General Journal would be
-transcribed to the General Ledger, where one could keep closer tabs on what was
-going on in each account.
+In the general journal, all transactions are listed chronologically
+with whatever commentary is deemed necessary, while in the general
+ledger each account has its own page and transactions are recorded
+in a simple and terse manner. The General Journal is the first place
+the transaction is recorded and the General Ledger is the last.
-In the general journal, all transactions are listed chronologically with
-whatever commentary is deemed necessary, while in
-the general ledger each account has its own page and transactions are recorded
-in a simple and terse manner. The General Journal is the first place the
-transaction is recorded and the General Ledger is the last.
+At the end of the accounting period, the GL transactions would be
+summarized into a trial balance and this would be used for creating
+financial statements and closing the books at the end of the year.
-At the end of the accounting period, the GL transactions would be summarized
-into a trial balance and this would be used for creating financial statements
-and closing the books at the end of the year.
\subsubsection{Double Entry Examples on Paper}
-Let us say that John starts his business with an initial investment of \$10,000.
+Let us say that John starts his business with an initial investment
+of \$10,000.
-This is recorded in the General Journal as follows (in this example, suppose it
-is page 1):
+This is recorded in the General Journal as follows (in this example,
+suppose it is page 1):
\begin{tabular}{|l|l|l|r|r|}
+\hline
+Date &
+Accounts and Explanation &
+Ref &
+DEBIT &
+CREDIT \tabularnewline
+\hline
+March 1 &
+Checking Account &
+1060 &
+10000.00 &
+\tabularnewline
+&
+John Doe Capital &
+3011 &
+&
+10000.00\tabularnewline
+&
+John Doe began a business &
+&
+&
+\tabularnewline
+&
+with an investment of &
+&
+&
+\tabularnewline
+&
+\$10000 &
+&
+&
+\tabularnewline
\hline
-Date & Accounts and Explanation & Ref & DEBIT & CREDIT \\
-\hline
-March 1 & Checking Account & 1060 & 10000.00 & \\
- & John Doe Capital & 3011 & & 10000.00\\
- & John Doe began a business & & & \\
- & with an investment of & & & \\
- & \$10000 & & & \\
-\hline
-\end{tabular}\medskip
+\end{tabular}\medskip{}
+
+
+This would then be transcribed into two pages of the General Ledger.
+The first page might be the Checking Account page:\medskip{}
-This would then be transcribed into two pages of the General Ledger. The first
-page might be the Checking Account page:\medskip
\begin{tabular}{|l|l|l|r|l|l|l|r|}
+\hline
+DATE &
+EXPLANATION &
+REF. &
+DEBITS &
+DATE &
+EXPLANATION &
+REF. &
+CREDITS\tabularnewline
+\hline
+March 1 &
+&
+J1 &
+10000.00 &
+&
+&
+&
+\tabularnewline
\hline
-DATE & EXPLANATION & REF. & DEBITS & DATE & EXPLANATION & REF. & CREDITS\\
-\hline
-March 1 & & J1 & 10000.00 & & & & \\
-\hline
-\end{tabular}\medskip
+\end{tabular}\medskip{}
+
+
+On the John Doe Capital page, we would add a similar entry:\medskip{}
-On the John Doe Capital page, we would add a similar entry:\medskip
\begin{tabular}{|l|l|l|r|l|l|l|r|}
+\hline
+DATE &
+EXPLANATION &
+REF. &
+DEBITS &
+DATE &
+EXPLANATION &
+REF. &
+CREDITS\tabularnewline
+\hline
+&
+&
+&
+&
+March 1 &
+&
+J1 &
+10000.00\tabularnewline
\hline
-DATE & EXPLANATION & REF. & DEBITS & DATE & EXPLANATION & REF. & CREDITS\\
-\hline
- & & & & March 1 & & J1 & 10000.00\\
-\hline
-\end{tabular}\medskip
+\end{tabular}\medskip{}
+
+
\subsubsection{The GL in Ledger-SMB}
-The paper-based accounting procedure works well when one is stuck with paper
-recording requirements but it has one serious deficiency--- all of this
-transcribing creates an opportunity for errors.
+The paper-based accounting procedure works well when one is stuck
+with paper recording requirements but it has one serious deficiency---
+all of this transcribing creates an opportunity for errors.
+
+Relational databases relieve the need for such transcription as it
+is possible to store everything physically in a way similar to the
+way a General Journal is used in the paper-based systems and then
+present the same information in ways which are more closely related
+to the General Ledger book.
-Relational databases relieve the need for such transcription as it is possible
-to store everything physically in a way similar to the way a General Journal is
-used in the paper-based systems and then present the same information in ways
-which are more closely related to the General Ledger book.
+This is the exact way that the General Ledger is used in Ledger-SMB.
+The actual data is entered and stored as if it was a general journal,
+and then the data can be presented in any number of different ways.
-This is the exact way that the General Ledger is used in Ledger-SMB. The actual
-data is entered and stored as if it was a general journal, and then the data can
-be presented in any number of different ways.
+All modules of Ledger-SMB that involve COA accounts store their data
+in the General Ledger (it is a little more complex than this but this
+is very close to the actual mechanism).
-All modules of Ledger-SMB that involve COA accounts store their data in the
-General Ledger (it is a little more complex than this but this is very close to
-the actual mechanism).
\subsection{Cash Transfer}
-The simplest form of GL entry in Ledger-SMB is the Cash-\textgreater Transfer
-screen. This screen shows two transaction lines, and fields for reference,
-department, description, and notes.
+
+The simplest form of GL entry in Ledger-SMB is the Cash-\textgreater
+Transfer screen. This screen shows two transaction lines, and fields
+for reference, department, description, and notes.
The field descriptions are as follows:
\begin{description}
-\item[Reference] refers to the source document for the transfer. One can use
-transfer sheets, bank receipt numbers, etc for this field.
-\item[Description] is optional but really should be filled in. It ought to be a
-description of the transaction.
-\item[Notes] provide supplemental information for the transaction.
-\item[FX] indicates whether foreign exchange is a factor in this transaction.
-\item[Debit] indicates money going {\bf into} the asset account.
-\item[Credit] indicates money coming {\bf out} of the asset account.
-\item[Source] is the source document for that portion of the transaction.
-\item[Memo] lists additional information as necessary
-\item[Project] allows you to assign this line to a project.
+\item [{Reference}] refers to the source document for the transfer. One
+can use transfer sheets, bank receipt numbers, etc for this field.
+\item [{Description}] is optional but really should be filled in. It ought
+to be a description of the transaction.
+\item [{Notes}] provide supplemental information for the transaction.
+\item [{FX}] indicates whether foreign exchange is a factor in this transaction.
+\item [{Debit}] indicates money going \textbf{into} the asset account.
+\item [{Credit}] indicates money coming \textbf{out} of the asset account.
+\item [{Source}] is the source document for that portion of the transaction.
+\item [{Memo}] lists additional information as necessary
+\item [{Project}] allows you to assign this line to a project.
\end{description}
+The credit and debit options seem to be the opposite of what one would
+think of concerning one's bank account. The reason is that credits
+and debits are recorded so as to balance any money that may be invested
+in or withdrawn from the business. A debit to an asset account will
+be credited when money is withdrawn from the business, for example.
-The credit and debit options seem to be the opposite of what one would think o
-concerning one's bank account. The reason is that credits and debits are
-recorded so as to balance any money that may be invested in or withdrawn from
-the business. A debit to an asset account will be credited when money is
-withdrawn from the business, for example.
+Also note that in this screen, when an item is updated, it will reduce
+the number of lines to those already filled in plus an extra line
+for the new line in the data entry.
-Also note that in this screen, when an item is updated, it will reduce the
-number of lines to those already filled in plus an extra line for the new line
-in the data entry.
\subsection{GL Transactions}
-The GL Transaction screen (General Ledger-\textgreater Add Transaction) is
-identical to the Cash Transfer screen with the exception that it starts with
-nine instead of two lines. Otherwise, they are identical.
+The GL Transaction screen (General Ledger-\textgreater Add Transaction)
+is identical to the Cash Transfer screen with the exception that it
+starts with nine instead of two lines. Otherwise, they are identical.
+
+Again, one must be careful with debits and credits. Often it is easy
+to get confused. It is generally worth while to go back to the principle
+that one tracks them with regard to their impact on the equity accounts.
+So expenses are credits because they debit the equity accounts, and
+income is a debit because it credits the retained earning equity account.
-Again, one must be careful with debits and credits. Often it is easy to get
-confused. It is generally worth while to go back to the principle that one
-tracks them with regard to their impact on the equity accounts. So expenses are
-credits because they debit the equity accounts, and income is a debit because it
-credits the retained earning equity account.
\subsection{Payroll as a GL transaction}
-Currently payroll must be done as a GL transaction. The attempts to create a
-payroll system that would ship with SL have largely stalled.
+Currently payroll must be done as a GL transaction. The attempts to
+create a payroll system that would ship with SL have largely stalled.
-Most customers running their businesses will have an idea of how to do this.
+Most customers running their businesses will have an idea of how to
+do this.
+%
\begin{figure}[hbtp]
+
+
+
\caption{Payroll as a GL Transaction (Purely fictitious numbers)}
+
\begin{tabular}{|l|r|r|}
-\hline
-Account & Debit & Credit \\
-5101 Wages and Salaries & 500 & \\
-2032 Accrued Wages & & 450 \\
-2033 Fed. Income Tax wthd & & 30 \\
-2034 State Inc. Tax. wthd & & 15 \\
-2035 Social Security wthd & & 3 \\
-2036 Medicare wthd & & 2 \\
-2032 Accrued Wages & 450 & \\
-1060 Checking Acct & & 450 \\
+\hline
+Account &
+Debit &
+Credit \tabularnewline
+5101 Wages and Salaries &
+500 &
+\tabularnewline
+2032 Accrued Wages &
+&
+450 \tabularnewline
+2033 Fed. Income Tax wthd &
+&
+30 \tabularnewline
+2034 State Inc. Tax. wthd &
+&
+15 \tabularnewline
+2035 Social Security wthd &
+&
+3 \tabularnewline
+2036 Medicare wthd &
+&
+2 \tabularnewline
+2032 Accrued Wages &
+450 &
+\tabularnewline
+1060 Checking Acct &
+&
+450 \tabularnewline
\hline
\end{tabular}
\end{figure}
+
\subsection{Reconciliation}
-To reconcile an account (say, when one would get a checking account statement),
-one would go to cash/reconciliation, and check off the items that have cleared.
-One can then attempt to determine where any errors lie by comparing the total on
-the statement with the total that SL generates.
+To reconcile an account (say, when one would get a checking account
+statement), one would go to cash/reconciliation, and check off the
+items that have cleared. One can then attempt to determine where any
+errors lie by comparing the total on the statement with the total
+that SL generates.
+
+This can be done for other accounts too, such as petty cash.%
+\footnote{Petty cash denotes a drawer of cash that is used to pay small expenses.
+When an expense is paid, it is recorded on a slip of paper that is
+stored for reconciliation purposes.%
+}
-This can be done for other accounts too, such as petty cash.\footnote{Petty cash
-denotes a drawer of cash that is used to pay small expenses. When an expense is
-paid, it is recorded on a slip of paper that is stored for reconciliation
-purposes.}
\subsection{Reports}
-The most flexible report in Ledger-SMB is the GL report because it has access to
-the entire set of financial transactions of a business. Every invoice posted,
-payment made or received, etc. can be located here.
+The most flexible report in Ledger-SMB is the GL report because it
+has access to the entire set of financial transactions of a business.
+Every invoice posted, payment made or received, etc. can be located
+here.
The search criteria include:
\begin{description}
-\item[Reference] is the invoice number, or other reference number associated
-with the transaction.
-\item[Source] is the field related to the source document number in a payment or
-other transaction.\footnote{Source documents are things like receipts, canceled
-checks, etc. that can be used to verify the existence and nature of a
-transaction.}
-\item[Memo] relates to the memo field on a payment
-\item[Department] can be used to filter results by department.
-\item[Account Type] can be used to filter results by type of account (Asset,
-Liability, etc.)
-\item[Description] can be used to filter out by GL description or by
-customer/vendor name.
+\item [{Reference}] is the invoice number, or other reference number associated
+with the transaction.
+\item [{Source}] is the field related to the source document number in
+a payment or other transaction.%
+\footnote{Source documents are things like receipts, canceled checks, etc. that
+can be used to verify the existence and nature of a transaction.%
+}
+\item [{Memo}] relates to the memo field on a payment
+\item [{Department}] can be used to filter results by department.
+\item [{Account}] Type can be used to filter results by type of account
+(Asset, Liability, etc.)
+\item [{Description}] can be used to filter out by GL description or by
+customer/vendor name.
\end{description}
+The actual format of the report looks more like what one would expect
+in a paper accounting system's general journal than a general ledger
+per se. A presentation of the data that is more like the paper general
+ledger is found in the Chart of Accounts report.
-The actual format of the report looks more like what one would expect in a paper
-accounting system's general journal than a general ledger per se. A
-presentation of the data that is more like the paper general ledger is found in
-the Chart of Accounts report.
\subsubsection{GL as access to almost everything else}
-The GL reports can be used to do all manner of things. One can determine, for
-example, which AP invoice or transaction was paid with a certain check number,
-which invoice by a specific customer was paid by a specific check number.
+The GL reports can be used to do all manner of things. One can determine,
+for example, which AP invoice or transaction was paid with a certain
+check number, which invoice by a specific customer was paid by a specific
+check number.
+
\section{Recurring Transactions}
+
Any transaction or invoice may be repeated a number of times in regular
-intervals. To schedule any GL, AR, or AP transaction or invoice, click the
-schedule button.
+intervals. To schedule any GL, AR, or AP transaction or invoice, click
+the schedule button.
-In general the reference number should be left blank as this will force
-Ledger-SMB to create a new invoice or transaction number for each iteration.
-The rest of the options are self-explanatory. Note that a blank number if
-iterations will result in no recurrences of the transaction.
+In general the reference number should be left blank as this will
+force Ledger-SMB to create a new invoice or transaction number for
+each iteration. The rest of the options are self-explanatory. Note
+that a blank number if iterations will result in no recurrences of
+the transaction.
To process the recurring transactions, click on the Recurring Transactions
-option on the main menu select the ones you want to process and click "Process
-Transactions."
+option on the main menu select the ones you want to process and click
+\char`\"{}Process Transactions.\char`\"{}
+
\section{Financial Statements and Reports}
-Financial statements and reports are a very important part of any accounting
-system. Accountants and businesspeople rely on these reports to determine the
-financial soundness of the business and its prospects for the next accounting
-period.
+
+Financial statements and reports are a very important part of any
+accounting system. Accountants and businesspeople rely on these reports
+to determine the financial soundness of the business and its prospects
+for the next accounting period.
+
\subsection{Cash v. Accrual Basis}
-Financial statements, such as the Income Statement and Balance Sheet can be
-prepared either on a cash or accrual basis. In cash-basis accounting, the
-income is deemed earned when the customer pays it, and the expenses are deemed
-incurred when the business pays them.
-
-There are a number of issues with cash-basis accounting from a business point of
-view. The most extreme is that one can misrepresent the wellbeing of a business
-by paying a large expense after a deadline. Thus cash-basis accounting does not
-allow one to accurately pair the income with the related expense as these are
-recorded at different times. If one cannot accurately pair the income with the
-related expense, then financial statements cannot be guaranteed to tell one much
-of anything about the well-being of the business.
-
-In accrual basis accounting, income is considered earned when the invoice is
-posted,
-and expenses are considered incurred at the time when the goods or services are
-delivered to the business. This way, one can pair the income made from the sale
-of a product with the expense incurred in bringing that product to sale. This
-pairing allows for greater confidence in business reporting.
+
+Financial statements, such as the Income Statement and Balance Sheet
+can be prepared either on a cash or accrual basis. In cash-basis accounting,
+the income is deemed earned when the customer pays it, and the expenses
+are deemed incurred when the business pays them.
+
+There are a number of issues with cash-basis accounting from a business
+point of view. The most extreme is that one can misrepresent the wellbeing
+of a business by paying a large expense after a deadline. Thus cash-basis
+accounting does not allow one to accurately pair the income with the
+related expense as these are recorded at different times. If one cannot
+accurately pair the income with the related expense, then financial
+statements cannot be guaranteed to tell one much of anything about
+the well-being of the business.
+
+In accrual basis accounting, income is considered earned when the
+invoice is posted, and expenses are considered incurred at the time
+when the goods or services are delivered to the business. This way,
+one can pair the income made from the sale of a product with the expense
+incurred in bringing that product to sale. This pairing allows for
+greater confidence in business reporting.
+
\subsection{Viewing the Chart of Accounts and Transactions}
-The Reports--\textgreater Chart of Accounts will provide the chart of accounts
-along with current totals in each account.
-If you click on an account number, you will get a screen that allows you to
-filter out transactions in that account by various criteria. One can also
-include AR/AP, and Subtotal in the report.
+The Reports--\textgreater Chart of Accounts will provide the chart
+of accounts along with current totals in each account.
+
+If you click on an account number, you will get a screen that allows
+you to filter out transactions in that account by various criteria.
+One can also include AR/AP, and Subtotal in the report.
The report format is similar to that of a paper-based general ledger,
+
\subsection{Trial Balance}
+
+
\subsubsection{The Paper-based function of a Trial Balance}
-In paper-based accounting systems, the accountant at the end of the year would
-total up the debits and credits in every account and transfer them onto another
-sheet called the trial balance. The accountant would check to determine that
-the total debits and credits were equal and would then transfer this information
-onto the financial statements. It was called a trial balance because it was the
-main step at which the error-detection capabilities of double-entry accounting
-systems were used.
+
+In paper-based accounting systems, the accountant at the end of the
+year would total up the debits and credits in every account and transfer
+them onto another sheet called the trial balance. The accountant would
+check to determine that the total debits and credits were equal and
+would then transfer this information onto the financial statements.
+It was called a trial balance because it was the main step at which
+the error-detection capabilities of double-entry accounting systems
+were used.
+
\subsubsection{Running the Trial Balance Report}
-This report is located under Reports --\textgreater Trial Balance. One can
-filter out items by date, accounting period, or department. One can run the
-report by accounts or using GIFI classifications to group accounts together.
-From this report, you can click on the account number and see all transactions
-on the trial balance as well as whether or not they have been reconciled.
+This report is located under Reports --\textgreater Trial Balance.
+One can filter out items by date, accounting period, or department.
+One can run the report by accounts or using GIFI classifications to
+group accounts together.
+
+From this report, you can click on the account number and see all
+transactions on the trial balance as well as whether or not they have
+been reconciled.
+
\subsubsection{What if the Trial Balance doesn't Balance?}
-If the trial balance does not balance, get technical support immediately. This
-usually means that transactions were not entered properly. Some may have been
-out of balance, or some may have gone into non-existent accounts (believe it or
-not, Ledger-SMB does not check this latter issue).
+
+If the trial balance does not balance, get technical support immediately.
+This usually means that transactions were not entered properly. Some
+may have been out of balance, or some may have gone into non-existent
+accounts (believe it or not, Ledger-SMB does not check this latter
+issue).
+
\subsubsection{Trial Balance as a Summary of Account Activity}
-The trial balance offers a glance at the total activity in every account. It
-can provide a useful look at financial activity at a glance for the entire
-business.
+
+The trial balance offers a glance at the total activity in every account.
+It can provide a useful look at financial activity at a glance for
+the entire business.
+
\subsubsection{Trial Balance as a Budget Planning Tool}
-By filtering out departments, one can determine what a department earned and
-spent during a given financial interval. This can be used in preparing budgets
-for the next accounting period.
+
+By filtering out departments, one can determine what a department
+earned and spent during a given financial interval. This can be used
+in preparing budgets for the next accounting period.
+
\subsection{Income Statement}
-The Income Statement is another tool that can be used to assist with budgetary
-planning as well as provide information on the financial health of a business.
-The report is run from Reports--\textgreater Income Statement. The report
-preparation screen shows the following fields:
+The Income Statement is another tool that can be used to assist with
+budgetary planning as well as provide information on the financial
+health of a business.
+
+The report is run from Reports--\textgreater Income Statement. The
+report preparation screen shows the following fields:
\begin{description}
-\item[Department] allows you to run reports for individual departments. This is
-useful for budgetary purposes.
-\item[Project] allows you to run reports on individual projects. This can show
-how profitable a given project was during a given time period.
-\item[From and To] allow you to select arbitrary from and to dates.
-\item[Period] allows you to specify a standard accounting period.
-\item[Compare to fields] allow you to run a second report for comparison
-purposes for a separate range of dates or accounting period.
-\item[Decimalplaces] allows you to display numbers to a given precision.
-\item[Method] allows you to select between accrual and cash basis reports.
-\item[Include in Report] provides various options for reporting.
-\item[Accounts] allows you to run GIFI reports instead of the standard ones.
+\item [{Department}] allows you to run reports for individual departments.
+This is useful for budgetary purposes.
+\item [{Project}] allows you to run reports on individual projects. This
+can show how profitable a given project was during a given time period.
+\item [{From}] and To allow you to select arbitrary from and to dates.
+\item [{Period}] allows you to specify a standard accounting period.
+\item [{Compare}] to fields allow you to run a second report for comparison
+purposes for a separate range of dates or accounting period.
+\item [{Decimalplaces}] allows you to display numbers to a given precision.
+\item [{Method}] allows you to select between accrual and cash basis reports.
+\item [{Include}] in Report provides various options for reporting.
+\item [{Accounts}] allows you to run GIFI reports instead of the standard
+ones.
\end{description}
+The report shows all income and expense accounts with activity during
+the period when the report is run, the balances accrued during the
+period, as well as the total income and expense at the bottom of each
+section. The total expense is subtracted from the total income to
+provide the net income during the period. If there is a loss, it appears
+in parentheses.
-The report shows all income and expense accounts with activity during the period
-when the report is run, the balances accrued during the period, as well as the
-total income and expense at the bottom of each section. The total expense is
-subtracted from the total income to provide the net income during the period.
-If there is a loss, it appears in parentheses.
\subsubsection{Uses of an Income Statement}
-The income statement provides a basic snapshot of the overall ability of the
-business to make money. It is one of the basic accounting statements and is
-required, for example, on many SEC forms for publicly traded firms.
-Additionally, businessmen use the income statement to look at overall trends in
-the ability of the business to make money. One can compare a given month,
-quarter, or year with a year prior to look for trends so that one can make
-adjustments in order to maximize profit.
+The income statement provides a basic snapshot of the overall ability
+of the business to make money. It is one of the basic accounting statements
+and is required, for example, on many SEC forms for publicly traded
+firms.
+
+Additionally, businessmen use the income statement to look at overall
+trends in the ability of the business to make money. One can compare
+a given month, quarter, or year with a year prior to look for trends
+so that one can make adjustments in order to maximize profit.
Finally, these reports can be used to provide a look at each department's
-performance and their ability to work within their budget. One can compare a
-department or project's performance to a year prior and look for patterns that
-can indicate problems or opportunities that need to be addressed.
+performance and their ability to work within their budget. One can
+compare a department or project's performance to a year prior and
+look for patterns that can indicate problems or opportunities that
+need to be addressed.
+
\subsection{Balance Sheet}
-The balance sheet is the second major accounting statement supported by
-Ledger-SMB. The balance sheet provides a snapshot of the current financial
-health of the business by comparing assets, liabilities, and equity.
-In essence the balance sheet is a statement of the current state of owner
-equity. Traditionally, it does not track changes in owner equity in the same
-way the Statement of Owner Equity does.
+The balance sheet is the second major accounting statement supported
+by Ledger-SMB. The balance sheet provides a snapshot of the current
+financial health of the business by comparing assets, liabilities,
+and equity.
-The Balance Sheet report preparation screen is much simpler than the Income
-Statement screen. Balance sheets don't apply to projects, but they do apply to
-departments. Also, unlike an income statement, a balance sheet is fixed for a
-specific date in time. Therefore one does not need to select a period.
+In essence the balance sheet is a statement of the current state of
+owner equity. Traditionally, it does not track changes in owner equity
+in the same way the Statement of Owner Equity does.
+
+The Balance Sheet report preparation screen is much simpler than the
+Income Statement screen. Balance sheets don't apply to projects, but
+they do apply to departments. Also, unlike an income statement, a
+balance sheet is fixed for a specific date in time. Therefore one
+does not need to select a period.
The fields in creating a balance sheet are:
\begin{description}
-\item[Department] allows you to run separate balance sheets for each department.
-\item[As at] specifies the date. If blank this will be the current date.
-\item[Compare to] specifies the date to compare the balance sheet to.
-\item[Decimalplaces] specifies the number of decimal places to use.
-\item[Method] selects between cash and accrual basis.
-\item[Include in report] allows you to select supplemental information on the
-report.
-\item[Accounts] allows you to select between standard and GIFI reports.
+\item [{Department}] allows you to run separate balance sheets for each
+department.
+\item [{As}] at specifies the date. If blank this will be the current date.
+\item [{Compare}] to specifies the date to compare the balance sheet to.
+\item [{Decimalplaces}] specifies the number of decimal places to use.
+\item [{Method}] selects between cash and accrual basis.
+\item [{Include}] in report allows you to select supplemental information
+on the report.
+\item [{Accounts}] allows you to select between standard and GIFI reports.
\end{description}
+The balance sheet lists all asset, liability, and equity accounts
+with a balance. Each category has a total listed, and the total of
+the equity and liability accounts is also listed.
-The balance sheet lists all asset, liability, and equity accounts with a
-balance. Each category has a total listed, and the total of the equity and
-liability accounts is also listed.
+The total assets should be equal to the sum of the totals of the liability
+and equity accounts.
-The total assets should be equal to the sum of the totals of the liability and
-equity accounts.
\subsection{What if the Balance Sheet doesn't balance?}
-Get technical support immediately, This may indicate that out of balance
+Get technical support immediately, This may indicate that out of balance
transactions were entered or that transactions did not post properly.
+
\subsection{No Statement of Owner Equity?}
-The Statement of Owner Equity is the one accounting statement that Ledger-SMB
-does not support. However, it can be simulated by running a balance sheet at
-the end of the time frame in question and comparing it to the beginning. One
-can check this against an income statement for the period in question to verify
-its accuracy. The statement of owner equity is not as commonly used now as it
-once was.
+The Statement of Owner Equity is the one accounting statement that
+Ledger-SMB does not support. However, it can be simulated by running
+a balance sheet at the end of the time frame in question and comparing
+it to the beginning. One can check this against an income statement
+for the period in question to verify its accuracy. The statement of
+owner equity is not as commonly used now as it once was.
+
\section{The Template System}
-Ledger-SMB allows most documents to be generated according to a template system.
-This allows financial statements, invoices, orders, and the like to be
-customized to meet the needs of most businesses. Company logos can be inserted,
-the format can be radically altered, one can print letters to be included with
-checks to vendors instead of the checks themselves, and the like. In the end,
-there is very little that cannot be accomplished regarding modification of these
-documents with the template system.
-One can define different templates for different languages, so that a customer
-in Spain gets a different invoice than a customer in Canada.
+Ledger-SMB allows most documents to be generated according to a template
+system. This allows financial statements, invoices, orders, and the
+like to be customized to meet the needs of most businesses. Company
+logos can be inserted, the format can be radically altered, one can
+print letters to be included with checks to vendors instead of the
+checks themselves, and the like. In the end, there is very little
+that cannot be accomplished regarding modification of these documents
+with the template system.
+
+One can define different templates for different languages, so that
+a customer in Spain gets a different invoice than a customer in Canada.
+
\subsection{Text Templates}
-The only template that uses a text-only format is the POS receipt. This example
-provides the simplest way to understand the template system.
+
+The only template that uses a text-only format is the POS receipt.
+This example provides the simplest way to understand the template
+system.
The first two lines are:\\
-\textless\%company align=center width=40\%\textgreater\\
-\textless\%address align=center width=40\%\textgreater\\
+ \textless\%company align=center width=40\%\textgreater\\
+ \textless\%address align=center width=40\%\textgreater\\
+
-The first line tells Ledger-SMB to print the company name as passed to it via a
-variable, centered, with a page width of 40 characters. The second line does
-the same thing with the address.
+The first line tells Ledger-SMB to print the company name as passed
+to it via a variable, centered, with a page width of 40 characters.
+The second line does the same thing with the address.
-These variables are usually passed to the invoice using form fields (hidden or
-otherwise) in the submitting web page. The printing script, however, can
-disable some of these fields or add others via database lookups and the like.
+These variables are usually passed to the invoice using form fields
+(hidden or otherwise) in the submitting web page. The printing script,
+however, can disable some of these fields or add others via database
+lookups and the like.
+
+In all types of templates, variable substitution occurs between \textless\%
+and \%\textgreater. One can optionally specify an alignment or a
+width but these are really only useful in text templates.
-In all types of templates, variable substitution occurs between \textless\% and
-\%\textgreater. One can optionally specify an alignment or a width but these
-are really only useful in text templates.
\subsection{HTML Templates}
+
The following templates exist in HTML format:
\begin{itemize}
-\item Income Statement
-\item Balance Sheet
-\item Invoice (AR)
-\item AR Transaction
-\item AP Transaction
-\item Packing List
-\item Pick List
-\item Sales Order
-\item Work Order
-\item Purchase Order
-\item Bin List
-\item Statement
-\item Quotation
-\item RFQ
-\item Time Card
+\item Income Statement
+\item Balance Sheet
+\item Invoice (AR)
+\item AR Transaction
+\item AP Transaction
+\item Packing List
+\item Pick List
+\item Sales Order
+\item Work Order
+\item Purchase Order
+\item Bin List
+\item Statement
+\item Quotation
+\item RFQ
+\item Time Card
\end{itemize}
+These templates can be edited by an HTML editor. However, it is generally
+recommended that one back up templates first. The reason is that some
+HTML editors will fully re-parse the HTML and save it back without
+what they see as invalid tags. Most editors, however, will save the
+variable substitution tags because similar tags are also used by Microsoft's
+active server pages.
-These templates can be edited by an HTML editor. However, it is generally
-recommended that one back up templates first. The reason is that some HTML
-editors will fully re-parse the HTML and save it back without what they see as
-invalid tags. Most editors, however, will save the variable substitution tags
-because similar tags are also used by Microsoft's active server pages.
+Finally, some editors are known to mangle formatting, so many problems
+can be avoided by ensuring that one has a backup of the templates,
+especially if they have already been customized.
-Finally, some editors are known to mangle formatting, so many problems can be
-avoided by ensuring that one has a backup of the templates, especially if they
-have already been customized.
-\subsection{\LaTeX\ Templates}
-The following templates, by default, are available in \LaTeX\ :
+\subsection{\LaTeX{}\ Templates}
+
+The following templates, by default, are available in \LaTeX{}\ :
\begin{itemize}
-\item Invoice
-\item AR Transaction
-\item AP Transaction
-\item Packing List
-\item Pick List
-\item Sales Order
-\item Work Order
-\item Purchase Order
-\item Bin List
-\item Statement
-\item Check
-\item Receipt
-\item Quotation
-\item RFQ
-\item Time Card
+\item Invoice
+\item AR Transaction
+\item AP Transaction
+\item Packing List
+\item Pick List
+\item Sales Order
+\item Work Order
+\item Purchase Order
+\item Bin List
+\item Statement
+\item Check
+\item Receipt
+\item Quotation
+\item RFQ
+\item Time Card
\end{itemize}
+\LaTeX{}\ templates allow one to generate PDF and postscript documents
+and print directly to a postscript-enabled printer or print software
+(like CUPS).
+
+\LaTeX{}\ templates can be edited using a standard text editor (like
+vim or emacs), or using a synchronous \LaTeX{}\ implementation such
+as \LyX{}.
+
+
+\subsubsection{What is \LaTeX{}\ ?}
+
+\LaTeX{}\ (pronounced LAY-tech) is an extension on the \TeX{}\ typesetting
+system. It largely consists of a set of macros that allow one to focus
+on the structure of the document while letting the \TeX{}\ engine
+do the heavy lifting in terms of determining the optimal formatting
+for the page. \LaTeX{}\ is used in a large number of academic journals
+(including those of the American Mathematics Association). It is available
+at \url{http://www.tug.org}.
+
+Like HTML, \LaTeX{}\ uses plain text documents to store the formatting
+information and then when the document is rendered, attempts to fit
+it onto a page. \LaTeX{}\
+supports the concept of stylesheets, allowing one to separate content
+from format, and this feature is used in many higher-end applications,
+like journal publication.
+
+Unlike HTML, \LaTeX{}\ is a complete though simple programming language
+that allows one to redefine internals of the system for formatting
+purposes.
+
+This document is written in \LaTeX{}.
+
+
+\subsubsection{Using \LyX{} to Edit \LaTeX{}\ Templates}
+
+\LyX{} is a synchronous \LaTeX{}\ editor that runs on Windows, UNIX/Linux,
+and Mac OS X. It requires an installed \LaTeX{}-2e implementation
+and can be obtained at \url{http://www.lyx.org}. Like the most common
+\LaTeX{}\ implementations, it is open source.
+
+In \LaTeX{}, the \% sign is used to begin a comment. Therefore in
+order to edit the documents effectively, you must convert the \% signs
+into another character combination, such as @@@. This can be done
+with a sed script such as:\\
+ sed -e \char`\"{}s$\vert$\%$\vert$@@@$\vert$ig\char`\"{} template.tex
+\textgreater\ template-edit.tex \\
+ Then when you are done:\\
+ sed -e \char`\"{}$\vert$@@@$\vert$\%$\vert$ig\char`\"{} template-edit.tex
+\textgreater\ template.tex
+
+One can edit the template-edit.tex without worrying about \LyX{} disregarding
+lines when it encounters a \%.
-\LaTeX\ templates allow one to generate PDF and postscript documents and print
-directly to a postscript-enabled printer or print software (like CUPS).
-
-\LaTeX\ templates can be edited using a standard text editor (like vim or emacs),
-or using a synchronous \LaTeX\ implementation such as LyX.
-
-\subsubsection{What is \LaTeX\ ?}
-\LaTeX\ (pronounced LAY-tech) is an extension on the \TeX\ typesetting system. It
-largely consists of a set of macros that allow one to focus on the structure of
-the document while letting the \TeX\ engine do the heavy lifting in terms of
-determining the optimal formatting for the page. \LaTeX\ is used in a large
-number of academic journals (including those of the American Mathematics
-Association). It is available at \url{http://www.tug.org}.
-
-Like HTML, \LaTeX\ uses plain text documents to store the formatting information
-and then when the document is rendered, attempts to fit it onto a page. \LaTeX\
-supports the concept of stylesheets, allowing one to separate content from
-format, and this feature is used in many higher-end applications, like journal
-publication.
-
-Unlike HTML, \LaTeX\ is a complete though simple programming language that allows
-one to redefine internals of the system for formatting purposes.
-
-This document is written in \LaTeX.
-
-\subsubsection{Using LyX to Edit \LaTeX\ Templates}
-LyX is a synchronous \LaTeX\ editor that runs on Windows, UNIX/Linux, and
-Mac OS X. It requires an installed \LaTeX-2e implementation and can be obtained
-at \url{http://www.lyx.org}. Like the most common \LaTeX\ implementations, it is
-open source.
-
-In \LaTeX, the \% sign is used to begin a comment. Therefore in order to edit
-the documents effectively, you must convert the \% signs into another character
-combination, such as @@@. This can be done with a sed script such as:\\
-sed -e "s$\vert$\%$\vert$@@@$\vert$ig" template.tex \textgreater\
-template-edit.tex \\
-Then when you are done:\\
-sed -e "$\vert$@@@$\vert$\%$\vert$ig" template-edit.tex \textgreater\
-template.tex
-
-One can edit the template-edit.tex without worrying about LyX disregarding lines
-when it encounters a \%.
\subsection{Customizing Logos}
-\LaTeX\ requires different formats of logos depending on whether the document is
-going to be generated as a PDF or as postscript. Postscript requires an
-embedded postscript graphic, while PDF requires any type of graphic other than
-embedded postscript. Usually one uses a PNG's for PDF's, though GIF's could be
-used as well. The logo for a \LaTeX\ document resides in the users directory.
-HTML documents can have logos in many different formats. PNG's are generally
-preferred for printing reasons. The image can be stored anywhere and merely
-referenced in the HTML.
+\LaTeX{}\ requires different formats of logos depending on whether
+the document is going to be generated as a PDF or as postscript. Postscript
+requires an embedded postscript graphic, while PDF requires any type
+of graphic other than embedded postscript. Usually one uses a PNG's
+for PDF's, though GIF's could be used as well. The logo for a \LaTeX{}\ document
+resides in the users directory.
+
+HTML documents can have logos in many different formats. PNG's are
+generally preferred for printing reasons. The image can be stored
+anywhere and merely referenced in the HTML.
+
+Note: Always test the an invoice with an image on it to ensure that
+the rest of the page format is not thrown off by it.
-Note: Always test the an invoice with an image on it to ensure that the rest of
-the page format is not thrown off by it.
\subsection{How are They Stored in the Filesystem?}
-The template directory ("templates" in the root Ledger-SMB install directory)
-contains all the root templates used by Ledger-SMB. These follow a naming
-convention of COAType-templatename.ext where COAType is the type of dataset that
-was created when the user was created, templatename is the name of the template,
-and ext is either txt, html, or tex (for text, html, and \LaTeX\ respectively).
+
+The template directory (\char`\"{}templates\char`\"{} in the root
+Ledger-SMB install directory) contains all the root templates used
+by Ledger-SMB. These follow a naming convention of COAType-templatename.ext
+where COAType is the type of dataset that was created when the user
+was created, templatename is the name of the template, and ext is
+either txt, html, or tex (for text, html, and \LaTeX{}\ respectively).
Inside this directory are one or more subdirectories where the relevant
-templates have been copied as default language templates for the user. Many
-users can use the same user directory (which bears the name of the Ledger-SMB
-username). Within this directory are more subdirectories for translated
-templates, one for each language created.
+templates have been copied as default language templates for the user.
+Many users can use the same user directory (which bears the name of
+the Ledger-SMB username). Within this directory are more subdirectories
+for translated templates, one for each language created.
+
\subsection{Upgrade Issues}
-When Ledger-SMB is upgraded, the templates are not replaced. This is designed
-to prevent the upgrade script from overwriting changes made during the course of
-customizing the templates.
-Occasionally, however, the data model changes in a way which can cause the
-templates to stop printing certain information. When information that was
-showing up before an upgrade stops showing up, one can either upgrade the
-templates by copying the source template over the existing one, or one can edit
-the template to make the change.
+When Ledger-SMB is upgraded, the templates are not replaced. This
+is designed to prevent the upgrade script from overwriting changes
+made during the course of customizing the templates.
+
+Occasionally, however, the data model changes in a way which can cause
+the templates to stop printing certain information. When information
+that was showing up before an upgrade stops showing up, one can either
+upgrade the templates by copying the source template over the existing
+one, or one can edit the template to make the change.
+
+\clearpage
+
-\clearpage
\part{Technical Overview}
+
+
\section{Basic Architecture}
-Ledger-SMB is a web-based Perl program that interfaces with PostgreSQL using the
-relevant Perl modules. The code is well partitioned, and the main operation
-modules are written in an object oriented way.
+Ledger-SMB is a web-based Perl program that interfaces with PostgreSQL
+using the relevant Perl modules. The code is well partitioned, and
+the main operation modules are written in an object oriented way.
+
\subsection{The Software Stack}
+%
\begin{figure}[hbtp]
-\label{fig-sl-stack}
-\input{sl-stack.latex}
+ \label{fig-sl-stack} \input{sl-stack.tex}
+
+
\caption{The Ledger-SMB software stack in a Typical Implementation}
\end{figure}
-Ledger-SMB runs in a Perl interpreter. I do not currently know if it is
-possible to run it with Perl2C or other language converters to run in other
-environments. However, except for high-capacity environments, Perl is a good
-language choice for this sort of program.
-
-Ledger-SMB used to support DB2 and Oracle as well as PostgreSQL. However,
-currently some of the functionality is implemented using PostgreSQL user-defined
-functions. These would need to be ported to other database managers in order to
-make the software work on these. It should not be too hard, but the fact that
-it has not been done yet may mean that there is no real demand for running the
-software under other RDBMS's.
-
-One can substitute other web servers for Apache. Normally Ledger-SMB is run as
-a CGI program but it may be possible to run it in the web server process (note
-that this may not be entirely thread-safe).
-
-The operating system can be any that supports a web server and Perl (since
-PostgreSQL need not run on the same system). However, there are a few issues
-running Ledger-SMB on Windows (most notably in trying to get Postscript
-documents to print properly).
-
-On the client side, any web-browser will work. Currently, the layout is
-different for Lynx (which doesn't support frames), and the layout is not really
-useful under eLinks (the replacement for Lynx which does support frames). Some
-functionality requires Javascript to work properly, though the application is
-usable without these features.
+
+Ledger-SMB runs in a Perl interpreter. I do not currently know if
+it is possible to run it with Perl2C or other language converters
+to run in other environments. However, except for high-capacity environments,
+Perl is a good language choice for this sort of program.
+
+Ledger-SMB used to support DB2 and Oracle as well as PostgreSQL. However,
+currently some of the functionality is implemented using PostgreSQL
+user-defined functions. These would need to be ported to other database
+managers in order to make the software work on these. It should not
+be too hard, but the fact that it has not been done yet may mean that
+there is no real demand for running the software under other RDBMS's.
+
+One can substitute other web servers for Apache. Normally Ledger-SMB
+is run as a CGI program but it may be possible to run it in the web
+server process (note that this may not be entirely thread-safe).
+
+The operating system can be any that supports a web server and Perl
+(since PostgreSQL need not run on the same system). However, there
+are a few issues running Ledger-SMB on Windows (most notably in trying
+to get Postscript documents to print properly).
+
+On the client side, any web-browser will work. Currently, the layout
+is different for Lynx (which doesn't support frames), and the layout
+is not really useful under eLinks (the replacement for Lynx which
+does support frames). Some functionality requires Javascript to work
+properly, though the application is usable without these features.
+
\subsection{Capacity Planning}
-Some companies may ask how scalable Ledger-SMB is. In general, it is assumed
-that few companies are going to have a need for a high-concurrency accounting
-system. However, with all the features available in Ledger-SMB, the staff that
-may have access to some of the application may be high enough to make the
-question worthwhile.
-This question also becomes more important when companies might look at
-integrating Ledger-SMB with a CRM solution, online store, or other environment.
-This section looks at a number of the known issues and their solutions.
+Some companies may ask how scalable Ledger-SMB is. In general, it
+is assumed that few companies are going to have a need for a high-concurrency
+accounting system. However, with all the features available in Ledger-SMB,
+the staff that may have access to some of the application may be senior
+enough to make the question worthwhile.
+
+This question also becomes more important when companies might look
+at integrating Ledger-SMB with a CRM solution, online store, or other
+environment. This section looks at a number of the known issues and
+their solutions.
+
\subsubsection{Scalability Strategies}
-As Ledger-SMB is a fairly standard web-based application. However, sometimes
-during upgrades, the database schema changes. In these cases, it becomes
-impossible to use different versions of the software against the same database
-version safely. Ledger-SMB checks the version of the database and if the
-version is higher than the version of the software that is running, will refuse
-to run.
-
-Therefore although one strategy might be to run several front-end web servers
-with Ledger-SMB, in reality this can be a bit of a problem. One solution is to
-take half of the front-end servers off-line while doing the initial upgrade, and
-then take the other offline to upgrade when these are brought back online.
-
-The database manager is less scalable in the sense that one cannot just add more
-database servers and expect to carry on as normal. However, aside from the
-known issues listed below, there are few performance issues with it. If
-complex reports are necessary, these can be moved to a replica database
-(perhaps using Slony-I).
-
-If this solution is insufficient for database scalability, one might be able to
-move staff who do not need real-time access to new entries onto a
-PG-Pool/Slony-I cluster where new transactions are entered on the master and
-other data is looked up on the replica. In certain circumstances, one can also
-offload a number of other queries from the master database in order to minimize
-the load. Ledger-SMB has very few issues in the scalability of the application.
+
+As Ledger-SMB is a fairly standard web-based application. However,
+sometimes during upgrades, the database schema changes. In these cases,
+it becomes impossible to use different versions of the software against
+the same database version safely. Ledger-SMB checks the version of
+the database and if the version is higher than the version of the
+software that is running, will refuse to run.
+
+Therefore although one strategy might be to run several front-end
+web servers with Ledger-SMB, in reality this can be a bit of a problem.
+One solution is to take half of the front-end servers off-line while
+doing the initial upgrade, and then take the other offline to upgrade
+when these are brought back online.
+
+The database manager is less scalable in the sense that one cannot
+just add more database servers and expect to carry on as normal. However,
+aside from the known issues listed below, there are few performance
+issues with it. If complex reports are necessary, these can be moved
+to a replica database (perhaps using Slony-I).
+
+If this solution is insufficient for database scalability, one might
+be able to move staff who do not need real-time access to new entries
+onto a PG-Pool/Slony-I cluster where new transactions are entered
+on the master and other data is looked up on the replica. In certain
+circumstances, one can also offload a number of other queries from
+the master database in order to minimize the load. Ledger-SMB has
+very few issues in the scalability of the application.
+
\subsubsection{Database Maintenance}
-PostgreSQL uses a technique called Multi-version Concurrency Control (MVCC) to
-provide a snapshot of the database at the beginning of a statement or
-transaction (depending on the transaction isolation level). When a row is
-updated, PostgreSQL leaves the old row in the database, and inserts a new
-version of that row into the table. Over time, unless those old rows are
-removed, performance can degrade as PostgreSQL has to search through all the old
-versions of the row in order to determine which one ought to be the current one.
-
-Due to the way the SQL statements are executed in Ledger-SMB, most inserts will
-also create a dead row.
-
-A second problem occurs in that each transaction is given a transaction id.
-These id's are numbered using 32-bit integers. If the transaction id wraps
-around (prior to 8.1), data from transactions that appear (due to the
-wraparound) to be in the
-future suddenly becomes inaccessible. This problem was corrected in PostgreSQL
-8.1, where the database will refuse to accept new transactions if the
-transaction ID gets too close to a wraparound. So while the problem is not as
-serious in 8.1, the application merely becomes inaccessible rather than
-displaying apparent data loss. Wraparound would occur after
-about a billion transactions between all databases running on that instance of
-PostgreSQL.
-
-Prior to 8.1, the main way to prevent both these problems was to run a periodic
-vacuumdb command from cron (UNIX/Linux) or the task scheduler (Windows). In
-8.1 or later, autovacuum capabilities are part of the back-end and can be
-configured with the database manager. See the PostgreSQL documentation for
-treatment of these subjects.
-
-In general, if performance appears to be slowly degrading, one should try to run
-vacuumdb -z from the shell in order to attempt to reclaim space and
-provide the planner with accurate information about the size and composition of
-the tables. If this fails, then one can go to other methods of determining the
-bottleneck and what to do about it.
+
+PostgreSQL uses a technique called Multi-version Concurrency Control
+(MVCC) to provide a snapshot of the database at the beginning of a
+statement or transaction (depending on the transaction isolation level).
+When a row is updated, PostgreSQL leaves the old row in the database,
+and inserts a new version of that row into the table. Over time, unless
+those old rows are removed, performance can degrade as PostgreSQL
+has to search through all the old versions of the row in order to
+determine which one ought to be the current one.
+
+Due to the way the SQL statements are executed in Ledger-SMB, most
+inserts will also create a dead row.
+
+A second problem occurs in that each transaction is given a transaction
+id. These id's are numbered using 32-bit integers. If the transaction
+id wraps around (prior to 8.1), data from transactions that appear
+(due to the wraparound) to be in the future suddenly becomes inaccessible.
+This problem was corrected in PostgreSQL 8.1, where the database will
+refuse to accept new transactions if the transaction ID gets too close
+to a wraparound. So while the problem is not as serious in 8.1, the
+application merely becomes inaccessible rather than displaying apparent
+data loss. Wraparound would occur after about a billion transactions
+between all databases running on that instance of PostgreSQL.
+
+Prior to 8.1, the main way to prevent both these problems was to run
+a periodic vacuumdb command from cron (UNIX/Linux) or the task scheduler
+(Windows). In 8.1 or later, autovacuum capabilities are part of the
+back-end and can be configured with the database manager. See the
+PostgreSQL documentation for treatment of these subjects.
+
+In general, if performance appears to be slowly degrading, one should
+try to run vacuumdb -z from the shell in order to attempt to reclaim
+space and provide the planner with accurate information about the
+size and composition of the tables. If this fails, then one can go
+to other methods of determining the bottleneck and what to do about
+it.
+
\subsubsection{Known issues}
-The PostgreSQL planner assumes a minimum page size of ten pages for a physically
-empty table. The reasoning behind this choice is that a table could grow
-rapidly and one could end up with bad database performance if the planner
-assumes a very small table.
-
-However, if you end up with joins between a very large table with millions of
-rows and a physically empty table, one can end up with a very bad query plan.
-In this case, the planner will choose a nested loop join and run through this
-loop for every row in the large table. As a result, performance will suddenly
-drop once the large table becomes too large to effectively do index scans of the
-join criteria on both tables. This problem most often occurs when people have
-no warehouses, departments, or projects defined and are running systems with a
-large number of transactions (such as a point of sale environment).
-
-Last time I saw this problem, the server would wait for thirty seconds to
-display a new point of sale screen while the server CPU activity would spike to
-100\%.
-
-One solution is to define one warehouse, department, and project, and then run
-vacuumdb -z from the shell to force the planner to acknowledge these tables as
-single-row tables. The other option is to go into the source code and edit the
-database queries to omit unused tables.
+
+The PostgreSQL planner assumes a minimum page size of ten pages for
+a physically empty table. The reasoning behind this choice is that
+a table could grow rapidly and one could end up with bad database
+performance if the planner assumes a very small table.
+
+However, if you end up with joins between a very large table with
+millions of rows and a physically empty table, one can end up with
+a very bad query plan. In this case, the planner will choose a nested
+loop join and run through this loop for every row in the large table.
+As a result, performance will suddenly drop once the large table becomes
+too large to effectively do index scans of the join criteria on both
+tables. This problem most often occurs when people have no warehouses,
+departments, or projects defined and are running systems with a large
+number of transactions (such as a point of sale environment).
+
+Last time I saw this problem, the server would wait for thirty seconds
+to display a new point of sale screen while the server CPU activity
+would spike to 100\%.
+
+One solution is to define one warehouse, department, and project,
+and then run vacuumdb -z from the shell to force the planner to acknowledge
+these tables as single-row tables. The other option is to go into
+the source code and edit the database queries to omit unused tables.
+
\section{Customization Possibilities}
-Ledger-SMB is designed to be customized relatively easily and rapidly. In
-general, the source code is well written and compartmentalized. This section
-covers the basic possibilities involving customization.
+
+Ledger-SMB is designed to be customized relatively easily and rapidly.
+In general, the source code is well written and compartmentalized.
+This section covers the basic possibilities involving customization.
+
\subsection{Brief Guide to the Source Code}
-Ledger-SMB is an application with over 34000 lines of code. While it is not
-possible to cover the entire application here, a brief overview of the source
-code is in order.
-In the root of the install directory, one will find a setup.pl program, a number
-of other .pl programs, and a number of directories. The setup.pl program is
-used to update or install Ledger-SMB. The other .pl programs provide a basic
-set of services for the framework (including authentication) and then pass the
-work on to the data entry screen file in the bin directory.
+Ledger-SMB is an application with over 34000 lines of code. While
+it is not possible to cover the entire application here, a brief overview
+of the source code is in order.
-The bin directory contains another directory for each terminal type. The main
-two offered are lynx and mozilla. Lynx would be used for web browsers that do
-not support frames and is ideal for a text-mode VGA terminal. Mozilla is the
-terminal type used for most other web browsers. The perl files within these
-directories provides the user interface of the software.
+In the root of the install directory, one will find a setup.pl program,
+a number of other .pl programs, and a number of directories. The setup.pl
+program is used to update or install Ledger-SMB. The other .pl programs
+provide a basic set of services for the framework (including authentication)
+and then pass the work on to the data entry screen file in the bin
+directory.
+
+The bin directory contains another directory for each terminal type.
+The main two offered are lynx and mozilla. Lynx would be used for
+web browsers that do not support frames and is ideal for a text-mode
+VGA terminal. Mozilla is the terminal type used for most other web
+browsers. The perl files within these directories provides the user
+interface of the software.
-The css directory in the root install directory contains CSS documents to
-provide various stylesheets one can select for changing various aspects of the
-look and feel of the application.
+The css directory in the root install directory contains CSS documents
+to provide various stylesheets one can select for changing various
+aspects of the look and feel of the application.
-The locale directory contains translation files that Ledger-SMB uses to
-translate between different languages. One could add translations to these
-files if necessary.
+The locale directory contains translation files that Ledger-SMB uses
+to translate between different languages. One could add translations
+to these files if necessary.
-The SL directory is where the Perl modules reside that provide the core business
-logic in Ledger-SMB. These modules provide functionality such as form handling,
-email capabilities, and access to the database through its at least partially
-object oriented API.
+The SL directory is where the Perl modules reside that provide the
+core business logic in Ledger-SMB. These modules provide functionality
+such as form handling, email capabilities, and access to the database
+through its at least partially object oriented API.
+
+Finally, the sql directory provides the database schemas and upgrade
+scripts.
-Finally, the sql directory provides the database schemas and upgrade scripts.
\subsection{Data Entry Screens}
One can customize the data entry screens to optimize work flow, display
additional information, etc.
+
\subsubsection{Examples}
-We set up hot keys for payment lines, automatically focused
-the keyboard on the last partnumber field, removed separate print and post
-buttons to ensure that invoices were always printed and posted together, and
-removed the ability to print to the screen, and even the ability to scan items
-in when an invoice was received (using a portable data terminal) and import this
-data into Ledger-SMB. Finally we added the ability to reconcile the till online
-in a paperless manner.
+We set up hot keys for payment lines, automatically focused the keyboard
+on the last partnumber field, removed separate print and post buttons
+to ensure that invoices were always printed and posted together, and
+removed the ability to print to the screen, and even the ability to
+scan items in when an invoice was received (using a portable data
+terminal) and import this data into Ledger-SMB. Finally we added the
+ability to reconcile the till online in a paperless manner.
+
+For another customer, we added the ability to print AR invoices in
+plain text format and added templates (based on the POS sales template)
+to do this.
-For another customer, we added the ability to print AR invoices in plain text
-format and added templates (based on the POS sales template) to do this.
\subsection{Extensions}
-One can add functionality to the Perl modules in the SL directory and often add
-missing functions easily.
+
+One can add functionality to the Perl modules in the SL directory
+and often add missing functions easily.
+
\subsubsection{Examples}
-For one customer, we added a module to take data from a portable data terminal
-collected when inventory items were taken and use that to add shrinkage and loss
-adjustments. We also extended the parts model to add a check id flag (for
-alcohol sales) and added this flag to the user interface.
-For another customer, we added a complex invoice/packing slip tracking system
-that allowed one to track all the printed documents associated with an order or
-invoice.
+For one customer, we added a module to take data from a portable data
+terminal collected when inventory items were taken and use that to
+add shrinkage and loss adjustments. We also extended the parts model
+to add a check id flag (for alcohol sales) and added this flag to
+the user interface.
+
+For another customer, we added a complex invoice/packing slip tracking
+system that allowed one to track all the printed documents associated
+with an order or invoice.
+
\subsection{Templates}
-As noted before templates can be modified or extended, though sometimes this
-involves extending the user interface scripts. Most templates are easy enough
-to modify.
+
+As noted before templates can be modified or extended, though sometimes
+this involves extending the user interface scripts. Most templates
+are easy enough to modify.
+
+
\subsubsection{Examples}
-For one customer we added text-only invoices for AR and AP
-transactions/Invoices and an ability to use Javascript in them to automatically
-print them on load.
+
+For one customer we added text-only invoices for AR and AP transactions/Invoices
+and an ability to use Javascript in them to automatically print them
+on load.
+
\subsection{Reports}
-The fact that all the data is available within the database manager is a huge
-advantage of Ledger-SMB over Quickbooks and the like. The rapid development of
-reports allows for one to easily develop reports of any sort within Ledger-SMB.
+
+The fact that all the data is available within the database manager
+is a huge advantage of Ledger-SMB over Quickbooks and the like. The
+rapid development of reports allows for one to easily develop reports
+of any sort within Ledger-SMB.
+
\subsubsection{Examples}
-For one customer, we developed a report of parts sold and received during
-arbitrary time frames. The report allows one to go back and look up the invoices
-involved.
+
+For one customer, we developed a report of parts sold and received
+during arbitrary time frames. The report allows one to go back and
+look up the invoices involved.
+
\section{Integration Possibilities}
-An open database system and programming API allows for many types of
-integration. There are some challenges, but in the end, one can integrate a
-large number of tools.
+
+An open database system and programming API allows for many types
+of integration. There are some challenges, but in the end, one can
+integrate a large number of tools.
+
\subsection{Reporting Tools}
-Any reporting tool which can access the PostgreSQL database can be used with
-Ledger-SMB for custom reporting. These can include programs like Microsoft
-Access and Excel (using the ODBC drivers), PgAccess (A PostgreSQL front-end
-written in TCL/Tk with a similar feel to Access), Rekall, Crystal Reports,
-OpenOffice and more.
+
+Any reporting tool which can access the PostgreSQL database can be
+used with Ledger-SMB for custom reporting. These can include programs
+like Microsoft Access and Excel (using the ODBC drivers), PgAccess
+(A PostgreSQL front-end written in TCL/Tk with a similar feel to Access),
+Rekall, Crystal Reports, OpenOffice and more.
+
\subsubsection{Examples}
-We have created spreadsheets of the summaries of activity by day and used the
-ODBC driver to import these into Excel. Excel can also read HTML tables, so one
-can use PostgreSQL to create an HTML table of the result and save it with a .xls
-extension so that Windows opens it with Excel. These could then be served via
-the same web server that serves Ledger-SMB.
+
+We have created spreadsheets of the summaries of activity by day and
+used the ODBC driver to import these into Excel. Excel can also read
+HTML tables, so one can use PostgreSQL to create an HTML table of
+the result and save it with a .xls extension so that Windows opens
+it with Excel. These could then be served via the same web server
+that serves Ledger-SMB.
+
\subsection{Line of Business Tools on PostgreSQL}
-Various line of business tools have been written using PostgreSQL in large part
-due to the fact that it is far more mature than MySQL in areas relating to data
-integrity enforcement, transactional processing, and the like. These tools can
-be integrated with Ledger-SMB in various ways. One could integrate this program
-with the HERMES CRM framework, for example.
+
+Various line of business tools have been written using PostgreSQL
+in large part due to the fact that it is far more mature than MySQL
+in areas relating to data integrity enforcement, transactional processing,
+and the like. These tools can be integrated with Ledger-SMB in various
+ways. One could integrate this program with the HERMES CRM framework,
+for example.
+
\subsubsection{Known Issues}
-Ledger-SMB uses a single 'id' sequence across many tables. At the same time it
-is expected that these tables do not have identical id values in their records
-as they are used as a sort of pseudo-foreign key by the acc\_trans table which
-stores the financial transaction information.
-If the integration solution does not keep this in mind, it is possible to create
-a situation where the account transactions are ambiguously associated with a
-number of different types of financial transactions. This would lead to a large
-number of problems.
+Ledger-SMB uses a single 'id' sequence across many tables. At the
+same time it is expected that these tables do not have identical id
+values in their records as they are used as a sort of pseudo-foreign
+key by the acc\_trans table which stores the financial transaction
+information.
+
+If the integration solution does not keep this in mind, it is possible
+to create a situation where the account transactions are ambiguously
+associated with a number of different types of financial transactions.
+This would lead to a large number of problems.
+
\subsubsection{Strategies}
-In general, it is advisable to run all such programs that benefit from
-integration in the same database but under different schemas. This allows
-PostgreSQL to become the main method of synchronizing the data in real time.
-However, sometimes this can require dumping the database recreating the tables
-etc. in a different schema and importing the data back into Ledger-SMB.
-
-One possibility for this sort of integration is to use database triggers to
-replicate the data between the applications in real-time. This can avoid the
-main issue of duplicate id's. One issue that can occur however relates to
-updates. If one updates a customer record in HERMES, for example, how do we
-know which record to update in Ledger-SMB? There are solutions to this problem
-but they do require some forethought.
-
-A second possibility is to use views to allow one application to present the
-data from the other as its own. This can be cleaner regarding update issues,
-but it can also pose issues regarding duplicate id fields.
+
+In general, it is advisable to run all such programs that benefit
+from integration in the same database but under different schemas.
+This allows PostgreSQL to become the main method of synchronizing
+the data in real time. However, sometimes this can require dumping
+the database recreating the tables etc. in a different schema and
+importing the data back into Ledger-SMB.
+
+One possibility for this sort of integration is to use database triggers
+to replicate the data between the applications in real-time. This
+can avoid the main issue of duplicate id's. One issue that can occur
+however relates to updates. If one updates a customer record in HERMES,
+for example, how do we know which record to update in Ledger-SMB?
+There are solutions to this problem but they do require some forethought.
+
+A second possibility is to use views to allow one application to present
+the data from the other as its own. This can be cleaner regarding
+update issues, but it can also pose issues regarding duplicate id
+fields.
+
\subsubsection{Examples}
-Others have integrated L'ane POS and Ledger-SMB in order to make it work better
-with touch screen devices. Still others have successfully integrated Ledger-SMB
-and Interchange. In both cases, I believe that triggers were used to perform
-the actual integration.
+
+Others have integrated L'ane POS and Ledger-SMB in order to make it
+work better with touch screen devices. Still others have successfully
+integrated Ledger-SMB and Interchange. In both cases, I believe that
+triggers were used to perform the actual integration.
+
\subsection{Line of Business Tools on other RDBMS's}
-Often there are requests to integrate Ledger-SMB with applications like
-SugarCRM, OSCommerce, and other applications running on MySQL or other database
-managers. This is a far more complex field and it requires a great deal more
-effort than integrating applications within the same database.
+
+Often there are requests to integrate Ledger-SMB with applications
+like SugarCRM, OSCommerce, and other applications running on MySQL
+or other database managers. This is a far more complex field and it
+requires a great deal more effort than integrating applications within
+the same database.
+
\subsubsection{Strategies}
-Ordinarily real-time integration is not always possible. MySQL does not support
-the SQL extension SQL/MED (Management of External Data) so it is not possible to
-replicate the data in real-time. Therefore one generally resorts to integrating
-the system using time-based updates. Replication may be somewhat error-prone
-unless the database manager supports triggers (first added to MySQL in 5.0) or
-other mechanisms to ensure that
-all changed records can be detected and replicated. In general, it is usually
-advisable to add two fields to the record-- one that shows the insert time and
-one that shows the last update.
-
-Additionally, I would suggest adding additional information to the Ledger-SMB
-tables so that you can track the source record from the other application in the
-case of an update.
-
-In general, one must write replication scripts that dump the information from
-one and add it to the other. This must go both ways.
+
+Ordinarily real-time integration is not always possible. MySQL does
+not support the SQL extension SQL/MED (Management of External Data)
+so it is not possible to replicate the data in real-time. Therefore
+one generally resorts to integrating the system using time-based updates.
+Replication may be somewhat error-prone unless the database manager
+supports triggers (first added to MySQL in 5.0) or other mechanisms
+to ensure that all changed records can be detected and replicated.
+In general, it is usually advisable to add two fields to the record--
+one that shows the insert time and one that shows the last update.
+
+Additionally, I would suggest adding additional information to the
+Ledger-SMB tables so that you can track the source record from the
+other application in the case of an update.
+
+In general, one must write replication scripts that dump the information
+from one and add it to the other. This must go both ways.
+
\subsubsection{Integration Products and Open Source Projects}
-While many people write Perl scripts to accomplish the replication, an open
-source project exists called DBI-Link. This package requires PL/Perl to be
-installed in PostgreSQL, and it allows PostgreSQL to present any data accessible
-via Perl's DBI framework as PostgreSQL tables. DBI-Link can be used to allow
-PostgreSQL to pull the data from MySQL or other database managers.
-DBI-Link can simplify the replication process by reducing the operation to a set
-of SQL queries.
+While many people write Perl scripts to accomplish the replication,
+an open source project exists called DBI-Link. This package requires
+PL/Perl to be installed in PostgreSQL, and it allows PostgreSQL to
+present any data accessible via Perl's DBI framework as PostgreSQL
+tables. DBI-Link can be used to allow PostgreSQL to pull the data
+from MySQL or other database managers.
+
+DBI-Link can simplify the replication process by reducing the operation
+to a set of SQL queries.
+
\section{Customization Guide}
-This section is meant to provide a programmer with an understanding of the
-technologies enough information to get up to speed quickly and minimize the time
-spent familiarizing themselves with the software. Topics in this section are
-listed in order of complexity. As it appeals to a narrower audience than
-previous discussions of this topic, it is listed separately.
+
+This section is meant to provide a programmer with an understanding
+of the technologies enough information to get up to speed quickly
+and minimize the time spent familiarizing themselves with the software.
+Topics in this section are listed in order of complexity. As it appeals
+to a narrower audience than previous discussions of this topic, it
+is listed separately.
+
\subsection{General Information}
-The main framework scripts (the ar.pl, ap.pl, etc. scripts found in the root of
-the installation directory) handle such basic features as instantiating the form
-object, ensuring that the user is logged in, and the like. They then pass the
-execution off to the user interface script (usually in the bin/mozilla
-directory).
-
-Ledger-SMB in many ways may look sort of object oriented in its design, but in
-reality, it is far more data-driven than object oriented. The Form object is
-used largely as a global symbol table and also as a collection of fundamental
-routines for things like database access. It also breaks down the query string
-into sets of variables which are stored in its attribute hash table.
-
-In essence one can and often will store all sorts of data structures in the
-primary Form object. These can include almost anything. It is not uncommon to
-see lists of hashes stored as attributes to a Form object.
+
+The main framework scripts (the ar.pl, ap.pl, etc. scripts found in
+the root of the installation directory) handle such basic features
+as instantiating the form object, ensuring that the user is logged
+in, and the like. They then pass the execution off to the user interface
+script (usually in the bin/mozilla directory).
+
+Ledger-SMB in many ways may look sort of object oriented in its design,
+but in reality, it is far more data-driven than object oriented. The
+Form object is used largely as a global symbol table and also as a
+collection of fundamental routines for things like database access.
+It also breaks down the query string into sets of variables which
+are stored in its attribute hash table.
+
+In essence one can and often will store all sorts of data structures
+in the primary Form object. These can include almost anything. It
+is not uncommon to see lists of hashes stored as attributes to a Form
+object.
+
\subsection{Customizing Templates}
-Templates are used to generate printed checks, invoices, receipts, and more in
-Ledger-SMB. Often the format of these items does not fit a specific set of
-requirements and needs to be changed. This document will not include LaTeX or
-HTML instruction, but will include a general introduction to editing templates.
-Also, this is not intended to function as a complete reference.
-Template instructions are contained in tags \textless\% and \%\textgreater.
+Templates are used to generate printed checks, invoices, receipts,
+and more in Ledger-SMB. Often the format of these items does not fit
+a specific set of requirements and needs to be changed. This document
+will not include \LaTeX{} or HTML instruction, but will include a
+general introduction to editing templates. Also, this is not intended
+to function as a complete reference.
+
+Template instructions are contained in tags \textless\% and \%\textgreater.
The actual parsing is done by the parse\_template function in SL/Form.pm.
-\subsubsection{Page Breaks in \LaTeX}
-The first tag one will see with \LaTeX\ templates is \textless\%pagebreak num1
-num2 num3\%\textgreater
+
+\subsubsection{Page Breaks in \LaTeX{}}
+
+The first tag one will see with \LaTeX{}\ templates is \textless\%pagebreak
+num1 num2 num3\%\textgreater
\begin{itemize}
-\item num1 represents characters per line
-\item num2 represents lines on first page
-\item num3 represents lines on second page.
+\item num1 represents characters per line
+\item num2 represents lines on first page
+\item num3 represents lines on second page.
\end{itemize}
-
-The pagebreak block is terminated by \textless\%end pagebreak\%\textgreater
+The pagebreak block is terminated by \textless\%end pagebreak\%\textgreater
Any text within the pagebreak block is ignored by the template.
+
\subsubsection{Conditionals}
+
\begin{itemize}
-\item \textless\%if not varname\%\textgreater tells the parser to ignore
- include the next block only if varname was posted by the submitting form
- (or set via the form hash elsewhere in the scripts). The block ends with
- \textless\%end varname\%\textgreater
-\item \textless\%if varname\%\textgreater tells the parser to ignore the
- block if varname was not posted in the submitting form (or set via the form
- hash elsewhere in the scripts). The block ends with \textless\%end
- varname\%\textgreater
-\item Lines conditionals are otherwise ignored by the parser.
-\item Conditionals cannot be nested, but IF's can be nested inside loops as of
- 2.6.4
+\item \textless\%if not varname\%\textgreater tells the parser to ignore
+include the next block only if varname was posted by the submitting
+form (or set via the form hash elsewhere in the scripts). The block
+ends with \textless\%end varname\%\textgreater
+\item \textless\%if varname\%\textgreater tells the parser to ignore the
+block if varname was not posted in the submitting form (or set via
+the form hash elsewhere in the scripts). The block ends with \textless\%end
+varname\%\textgreater
+\item Lines conditionals are otherwise ignored by the parser.
+\item Conditionals cannot be nested, but IF's can be nested inside loops
+as of 2.6.4
\end{itemize}
\subsubsection{Loops}
-\textless\%foreach varname\%\textgreater is used to iterate through a list of
-vars set by the user interface system (usually one of the files under
-bin/mozilla (or otherwise). The block is repeated for each varname in a list.
-Block ends with \textless\%end varname\%\textgreater
+
+\textless\%foreach varname\%\textgreater is used to iterate through
+a list of vars set by the user interface system (usually one of the
+files under bin/mozilla (or otherwise). The block is repeated for
+each varname in a list. Block ends with \textless\%end varname\%\textgreater
+
\subsubsection{File Inclusion}
+
\begin{itemize}
-\item Files may be included with the syntax \textless\%include
- template\_name\%\textgreater where templatename is the name of the
- template within the current template directory (usually
- templates/\$username/)
-\item Cannot be used with conditionals
+\item Files may be included with the syntax \textless\%include template\_name\%\textgreater
+where templatename is the name of the template within the current
+template directory (usually templates/\$username/)
+\item Cannot be used with conditionals
\item Filenames cannot use slashes (/) or .. due to directory transversal
- considerations.
-\item Files can force other files to be included, but the same file cannot be
- included more than once.
+considerations.
+\item Files can force other files to be included, but the same file cannot
+be included more than once.
\end{itemize}
-\subsubsection{Cross-referencing and multiple passes of \LaTeX}
-In \LaTeX\ cross-references require two passes with latex to resolve. This is
-because the type is set page by page and the program really doesn't know on
-which page a given reference will fall. This becomes an even larger issue where
-floats are concerned as they can move between pages for formatting reasons.
+\subsubsection{Cross-referencing and multiple passes of \LaTeX{}}
+
+In \LaTeX{}\ cross-references require two passes with latex to resolve.
+This is because the type is set page by page and the program really
+doesn't know on which page a given reference will fall. This becomes
+an even larger issue where floats are concerned as they can move between
+pages for formatting reasons.
+
+In rare cases, cross-references may point at incorrect pages even
+with two passes (if the inclusion of the cross-reference data moves
+the object to another page). In this case you will need to use three
+passes of \LaTeX{}\ in order to have accurate references.
-In rare cases, cross-references may point at incorrect pages even with two
-passes (if the inclusion of the cross-reference data moves the object to another
-page). In this case you will need to use three passes of \LaTeX\ in order to
-have accurate references.
+Ledger-SMB as of the time of this writing (2.6.8) only makes one pass
+at the \LaTeX{}\ file. To force it to make more than one pass, open
+Form.pm with your favorite text editor. Look for the line:
-Ledger-SMB as of the time of this writing (2.6.8) only makes one pass at the
-\LaTeX\ file. To force it to make more than one pass, open Form.pm with your
-favorite text editor. Look for the line:
+system(\char`\"{}latex --interaction=nonstopmode \$self-\textgreater$\lbrace$
+tmpfile$\rbrace$\
+\textgreater\ \$ self-\textgreater$\lbrace$ tmpfile$\rbrace$
+.err\char`\"{});
-system("latex --interaction=nonstopmode
-\$self-\textgreater$\lbrace$ tmpfile$\rbrace$\
-\textgreater\ \$ self-\textgreater$\lbrace$ tmpfile$\rbrace$ .err");
+Duplicate this line for two passes, or add two copies if you need
+three passes.
-Duplicate this line for two passes, or add two copies if you need three passes.
\subsubsection{Variable Substitution}
-The following format is used for variable substitution:
+
+The following format is used for variable substitution:
+
\begin{itemize}
-\item \textless\%varname options\%\textgreater Options are one or more
- (whitespace separated) of:
- \begin{itemize}
- \item align=left/right/center
- \item width=chars where chars is the width in characters before wrapping
- \item offset=chars where chars is the number of spaces to (depending on
-alignment).
- \end{itemize}
+\item \textless\%varname options\%\textgreater Options are one or more
+(whitespace separated) of:
+\begin{itemize}
+\item align=left/right/center
+\item width=chars where chars is the width in characters before wrapping
+\item offset=chars where chars is the number of spaces to (depending on
+alignment).
+\end{itemize}
\end{itemize}
\subsection{Customizing Forms}
-Data entry forms and other user interface pieces are in the bin directory. In
-Ledger-SMB 2.4 and below, most files were symlinked to the equivalent file in
-the bin/mozilla directory. In 2.6 and later, symlinks are not generally used.
-Each module is identified with a two letter combination: ar, ap, cp, etc.
-These combinations are generally explained in the comment headers on each file.
+Data entry forms and other user interface pieces are in the bin directory.
+In Ledger-SMB 1.0.0 and later, symlinks are not generally used.
+
+Each module is identified with a two letter combination: ar, ap, cp,
+etc. These combinations are generally explained in the comment headers
+on each file.
Execution in these files begins with the function designated by the
-form->$\lbrace$action$\rbrace$ variable. This variable is usually derived from
-configuration parameters in the menu.ini or the name of the button that was
-clicked on to submit the previous page. Due to localization requirements, the
-following process is used to determine the appropriate action taken:
+form->$\lbrace$action$\rbrace$ variable. This variable is usually
+derived from configuration parameters in the menu.ini or the name
+of the button that was clicked on to submit the previous page. Due
+to localization requirements, the following process is used to determine
+the appropriate action taken:
+
+The \$locale-\textgreater getsub routine is called. This routine
+checks the locale package to determine if the value needs to be translated
+back into an appropriate SL function. If not, the variable is lower-cased,
+and all spaces are converted into underscores.
-The \$locale-\textgreater getsub routine is called. This routine checks the
-locale package to determine if the value needs to be translated back into an
-appropriate SL function. If not, the variable is lower-cased, and all spaces
-are converted into underscores.
+In general there is no substitute for reading the code to understand
+how this can be customized and how one might go about doing this.
-In general there is no substitute for reading the code to understand how this
-can be customized and how one might go about doing this.
\subsection{Customizing Modules}
-The Perl Modules (.pm files) in the SL directory contain the main business logic
-of the application including all database access. Most of these modules are
-fairly easy to follow, and there is an effort to document all API's at the wiki
-(\url{http://www.metatrontech.com/ledger-smb-wiki?APIReference}).
+The Perl Modules (.pm files) in the LedgerSMB directory contain the
+main business logic of the application including all database access.
+Most of these modules are fairly easy to follow, and there is an effort
+to document all API's at the wiki (\url{http://www.metatrontech.com/ledger-smb-wiki?APIReference}).
-Many of these modules have a fair bit of dormant code in them which was written
-for forthcoming features, such as payroll and bills of materials.
+Many of these modules have a fair bit of dormant code in them which
+was written for forthcoming features, such as payroll and bills of
+materials.
+
+One can add a new module through the normal means and connect it to
+other existing modules.
-One can add a new module through the normal means and connect it to other
-existing modules.
\subsubsection{Database Access}
-The \$form object provides two methods for accessing the database. The
-\$form-\textgreater dbconnect(\%myconfig) method commits each individual
-statement as its own transaction. The \$form-\textgreater
-dbconnect\_noauto(\%myconfig) method requires a manual commit. Both these
-functions are thin wrappers around the standard Perl DBI operations.
+
+The \$form object provides two methods for accessing the database.
+The \$form-\textgreater dbconnect(\%myconfig) method commits each
+individual statement as its own transaction. The \$form-\textgreater
+dbconnect\_noauto(\%myconfig) method requires a manual commit. Both
+these functions are thin wrappers around the standard Perl DBI operations.
+
\subsection{Examples}
+
+
\subsubsection{Adding a New Report for Sales Data}
-One of our customers required a report of inventory activity during an arbitrary
-time period. So we added this customization. This report required merely
-adding a few functions to the rp.pl user interface script (bin/mozilla/rp.pl)
-and slightly altering a few more.
-However, as they eventually wanted to pull up invoices (AP and AR) containing
-those part numbers, we also had to customize the AA.pm module to accept this
-sort of filtering.
-
-The patch is available at
-\url{http://www.metatrontech.com/downloads/sl-inv\_report-2.6.7.diff} and was
-built against Ledger-SMB 2.6.7.
+
+One of our customers required a report of inventory activity during
+an arbitrary time period. So we added this customization. This report
+required merely adding a few functions to the rp.pl user interface
+script (bin/mozilla/rp.pl) and slightly altering a few more. However,
+as they eventually wanted to pull up invoices (AP and AR) containing
+those part numbers, we also had to customize the AA.pm module to accept
+this sort of filtering.
+
+The patch is available at \url{http://www.metatrontech.com/downloads/sl-inv\_report-2.6.7.diff}
+and was not built against Ledger-SMB. It may need to be updated to
+match the present software.
+
\subsubsection{Truncating Number of Invoices on a Check Stub}
-One of our customers required an ability to truncate the list of invoices
-printed on a stub so that an additional report could be printed as an
-attachment. This patch required truncating the list of invoices in the
-bin/mozilla/cp.pl file, and slightly patching the ledger-smb.conf to allow for
-the number of listed invoices to be a runtime parameter. Finally a very small
-modification was made to the template.
+One of our customers required an ability to truncate the list of invoices
+printed on a stub so that an additional report could be printed as
+an attachment. This patch required truncating the list of invoices
+in the bin/mozilla/cp.pl file, and slightly patching the ledger-smb.conf
+to allow for the number of listed invoices to be a runtime parameter.
+Finally a very small modification was made to the template.
+
+The patch is available at \url{http://www.metatrontech.com/downloads/sl-check-max-2.6.7.diff}
-The patch is available at
-\url{http://www.metatrontech.com/downloads/sl-check-max-2.6.7.diff}
\subsubsection{Adding the a Check ID flag for Alcohol Purchases}
-One of our customers is a retail store that sells alcoholic beverages. As the
-law requires them to ask customers purchasing these beverages for ID, they
-needed a reminder set to the screen when an alcoholic beverage was sold.
+One of our customers is a retail store that sells alcoholic beverages.
+As the law requires them to ask customers purchasing these beverages
+for ID, they needed a reminder set to the screen when an alcoholic
+beverage was sold.
-To make this change, we added a field to the parts table of the database, had to
-change a few aspects of the IC.pm to handle inserting and updating this field.
-Then we modified the ps.pl to display a red banner on invoices which had
-alcoholic beverages associated with them.
+To make this change, we added a field to the parts table of the database,
+had to change a few aspects of the IC.pm to handle inserting and updating
+this field. Then we modified the ps.pl to display a red banner on
+invoices which had alcoholic beverages associated with them.
+
+This patch is part of SL-POS which can be downloaded at \url{http://www.metatrontech.com/downloads/SL-POS-0.5.0.tar.gz}
+(note: this patch has not been ported to Ledger-SMB yet).
+
+\clearpage
-This patch is part of SL-POS which can be downloaded at
-\url{http://www.metatrontech.com/downloads/SL-POS-0.5.0.tar.gz} (note: this
-patch has not been ported to Ledger-SMB 2.6.x yet).
-\clearpage
\part{Appendix}
+
\appendix
+%dummy comment inserted by tex2lyx to ensure that this paragraph is not empty
+
+
+
\section{Where to Go for More Information}
-There are a couple of relevant sources of information on Ledger-SMB in
-particular.
+There are a couple of relevant sources of information on Ledger-SMB
+in particular.
\begin{itemize}
-\item The latest version of this document will always be advertised at
-\url{http://www.metatrontech.com/projects/}.
-\item We also maintain a community wiki with more information including
-programming, customization, and links to other sites. The wiki can be found at
-\url{http://www.metatrontech.com/ledger-smb-wiki}
+\item The latest version of this document will always be advertised at \url{http://www.metatrontech.com/projects/}.
+\item We also maintain a community wiki with more information including
+programming, customization, and links to other sites. The wiki can
+be found at \url{http://www.metatrontech.com/ledger-smb-wiki}
\end{itemize}
+In addition, it is generally recommended that the main bookkeeper
+of a company using Ledger-SMB work through at least one accounting
+textbook. Which textbook is not as important as the fact that a textbook
+is used however.
-In addition, it is generally recommended that the main bookkeeper of a company
-using Ledger-SMB work through at least one accounting textbook. Which textbook
-is not as important as the fact that a textbook is used however.
\section{Quick Tips}
+
+
\subsection{Understanding Shipping Addresses and Carriers}
-Each customer can have a default shipping address. This address is displayed
-prominantly in the add new customer screen. To change the shipping address for
-a single order, one can use the ship to button at the bottom of the quote,
-order, or invoice screen.
+Each customer can have a default shipping address. This address is
+displayed prominantly in the add new customer screen. To change the
+shipping address for a single order, one can use the ship to button
+at the bottom of the quote, order, or invoice screen.
+
+The carrier can be noted in the Ship Via field. However, this is a
+freeform field and is largely used as commentary (or instructions
+for the shipping crew).
-The carrier can be noted in the Ship Via field. However, this is a freeform
-field and is largely used as commentary (or instructions for the shipping crew).
\subsection{Handling bad debts}
-In the event that a customer's check bounces or a collection requirement is
-made, one can flag the customer's account by setting the credit limit to a
-negative number.
-If a debt needs to be written off, one can either use the allowance method (by
-writing it against the contra asset account of "Allowance for Bad Debts" or
-using the direct writeoff method where it is posted as an expense.
+In the event that a customer's check bounces or a collection requirement
+is made, one can flag the customer's account by setting the credit
+limit to a negative number.
+
+If a debt needs to be written off, one can either use the allowance
+method (by writing it against the contra asset account of \char`\"{}Allowance
+for Bad Debts\char`\"{} or using the direct writeoff method where
+it is posted as an expense.
+
\section{Step by Steps for Vertical Markets}
+
+
\subsection{Common Installation Errors}
+
\begin{itemize}
-\item Ledger-SMB is generally best installed in its own directory outside of the
-wwwroot directory. While it is possible to install it inside the wwwroot
-directory, the instructions and the faq don't cover the common problems here.
-\item When the chart of accounts (COA) is altered such that it is no longer set
-up with appropriate items, you can make it impossible to define goods and
-services properly. In general, until you are familiar with the software, it is
-best to rename and add accounts rather than deleting them.
+\item Ledger-SMB is generally best installed in its own directory outside
+of the wwwroot directory. While it is possible to install it inside
+the wwwroot directory, the instructions and the faq don't cover the
+common problems here.
+\item When the chart of accounts (COA) is altered such that it is no longer
+set up with appropriate items, you can make it impossible to define
+goods and services properly. In general, until you are familiar with
+the software, it is best to rename and add accounts rather than deleting
+them.
\end{itemize}
+
\subsection{Retail With Light Manufacturing}
-For purposes of this example we will use a business that assembles computers and
-sells them on a retail store.
+
+For purposes of this example we will use a business that assembles
+computers and sells them on a retail store.
+
\begin{enumerate}
-\item Install Ledger-SMB
-\item Set preferences, and customize chart of accounts
- \begin{enumerate}
- \item Before customizing the COA it is often worth consulting an accountant.
- \end{enumerate}
-\item Define Goods, Labor, and Services as raw parts ordered from the vendors.
- \begin{itemize}
- \item These are located under the goods and services menu node.
- \end{itemize}
-\item Define assemblies
- \begin{itemize}
- \item These are also located under goods and services.
- \item Component goods and services must be defined prior to creating assembly
- \end{itemize}
-\item Enter an AP Invoice to populate inventory with proper raw materials.
- \begin{itemize}
- \item One must generally add a generic vendor first. The vendor is added
- under AP-\textgreater Vendors-\textgreater Add Vendor.
- \end{itemize}
-\item To pay an AP invoice like a check, go to cash->payment. Fill out
- approrpiate fields and click print.
- \begin{itemize}
- \item Note that one should select an invoice and enter in the payment amount
- in the appropriate line of the invoice list. If you add amounts to the
- master amount list, you will find that they are added to the amount paid
- on the invoice as a prepayment.
- \item The source field is the check number.
- \end{itemize}
-\item Stock assemblies
-\item One can use AR Invoices or the POS interface to sell goods and services.
- \begin{itemize}
- \item Sales Invoice
- \begin{itemize}
- \item Can be generated from orders or quotations
- \item Cannot include labor/overhead except as part of an assembly
- \item One can make the mistake of printing the invoice and forgetting to
- post it. In this event, the invoice does not officially exist in the
- accounting system.
- \item For new customers, you must add the customer first (under
- AR-\textgreater Customers-\textgreater Add Customer.
- \end{itemize}
- \item POS Interface
- \begin{itemize}
- \item Cannot include labor/overhead except as part of an assembly
- \item Printing without posting is often even easier in the POS because of
- the rapid workflow. Yet it is just as severe a problem.
- \end{itemize}
- \item Ecommerce and Mail Order Operations
- \begin{itemize}
- \item See the shipping workflow documentation above.
- \end{itemize}
- \item Customers are set up by going to AR-\textgreater Customers-\textgreater
- Add Customer (or the
- equivalent localized translation). The appropriate fields are filled
- out and the buttons are used at the bottom to save the record and
- optionally use it to create an invoice, etc.
- \begin{itemize}
- \item Saving a customer returns to the customer screen. After the
- appropriate invoice, transaction, etc. is entered and posted, Ledger-SMB
- will return to the add customer screen.
- \end{itemize}
- \end{itemize}
-\item One can use the requirements report to help determine what parts need to
-be ordered though one cannot generate PO's directly from this report. Note that
-prior to 2.6.8 sales orders for assemblies are not properly tracked regarding.
+\item Install Ledger-SMB
+\item Set preferences, and customize chart of accounts
+
+\begin{enumerate}
+\item Before customizing the COA it is often worth consulting an accountant.
\end{enumerate}
+\item Define Goods, Labor, and Services as raw parts ordered from the vendors.
-Note, the needs of Ledger-SMB are mostly useful for light manufacturing
-operations (assembling computers, for example). More manufacturing capabilities
-are expected to be released in the next version.
+\begin{itemize}
+\item These are located under the goods and services menu node.
+\end{itemize}
+\item Define assemblies
-A custom assembly is a bit difficult to make. One must add the assembly prior
-to invoice (this is not true of goods and services). If the assembly is based
-on a different assembly but may cost more (due to non-standard parts) you can
-load the old assembly using Goods and Services-\textgreater Reports-\textgreater
-Assemblies and then make necessary changes (including to the SKU/Partnumber) and
-save it as new.
+\begin{itemize}
+\item These are also located under goods and services.
+\item Component goods and services must be defined prior to creating assembly
+\end{itemize}
+\item Enter an AP Invoice to populate inventory with proper raw materials.
+
+\begin{itemize}
+\item One must generally add a generic vendor first. The vendor is added
+under AP-\textgreater Vendors-\textgreater Add Vendor.
+\end{itemize}
+\item To pay an AP invoice like a check, go to cash->payment. Fill out approrpiate
+fields and click print.
+
+\begin{itemize}
+\item Note that one should select an invoice and enter in the payment amount
+in the appropriate line of the invoice list. If you add amounts to
+the master amount list, you will find that they are added to the amount
+paid on the invoice as a prepayment.
+\item The source field is the check number.
+\end{itemize}
+\item Stock assemblies
+\item One can use AR Invoices or the POS interface to sell goods and services.
+
+\begin{itemize}
+\item Sales Invoice
+
+\begin{itemize}
+\item Can be generated from orders or quotations
+\item Cannot include labor/overhead except as part of an assembly
+\item One can make the mistake of printing the invoice and forgetting to
+post it. In this event, the invoice does not officially exist in the
+accounting system.
+\item For new customers, you must add the customer first (under AR-\textgreater
+Customers-\textgreater Add Customer.
+\end{itemize}
+\item POS Interface
+
+\begin{itemize}
+\item Cannot include labor/overhead except as part of an assembly
+\item Printing without posting is often even easier in the POS because of
+the rapid workflow. Yet it is just as severe a problem.
+\end{itemize}
+\item Ecommerce and Mail Order Operations
+
+\begin{itemize}
+\item See the shipping workflow documentation above.
+\end{itemize}
+\item Customers are set up by going to AR-\textgreater Customers-\textgreater
+Add Customer (or the equivalent localized translation). The appropriate
+fields are filled out and the buttons are used at the bottom to save
+the record and optionally use it to create an invoice, etc.
+
+\begin{itemize}
+\item Saving a customer returns to the customer screen. After the appropriate
+invoice, transaction, etc. is entered and posted, Ledger-SMB will
+return to the add customer screen.
+\end{itemize}
+\end{itemize}
+\item One can use the requirements report to help determine what parts need
+to be ordered though one cannot generate PO's directly from this report.
+Note that prior to 2.6.8 sales orders for assemblies are not properly
+tracked regarding.
+\end{enumerate}
+Note, the needs of Ledger-SMB are mostly useful for light manufacturing
+operations (assembling computers, for example). More manufacturing
+capabilities are expected to be released in the next version.
+
+A custom assembly is a bit difficult to make. One must add the assembly
+prior to invoice (this is not true of goods and services). If the
+assembly is based on a different assembly but may cost more (due to
+non-standard parts) you can load the old assembly using Goods and
+Services-\textgreater Reports-\textgreater Assemblies and then make
+necessary changes (including to the SKU/Partnumber) and save it as
+new.
Then one can add it to the invoice.
+
\section{Glossary}
+
+\begin{description}
+\item [{BIC}] Bank Identifier Code is often the same as the S.W.I.F.T.
+code. This is a code for the bank a customer uses for automated money
+transfers.
+\item [{COGS}] is Cost of Goods Sold. When an item is sold, then the expense
+of its purchase is accrued as attached to the income of the sale.
+It is tracked as COGS.
+\item [{Credit}] : A logical transactional unit in double entry accounting.
+It is the opposite of a debit. Credits affect different account types
+as follows:
+
\begin{description}
-\item[BIC] Bank Identifier Code is often the same as the S.W.I.F.T. code. This
-is a code for the bank a customer uses for automated money transfers.
-\item[COGS] is Cost of Goods Sold. When an item is sold, then the expense of
-its purchase is accrued as attached to the income of the sale. It is tracked as
-COGS.
-\item[Credit]: A logical transactional unit in double entry accounting. It is
-the opposite of a debit. Credits affect different account types as
-follows:
- \begin{description}
- \item[Equity]: Credits are added to the account when money is invested in the
- business.
- \item[Asset]: Credits are added when money is deducted from an asset account.
- \item[Liability]: Credits are added when money is owed to the business
- account.
- \item[Income]: Credits are added when income is earned.
- \item[Expense]: Credits are used to apply adjustments at the end of accounting
- periods to indicate that not all the expense for an AP transaction has
- been fully accrued.
- \end{description}
-\item[Debit]: A logical transactional unit in double entry accounting systems.
-It is the opposite of a credit. Debits affect different account types as
-follows:
- \begin{description}
- \item[Equity]: Debits are added when money is paid to business owners.
- \item[Asset]: Debits are added when money is added to an account.
- \item[Liability]: Debits are added when money that is owed is paid off.
- \item[Income]: Debits are used to temporarily adjust income to defer unearned
- income to the next accounting period.
- \item[Expense]: Debits are added as expenses are incurred.
- \end{description}
-\item[IBAN] International Bank Account Number is related to the BIC and is used
-for cross-border automated money transfers.
-\item[List Price] is the recommended retail price.
-\item[Markup] is the percentage increase that is applied to the last cost to get the sell price.
-\item[ROP] Re-order point. Items with fewer in stock than this will show up on
-short reports.
-\item[Sell Price] is the price at which the item is sold.
-\item[Source Document]: a paper document that can be used as evidence that a
-transaction occurred. Source documents can include canceled checks, receipts,
-credit card statements and the like.
-\item[Terms] is the number of days one has to pay the invoice. Most businesses
-abbreviate the terms as Net n where n is the number of days. For example, Net 30
-means the customer has 30 days to pay the net due on an invoice before it is
-late and incurs late fees.
+\item [{Equity}] : Credits are added to the account when money is invested
+in the business.
+\item [{Asset}] : Credits are added when money is deducted from an asset
+account.
+\item [{Liability}] : Credits are added when money is owed to the business
+account.
+\item [{Income}] : Credits are added when income is earned.
+\item [{Expense}] : Credits are used to apply adjustments at the end of
+accounting periods to indicate that not all the expense for an AP
+transaction has been fully accrued.
\end{description}
+\item [{Debit}] : A logical transactional unit in double entry accounting
+systems. It is the opposite of a credit. Debits affect different account
+types as follows:
-\input{fdl.tex}
+\begin{description}
+\item [{Equity}] : Debits are added when money is paid to business owners.
+\item [{Asset}] : Debits are added when money is added to an account.
+\item [{Liability}] : Debits are added when money that is owed is paid
+off.
+\item [{Income}] : Debits are used to temporarily adjust income to defer
+unearned income to the next accounting period.
+\item [{Expense}] : Debits are added as expenses are incurred.
+\end{description}
+\item [{IBAN}] International Bank Account Number is related to the BIC
+and is used for cross-border automated money transfers.
+\item [{List}] Price is the recommended retail price.
+\item [{Markup}] is the percentage increase that is applied to the last
+cost to get the sell price.
+\item [{ROP}] Re-order point. Items with fewer in stock than this will
+show up on short reports.
+\item [{Sell}] Price is the price at which the item is sold.
+\item [{Source}] Document : a paper document that can be used as evidence
+that a transaction occurred. Source documents can include canceled
+checks, receipts, credit card statements and the like.
+\item [{Terms}] is the number of days one has to pay the invoice. Most
+businesses abbreviate the terms as Net n where n is the number of
+days. For example, Net 30 means the customer has 30 days to pay the
+net due on an invoice before it is late and incurs late fees.
+\end{description}
+\input{fdl.tex}
\end{document}
-