Note: this is an advanced topic designed for programmers.

Reporting4Act! knows all about your Act! database because it has a data dictionary. A data dictionary defines the fields and tables in a database, providing features such as descriptive names so you don't have to know the real names, how tables are connected, or joined, together, and calculated values such as extended price that aren't normally stored in the database.

However, you may need to customize the Reporting4Act! data dictionary to report on other databases you have linked to your Act! database. There are two ways you can do this: with scripting or using the Reporting4Act! Software Development Kit (SDK).


You can use a "script" file to programmatically customize Reporting4Act!. After Reporting4Act! sets up its data environment (which it does only one time after a particular database has been chosen), it looks for a file named SETUP.SQS and executes the code in that file if it exists.

To create a script file, create a text file called SETUP.SQS, either in the directory where Reporting4Act!'s data files are stored or in the Reporting4Act! program directory. Edit this file using any text editor (not a word processor, such as Microsoft Word, which stores binary files, but an editor such as Notepad that stores text files).

Although script code can be used for anything, the most common use is to change information in the Reporting4Act! data dictionary.

Here's an example that makes the Contact ID field in the Contact table non-reportable, so it will no longer appear in the list of fields you can select.

Field = SQApplication.DataEngine.Fields.Item('CONTACT.CONTACTID')
store .F. to Field.Reportable

In previous versions of Reporting4Act!, scripting was used to create your own calculated fields. However, that's no longer necessary because you can use the Formula Editor to do that.

Here are the properties of field objects:

NameData TypeDescription
AllowValues BooleanTrue if the Values button in Reporting4Act! is enabled for this field.
CalculatedBooleanTrue if this is a calculated field. If the SQExpression property of a calculated field is False, set this property to False as well.
CaptionCharacterThe caption for the field.
CommentCharacterThe comment for the field.
DecimalsNumericThe number of places after the decimal.
ExpressionCharacterThe expression to determine the value of this field if it's a calculated field.
FieldListCharacterA comma-delimited list of aliased field names used to calculate the value of this field if it's a calculated field. Leave this property blank if SQExpression is False.
FieldNameCharacterThe aliased name of the field. You don't have to fill in this property because that's done automatically when you add the field to the collection.
FilterableBooleanTrue if the user can filter on this field.
FormatCharacterThis indicates how the value of the field is formatted. Enter one of the following characters:
  • $: displays the currency symbol specified in the Windows Regional Options Control panel.
  • ^: displays numeric data using scientific notation.
  • L: displays leading zeros instead of spaces.
  • R: indicates the Picture property may contain characters not found in the data value. For example, to display "12345" as "12-345," use "R" for Format and "99-999" for Picture.
  • Z: displays the value as blank if it is 0 (for numeric fields) or empty (for Date or DateTime fields).
  • !: converts alphabetic characters to uppercase.
  • D: displays the date and time of a DateTime field (although this can be turned off in the Field Properties dialog in Reporting4Act!). If this isn't specified, Reporting4Act! displays only the date portion of a DateTime field by default.
  • J: use right alignment for a field that's normally left-aligned.
  • I: use center alignment.
HeadingCharacterThe default column heading for this field in a report.
LengthNumericThe width of the field.
OutputLengthNumericThe output width of the field. You don't have to fill in this property unless it's different than Length.
OutputTypeCharacterThe output data type of the field; see "Type" below for a list of valid data types. You don't have to fill in this property unless it's different than Type. Note setting this doesn't mean Reporting4Act! converts the values in the data to the specified type; you are simply informing Reporting4Act! what the data type of Expression is.
PictureCharacterThis property indicates how each character in the field's value is displayed. For each position in the value, enter one of the following characters:
  • !: converts lowercase letters to uppercase letters.
  • #: displays digits, blanks, and numeric signs (such as a minus sign).
  • $: displays the currency symbol specified in the Windows Regional Options Control panel in a fixed position.
  • $$: displays the currency symbol specified in the Windows Regional Options Control panel in a floating position (adjacent to the digits).
  • ,: displays the digit grouping symbol specified in the Windows Regional Options Control panel.
  • .: displays the decimal separator symbol specified in the Windows Regional Options Control panel.
  • 9: digits and numeric signs.
  • A: alphabetic characters only.
  • N: letters and digits only.
  • X: any character can be displayed.

For example, "9,999,999.99" indicates that values are formatted with thousands separators (such as commas) up to seven places before the decimal and have two decimal places.

ReportableBooleanTrue if the user can report on this field.
RolesCharacterA comma-delimited list of roles that can access the field (blank means everyone can access it).
SortableBooleanTrue if the user can sort on this field.
SQExpressionBooleanTrue if this calculated field uses a Reporting4Act! expression; False if the expression is sent as is to the database engine.
TypeCharacterA single character representing the data type of the field:
  • W: Blob
  • C: Character
  • Y: Currency
  • D: Date
  • T: DateTime
  • B: Double
  • G: General
  • I: Integer
  • L: Logical
  • M: Memo
  • N: Numeric
  • V: Varchar
  • Q: Varbinary

Reporting4Act! SDK

It's much easier to customize the Reporting4Act! data dictionary using the Reporting4Act! SDK than it is via scripting. For one thing, you don't have to know how to write code. Also, if a lot of customization is required (for example, there are several new tables with many fields in each one), you'd have to write a lot of code if you used a script. Also, if the structures of the tables change, you'd have to change the code.

The Reporting4Act! SDK provides Reporting4Act! Studio, the same tool Stonefield Software used to create the Reporting4Act! data dictionary in the first place. Using this tool, you can easily add new tables or fields to the data dictionary, customize existing fields any way you need, and define new calculated fields. For more information about the Reporting4Act! SDK, please visit For information on how to use Reporting4Act! Studio, please see the Reporting4Act! SDK documentation.

The Reporting4Act! data dictionary is in a table called REPMETA.DBF. When you add tables or fields using the Reporting4Act! SDK, you'll be adding them to a different table. The reason for a separate data dictionary table is to protect your changes when a new version of Reporting4Act! is released. Since that new version's REPMETA table would overwrite yours, your customization would be lost. So, using a different table for your custom changes means that your work won't be lost when you install a new version.

By default, the name of the custom table is CUSTOMMETA.DBF. However, if you want to change that name, edit SFQuery.INI in the Reporting4Act! program directory and change the name specified in the "file2" line in the [Meta Data] section. If you wish to create your own custom scripts, add a new line with "file2" as the key in the Scripting section. Here's an example:

[Meta Data]


Don't change any of the other lines in SFQuery.INI or Reporting4Act! may not work properly!

If you are working with Reporting4Act! Studio in one folder but using Reporting4Act! in a different folder (for example, you are customizing the data dictionary for someone else, such as a client), you will need to copy SFQuery.INI and your custom table (for example, CustomMeta.DBF, CustomMeta.CDX, and CustomMeta.FPT) to the Reporting4Act! program folder. Also, if you created any custom scripts, copy the custom script table (CustomScript.DBF, CustomScript.CDX, and CustomScript.FPT) as well.

Note: There are no Configuration and Scripts panels in Studio because the Reporting4Act! configuration information is built-in and can't be changed.

©, 1996-2021 • Updated: 02/09/21
Comment or report problem with topic