Overview

TECH TIP: Performing Calculations

Calculations can be done either on the data access side or within ReportBuilder.

When designing reports there are always decisions to be made as to how much processing to do on the data side versus the report side. Usually doing more on one side can greatly simplify the other. So it is often a personal choice based on the power and flexibility of the data and report tools being used.

DataAccess
    1. Use SQL – using SQL you can perform many common calculations:

Example:

  1. Delphi TDataSets enable you to create a calculated TField object
    and use the DataSet.OnCalcFields event
  2. Perform any amount of data processing, summarizing, massaging
    etc. to build a result set (query or temp table) to feed to the report.

ReportBuilder

Calculations in ReportBuilder are performed primarily using the TppVariable component.

  1. Set the Variable.DataType
  2. Code the calculations using the Variable.OnCalc event.
  3. Use the Timing dialog to control the timing of the OnCalc event.  To access the Timing dialog, right click over the Variable component and select the Timing… option from the speed menu.
  4. Set the LookAhead property to True, when you need to display summary calculations in the title, header, group header, etc.
  5. To perform calculations based on the results of other calculations use the Calc Order dialog of the band. To access the Calc Order dialog, right click over the Band component and select the Calc Order… option from the speed menu.

By using TppVariable components ReportBuilder will take care of caching intermediate results of accumlated calcs that cross pages.

There are a number of calculation examples in the main demos.dpr project.

Additional Notes:

  1. Do NOT use Band.BeforePrint or Band.AfterPrint. These events fire multiple times and therefore should not be used for calculations.
  2. Do NOT store results in variables that exist outside of the reports. For example – form level variables.