The REPORTS clause is used in COBOL's DATA DIVISION to define the REPORTS SECTION, which is where Report Writer report descriptions are specified. This section is essential for any COBOL program that uses Report Writer functionality.
REPORTS clause establishes the context for Report Writer definitions.
The REPORTS clause follows specific syntax patterns within the DATA DIVISION and establishes the context for Report Writer definitions.
12345678910111213141516171819202122232425262728293031323334353637383940414243* Basic REPORTS clause syntax DATA DIVISION. REPORTS SECTION. RD report-name-1 PAGE LIMIT IS integer LINES HEADING integer FIRST DETAIL integer LAST DETAIL integer FOOTING integer. * Multiple reports in one section REPORTS SECTION. RD SALES-REPORT PAGE LIMIT IS 60 LINES HEADING 1 FIRST DETAIL 5 LAST DETAIL 55 FOOTING 58. RD INVENTORY-REPORT PAGE LIMIT IS 66 LINES HEADING 1 FIRST DETAIL 5 LAST DETAIL 60 FOOTING 64. * With report groups REPORTS SECTION. RD CUSTOMER-REPORT PAGE LIMIT IS 60 LINES HEADING 1 FIRST DETAIL 5 LAST DETAIL 55 FOOTING 58. 01 REPORT-HEADER TYPE IS REPORT HEADING LINE 1. 05 COLUMN 1 PIC X(30) VALUE "CUSTOMER REPORT". 01 DETAIL-LINE TYPE IS DETAIL LINE PLUS 1. 05 COLUMN 1 PIC X(10) SOURCE CUSTOMER-ID. 05 COLUMN 15 PIC X(20) SOURCE CUSTOMER-NAME.
REPORTS clause establishes the REPORTS SECTION for Report Writer definitions.
Aspect | REPORTS | REPORT |
---|---|---|
Level | Section (DATA DIVISION) | Report description (RD) |
Purpose | Section definition | Report structure |
Scope | Entire section | Individual report |
Usage | Once per program | Multiple reports |
Content | RD entries | Report groups |
123456789101112131415161718192021222324252627282930313233343536373839* Complete DATA DIVISION with REPORTS SECTION DATA DIVISION. FILE SECTION. FD INPUT-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 80 CHARACTERS. 01 INPUT-RECORD. 05 CUSTOMER-ID PIC 9(6). 05 CUSTOMER-NAME PIC X(20). 05 CUSTOMER-BALANCE PIC 9(7)V99. WORKING-STORAGE SECTION. 01 EOF-FLAG PIC X VALUE "N". 88 END-OF-FILE VALUE "Y". * REPORTS SECTION - Required for Report Writer REPORTS SECTION. RD CUSTOMER-REPORT PAGE LIMIT IS 60 LINES HEADING 1 FIRST DETAIL 5 LAST DETAIL 55 FOOTING 58. * Report group definitions 01 REPORT-HEADER TYPE IS REPORT HEADING LINE 1. 05 COLUMN 1 PIC X(30) VALUE "CUSTOMER BALANCE REPORT". 01 DETAIL-LINE TYPE IS DETAIL LINE PLUS 1. 05 COLUMN 1 PIC X(6) SOURCE CUSTOMER-ID. 05 COLUMN 10 PIC X(20) SOURCE CUSTOMER-NAME. 05 COLUMN 35 PIC 9(7)V99 SOURCE CUSTOMER-BALANCE. 01 REPORT-FOOTER TYPE IS REPORT FOOTING LINE 58. 05 COLUMN 1 PIC X(20) VALUE "REPORT COMPLETE".
REPORTS SECTION is part of the DATA DIVISION structure.
These examples demonstrate how to use the REPORTS clause effectively in different Report Writer scenarios.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162IDENTIFICATION DIVISION. PROGRAM-ID. CUSTOMER-REPORT-PROG. DATA DIVISION. FILE SECTION. FD CUSTOMER-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 80 CHARACTERS. 01 CUSTOMER-RECORD. 05 CUSTOMER-ID PIC 9(6). 05 CUSTOMER-NAME PIC X(20). 05 CUSTOMER-BALANCE PIC 9(7)V99. WORKING-STORAGE SECTION. 01 EOF-FLAG PIC X VALUE "N". 88 END-OF-FILE VALUE "Y". * REPORTS SECTION - Required for Report Writer REPORTS SECTION. RD CUSTOMER-REPORT PAGE LIMIT IS 60 LINES HEADING 1 FIRST DETAIL 5 LAST DETAIL 55 FOOTING 58. * Report group definitions 01 REPORT-HEADER TYPE IS REPORT HEADING LINE 1. 05 COLUMN 1 PIC X(30) VALUE "CUSTOMER BALANCE REPORT". 01 PAGE-HEADER TYPE IS PAGE HEADING LINE 2. 05 COLUMN 1 PIC X(10) VALUE "CUST ID". 05 COLUMN 15 PIC X(20) VALUE "CUSTOMER NAME". 05 COLUMN 40 PIC X(10) VALUE "BALANCE". 01 DETAIL-LINE TYPE IS DETAIL LINE PLUS 1. 05 COLUMN 1 PIC 9(6) SOURCE CUSTOMER-ID. 05 COLUMN 15 PIC X(20) SOURCE CUSTOMER-NAME. 05 COLUMN 40 PIC 9(7)V99 SOURCE CUSTOMER-BALANCE. 01 REPORT-FOOTER TYPE IS REPORT FOOTING LINE 58. 05 COLUMN 1 PIC X(20) VALUE "REPORT COMPLETE". PROCEDURE DIVISION. MAIN-LOGIC. INITIATE CUSTOMER-REPORT PERFORM UNTIL END-OF-FILE READ CUSTOMER-FILE AT END MOVE "Y" TO EOF-FLAG NOT AT END GENERATE DETAIL-LINE END-READ END-PERFORM TERMINATE CUSTOMER-REPORT.
REPORTS SECTION enables simple Report Writer functionality.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283* Multiple reports in one program DATA DIVISION. FILE SECTION. FD SALES-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 100 CHARACTERS. 01 SALES-RECORD. 05 SALES-DATE PIC 9(8). 05 SALES-AMOUNT PIC 9(7)V99. 05 SALES-REGION PIC X(10). WORKING-STORAGE SECTION. 01 EOF-FLAG PIC X VALUE "N". 88 END-OF-FILE VALUE "Y". * REPORTS SECTION with multiple reports REPORTS SECTION. RD SALES-REPORT PAGE LIMIT IS 60 LINES HEADING 1 FIRST DETAIL 5 LAST DETAIL 55 FOOTING 58. RD REGIONAL-REPORT PAGE LIMIT IS 66 LINES HEADING 1 FIRST DETAIL 5 LAST DETAIL 60 FOOTING 64. * Sales report groups 01 SALES-HEADER TYPE IS REPORT HEADING LINE 1. 05 COLUMN 1 PIC X(20) VALUE "SALES REPORT". 01 SALES-DETAIL TYPE IS DETAIL LINE PLUS 1. 05 COLUMN 1 PIC 9(8) SOURCE SALES-DATE. 05 COLUMN 15 PIC 9(7)V99 SOURCE SALES-AMOUNT. * Regional report groups 01 REGIONAL-HEADER TYPE IS REPORT HEADING LINE 1. 05 COLUMN 1 PIC X(25) VALUE "REGIONAL SALES REPORT". 01 REGIONAL-DETAIL TYPE IS DETAIL LINE PLUS 1. 05 COLUMN 1 PIC X(10) SOURCE SALES-REGION. 05 COLUMN 15 PIC 9(7)V99 SOURCE SALES-AMOUNT. PROCEDURE DIVISION. GENERATE-REPORTS. * Generate sales report INITIATE SALES-REPORT PERFORM GENERATE-SALES-REPORT TERMINATE SALES-REPORT * Generate regional report INITIATE REGIONAL-REPORT PERFORM GENERATE-REGIONAL-REPORT TERMINATE REGIONAL-REPORT. GENERATE-SALES-REPORT. PERFORM UNTIL END-OF-FILE READ SALES-FILE AT END MOVE "Y" TO EOF-FLAG NOT AT END GENERATE SALES-DETAIL END-READ END-PERFORM. GENERATE-REGIONAL-REPORT. PERFORM UNTIL END-OF-FILE READ SALES-FILE AT END MOVE "Y" TO EOF-FLAG NOT AT END GENERATE REGIONAL-DETAIL END-READ END-PERFORM.
REPORTS SECTION supports multiple report definitions.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374* Complex report with control breaks DATA DIVISION. FILE SECTION. FD INVENTORY-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 120 CHARACTERS. 01 INVENTORY-RECORD. 05 ITEM-CATEGORY PIC X(10). 05 ITEM-CODE PIC 9(6). 05 ITEM-NAME PIC X(20). 05 ITEM-QUANTITY PIC 9(5). 05 ITEM-PRICE PIC 9(5)V99. WORKING-STORAGE SECTION. 01 EOF-FLAG PIC X VALUE "N". 88 END-OF-FILE VALUE "Y". 01 PREV-CATEGORY PIC X(10). * REPORTS SECTION for complex report REPORTS SECTION. RD INVENTORY-REPORT PAGE LIMIT IS 66 LINES HEADING 1 FIRST DETAIL 5 LAST DETAIL 60 FOOTING 64. * Report group definitions 01 REPORT-HEADER TYPE IS REPORT HEADING LINE 1. 05 COLUMN 1 PIC X(30) VALUE "INVENTORY ANALYSIS REPORT". 01 CATEGORY-HEADER TYPE IS CONTROL HEADING ITEM-CATEGORY LINE PLUS 2. 05 COLUMN 1 PIC X(20) VALUE "CATEGORY: ". 05 COLUMN 11 PIC X(10) SOURCE ITEM-CATEGORY. 01 DETAIL-LINE TYPE IS DETAIL LINE PLUS 1. 05 COLUMN 1 PIC 9(6) SOURCE ITEM-CODE. 05 COLUMN 10 PIC X(20) SOURCE ITEM-NAME. 05 COLUMN 35 PIC 9(5) SOURCE ITEM-QUANTITY. 05 COLUMN 45 PIC 9(5)V99 SOURCE ITEM-PRICE. 05 COLUMN 55 PIC 9(8)V99 SOURCE ITEM-VALUE. 01 CATEGORY-FOOTER TYPE IS CONTROL FOOTING ITEM-CATEGORY LINE PLUS 1. 05 COLUMN 1 PIC X(15) VALUE "CATEGORY TOTAL:". 05 COLUMN 20 PIC 9(8)V99 SUM ITEM-VALUE. 01 REPORT-FOOTER TYPE IS REPORT FOOTING LINE 64. 05 COLUMN 1 PIC X(20) VALUE "GRAND TOTAL:". 05 COLUMN 20 PIC 9(8)V99 SUM ITEM-VALUE. PROCEDURE DIVISION. GENERATE-INVENTORY-REPORT. INITIATE INVENTORY-REPORT PERFORM UNTIL END-OF-FILE READ INVENTORY-FILE AT END MOVE "Y" TO EOF-FLAG NOT AT END * Calculate item value COMPUTE ITEM-VALUE = ITEM-QUANTITY * ITEM-PRICE * Generate detail line GENERATE DETAIL-LINE END-READ END-PERFORM TERMINATE INVENTORY-REPORT.
REPORTS SECTION enables complex Report Writer functionality with grouping.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879* Report with error handling DATA DIVISION. FILE SECTION. FD PROCESSING-FILE LABEL RECORDS ARE STANDARD RECORD CONTAINS 100 CHARACTERS. 01 PROCESSING-RECORD. 05 RECORD-TYPE PIC X(1). 05 RECORD-DATA PIC X(99). WORKING-STORAGE SECTION. 01 EOF-FLAG PIC X VALUE "N". 88 END-OF-FILE VALUE "Y". 01 ERROR-COUNT PIC 9(4) VALUE 0. 01 SUCCESS-COUNT PIC 9(4) VALUE 0. * REPORTS SECTION for error handling REPORTS SECTION. RD PROCESSING-REPORT PAGE LIMIT IS 60 LINES HEADING 1 FIRST DETAIL 5 LAST DETAIL 55 FOOTING 58. * Report group definitions 01 REPORT-HEADER TYPE IS REPORT HEADING LINE 1. 05 COLUMN 1 PIC X(30) VALUE "PROCESSING STATUS REPORT". 01 SUCCESS-HEADER TYPE IS CONTROL HEADING LINE PLUS 2. 05 COLUMN 1 PIC X(20) VALUE "SUCCESSFUL RECORDS:". 01 SUCCESS-DETAIL TYPE IS DETAIL LINE PLUS 1. 05 COLUMN 1 PIC X(99) SOURCE RECORD-DATA. 01 ERROR-HEADER TYPE IS CONTROL HEADING LINE PLUS 2. 05 COLUMN 1 PIC X(15) VALUE "ERROR RECORDS:". 01 ERROR-DETAIL TYPE IS DETAIL LINE PLUS 1. 05 COLUMN 1 PIC X(99) SOURCE RECORD-DATA. 01 SUMMARY-FOOTER TYPE IS REPORT FOOTING LINE 58. 05 COLUMN 1 PIC X(15) VALUE "SUCCESS COUNT:". 05 COLUMN 20 PIC 9(4) SOURCE SUCCESS-COUNT. 05 COLUMN 30 PIC X(12) VALUE "ERROR COUNT:". 05 COLUMN 45 PIC 9(4) SOURCE ERROR-COUNT. PROCEDURE DIVISION. GENERATE-PROCESSING-REPORT. INITIATE PROCESSING-REPORT PERFORM UNTIL END-OF-FILE READ PROCESSING-FILE AT END MOVE "Y" TO EOF-FLAG NOT AT END * Process record based on type EVALUATE RECORD-TYPE WHEN "S" ADD 1 TO SUCCESS-COUNT GENERATE SUCCESS-DETAIL WHEN "E" ADD 1 TO ERROR-COUNT GENERATE ERROR-DETAIL WHEN OTHER ADD 1 TO ERROR-COUNT GENERATE ERROR-DETAIL END-EVALUATE END-READ END-PERFORM TERMINATE PROCESSING-REPORT.
REPORTS SECTION enables error handling and status reporting.
Following these best practices ensures effective use of the REPORTS clause in COBOL applications.
Pitfall | Problem | Solution |
---|---|---|
Missing REPORTS SECTION | Compilation errors | Always include when using Report Writer |
Incorrect page limits | Poor formatting | Plan page layout carefully |
Missing report groups | Incomplete reports | Define all necessary report groups |
Incorrect verb sequence | Runtime errors | Use INITIATE, GENERATE, TERMINATE |
Poor naming conventions | Maintenance difficulties | Use descriptive names |
Scenario | Use REPORTS | Use Other Methods |
---|---|---|
Structured reports | Yes | No |
Formatted output | Yes | No |
Page numbering | Yes | No |
Simple data output | No | Yes (DISPLAY) |
File processing | No | Yes (file operations) |
Usage | Syntax | Purpose |
---|---|---|
Define REPORTS SECTION | REPORTS SECTION. | Establish Report Writer context |
Single report | RD report-name | Define individual report |
Multiple reports | Multiple RD entries | Define several reports |
Report groups | 01 group-name TYPE IS type | Define report structure |
Complete structure | REPORTS SECTION + RD + groups | Full Report Writer setup |
1. What is the primary purpose of the REPORTS clause in COBOL?
2. In which division is the REPORTS clause used?
3. What happens when a REPORTS clause is executed?
4. What is the relationship between REPORTS and Report Writer verbs?
5. Which of the following is a valid REPORTS clause usage?
Complete guide to COBOL Report Writer feature.
Using REPORT clause for report structure definition.
Using REPORTING clause for report behavior control.
Using INITIATE to start Report Writer reports.
Using GENERATE to create report output.