When you click Print button in the invoice list, you see composed template. In most cases, it contains a header, followed by invoice rows, followed by summaries and additional information. Information about selected invoices (or one invoice) is read from database and passed to template generation system, which processes this data and displays in the form, which is ready to be printed or saved into file. To correctly display this data, a specific template structure is required. This structure is created on the designer surface. Elements of the template structure are called bands. These bands are displayed in a certain order and necessary amount of times.
Using the Field list panel, as it was written in the previous article, you get access to template source data. Each source represents one table from the database. Amount of rows in that table depends on the quantity of selected invoices to be printed. User table (or Settings) always contains only one row.
Invoice structure usually contains one header, multiple rows, summary, optional information about taxes, optional notes, and a footer. Depending on the order and optionally displayed information, you select structure of the template.
For example, invoice header usually contains user's and customer's data, invoice number and date, logo, etc. In invoice rows you list works being charged, etc.
In BaccS report designer you will find the following types of bands:
Displayed only once in the whole report. Even if you print multiple invoices at once, this band will be displayed only once.
Displayed once per group. By default, template do not contain groups, which means that this kind of band is equal to a report header and displayed only once too. Usually it is used in custom reports, and does not have sense in invoice templates.
Displayed once per data row. If you print multiple invoices, it will be printed once per each invoice. Thus, this is ideal band type to display invoice header.
Group footer, report footer
The same meaning as group header and report header, but printed at the end of the report
Very interesting type of band. It may contain some logically separated kind of information. You can apply special rules to display or hide this band. for example, invoice may contain tax or may not contain tax. You can put tax amounts into sub-band and print it depending of the tax selection.
Another example: if tax in invoice is not selected, than you may have a special sub-band where a text explaining absence of taxes will be displayed.
Used when you need to display internal table (multiple rows). For example, after invoice header, which is printed once, a number of rows are printed. To correctly display them, you have to add Detail report after header.
As you see, some kind of bands are displayed only once, while others are intended to display arrays of information. Take a look at the default invoice template. You will find that it begins with Detail band, where we put such details as invoice number, term, customer data, information about issuer. This band will be printed once per each printed invoice. Open helper menu and check Page break property:
This property signals to insert page break before each invoice header, except the first one. Thus, each invoices will be printed from the first page.
Second band is InvoiceRows (detail report). If to open helper menu for this band, you will see that its data member is set to Invoice details. This internal report will be printed as many times as a number of rows in the invoice. Since detail report structure can be the same as the structure of main report, it also may contain header, footer, nested detail reports and sub-bands. Thus, InvoiceRows section contains InvoiceRowband, which lists all tasks of the job linked with an invoice row.
InvoiceRows band has group footer used to display a line separating jobs between each other (all tasks of one job are followed by a line, and then all tasks of a next job are printed).
InvoiceRows detail report has a footer with total amount and notes. This footer is split to a number of sub-bands. This is done to be able to conditionally hide these sub-bands. For example, when Tax2 is not selected in an invoice, corresponding sub-band won't be printed. To achieve this, Formatting rules feature is used.
After InvoiceRows detail report, another detail report is placed - Payment methods. It will display accepted payment methods. In the header of this nested report we've put description text, which will be hidden if no any accepted payment methods were selected in a printed invoice. Again, this is achieved with the help of Formatting rules.
Detail report linked with accepted payment methods also demonstrates interesting property: it will be printed not only in the down direction, but in the right too. This is specified via helper menu, using Multi-column mode and Column count properties. This feature allows to save some paper space and print 2 (in this example) payment methods in 1 row.
The last band in the template is a report footer - it simply displays subscription text.
Here is an image demonstrating a structure of default invoice template:
Does it all sound too complex? Maybe, a bit. Different people has absolutely different requirements to invoice templates. This leads to a increased complexity at start. Bands, especially detail reports, may force you to think that it is way to difficult to create own template. Don't think that. Instead, try to play a bit with the designer, analyze field list, understand referenced properties and tables. Invoice in the field list is a table, which requires detail report. This detail report is the whole template itself. If you need to print table property from the field list (Invoice details, Payment methods), than you must create detail report. Additional complexity is added due to two detail reports linked with Invoice details (one for rows with empty job, another for rows with selected job). This is done because BaccS allows to create invoices in two ways - with linking with jobs and without linking. When invoice row is linked with the job, we use one way of printing (displaying information from the list of task of the selected job). When job is not selected, we use another way of printing (simply displaying price, quantity and amount from the invoice row).
Don't be scared of this. And feel free to ask questions on forums.