DOCUMENT #771
===========================================================================
PRINTING FROM AN EEP
===========================================================================
PRODUCT: R:BASE VERSION: 4.5+ or Higher
===========================================================================
CATALOG: Forms, Reports & Labels AREA : Forms
===========================================================================
Printing the data just entered is another action that has been made easier
to do with 4.5 Plus!. You can automatically print as soon as a row is
saved, you can prompt the user, you can add a print "button" to your form.
All are easily done. Here we show the techniques used to do this. They can
be easily adapted and added to your applications.
Automatic printing
This is the easiest. To print every row as it is entered, place the EEP at
the table level After saving row. The row is saved and then the report
printed. Your EEP only requires commands to set the output and to print
the report. You must have a form expression, however, that places the rows
identifying number into a variable, vtransid = transid. That lets you print
just that row. For example,
*( PRINT.EEP)
OUTPUT PRINTER
PRINT invoice WHERE transid = .vtransid
OUTPUT SCREEN
RETURN
You can add error checking code, code to let the user select the output
device, etc.
Automatic printing from a region
In a form with a region as the last table, however, you can't place the EEP
After saving row. In a region, each row is saved as you leave it and move
to the next row. The printing EEP needs to execute only after all the rows
have been added to the region. Place the EEP On exit from a row and check
for keystrokes. The EEP prints the report if the user presses Alt-A to go
to the menu.
*(PRINT.EEP)
IF (LASTKEY(0)) = '[Alt]A' THEN
SAVEROW
OUTPUT PRINTER
PRINT invoice WHERE transid = .vtransid
OUTPUT SCREEN
ENDIF
RETURN
The EEP only command, SAVEROW, is needed here because the EEP executes
before the last row has been saved to the table. The EEP is On exit from a
row and executes before the menu selection is executed.
Conditional printing
The previous two techniques automatically print the report. There is no
user interaction or intervention. The report prints based on certain
actions taken in the form. You can make the EEP more generic by adding a
simple dialog box. This gives you more options as to placement of the EEP
and when it executes. Prompt to print the report if the user goes to any
menu option. The EEP stays placed On exit from a row.
*(PRINT.EEP)
IF (LASTKEY(0)) IN ('[Alt]A', '[Alt]G', '[Esc]') THEN
DIALOG 'Print invoice? ' vresp, vkey YES
IF vresp = 'YES' THEN
SAVEROW
OUTPUT PRINTER
PRINT invoice WHERE transid = .vtransid
OUTPUT SCREEN
ENDIF
ENDIF
RETURN
Remember, the EEP code is executing before the menu action takes place.
Using a print "button"
The above techniques are designed for adding new data to a form. When
editing data, you may want to add a print "button" to your form. A print
"button" is a located variable that prints a report when the user moves
to that field. It uses a field level EEP rather than a table level EEP.
This technique can also be used on an entry form with the SAVEROW command.
Use the new mouse position functions to print if the user moves to the
field with keys or with the mouse.
To add a print "button" to a form whose last table is a region, you use a
dummy table. This lets you locate a variable field, your print "button",
after the region. The variable has an EEP On exit from field that prints
the report. The dummy table is added as the last table in your form. It
doesn't need any fields in common with other tables in the form. Load the
dummy table with one row of data.
CREATE TABLE dummy_tab (dummy_col INTEGER)
LOAD dummy_tab
L> 1
L> end
With the dummy table the current table in the form, locate a TEXT variable,
vyesno, one character wide. Add text such as, Print report?, to the left of
the variable location. Customize the field settings to make the variable
editable, add an EEP On exit from field.
Next, add expressions to your form. You must have a form expression that
places the row's identifying number into a variable, vtransid = transid.
In addition, add an expression to the dummy table to put a default value
into the print "button" variable, vyesno TEXT = 'Y'.
The EEP checks the value of the vyesno variable. If 'Y', the default, it
prints the report.
*(PRINT.EEP)
SET MESS OFF
SET ERR MESS OFF
IF .vyesno <> 'Y' AND .vyesno <> 'N' THEN
SKIP 0
RETURN
ELSE
IF .vyesno = 'Y' THEN
OUTPUT Printer
PRINT invoice WHERE transid = .vtransid
OUTPUT SCREEN
ENDIF
ENDIF
RETURN
The EEP has error checking to ensure that only a 'Y' or an 'N' is allowed
to be input into the variable. If any other character is entered, the SKIP
0 command prevents the cursor from advancing out of the field.
Read the articles on windowed forms, conditional EEPs and action EEPs for
more ideas on adding a custom print "button" to your form.