Reprpl V 3.0
The Comet Reporter string replacement pre-processor
REPRPL makes it
easy for an operator to enter values into an existing Reporter specification.
With Version 2 a programmer can insert values dynamically. Version 2 adds a new
kind of replacement variable, the # variable. The definition line for the #
variable names an ENTER program and the ENTER program returns the value that is
then inserted into the Reporter specification.
Version
3.0 of REPRPL fixes the program to use text files as the Reporter
Specification input file. IMPORTANT – this version handles ONLY text files
(with a file extension of IBR); it does NOT handle specification files in the
CED format. There is no other difference between Version 2.0 and Version 3.0
and you cannot mix input file formats.
The # variable was added with the thought that it could be
used to identify files whose name is a concatenation of the actual file names
and a company code prefix. In an Internet Basic program, these files are Opened
with code like:
FLNM$ = ZZCO$ + “C1A” & Open (1) FLNM$
but clearly it could be used for
other purposes as well. For example an entire date selection string could be
developed in an ENTER program and inserted into a report specification.
The Comet Reporter is a great tool for ad hoc reports. Show me all the invoices for customers AA0100, AA0200 and AA0300 that were posted in January 2001. It's easy to write the report:
INPUT RECEIVABLES (MAR1)
TITLE RECEIVABLES FOR CUSTOMERS AA0100 TO AA0200
TITLE WITH INVOICES DATES BETWEEN 01/01/01 TO 01/31/01
PRINTER LP1
KEYRANGE "AA0100" TO "AA0300"
REPORT
DEFINE STINV.DATE.SEQ = DATE2NUM("01/01/04",0);6.0
DEFINE ENINV.DATE.SEQ = DATE2NUM("01/31/04",0);6.0
SELECTING IF AR.DATE.SEQ GE STINV.DATE.SEQ AND
AR.DATE.SEQ LE ENINV.DATE.SEQ
USING R1.TO.C1A (MAC1A)
PRINT YADA, YADA, YADA
The Reporter is fine if you're a geeky nerd, but it is problematic when you need to re-use a report again and again selecting different customers, different time periods and, perhaps, printing to a different printer. REPRPL was written to address this limitation. Here's the same report revised so that REPRPL can do its string replacement thing:
%0 This string will appear on line 0 of the prompt entry screen
%1 03 Printer name [LP2]
%2 06 Starting customer number
%3 06 Ending customer number
%4 08 Starting invoice date [01/01/04]
%5 08 Ending invoice date
%# ENTER GETZZCO
INPUT RECEIVABLES (%#R1)
TITLE RECEIVABLES FOR CUSTOMERS %2 TO %3
TITLE WITH INVOICES DATES BETWEEN %4 TO %5
PRINTER %1
KEYRANGE "%2" TO "%3"
REPORT
DEFINE STINV.DATE.SEQ = DATE2NUM("%4",0);6.0
DEFINE ENINV.DATE.SEQ = DATE2NUM("%5",0);6.0
SELECTING IF AR.DATE.SEQ GE STINV.DATE.SEQ AND
AR.DATE.SEQ LE ENINV.DATE.SEQ
USING R1.TO.C1A (%#C1A)
PRINT YADA, YADA, YADA
You run REPRPL and pass it the name of the report specification file in common. REPRPL prompts the operator for the values to be inserted into the report specs using the prompt strings you provide in the token replacement definition lines that precede the report specs. It copies the specification to a temporary file, inserts the operator's responses as specified, and passes the updated temporary spec file onto the Reporter.
The format of the replacement string lines are:
· a % in column 1,
· a number from 1 to 9 in column 2 (in proper numeric sequence),
· a space,
· two bytes defining the size of the replacement string,
· a space,
· a free form prompt string of up to 40 bytes in length
· an optional default value which must be enclosed in square brackets, [01/01/00]
Version 2 now includes the %#
specification line. The only value in the %# line is the name of an ENTER
program. That custom program returns a value in the system buffer and REPRPL
inserts that string into the Reporter specification.
Comments, Remarks, Suggestions
Two points: REPRPL recognizes %0 to %9 and %# only, and if you need a percent sign followed by a number as a literal in your report specification, this program will not perform properly.
There is provision for only
one %# replacement string and I could see no value in coding for a default value
in the %# line.
The length of the string
replacement variable is currently 20 bytes.
REPRPL does not “know” if the
variable in question is a date so there is no date validation in REPRPL. The
source is included for anyone who wants to add that function.