home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / rptform.zip / REPORT1 next >
Text File  |  1987-02-01  |  9KB  |  232 lines

  1.                  REPORT FORM - THE dBASE REPORT GENERATOR
  2.                  ========================================
  3.  
  4.                                 Part One
  5.  
  6.  
  7.  
  8.  
  9. Many people are not aware of how useful the report generator built into
  10. dBASE can be because REPORT FORM is arguably the most "under documented"
  11. feature of dBASE.  You would be surprised what can be done with REPORT FORM
  12. - once you know the tricks.  It's really a shame that this valuable feature
  13. is not better documented.  I've even met professionals who were manually
  14. coding reports because they were not aware of all of REPORT FORM's capa-
  15. bilities.
  16.  
  17. Although the screens presented when creating a report are very different in
  18. dBASE III and dBASE III PLUS, the report generator actually works in very
  19. much the same way in each version of dBASE.  .FRM files created in dBASE
  20. III can be used in III PLUS with little or no problem although some
  21. features such as word wrapping within columns work slightly differently.  
  22. For those of you using FoxBASE+, you will find the dBASE III PLUS and
  23. FoxBASE+ report generators work the same, except FoxBASE+ leaves out the
  24. bugs and quirks.  Clipper users can import REPORT FORM files (.FRM) created
  25. in dBASE into Clipper with no problems.
  26.  
  27. In dBASE III PLUS, when creating a report which has complex or long
  28. statements for the contents of a column I usually return to dBASE III and
  29. use that version of REPORT FORM to begin defining the report, then move the
  30. .FRM file over to dBASE III PLUS for completion.  This is because I find
  31. the scrolling display of the column contents in dBASE III PLUS makes it
  32. very difficult to keep track of what I have already entered and almost
  33. impossible to debug.  (FoxBASE+ takes the more sensible approach of
  34. providing an on-screen box which shows the entire statement, similar to
  35. dBASE III.)
  36.  
  37. In dBASE III PLUS the advanced features such as IIF() and TRANSFORM() can
  38. be used within the report generator and, as discussed later, better
  39. controls for printing memo fields are available.
  40.  
  41. I've found an irritating quirk which appears with attempts to erase items
  42. in the column contents of REPORT FORM in dBASE III PLUS with the backspace
  43. key.  Using the backspace key should erase the character immediately
  44. preceding the cursor.  However, when attempting to erase multiple charac-
  45. ters behind the cursor with the backspace key held down continually, the
  46. cursor will sometimes simply move to the left and not erase the characters. 
  47. It is necessary to then use the delete key to erase material which is now
  48. at and to the right of the cursor.  This happens in both versions 1.0 and
  49. 1.1 of dBASE III PLUS.
  50.  
  51. The column contents block will take statements of up to 254 characters
  52. (including blank spaces).  It is not necessary to use blank spaces to
  53. separate concatenations with the + sign, by the way.  Both of the following
  54. statements will work equally well in REPORT FORM:
  55.  
  56.  
  57.         TRIM(FNAME) + " " + LNAME + ";" + DEPT
  58.                           
  59.                          or
  60.  
  61.         TRIM(FNAME)+" "+LNAME+";"+DEPT
  62.  
  63.  
  64.  
  65.  
  66.  
  67. There are several other problems which occur with REPORT FORM in dBASE III
  68. PLUS which are not present in dBASE III.  If you move the highlight or
  69. light bar to the "Column" item at the top of the REPORT FORM menu (which
  70. also automatically highlights the "Contents" item in the box underneath)
  71. and inadvertently press RETURN [ENTER] twice, an empty column is created in
  72. the report form in III PLUS.  
  73.  
  74. At this point in time, dBASE III PLUS does not trap this as an error but,
  75. instead, places a question mark in the box which provides an outline of the
  76. columns in the report.  (According to the Ashton-Tate manual, the ?
  77. represents a memo field.)
  78.  
  79.  
  80. When you attempt to display or print the report the error message:
  81.  
  82.         Syntax error in field expression
  83.  
  84.  
  85. shows up.  Trying to figure out what is going on without a little extra
  86. help can cause hair to go gray overnight.  Unhappily, this problem was not
  87. cleared up in release 1.1 of dBASE III PLUS.
  88.  
  89.  
  90.  
  91.  
  92. MULTIPLE DATA LINES
  93. ===================
  94.  
  95. The most frequent question I receive about REPORT FORM is how to obtain
  96. multiple data lines in a column.  This can be done by using the semi-colon 
  97. ";" (with the quotes).
  98.  
  99. The following statement:
  100.  
  101.    TRIM(FNAME) + " " + LNAME + ";" + STREET + ";" + 
  102.       TRIM(CITY) + " " + STATE + " " + ZIP
  103.  
  104.  
  105. would print the individual's name and address on separate lines:
  106.  
  107.         Mary Smith
  108.         201 Main Street
  109.         Metropolis, NY  10021
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123. INSERTING A NEW COLUMN
  124. ======================
  125.  
  126. In dBASE III the Ashton-Tate manual did not document the fact that REPORT
  127. FORM has the ability to insert a new column during the CREATE REPORT or
  128. MODIFY REPORT routines.  CONTROL/N will insert a new column.  (The CONTROL-
  129. /U command to delete a column is documented and appears in the menu.)  This
  130. feature is, of course, also available in dBASE III PLUS and is better
  131. documented.
  132.  
  133.  
  134.  
  135.  
  136. DISAPPEARING LINES OF DATA
  137. ==========================
  138.  
  139. It is very common to find the last line(s) of a report not being printed -
  140. and then sometimes mysteriously appearing when another report is printed. 
  141. To cure the problem in dBASE III issue an EJECT after the REPORT FORM
  142. command.  In dBASE III PLUS setting the "Page eject after printing" option
  143. to Yes will accomplish the same thing.
  144.  
  145. The problem occurs because someone at Ashton-Tate decided dBASE printing
  146. should use a "reverse Polish" methodology.   Most printers have buffers
  147. which store the text prior to printing.  (The size of the buffer varies
  148. with the printer.)  Most of these printer buffers flush text to the printer
  149. after receiving a control code such as a carriage return or line feed, or
  150. sensing they are full.  
  151.  
  152. dBASE works the other way around and sends its carriage return/line feed
  153. control code at the beginning of each new line rather than at the end. 
  154. Therefore, a line of data could remain in your printer buffer.  The EJECT
  155. command provides the control code which will flush any remaining data from
  156. the printer buffer for printing (prior to the page eject).
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165. DEFINING THE CONTENTS OF A COLUMN
  166. =================================
  167.  
  168. dBASE will not permit direct mixing of data types in the REPORT FORM column
  169. or field contents.  Dates and numeric data must be converted to character
  170. strings to be used with one another or with character type data.  Memo
  171. fields must be placed in their own separate column.
  172.  
  173. Memory variables may be used in the field contents.  However, the memory
  174. variable must be created before CREATing the REPORT FORM or MODIFYing the
  175. REPORT FORM.  Otherwise, error messages on the field contents will result
  176. and dBASE will not let you proceed.
  177.  
  178. Assume you have a database with a field called ADATE which contains data on
  179. the day a patient was admitted to the hospital.  You now want to know how
  180. many days have elapsed since the admission (i.e., how many days each
  181. patient has been hospitalized).  First, create a memvar which contains
  182. today's date:
  183.  
  184.         DDAY = DATE()
  185.  
  186. Now you can CREATE REPORT or MODIFY REPORT and use the memory variable in
  187. the report.
  188.  
  189. The heading for the column or field contents in the REPORT FORM would be
  190. DAYS HOSPITALIZED and the statement in the Field Contents block of the
  191. REPORT FORM would be:
  192.  
  193.         DDAY - ADAY
  194.  
  195. dBASE would subtract the admission date from today's date and provide an
  196. integer representing the number of days.
  197.         
  198. The column or field contents can be the result of various mathematical or
  199. date calculations rather than data currently contained in fields of the
  200. database.
  201.  
  202. For example, assume you have a personnel database which provides informa-
  203. tion on date of hire (DHIRE), the current annualized salary (CSALARY) for
  204. each employee and their salary at date of hire (HSALARY).  A report is now
  205. required on the dollar amount of salary increase from date of hire, the
  206. percentage of the increase; and the number of years employed.  To simplify
  207. matters, assume each item will be a separate column or field in the REPORT
  208. FORM.  A memory variable called DDAY has been created for today's date.
  209.  
  210. To obtain the dollar amount of the salary increase the statement in the
  211. field contents would be:
  212.  
  213.         CSALARY - HSALARY
  214.  
  215.  
  216.  
  217.  
  218. Field contents to obtain the percentage of salary increase would be:
  219.  
  220.         STR((((CSALARY-HSALARY)/HSALARY)*100),3) + " %"
  221.  
  222. Notice that it is possible to do mathematical calculations within the
  223. nesting or parentheses and then convert the result to a character string
  224. with STR() so it can be used with other character type data.
  225.  
  226. The statement in the field contents to obtain the number of years employed
  227. would be:
  228.  
  229.         YEAR(DDAY,4) - YEAR(HDAY,4)
  230.  
  231.  
  232. We'll look at more ways to use REPORT FORM next month.