home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / rptform.zip / REPORT3 < prev    next >
Text File  |  1987-04-06  |  11KB  |  240 lines

  1.                  REPORT FORM - THE dBASE REPORT GENERATOR
  2.  
  3.                                 Part Three
  4.  
  5.  
  6.  
  7. In past months the various features of the dBASE report generator we've
  8. covered included how to obtain multiple data lines, definition of column
  9. contents and column headings, use of the SPACE() function, totaling and
  10. subtotaling (as well as how to obtain optional headings for the totals and
  11. subtotals), and optional page headings.  This month we'll take a look at
  12. using memo fields with REPORT FORM, displaying report data on screen, and
  13. how to do some fancy report printing with REPORT FORM.
  14.  
  15.  
  16.  
  17. USING MEMO FIELDS WITH REPORT FORM
  18. ==================================
  19.  
  20. If you are still using dBASE III printing memo fields with REPORT FORM is
  21. something of a hopeless task.  In dBASE III REPORT FORM provides no way to
  22. control for page breaks with the memo field and the line counter for REPORT
  23. FORM does not respond if the data from the memo field takes up more than
  24. one line.  The line counter built into the report generator thinks only one
  25. line has been used.
  26.  
  27. Other than placing each record on a separate page or using some other
  28. similar methodology, you are sure to end up with a report that has page
  29. breaks at the wrong places if there is any significant amount of data in
  30. the memo fields.  Therefore, it is recommended that REPORT FORM not be used
  31. to print memo fields in dBASE III.
  32.  
  33. Happily enough, dBASE III PLUS provides better control of memo fields in
  34. REPORT FORM (and elsewhere) so it is usually possible to include memo
  35. fields in a REPORT FORM with few or no problems.
  36.  
  37. Because dBASE III and dBASE III PLUS will not permit mixing of data types
  38. in a single column, it is necessary to place the memo field used in REPORT
  39. FORM in its own separate column.  
  40.  
  41. Remember that dBASE III PLUS provides the ability to SET MEMOWIDTH TO n. In
  42. addition to specifying the width of the column for the memo field when
  43. creating the report in REPORT FORM, the SET MEMOWIDTH statement should be
  44. used in conjunction with the command to print or display the report:
  45.  
  46.         SET MEMOWIDTH TO 40
  47.         REPORT FORM xxxxxx TO PRINT
  48.  
  49.  
  50. dBASE III PLUS will break or wrap the information in the memo field based
  51. on the spaces between words, hard page returns, etc.  And REPORT FORM's
  52. line counter keeps track of the number of lines used.  It's really as easy
  53. as that.
  54.  
  55. However, things can get pretty mixed up if MEMOWIDTH is set to a small
  56. number - such as 10 - and the information in the memo field has words 20
  57. characters long.  So try to choose a reasonable width for the memo field. 
  58. I usually try to set up a report so the column width of a memo field is 40
  59. or more spaces.
  60.  
  61.  
  62.  
  63.  
  64. DISPLAYING A REPORT ON SCREEN
  65. =============================
  66.  
  67. Once you have created your report displaying it on screen is a fairly
  68. straightforward matter in dBASE and in FoxBASE.  You simply USE the
  69. database and index and issue the report form command:
  70.  
  71.         USE TEST INDEX TNAME
  72.         REPORT FORM xxxxx
  73.  
  74.  
  75. and the report scrolls by on the screen.  Most of my clients want to be
  76. able to pause the report periodically when it is displayed on screen but
  77. dBASE and FoxBASE+ provide no specific utility for this.  The CONTROL/S key
  78. combination must be used to pause the scrolling.  The CONTROL/Q key
  79. combination is used to restart the display.
  80.  
  81. Theoretically it is possible to reassign these activities to Function keys
  82. such as F3, F8, etc. to make life easier for you or your users.  Unfor-
  83. tunately, in all versions of dBASE III, dBASE III PLUS and in FoxBASE+ this
  84. doesn't work, so you are stuck with using CONTROL/S and CONTROL/Q. 
  85.  
  86. Ironically, FoxBASE+ is so fast even long reports from REPORT FORM scroll
  87. by on screen too quickly to pause them effectively!  (I never thought I
  88. would be complaining about speed.)
  89.  
  90. Another request I receive frequently once clients have seen a report
  91. displayed on screen is the ability to pause the report and then page or
  92. scroll backwards.  Alas, dBASE and FoxBASE+ can not handle this directly. 
  93. However, there are several nice public domain and shareware utilities
  94. around that can do the trick.
  95.  
  96. If you do download files from an RBBS and use them please keep the share-
  97. ware ethic going by sending in your money.  The authors usually ask from $5
  98. to $20 and it's little enough to pay for some great stuff.  If we don't
  99. encourage people writing these shareware utilities - for dBASE and other-
  100. wise - we will all be the losers in the end since the well will go dry.
  101.  
  102. On many RBBS you will find the shareware PAGES.ARC file by Andrew Schulman,
  103. or you can order it from him directly ($15) by writing to:
  104.  
  105.         Andrew Schulman
  106.         12 Humboldt Street
  107.         Cambridge, MA  02140
  108.  
  109.  
  110. This system, in effect, replaces REPORT FORM by letting you display any
  111. ASCII text file or a file created from your database by using the commands:
  112.  
  113.         USE <database> INDEX <whatever>
  114.         COPY TO xxxxx.SDF FOR xxxxx
  115.  
  116. The information can then be displayed on any part of the screen - or on the
  117. entire screen - and you can page back and forth, jump from the beginning to
  118. the end, to any page number, or search for a specific word or string of
  119. words in the text.  It's all written in the dBASE language - and works well
  120. in FoxBASE+ also.  Although the defaults are black and white it can easily
  121. be changed to the colors of your choice by inserting the appropriate line
  122. of code at the beginning of the program.
  123.  
  124. Another very nice such utility is SCROLL by Russell Freeland.  Russell
  125. takes a different approach to the same situation by creating CALLable and
  126. LOADable .BIN files that do window scrolling or full page scrolling.  Data
  127. fields can be used or text files.  And, of course, you can page back as
  128. well as forward.  The scroll window can be set up at any point of your
  129. choosing on screen.  The SCROLL system can be found on many RBBS as
  130. SCROLL.ARC and is also available for $7.50 directly from the author:
  131.  
  132.         R. Russell Freeland
  133.         Synergy Corp.
  134.         1780 SW 43 Avenue
  135.         Ft. Lauderdale, FL 33317
  136.  
  137. Russell can also be reached on CompuServe at 76146,371.
  138.  
  139. Of course, the ideal situation would be to print a REPORT FORM to disk as
  140. an ASCII text file.  Then it could be used easily in the above utilities,
  141. used as a .TXT file in dBASE and FoxBASE, or saved for printing hard copy
  142. at a later date.  Some of my clients, for instance, want to print out
  143. reports overnight and stacking the ASCII text files in a print spooler is a
  144. good way to handle this.  Alas, dBASE III can not handle this directly. 
  145. FoxBASE, on the other hand, does have this capability.
  146.  
  147. Again, shareware utilities and Russell Freeland come to the rescue.  A file
  148. usually called PRFILE.ARC can be found on many RBBS.  This consists of a
  149. CALLable and LOADable .BIN file and a documentation file that will let you
  150. print a REPORT FORM, LIST, etc. to an ASCII text file.  Or the system can
  151. be obtained for $10.00 from the author, Russell Freeland, at the above
  152. address.
  153.  
  154.  
  155.  
  156.  
  157. PRINTING REPORTS WITH REPORT FORM
  158. =================================
  159.  
  160. Printing plain vanilla reports in hard copy with dBASE or FoxBASE is a
  161. fairly straightforward matter once you have created the .FRM file.  The
  162. command REPORT FORM xxxxx TO PRINT does the trick.  And there are various
  163. options available with this command.
  164.  
  165. When command REPORT FORM xxxxx TO PRINT is used in both dBASE III and dBASE
  166. III PLUS the printer will first do a page eject before beginning printing.
  167. This can be suppressed by including the NOEJECT option in your command
  168. line:
  169.  
  170.         USE <database> INDEX <whatever>
  171.         REPORT FORM xxxxxx NOEJECT TO PRINT
  172.  
  173.  
  174. The NOEJECT statement does create a potential problem, however.  dBASE has
  175. a built in line counter for use with REPORT FORM that is an entirely
  176. separate matter from the line counter in your printer.  Normally when you
  177. issue the REPORT FORM xxxxx TO PRINT command dBASE will automatically reset
  178. its line counter to zero when it finishes printing the report.  But using
  179. the NOEJECT option disables this reset feature.
  180.  
  181. If you use the command REPORT FORM xxxxxx NOEJECT TO PRINT the dBASE line
  182. counter does NOT reset itself to zero when it finishes printing the report. 
  183. Therefore, the first page of the next printed report, LIST TO PRINT, etc.
  184. may produce page breaks (form feeds) in the wrong place and print data
  185. across the perforation lines of the tractor feed continuous paper.
  186.  
  187. The work-around for this problem is to issue an EJECT statement after the
  188. report has finished printing:
  189.  
  190.         USE <database> INDEX <whatever>
  191.         REPORT FORM xxxxxx NOEJECT TO PRINT
  192.         EJECT
  193.  
  194. dBASE III PLUS also provides another option that will solve the problem. 
  195. When creating your REPORT FORM in dBASE III PLUS you can change the "Page
  196. eject after printing" option that appears on the first screen to Yes.  This
  197. has the same effect as issuing an EJECT after the REPORT FORM xxxxx NOEJECT
  198. TO PRINT command line.  This feature is also available in the FoxBASE+
  199. CREATE REPORT utility, but not in dBASE III.
  200.  
  201. The question of page breaks in printed reports is further complicated by
  202. the line counter in your printer - which may not always agree with the line
  203. counter in dBASE or FoxBASE.
  204.  
  205. The line counter in the printer can also be skewed when users use the
  206. platen knobs to manually adjust or move paper in the printer.  For example,
  207. if the printer line counter is at line one and someone manually advances
  208. the paper instead of using the line feed button or the form feed button on
  209. the printer, the paper is no longer at line one but the printer THINKS the
  210. paper is still in that position.
  211.  
  212. If a report ends up printing across the perforations and/or producing a
  213. page break in the middle of a page users are normally convinced there is
  214. something wrong with the customized program written for them or with dBASE
  215. or FoxBASE itself.  The fact that this happens intermittently only exacer-
  216. bates their frustration.
  217.  
  218. To ensure proper positioning of paper in the printer and proper co-ordina-
  219. tion of line counters and page ejects in dBASE and the printer when writing
  220. custom systems I often use the approach of issuing an EJECT statement prior
  221. to printing a report.   A screen then requests the user to check to make
  222. sure the paper is positioned properly in the printer.  If not, the user can
  223. make manual adjustments to the paper that do not effect the dBASE line
  224. counter nor the printer's line counter.  All reports are then printed with
  225. the NOEJECT option and an EJECT statement is issued at the end of the
  226. report.  This also has the effect of ensuring all data is flushed from the
  227. printer and printed in the report.  While this may not sound like par-
  228. ticularly elegant programming, it is extremely effective.
  229.  
  230. Next time we'll take a look at some ways to create printed reports that use
  231. your printer's abilities to change font styles, use bold or emphasized
  232. print, underlining, and other features.
  233.  
  234. All of this is further complicated by the fact that your printer has its
  235. own line counter which is completely independent of the dBASE line counter
  236. and may not always agree with the dBASE line counter.
  237.  
  238.   
  239.  
  240.