The Report Writer feature in COBOL is a powerful tool for creating formatted reports with automatic page breaks, headers, footers, control breaks, and summary calculations. It eliminates the need for manual formatting and provides a structured approach to report generation.
Report Writer is a COBOL feature that automates the creation of professional reports. It handles:
Instead of manually handling these details with WRITE statements and complex logic, Report Writer provides a declarative approach where you describe the report structure and let COBOL handle the formatting.
A Report Writer program consists of several key components:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111IDENTIFICATION DIVISION. PROGRAM-ID. SALES-REPORT. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT SALES-FILE ASSIGN TO "SALES.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS SALES-STATUS. SELECT REPORT-FILE ASSIGN TO "SALES-REPORT.TXT" ORGANIZATION IS LINE SEQUENTIAL FILE STATUS IS REPORT-STATUS. DATA DIVISION. FILE SECTION. FD SALES-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 80 CHARACTERS. 01 SALES-RECORD. 05 SALES-REGION PIC X(2). 05 SALES-STATE PIC X(2). 05 SALES-AMOUNT PIC 9(7)V99. 05 SALES-DATE PIC 9(8). 05 FILLER PIC X(65). REPORT SECTION. RD SALES-REPORT PAGE LIMIT IS 60 LINES HEADING 1 FIRST DETAIL 5 LAST DETAIL 55 FOOTING 58 CONTROL IS FINAL, SALES-REGION, SALES-STATE. 01 TYPE REPORT HEADING. 05 LINE 1. 10 COLUMN 30 PIC X(20) VALUE "SALES SUMMARY REPORT". 10 COLUMN 60 PIC X(10) VALUE "PAGE:". 10 COLUMN 70 PIC ZZZ9 SOURCE PAGE-COUNTER. 01 TYPE PAGE HEADING. 05 LINE 3. 10 COLUMN 1 PIC X(10) VALUE "REGION". 10 COLUMN 15 PIC X(10) VALUE "STATE". 10 COLUMN 30 PIC X(15) VALUE "SALES AMOUNT". 10 COLUMN 50 PIC X(12) VALUE "DATE". 01 TYPE CONTROL HEADING SALES-REGION. 05 LINE PLUS 2. 10 COLUMN 1 PIC X(10) VALUE "REGION:". 10 COLUMN 12 PIC X(2) SOURCE SALES-REGION. 01 TYPE CONTROL HEADING SALES-STATE. 05 LINE PLUS 1. 10 COLUMN 5 PIC X(10) VALUE "STATE:". 10 COLUMN 16 PIC X(2) SOURCE SALES-STATE. 01 TYPE DETAIL. 05 LINE PLUS 1. 10 COLUMN 1 PIC X(2) SOURCE SALES-REGION. 10 COLUMN 15 PIC X(2) SOURCE SALES-STATE. 10 COLUMN 30 PIC $,$$$,$$9.99 SOURCE SALES-AMOUNT. 10 COLUMN 50 PIC 99/99/9999 SOURCE SALES-DATE. 01 TYPE CONTROL FOOTING SALES-STATE. 05 LINE PLUS 1. 10 COLUMN 5 PIC X(15) VALUE "STATE TOTAL:". 10 COLUMN 30 PIC $,$$$,$$9.99 SUM SALES-AMOUNT. 01 TYPE CONTROL FOOTING SALES-REGION. 05 LINE PLUS 1. 10 COLUMN 1 PIC X(15) VALUE "REGION TOTAL:". 10 COLUMN 30 PIC $,$$$,$$9.99 SUM SALES-AMOUNT. 01 TYPE CONTROL FOOTING FINAL. 05 LINE PLUS 2. 10 COLUMN 1 PIC X(20) VALUE "GRAND TOTAL:". 10 COLUMN 30 PIC $,$$$,$$9.99 SUM SALES-AMOUNT. WORKING-STORAGE SECTION. 01 SALES-STATUS PIC XX. 01 REPORT-STATUS PIC XX. 01 EOF-FLAG PIC X VALUE 'N'. 88 END-OF-FILE VALUE 'Y'. PROCEDURE DIVISION. MAIN-PROCESS. PERFORM INITIALIZATION PERFORM PROCESS-RECORDS UNTIL END-OF-FILE PERFORM FINALIZATION STOP RUN. INITIALIZATION. OPEN INPUT SALES-FILE OPEN OUTPUT REPORT-FILE INITIATE SALES-REPORT. PROCESS-RECORDS. READ SALES-FILE AT END MOVE "Y" TO EOF-FLAG NOT AT END GENERATE SALES-REPORT END-READ. FINALIZATION. TERMINATE SALES-REPORT CLOSE SALES-FILE CLOSE REPORT-FILE.
This example shows a complete Report Writer program structure with input file, report file, report description, and various report groups for different types of output.
Component | Purpose | Location |
---|---|---|
REPORT SECTION | Contains report definitions | DATA DIVISION |
RD (Report Description) | Defines report layout and control breaks | REPORT SECTION |
Report Groups | Define specific report lines and formatting | REPORT SECTION |
INITIATE | Starts report processing | PROCEDURE DIVISION |
GENERATE | Produces report lines | PROCEDURE DIVISION |
TERMINATE | Ends report processing | PROCEDURE DIVISION |
The Report Description (RD) entry is the heart of Report Writer. It defines the overall structure of the report, including page layout, control breaks, and formatting specifications. Understanding the RD entry is crucial for creating effective reports.
The RD entry follows a specific format with various clauses that control report behavior:
12345678RD report-name PAGE LIMIT IS integer-1 LINES HEADING integer-2 FIRST DETAIL integer-3 LAST DETAIL integer-4 FOOTING integer-5 CONTROL IS FINAL, control-field-1, control-field-2 ...
Each clause serves a specific purpose in defining how the report will be formatted and processed.
These clauses control the physical layout of each page:
1234567RD SALES-REPORT PAGE LIMIT IS 60 LINES * Total lines per page HEADING 1 * Page heading starts on line 1 FIRST DETAIL 5 * First detail line on page LAST DETAIL 55 * Last detail line on page FOOTING 58 * Page footing on line 58 ...
The CONTROL clause defines when control breaks occur and in what order:
123456789101112* Single level control break RD SIMPLE-REPORT CONTROL IS FINAL, CUSTOMER-REGION. * Multiple level control breaks (major to minor) RD DETAILED-REPORT CONTROL IS FINAL, CUSTOMER-REGION, CUSTOMER-STATE, CUSTOMER-CITY. * Control break with custom processing RD CUSTOM-REPORT CONTROL IS FINAL, CUSTOMER-REGION CONTROL FOOTING CUSTOMER-REGION IS OMITTED. * Skip region footings
Control fields are processed from left to right (major to minor). When any control field value changes, Report Writer processes the appropriate control footing and heading groups.
Additional clauses provide more control over report behavior:
123456789101112RD ADVANCED-REPORT PAGE LIMIT IS 66 LINES HEADING 1 FIRST DETAIL 6 LAST DETAIL 60 FOOTING 65 CONTROL IS FINAL, CUSTOMER-REGION, CUSTOMER-STATE CONTROL FOOTING CUSTOMER-REGION IS OMITTED CONTROL HEADING CUSTOMER-STATE IS OMITTED LINE COUNTER IS LINE-COUNT PAGE COUNTER IS PAGE-COUNT ...
Clause | Required | Default | Purpose |
---|---|---|---|
PAGE LIMIT | Yes | None | Define page size |
HEADING | No | 1 | Page heading line |
FIRST DETAIL | No | HEADING + 1 | First detail line |
LAST DETAIL | No | PAGE LIMIT - 1 | Last detail line |
FOOTING | No | PAGE LIMIT | Page footing line |
CONTROL | No | FINAL only | Control break fields |
Report groups define the actual content and formatting of report lines. Each report group specifies what data to display, where to display it, and when to display it. Understanding the different types of report groups is essential for creating effective reports.
Report Writer provides several types of report groups, each serving a specific purpose:
Type | When Processed | Purpose | Example Use |
---|---|---|---|
REPORT HEADING | Once at start | Report title and setup | Report title, date, parameters |
PAGE HEADING | Each page | Column headers | Column titles, page numbers |
CONTROL HEADING | Control breaks | Group headers | Region/state headers |
DETAIL | Each record | Main data | Sales records, customer data |
CONTROL FOOTING | Control breaks | Group summaries | Subtotals, counts |
PAGE FOOTING | Each page | Page summaries | Page totals, footnotes |
REPORT FOOTING | Once at end | Final summaries | Grand totals, final notes |
These groups appear once at the beginning and end of the entire report:
12345678910111213141516171819* Report heading - appears once at the start 01 TYPE REPORT HEADING. 05 LINE 1. 10 COLUMN 30 PIC X(25) VALUE "CUSTOMER SALES REPORT". 10 COLUMN 60 PIC X(10) VALUE "DATE:". 10 COLUMN 71 PIC 99/99/9999 SOURCE CURRENT-DATE. 05 LINE 2. 10 COLUMN 30 PIC X(20) VALUE "GENERATED BY SYSTEM". 10 COLUMN 60 PIC X(10) VALUE "TIME:". 10 COLUMN 71 PIC 99:99:99 SOURCE CURRENT-TIME. * Report footing - appears once at the end 01 TYPE REPORT FOOTING. 05 LINE PLUS 2. 10 COLUMN 1 PIC X(20) VALUE "REPORT COMPLETED". 10 COLUMN 30 PIC X(15) VALUE "TOTAL RECORDS:". 10 COLUMN 46 PIC ZZZ,ZZ9 SOURCE RECORD-COUNT. 05 LINE PLUS 1. 10 COLUMN 1 PIC X(25) VALUE "END OF REPORT".
Report heading groups are ideal for report titles, generation parameters, and setup information. Report footing groups are perfect for final summaries and completion messages.
These groups appear on every page of the report:
123456789101112131415161718* Page heading - appears at top of each page 01 TYPE PAGE HEADING. 05 LINE 1. 10 COLUMN 1 PIC X(10) VALUE "CUSTOMER". 10 COLUMN 15 PIC X(10) VALUE "REGION". 10 COLUMN 30 PIC X(10) VALUE "SALES". 10 COLUMN 45 PIC X(10) VALUE "DATE". 10 COLUMN 60 PIC X(10) VALUE "PAGE". 10 COLUMN 70 PIC ZZZ9 SOURCE PAGE-COUNTER. 05 LINE 2. 10 COLUMN 1 PIC X(80) VALUE ALL "-". * Page footing - appears at bottom of each page 01 TYPE PAGE FOOTING. 05 LINE 58. 10 COLUMN 1 PIC X(20) VALUE "PAGE TOTAL:". 10 COLUMN 30 PIC $,$$$,$$9.99 SUM SALES-AMOUNT. 10 COLUMN 60 PIC X(10) VALUE "CONTINUED".
Page heading groups typically contain column headers and page numbers. Page footing groups often contain page totals and continuation indicators.
These groups are processed when control breaks occur:
1234567891011121314151617* Control heading - appears at start of each control group 01 TYPE CONTROL HEADING CUSTOMER-REGION. 05 LINE PLUS 2. 10 COLUMN 1 PIC X(10) VALUE "REGION:". 10 COLUMN 12 PIC X(2) SOURCE CUSTOMER-REGION. 10 COLUMN 20 PIC X(15) VALUE "REGION NAME:". 10 COLUMN 36 PIC X(20) SOURCE REGION-NAME. * Control footing - appears at end of each control group 01 TYPE CONTROL FOOTING CUSTOMER-REGION. 05 LINE PLUS 1. 10 COLUMN 1 PIC X(15) VALUE "REGION TOTAL:". 10 COLUMN 30 PIC $,$$$,$$9.99 SUM SALES-AMOUNT. 10 COLUMN 50 PIC X(10) VALUE "RECORDS:". 10 COLUMN 61 PIC ZZZ9 SUM RECORD-COUNT. 05 LINE PLUS 1. 10 COLUMN 1 PIC X(80) VALUE ALL "=".
Control heading groups identify new control groups, while control footing groups provide summaries for completed groups. The SUM clause automatically calculates totals.
Detail groups are processed for each input record and contain the main report data:
12345678910111213141516171819* Detail group - processed for each record 01 TYPE DETAIL. 05 LINE PLUS 1. 10 COLUMN 1 PIC X(10) SOURCE CUSTOMER-NAME. 10 COLUMN 15 PIC X(2) SOURCE CUSTOMER-REGION. 10 COLUMN 30 PIC $,$$$,$$9.99 SOURCE SALES-AMOUNT. 10 COLUMN 45 PIC 99/99/9999 SOURCE SALES-DATE. 10 COLUMN 60 PIC X(10) SOURCE SALES-STATUS. * Detail group with conditional formatting 01 TYPE DETAIL. 05 LINE PLUS 1. 10 COLUMN 1 PIC X(10) SOURCE CUSTOMER-NAME. 10 COLUMN 15 PIC X(2) SOURCE CUSTOMER-REGION. 10 COLUMN 30 PIC $,$$$,$$9.99 SOURCE SALES-AMOUNT. 10 COLUMN 45 PIC 99/99/9999 SOURCE SALES-DATE. 10 COLUMN 60 PIC X(10) SOURCE SALES-STATUS WHEN SALES-AMOUNT > 10000 HIGHLIGHT.
Detail groups display the main data from each input record. You can use conditional formatting and various data sources to create dynamic reports.
Report groups are processed in a specific order:
Report Writer uses specific verbs to control report processing. Understanding these verbs and their proper usage is essential for creating functional reports.
The INITIATE statement starts report processing and must be called before any GENERATE statements:
1234567891011121314* Basic INITIATE INITIATE report-name. * INITIATE with error handling INITIATE SALES-REPORT ON EXCEPTION DISPLAY "Error initiating report" STOP RUN NOT ON EXCEPTION DISPLAY "Report initiated successfully" END-INITIATE. * INITIATE multiple reports INITIATE SALES-REPORT, SUMMARY-REPORT, DETAIL-REPORT.
INITIATE prepares the report for processing, initializes counters, and sets up the report structure. It should be called after opening the report file but before processing any data.
The GENERATE statement produces report lines according to the report group definitions:
1234567891011121314151617* Basic GENERATE GENERATE report-name. * GENERATE with error handling GENERATE SALES-REPORT ON EXCEPTION DISPLAY "Error generating report line" NOT ON EXCEPTION CONTINUE END-GENERATE. * GENERATE with data source GENERATE SALES-REPORT FROM SALES-RECORD. * GENERATE with working storage MOVE "CUSTOMER DATA" TO WS-CUSTOMER-INFO GENERATE SALES-REPORT FROM WS-CUSTOMER-INFO.
GENERATE is called for each input record and automatically handles control breaks, page breaks, and report group processing. The FROM clause specifies the data source for the report.
The TERMINATE statement ends report processing and must be called after all data has been processed:
12345678910111213* Basic TERMINATE TERMINATE report-name. * TERMINATE with error handling TERMINATE SALES-REPORT ON EXCEPTION DISPLAY "Error terminating report" NOT ON EXCEPTION DISPLAY "Report terminated successfully" END-TERMINATE. * TERMINATE multiple reports TERMINATE SALES-REPORT, SUMMARY-REPORT, DETAIL-REPORT.
TERMINATE processes final control footings, report footings, and finalizes the report. It should be called after all input data has been processed but before closing the report file.
Report Writer provides powerful formatting capabilities and various data sources for creating professional-looking reports with dynamic content.
Report Writer can use different sources for data in report groups:
1234567891011121314151617181920* SOURCE clause - references input record fields 10 COLUMN 1 PIC X(10) SOURCE CUSTOMER-NAME. 10 COLUMN 15 PIC X(2) SOURCE CUSTOMER-REGION. * VALUE clause - constant text 10 COLUMN 1 PIC X(10) VALUE "CUSTOMER:". 10 COLUMN 30 PIC X(15) VALUE "SALES REPORT". * SUM clause - automatic totals 10 COLUMN 30 PIC $,$$$,$$9.99 SUM SALES-AMOUNT. 10 COLUMN 50 PIC ZZZ9 SUM RECORD-COUNT. * PAGE-COUNTER - automatic page numbering 10 COLUMN 70 PIC ZZZ9 SOURCE PAGE-COUNTER. * LINE-COUNTER - current line number 10 COLUMN 80 PIC ZZZ9 SOURCE LINE-COUNTER. * Working storage variables 10 COLUMN 1 PIC X(20) SOURCE WS-CALCULATED-FIELD.
The SOURCE clause references data from input records or working storage. The SUM clause automatically calculates totals for control groups. Special sources like PAGE-COUNTER provide automatic values.
Report Writer provides flexible line positioning options:
1234567891011121314151617181920* Absolute line positioning 05 LINE 1. 10 COLUMN 1 PIC X(20) VALUE "REPORT TITLE". * Relative line positioning 05 LINE PLUS 2. 10 COLUMN 1 PIC X(20) VALUE "SUBTITLE". * Line positioning with conditions 05 LINE PLUS 1 WHEN LINE-COUNTER > 50. 10 COLUMN 1 PIC X(20) VALUE "PAGE BREAK SOON". * Next group positioning 05 LINE NEXT GROUP. 10 COLUMN 1 PIC X(20) VALUE "NEW GROUP". * Page positioning 05 LINE NEXT PAGE. 10 COLUMN 1 PIC X(20) VALUE "NEW PAGE".
LINE specifies absolute line numbers, while LINE PLUS provides relative positioning. Special positioning like NEXT GROUP and NEXT PAGE provides automatic spacing.
Report Writer supports conditional formatting for dynamic reports:
123456789101112131415161718192021* Conditional formatting with WHEN 10 COLUMN 30 PIC $,$$$,$$9.99 SOURCE SALES-AMOUNT WHEN SALES-AMOUNT > 10000 HIGHLIGHT. * Multiple conditions 10 COLUMN 60 PIC X(10) SOURCE SALES-STATUS WHEN SALES-AMOUNT > 50000 HIGHLIGHT WHEN SALES-AMOUNT < 1000 UNDERLINE. * Conditional line positioning 05 LINE PLUS 1 WHEN SALES-AMOUNT > 10000. 10 COLUMN 1 PIC X(20) VALUE "HIGH VALUE SALE". * Conditional column positioning 10 COLUMN 1 PIC X(10) SOURCE CUSTOMER-NAME WHEN CUSTOMER-REGION = "NE" COLUMN 5.
Conditional formatting allows you to highlight important data, adjust positioning based on conditions, and create dynamic report layouts.
Option | Purpose | Example |
---|---|---|
SOURCE | Reference data fields | SOURCE CUSTOMER-NAME |
VALUE | Constant text | VALUE "TOTAL:" |
SUM | Automatic totals | SUM SALES-AMOUNT |
LINE | Line positioning | LINE 1 or LINE PLUS 2 |
COLUMN | Column positioning | COLUMN 30 |
WHEN | Conditional formatting | WHEN SALES-AMOUNT > 10000 |
Create a Report Writer program that generates a simple sales report with the following requirements:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788IDENTIFICATION DIVISION. PROGRAM-ID. SIMPLE-SALES-REPORT. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT SALES-FILE ASSIGN TO "SALES.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. SELECT REPORT-FILE ASSIGN TO "SALES-REPORT.TXT" ORGANIZATION IS LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD SALES-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 50 CHARACTERS. 01 SALES-RECORD. 05 CUSTOMER-NAME PIC X(20). 05 SALES-AMOUNT PIC 9(7)V99. 05 SALES-DATE PIC 9(8). 05 FILLER PIC X(15). REPORT SECTION. RD SALES-REPORT PAGE LIMIT IS 60 LINES HEADING 1 FIRST DETAIL 5 LAST DETAIL 55 FOOTING 58. 01 TYPE REPORT HEADING. 05 LINE 1. 10 COLUMN 30 PIC X(20) VALUE "SALES REPORT". 10 COLUMN 60 PIC X(10) VALUE "DATE:". 10 COLUMN 71 PIC 99/99/9999 SOURCE CURRENT-DATE. 01 TYPE PAGE HEADING. 05 LINE 3. 10 COLUMN 1 PIC X(20) VALUE "CUSTOMER NAME". 10 COLUMN 25 PIC X(15) VALUE "SALES AMOUNT". 10 COLUMN 45 PIC X(12) VALUE "SALES DATE". 01 TYPE DETAIL. 05 LINE PLUS 1. 10 COLUMN 1 PIC X(20) SOURCE CUSTOMER-NAME. 10 COLUMN 25 PIC $,$$$,$$9.99 SOURCE SALES-AMOUNT. 10 COLUMN 45 PIC 99/99/9999 SOURCE SALES-DATE. 01 TYPE PAGE FOOTING. 05 LINE 58. 10 COLUMN 1 PIC X(15) VALUE "PAGE TOTAL:". 10 COLUMN 25 PIC $,$$$,$$9.99 SUM SALES-AMOUNT. 01 TYPE REPORT FOOTING. 05 LINE PLUS 2. 10 COLUMN 1 PIC X(15) VALUE "GRAND TOTAL:". 10 COLUMN 25 PIC $,$$$,$$9.99 SUM SALES-AMOUNT. WORKING-STORAGE SECTION. 01 EOF-FLAG PIC X VALUE 'N'. 88 END-OF-FILE VALUE 'Y'. PROCEDURE DIVISION. MAIN-PROCESS. PERFORM INITIALIZATION PERFORM PROCESS-RECORDS UNTIL END-OF-FILE PERFORM FINALIZATION STOP RUN. INITIALIZATION. OPEN INPUT SALES-FILE OPEN OUTPUT REPORT-FILE INITIATE SALES-REPORT. PROCESS-RECORDS. READ SALES-FILE AT END MOVE "Y" TO EOF-FLAG NOT AT END GENERATE SALES-REPORT END-READ. FINALIZATION. TERMINATE SALES-REPORT CLOSE SALES-FILE CLOSE REPORT-FILE.
This simple report demonstrates basic Report Writer concepts with all essential components.
Create a Report Writer program with control breaks for region and state. The program should:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112IDENTIFICATION DIVISION. PROGRAM-ID. CONTROL-BREAK-REPORT. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT SALES-FILE ASSIGN TO "SALES.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. SELECT REPORT-FILE ASSIGN TO "CONTROL-REPORT.TXT" ORGANIZATION IS LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD SALES-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 60 CHARACTERS. 01 SALES-RECORD. 05 CUSTOMER-NAME PIC X(20). 05 SALES-REGION PIC X(2). 05 SALES-STATE PIC X(2). 05 SALES-AMOUNT PIC 9(7)V99. 05 SALES-DATE PIC 9(8). 05 FILLER PIC X(15). REPORT SECTION. RD SALES-REPORT PAGE LIMIT IS 60 LINES HEADING 1 FIRST DETAIL 8 LAST DETAIL 55 FOOTING 58 CONTROL IS FINAL, SALES-REGION, SALES-STATE. 01 TYPE REPORT HEADING. 05 LINE 1. 10 COLUMN 30 PIC X(25) VALUE "REGIONAL SALES REPORT". 10 COLUMN 60 PIC X(10) VALUE "DATE:". 10 COLUMN 71 PIC 99/99/9999 SOURCE CURRENT-DATE. 01 TYPE PAGE HEADING. 05 LINE 3. 10 COLUMN 1 PIC X(20) VALUE "CUSTOMER". 10 COLUMN 25 PIC X(10) VALUE "REGION". 10 COLUMN 40 PIC X(10) VALUE "STATE". 10 COLUMN 55 PIC X(15) VALUE "SALES AMOUNT". 01 TYPE CONTROL HEADING SALES-REGION. 05 LINE PLUS 2. 10 COLUMN 1 PIC X(10) VALUE "REGION:". 10 COLUMN 12 PIC X(2) SOURCE SALES-REGION. 01 TYPE CONTROL HEADING SALES-STATE. 05 LINE PLUS 1. 10 COLUMN 5 PIC X(10) VALUE "STATE:". 10 COLUMN 16 PIC X(2) SOURCE SALES-STATE. 01 TYPE DETAIL. 05 LINE PLUS 1. 10 COLUMN 1 PIC X(20) SOURCE CUSTOMER-NAME. 10 COLUMN 25 PIC X(2) SOURCE SALES-REGION. 10 COLUMN 40 PIC X(2) SOURCE SALES-STATE. 10 COLUMN 55 PIC $,$$$,$$9.99 SOURCE SALES-AMOUNT WHEN SALES-AMOUNT > 10000 HIGHLIGHT. 01 TYPE CONTROL FOOTING SALES-STATE. 05 LINE PLUS 1. 10 COLUMN 5 PIC X(15) VALUE "STATE TOTAL:". 10 COLUMN 55 PIC $,$$$,$$9.99 SUM SALES-AMOUNT. 01 TYPE CONTROL FOOTING SALES-REGION. 05 LINE PLUS 1. 10 COLUMN 1 PIC X(15) VALUE "REGION TOTAL:". 10 COLUMN 55 PIC $,$$$,$$9.99 SUM SALES-AMOUNT. 05 LINE PLUS 1. 10 COLUMN 1 PIC X(80) VALUE ALL "=". 01 TYPE CONTROL FOOTING FINAL. 05 LINE PLUS 2. 10 COLUMN 1 PIC X(20) VALUE "GRAND TOTAL:". 10 COLUMN 55 PIC $,$$$,$$9.99 SUM SALES-AMOUNT. WORKING-STORAGE SECTION. 01 EOF-FLAG PIC X VALUE 'N'. 88 END-OF-FILE VALUE 'Y'. PROCEDURE DIVISION. MAIN-PROCESS. PERFORM INITIALIZATION PERFORM PROCESS-RECORDS UNTIL END-OF-FILE PERFORM FINALIZATION STOP RUN. INITIALIZATION. OPEN INPUT SALES-FILE OPEN OUTPUT REPORT-FILE INITIATE SALES-REPORT. PROCESS-RECORDS. READ SALES-FILE AT END MOVE "Y" TO EOF-FLAG NOT AT END GENERATE SALES-REPORT END-READ. FINALIZATION. TERMINATE SALES-REPORT CLOSE SALES-FILE CLOSE REPORT-FILE.
This report demonstrates control breaks with multiple levels and conditional formatting.
Create a comprehensive Report Writer program that includes:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157IDENTIFICATION DIVISION. PROGRAM-ID. ADVANCED-SALES-REPORT. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT SALES-FILE ASSIGN TO "SALES.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. SELECT REPORT-FILE ASSIGN TO "ADVANCED-REPORT.TXT" ORGANIZATION IS LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD SALES-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 80 CHARACTERS. 01 SALES-RECORD. 05 CUSTOMER-NAME PIC X(20). 05 SALES-REGION PIC X(2). 05 SALES-STATE PIC X(2). 05 SALES-CITY PIC X(15). 05 SALES-AMOUNT PIC 9(7)V99. 05 SALES-DATE PIC 9(8). 05 SALES-AGENT PIC X(15). 05 FILLER PIC X(5). WORKING-STORAGE SECTION. 01 CALCULATED-FIELDS. 05 COMMISSION-RATE PIC V999 VALUE .05. 05 TAX-RATE PIC V999 VALUE .08. 05 WS-COMMISSION PIC 9(5)V99. 05 WS-TAX PIC 9(5)V99. 05 WS-NET-AMOUNT PIC 9(7)V99. 01 EOF-FLAG PIC X VALUE 'N'. 88 END-OF-FILE VALUE 'Y'. REPORT SECTION. RD SALES-REPORT PAGE LIMIT IS 66 LINES HEADING 1 FIRST DETAIL 8 LAST DETAIL 60 FOOTING 65 CONTROL IS FINAL, SALES-REGION, SALES-STATE, SALES-CITY LINE COUNTER IS LINE-COUNT PAGE COUNTER IS PAGE-COUNT. 01 TYPE REPORT HEADING. 05 LINE 1. 10 COLUMN 25 PIC X(30) VALUE "ADVANCED SALES ANALYSIS REPORT". 10 COLUMN 60 PIC X(10) VALUE "PAGE:". 10 COLUMN 70 PIC ZZZ9 SOURCE PAGE-COUNTER. 05 LINE 2. 10 COLUMN 25 PIC X(20) VALUE "GENERATED ON:". 10 COLUMN 46 PIC 99/99/9999 SOURCE CURRENT-DATE. 01 TYPE PAGE HEADING. 05 LINE 5. 10 COLUMN 1 PIC X(20) VALUE "CUSTOMER". 10 COLUMN 25 PIC X(10) VALUE "REGION". 10 COLUMN 40 PIC X(10) VALUE "STATE". 10 COLUMN 55 PIC X(15) VALUE "CITY". 10 COLUMN 75 PIC X(15) VALUE "SALES AMOUNT". 05 LINE 6. 10 COLUMN 1 PIC X(80) VALUE ALL "-". 01 TYPE CONTROL HEADING SALES-REGION. 05 LINE PLUS 2. 10 COLUMN 1 PIC X(10) VALUE "REGION:". 10 COLUMN 12 PIC X(2) SOURCE SALES-REGION. 01 TYPE CONTROL HEADING SALES-STATE. 05 LINE PLUS 1. 10 COLUMN 5 PIC X(10) VALUE "STATE:". 10 COLUMN 16 PIC X(2) SOURCE SALES-STATE. 01 TYPE CONTROL HEADING SALES-CITY. 05 LINE PLUS 1. 10 COLUMN 10 PIC X(10) VALUE "CITY:". 10 COLUMN 21 PIC X(15) SOURCE SALES-CITY. 01 TYPE DETAIL. 05 LINE PLUS 1. 10 COLUMN 1 PIC X(20) SOURCE CUSTOMER-NAME. 10 COLUMN 25 PIC X(2) SOURCE SALES-REGION. 10 COLUMN 40 PIC X(2) SOURCE SALES-STATE. 10 COLUMN 55 PIC X(15) SOURCE SALES-CITY. 10 COLUMN 75 PIC $,$$$,$$9.99 SOURCE SALES-AMOUNT WHEN SALES-AMOUNT > 50000 HIGHLIGHT WHEN SALES-AMOUNT < 1000 UNDERLINE. 01 TYPE CONTROL FOOTING SALES-CITY. 05 LINE PLUS 1. 10 COLUMN 10 PIC X(15) VALUE "CITY TOTAL:". 10 COLUMN 75 PIC $,$$$,$$9.99 SUM SALES-AMOUNT. 10 COLUMN 90 PIC X(10) VALUE "COUNT:". 10 COLUMN 101 PIC ZZZ9 SUM RECORD-COUNT. 01 TYPE CONTROL FOOTING SALES-STATE. 05 LINE PLUS 1. 10 COLUMN 5 PIC X(15) VALUE "STATE TOTAL:". 10 COLUMN 75 PIC $,$$$,$$9.99 SUM SALES-AMOUNT. 10 COLUMN 90 PIC X(10) VALUE "AVG:". 10 COLUMN 101 PIC $,$$$,$$9.99 SUM SALES-AMOUNT / SUM RECORD-COUNT. 01 TYPE CONTROL FOOTING SALES-REGION. 05 LINE PLUS 1. 10 COLUMN 1 PIC X(15) VALUE "REGION TOTAL:". 10 COLUMN 75 PIC $,$$$,$$9.99 SUM SALES-AMOUNT. 05 LINE PLUS 1. 10 COLUMN 1 PIC X(80) VALUE ALL "=". 01 TYPE CONTROL FOOTING FINAL. 05 LINE PLUS 2. 10 COLUMN 1 PIC X(20) VALUE "GRAND TOTAL:". 10 COLUMN 75 PIC $,$$$,$$9.99 SUM SALES-AMOUNT. 05 LINE PLUS 1. 10 COLUMN 1 PIC X(20) VALUE "TOTAL RECORDS:". 10 COLUMN 25 PIC ZZZ,ZZ9 SUM RECORD-COUNT. 05 LINE PLUS 1. 10 COLUMN 1 PIC X(20) VALUE "AVERAGE SALE:". 10 COLUMN 25 PIC $,$$$,$$9.99 SUM SALES-AMOUNT / SUM RECORD-COUNT. PROCEDURE DIVISION. MAIN-PROCESS. PERFORM INITIALIZATION PERFORM PROCESS-RECORDS UNTIL END-OF-FILE PERFORM FINALIZATION STOP RUN. INITIALIZATION. OPEN INPUT SALES-FILE OPEN OUTPUT REPORT-FILE INITIATE SALES-REPORT. PROCESS-RECORDS. READ SALES-FILE AT END MOVE "Y" TO EOF-FLAG NOT AT END PERFORM CALCULATE-FIELDS GENERATE SALES-REPORT END-READ. CALCULATE-FIELDS. COMPUTE WS-COMMISSION = SALES-AMOUNT * COMMISSION-RATE COMPUTE WS-TAX = SALES-AMOUNT * TAX-RATE COMPUTE WS-NET-AMOUNT = SALES-AMOUNT - WS-COMMISSION - WS-TAX. FINALIZATION. TERMINATE SALES-REPORT CLOSE SALES-FILE CLOSE REPORT-FILE.
This advanced report demonstrates complex control breaks, calculations, conditional formatting, and comprehensive summary statistics.
1. What is the purpose of the Report Writer feature in COBOL?
2. What is a Report Description (RD) entry?
3. What is a control break in Report Writer?
4. Which Report Writer verb is used to generate a report line?
5. What is the purpose of the FINAL clause in a Report Description?
Understanding file operations for report data sources.
Overview of DATA DIVISION structure including REPORT SECTION.
Understanding file descriptions for input data.
Processing sequential files for report generation.
Working with data fields and calculations for reports.