peter@aucs.UUCP (Peter Steele) (04/20/88)
Thanks to all those who replied to my posting concerning the best way to print in dBase, particularly when preparing custom reports. It comes down to that if you want to use both ? and @say to output data in a custom report and suppress output on the screen at the same time, you have to follow the following outline: set console off set print on set device to print --now make your report using ?, ??, and @say's as required, as well as any command that uses the "to print" option such as report form <whatever> to print set device to screen set print off set console on It seems to be a rather clumbsy approach but it is how you have to do it. I'm including one quite detailed reply that some of you might find useful. I tried sending info to those who requested it, but is some cases the mailer kicked it back. So I hope those I couldn't get via e-mail will see this posting. -- Peter Steele, Microcomputer Applications Analyst Acadia University, Wolfville, NS, Canada B0P1X0 (902)542-2201x121 UUCP: {uunet|watmath|utai|garfield}dalcs!aucs!Peter BITNET: Peter@Acadia Internet: Peter%Acadia.BITNET@CUNYVM.CUNY.EDU ------------------------- Reply-To: cline%pnet01@trout.nosc.mil Message-Id: <8804132036.AA16314@crash.cts.com> Date: Wed, 13 Apr 88 13:32:23 PDT From: cline@pnet01.cts.com (Ben Humphreys) To: aucs!peter Subject: Re: What is the best way to "print" in dBase? Status: R If you wish to print your report to the printer but not to the screen, issue the following commands: SET CONSOLE OFF SET PRINT ON REPORT FORM <form> SET PRINT OFF SET CONSOLE ON Personally, I have abstained from the SET DEVICE TO CONSOLE/PRINT command. It is a bit redicilous to issue @ SAY commands and expect them to work with the printer. As it is the nature of the printer to advance only forward, one misplaced @ SAY makes a big mess. While I do not use dBASE any more, I do still use Clipper a lot (a dBASE compiler). What I've done to take care of the problems with printing is this. I wrote three functions (you'd want to write PROCEDUREs in dBASE). They are: FUNCTION PrintStart(output, rep_title) FUNCTION PrintLine(line) FUNCTION PrintStop(output) PrintStart initializes the page counter and line counter to 1 and 0 respectivly. It prepars for output using the value of the output variable: * Constants within the program, C style PRINTER = 1 SCREEN = 2 ALTFILE = 3 If output = PRINTER: SET CONSOLE OFF SET PRINT ON STORE .F. TO pause STORE .T. TO page_nos End If output = SCREEN SET CONSOLE ON SET COLOR TO ... STORE .T. TO pause STORE .F. TO page_nos End If output = ALTFILE SET CONSOLE OFF SET ALTERNATE TO <altfile> SET ALTERNATE ON STORE .F. TO pause STORE .F. TO page_nos End Print rep_title and other info (time/date/user) in nice format with Print() Print a line of = characters This being done, all output destined for the report is sent to the Print function just as it would be sent with ?. The main difference between using Print() and ? is you must + all arguements rather than separating them with a ,. This also means you must convert all values to strings before concatinating them with +. When Print() receives a line to print, it takes the following actions: Prints the line with ? Increments the line counter If pause = .T. and the line counter is at 23 Wait Restore the line counter back to 0 End If page_nos = .T. and line counter is at 57 Print 2 blank lines, then a page number Eject the printer Restore the line counter back to 0 Increment the page counter End When all output is done, a call to PrintStop closes things down: If pause = .T. Wait End If output = PRINT Move to bottom of page Print final page number Eject the printer SET PRINT OFF SET CONSOLE ON End If output = ALTFILE SET CONSOLE ON SET ALTERNATE OFF SET ALTERNATE TO Endif The above pseudo-code was not meant in any way to be complete. It is rather an outline to the way I wrote my functions. REPORT FORMS, LABELS, ETC ------------------------- I don't use these commands because of the relative inflexability they pose. I write all reports manually (this takes longer but overall, the quality is much better). With my three print functions, Let me know if this has helped. UUCP: {cbosgd, hplabs!hp-sdd, sdcsvax, nosc}!crash!pnet01!cline ARPA: crash!pnet01!cline@nosc.mil INET: cline@pnet01.CTS.COM -- Peter Steele, Microcomputer Applications Analyst Acadia University, Wolfville, NS, Canada B0P1X0 (902)542-2201x121 UUCP: {uunet|watmath|utai|garfield}dalcs!aucs!Peter BITNET: Peter@Acadia Internet: Peter%Acadia.BITNET@CUNYVM.CUNY.EDU