6 Example Report Programs
The breaks are set on product and region. Products must have a lower break level than region since product has less frequent breaks. These breaks are shown in lines 1430 and 1440. The file which has the data must be sorted first by product then by region. This is done in line 1240.
The report description section sets up the headers, trailers, and totals. The header (B in the listing and report) for the product looks up the product description and prints the product number and description every time the product changes. The trailer (C) is the total number of orders, the total amount and the average price.
The header for the region (D) lists the region every time the product or region changes. The trailer (E) is the total number of orders (the number of detail lines printed) and the total dollar amount sold.
The report header (F) is the name of the report which is printed on top of the first page. The report trailer (G) lists the grand totals: the number of orders (the number of detail lines), the amount and the average price printed on the last report page.
To have a total printed in the trailer, the TOTALS ON (or GRAND TOTALS ON) statement must be used in the header. Line 1710, the report trailer, is directly connected to line 1350, the report header.
The detail line, line 1900, prints the order number, customer, city, date, and price.
The page header (H) gives the date and report name then the column headings on every page. The page trailer gives the page.
The page length, margin, level and page suppression is set up in I of the listing. These values are passed to the subprogram through the COM statements.
1010 ! RP301 - Report Writer demo - produces bicycle by region rpt 1030 COM Base$[8],Pselect,Pass$[8],Buff$[200],Lst$[2], Clr$[41],Dat$[8] 1040 COM INTEGER Cur_seg,Menu_no,Curovly$[16] 1050 ! 1060 COM I$[160],INTEGER S(0:9),Restart,Spool,Code,Msg$[80], K$(1:8) 1070 ! 1080 COM #1,Sort(1:4),Options,Level,Left,Value 1090 ! 1100 DIM Name$[30] 1110 INTEGER Order_date,Product 1120 ! 1130 ! 1140 ON ERROR GOTO R98_error 1150 LOAD SUB "RWUTIL";7,9 ! Rwhalt,Error,FNCrt 1160 ON HALT CALL Rwhalt 1170 ! 1180 CURSOR (1,19) 1190 LDISP "One moment while data is being sorted." 1200 IN DATA SET "CUSTOMER" USE SKP 1,Name$,SKP 1,City$, SKP 3,Order_date,SKP 1,Region$,Product 1210 IN DATA SET "OPTION" USE Order$,Option$,Option_price 1220 ASSIGN "WORKF" TO #1 1230 WORKFILE IS #1;THREAD IS "CUSTOMER","ORDER","OPTION" 1240 SORT BY Product,Region$,Order$,Option$ 1250 ! 1260 PRINTER IS Pselect 1270 IF NOT Spool THEN R05 1280 PRINTER IS "SPOOL" 1290 CURSOR (1,15) 1300 LDISP " "; 1310 CURSOR (25,10) 1320 LDISP "*** REPORT IS BEING SPOOLED ***" 1330 ! 1340 R05: REPORT HEADER 1350 GRAND TOTALS ON Option_price 1360 PRINT SPA(27),"Eloquence REPORT WRITER DEMO" 1370 ! 1380 PAGE LENGTH 66-45*(Pselect=8),2*(Pselect%<>8), 1+3*(Pselect%<>8) 1390 LEFT MARGIN Left 1400 SUPPRESS PRINT AT Level 1410 SUPPRESS PRINT FOR Restart PAGES 1420 ! 1430 BREAK 3 WHEN Product CHANGES 1440 BREAK 6 WHEN Region$ CHANGES 1450 ! 1460 PAGE HEADER WITH 5 LINES USING Ph1;Dat$ 1470 PRINT USING Ph2 1480 PRINT USING Ph3 1490 PRINT USING Ph4 1500 ! 1510 PAGE TRAILER WITH 2 LINES USING Pt1;Last$,VAL$ (NUMPAGE) 1520 IF (Pselect=8) AND NOT Spool THEN ON FNCrt(Last_ flag,NUMPAGE,Restart,5) GOTO R20,R90_exit 1530 IF NOT Spool THEN R20 1540 CURSOR (34,11) 1550 DISP "CURRENT PAGE ";VAL$(NUMPAGE) 1560 ! 1570 ! 1580 HEADER 3 WITH 7 LINES 1590 TOTALS ON Option_price 1600 DBGET (Base$,"PRODUCT",7,S(*),Lst$,Buff*,Product) 1610 IF S(0) THEN R95_dberror 1620 PRINT USING Hd3;Product,Buff$[3;30] 1630 ! 1640 HEADER 6 WITH 4 LINES USING Hd6;Region$ 1650 TOTALS ON Option_price 1660 ! 1670 TRAILER 3 WITH 5 LINES USING Tr3;OLDCV(3),NUMDETAIL (3),TOTAL(3,1),AVG(3,1) 1680 ! 1690 TRAILER 6 WITH 4 LINES USING Tr6;OLDCV$(6),NUMDETAIL (6),TOTAL(6,1) 1700 ! 1710 REPORT TRAILER WITH 5 LINES USING Rt1;NUMDETAIL(0). TOTAL(0,1),AVG(0,1) 1720 Last$="LAST" 1730 Last_flag=1 1740 ! 1750 R20: END REPORT DESCRIPTION 1760 ! 1770 ON KEY #8:"EXIT" GOTO R90_exit 1780 ON KEY #16 GOTO R90_exit 1790 IF NOT Spool AND (Pselect=8) THEN DISP " "; 1800 ! 1810 BEGIN REPORT R05 1820 FOR I=1 TO WFLEN(1) 1830 READ #1,I;Cnptr,Orptr,Opptr 1840 IF Cnptr=Lcnptr THEN R40 1850 Lcnptr=Cnptr 1860 DBGET (Base$,"CUSTOMER",4,S(*),Lst$,Buff$,Cnptr) 1870 IF S(0) THEN R95_dberror 1880 DBGET (Base$,"OPTION",4,S(*),Lst$,Buff$,Opptr) 1890 IF S(0) THEN R95_dberror 1900 DETAIL LINE 1 USING Dl1;Order$,Name$,City$,Val$ (Order_date MOD 100)&"/"&VAL$(INT(Order_date/100)),Option_price 1910 R40: NEXT I 1920 IF NUMDETAIL (0) THEN END REPORT 1930 ! 1940 R90_exit:! 1950 ASSIGN * TO #1 1960 STOP REPORT 1970 LOAD "RM00" 1980 ! 1990 R95_dberror:! 2000 LOAD "SALES",Dberror 2010 ! 2020 R98_error:! 2030 OFF ERROR 2040 OFF KEY # 2050 CALLRwerror (ERRM$,Base$,S(*)) 2060 PAUSE 2070 STOP 2080 ! 2090 ! ***** PRINT USING IMAGE STATEMENTS ***** 2100 ! 2110 Ph1: IMAGE "DATE: ",21A,"BICYCLES BY REGION REPORT",/ 2120 ! 2130 Ph2: IMAGE 6X,"ORDER",51X,"ORDER" 2140 ! 2150 Ph3: IMAGE 6X,"NUMBER",11X,"CUSTOMER",19X,"CITY",8X, "DATE",7X,"PRICE" 2160 ! 2170 Ph4: IMAGE 4X,"=========",X,"========================== ===",2X,"================",X,"=====",2X,"==========",/ 2180 ! 2190 Pt1: IMAGE /,65X,5A,"PAGE ",3A 2200 ! 2210 Hd3: IMAGE /,"FOR PRODUCT: ",K," - ",K,/ 2220 ! 2230 Hd6: IMAGE " FOR REGION: ",K,/ 2240 ! 2250 Tr3: IMAGE /,19X,"**** TOTAL ORDERS FOR ",4D,28X,DDDDD,/, 19X,"**** TOTAL AMOUNT",31X,DDDDCDDD.DD,/,19X,"**** AVERAG PRICE",30X,DDDDCDDD.DD,/ 2260 ! 2270 Tr6: IMAGE /,19X,"*** TOTAL ORDERS FOR REGION: ",25A, DDDDD,/,19X,"*** TOTAL REGION AMOUNT",25X,DDDDCDDD.DD,/ 2280 ! 2290 Rt1: IMAGE 2/,19X,"***** GRAND TOTALS OF ORDERS",25X, 7D,/,19X,"***** GRAND AMOUNT",30X,DDDDCDDD.DD,/,19X,"***** GRAND AVERAGE PRICE",23X,DDDDCDDD.DD 2300 ! 2310 D11: IMAGE 4X,11A,31A,17A,6A,DDCDDD.DD DATE: 07/10/91 DEMONSTRATION BICYCLE COMPANY BICYCLES BY REGION REPORT ORDER ORDER NUMBER CUSTOMER CITY DATE PRICE ======= ===================== ============== ===== ====== FOR PRODUCT: 100 - Standard Bicycle FOR REGION: MSR 101 Noname, Joseph Loveland 5/91 75.00 *** TOTAL ORDERS FOR REGION: MSR 1 *** TOTAL REGION AMOUNT 75.00 FOR REGION: SA 103 Hernandes, Jose Mexico City 6/91 75.00 108 Arauja, Luciano A. Rio de Janeiro 8/91 75.00 *** TOTAL ORDERS FOR REGION: SA 2 *** TOTAL REGION AMOUNT 150.00 **** TOTAL ORDERS FOR 100 3 **** TOTAL AMOUNT 225.00 **** AVERAGE PRICE 75.00 FOR PRODUCT: 300 - 3-Speed Bicycle FOR REGION: FE 104 Houseman, Sean Sidney 6/91 110.00 *** TOTAL ORDERS FOR REGION: FE 1 *** TOTAL REGION AMOUNT 110.00 **** TOTAL ORDERS FOR 300 1 **** TOTAL AMOUNT 110.00 **** AVERAGE PRICE 110.00 FOR PRODUCT: 500 - 5-Speed Bicycle FOR REGION: AFR 105 Sono, Jomo A. Addis Ababa 5/91 125.00 *** TOTAL ORDERS FOR REGION: AFR 1 *** TOTAL REGION AMOUNT 125.00 PAGE 1 DATE: 07/10/91 BICYCLES BY REGION REPORT ORDER ORDER NUMBER CUSTOMER CITY DATE PRICE ======= ===================== ============= ===== ======== FOR REGION: ESR 100 Smith, Thomas A. Ft. Collins 6/91 125.00 *** TOTAL ORDERS FOR REGION: ESR 1 *** TOTAL REGION AMOUNT 125.00 FOR REGION: FE 109 Bekker, Bart Kilbirnie 6/91 125.00 *** TOTAL ORDERS FOR REGION: FE 1 *** TOTAL REGION AMOUNT 125.00 **** TOTAL ORDERS FOR 500 3 **** TOTAL AMOUNT 375.00 **** AVERAGE PRICE 125.00 FOR PRODUCT: 1000 - 10-Speed Bicycle FOR REGION: EUR 106 Heining, Heinz Boeblingen 7/91 150.00 *** TOTAL ORDERS FOR REGION: EUR 1 *** TOTAL REGION AMOUNT 150.00 FOR REGION: MSR 107 Dalling, Jimmy Ft. Collins 8/91 150.00 *** TOTAL ORDERS FOR REGION: MSR 1 *** TOTAL REGION AMOUNT 150.00 FOR REGION: WSR 102 Johnson, Sam San Francisco 7/91 150.00 *** TOTAL ORDERS FOR REGION: WSR 1 *** TOTAL REGION AMOUNT 150.00 **** TOTAL ORDERS FOR 1000 3 **** TOTAL AMOUNT 450.00 **** AVERAGE PRICE 150.00 PAGE 2 DATE: 07/10/91 BICYCLES BY REGION REPORT ORDER ORDER NUMBER CUSTOMER CITY DATE PRICE ======= ===================== ================= ===== ======== ***** GRAND TOTALS OF ORDERS 10 ***** GRAND AMOUNT 1,160.00 ***** GRAND TOTALS OF ORDERS 116.00 LAST PAGE 3