The REPORTING clause is used in COBOL's Report Writer feature to control report generation behavior and formatting options. It provides fine-grained control over when and how report groups are processed.
REPORTING clause provides detailed control over Report Writer behavior.
The REPORTING clause follows specific syntax patterns within report group definitions and can include various control options.
1234567891011121314151617181920212223242526272829* Basic REPORTING clause syntax 01 report-group-name TYPE IS report-type REPORTING ON/OFF ... * With conditional reporting 01 report-group-name TYPE IS report-type REPORTING CONDITION condition-name ... * Complete example 01 DETAIL-LINE TYPE IS DETAIL REPORTING ON LINE PLUS 1. 01 CONDITIONAL-FOOTER TYPE IS CONTROL FOOTING REPORTING CONDITION HIGH-VALUE-FLAG LINE PLUS 2. * Multiple reporting options 01 COMPLEX-REPORT TYPE IS DETAIL REPORTING CONDITION VALID-RECORD LINE PLUS 1 NEXT GROUP IS PLUS 2. * Global reporting control 01 GLOBAL-HEADER TYPE IS REPORT HEADING REPORTING ON LINE 1.
REPORTING clause controls when and how report groups are processed.
Aspect | REPORTING | REPORT |
---|---|---|
Level | Report group (01) | Report description (RD) |
Purpose | Behavior control | Structure definition |
Scope | Individual groups | Entire report |
Options | ON/OFF/CONDITION | Page limits, formatting |
Usage | Within report groups | At report level |
1234567891011121314151617181920212223242526272829* REPORTING ON - Enable report group 01 DETAIL-LINE TYPE IS DETAIL REPORTING ON LINE PLUS 1. * REPORTING OFF - Disable report group 01 SUPPRESSED-LINE TYPE IS DETAIL REPORTING OFF LINE PLUS 1. * REPORTING CONDITION - Conditional processing 01 CONDITIONAL-HEADER TYPE IS CONTROL HEADING REPORTING CONDITION NEW-CATEGORY LINE PLUS 2. * With condition names 01 CONDITIONAL-FOOTER TYPE IS CONTROL FOOTING REPORTING CONDITION END-OF-GROUP LINE PLUS 1. * Multiple conditions 01 COMPLEX-DETAIL TYPE IS DETAIL REPORTING CONDITION VALID-RECORD LINE PLUS 1. * Dynamic control 01 DYNAMIC-HEADER TYPE IS PAGE HEADING REPORTING CONDITION FIRST-PAGE LINE 1.
Different REPORTING options provide various levels of control.
These examples demonstrate how to use the REPORTING clause effectively in different report control scenarios.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081IDENTIFICATION DIVISION. PROGRAM-ID. CONDITIONAL-SALES-REPORT. DATA DIVISION. REPORTS SECTION. RD SALES-REPORT PAGE LIMIT IS 60 LINES HEADING 1 FIRST DETAIL 5 LAST DETAIL 55 FOOTING 58. * Always print header 01 REPORT-HEADER TYPE IS REPORT HEADING REPORTING ON LINE 1. * Conditional detail based on sales amount 01 HIGH-SALES-DETAIL TYPE IS DETAIL REPORTING CONDITION HIGH-SALES LINE PLUS 1. 05 COLUMN 1 PIC X(10) SOURCE SALES-DATE. 05 COLUMN 15 PIC X(20) SOURCE SALES-PRODUCT. 05 COLUMN 40 PIC 9(7)V99 SOURCE SALES-AMOUNT. 05 COLUMN 55 PIC X(10) VALUE "***HIGH***". * Regular detail for normal sales 01 NORMAL-SALES-DETAIL TYPE IS DETAIL REPORTING CONDITION NORMAL-SALES LINE PLUS 1. 05 COLUMN 1 PIC X(10) SOURCE SALES-DATE. 05 COLUMN 15 PIC X(20) SOURCE SALES-PRODUCT. 05 COLUMN 40 PIC 9(7)V99 SOURCE SALES-AMOUNT. * Conditional footer for high sales 01 HIGH-SALES-FOOTER TYPE IS CONTROL FOOTING REPORTING CONDITION HIGH-SALES LINE PLUS 2. 05 COLUMN 1 PIC X(20) VALUE "HIGH SALES TOTAL:". 05 COLUMN 25 PIC 9(7)V99 SUM SALES-AMOUNT. WORKING-STORAGE SECTION. 01 SALES-RECORD. 05 SALES-DATE PIC 9(8). 05 SALES-PRODUCT PIC X(20). 05 SALES-AMOUNT PIC 9(7)V99. 01 CONDITION-FLAGS. 05 HIGH-SALES-FLAG PIC X VALUE "N". 88 HIGH-SALES VALUE "Y". 05 NORMAL-SALES-FLAG PIC X VALUE "N". 88 NORMAL-SALES VALUE "Y". PROCEDURE DIVISION. PROCESS-SALES. INITIATE SALES-REPORT PERFORM UNTIL END-OF-FILE READ SALES-FILE AT END MOVE "Y" TO EOF-FLAG NOT AT END * Set conditions based on sales amount IF SALES-AMOUNT > 10000 MOVE "Y" TO HIGH-SALES-FLAG MOVE "N" TO NORMAL-SALES-FLAG ELSE MOVE "N" TO HIGH-SALES-FLAG MOVE "Y" TO NORMAL-SALES-FLAG END-IF * Generate appropriate detail line IF HIGH-SALES GENERATE HIGH-SALES-DETAIL ELSE GENERATE NORMAL-SALES-DETAIL END-IF END-READ END-PERFORM TERMINATE SALES-REPORT.
REPORTING clause enables conditional report generation based on data values.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889* Dynamic report with conditional sections REPORTS SECTION. RD DYNAMIC-REPORT PAGE LIMIT IS 80 LINES HEADING 1 FIRST DETAIL 5 LAST DETAIL 70 FOOTING 75. * Standard header always printed 01 REPORT-HEADER TYPE IS REPORT HEADING REPORTING ON LINE 1. 05 COLUMN 1 PIC X(30) VALUE "DYNAMIC BUSINESS REPORT". * Conditional section headers 01 SALES-SECTION-HEADER TYPE IS CONTROL HEADING REPORTING CONDITION SALES-DATA-PRESENT LINE PLUS 2. 05 COLUMN 1 PIC X(20) VALUE "SALES SECTION". 01 INVENTORY-SECTION-HEADER TYPE IS CONTROL HEADING REPORTING CONDITION INVENTORY-DATA-PRESENT LINE PLUS 2. 05 COLUMN 1 PIC X(25) VALUE "INVENTORY SECTION". * Conditional detail sections 01 SALES-DETAIL TYPE IS DETAIL REPORTING CONDITION SALES-DATA-PRESENT LINE PLUS 1. 05 COLUMN 1 PIC X(10) SOURCE SALES-DATE. 05 COLUMN 15 PIC X(20) SOURCE SALES-AMOUNT. 01 INVENTORY-DETAIL TYPE IS DETAIL REPORTING CONDITION INVENTORY-DATA-PRESENT LINE PLUS 1. 05 COLUMN 1 PIC X(10) SOURCE ITEM-CODE. 05 COLUMN 15 PIC X(20) SOURCE ITEM-QUANTITY. * Conditional footers 01 SALES-FOOTER TYPE IS CONTROL FOOTING REPORTING CONDITION SALES-DATA-PRESENT LINE PLUS 1. 05 COLUMN 1 PIC X(15) VALUE "SALES TOTAL:". 05 COLUMN 20 PIC 9(7)V99 SUM SALES-AMOUNT. 01 INVENTORY-FOOTER TYPE IS CONTROL FOOTING REPORTING CONDITION INVENTORY-DATA-PRESENT LINE PLUS 1. 05 COLUMN 1 PIC X(20) VALUE "INVENTORY TOTAL:". 05 COLUMN 25 PIC 9(5) SUM ITEM-QUANTITY. WORKING-STORAGE SECTION. 01 CONDITION-FLAGS. 05 SALES-FLAG PIC X VALUE "N". 88 SALES-DATA-PRESENT VALUE "Y". 05 INVENTORY-FLAG PIC X VALUE "N". 88 INVENTORY-DATA-PRESENT VALUE "Y". PROCEDURE DIVISION. GENERATE-DYNAMIC-REPORT. * Check what data is available PERFORM CHECK-SALES-DATA PERFORM CHECK-INVENTORY-DATA INITIATE DYNAMIC-REPORT * Generate report based on available data IF SALES-DATA-PRESENT PERFORM GENERATE-SALES-SECTION END-IF IF INVENTORY-DATA-PRESENT PERFORM GENERATE-INVENTORY-SECTION END-IF TERMINATE DYNAMIC-REPORT. CHECK-SALES-DATA. * Logic to determine if sales data exists IF SALES-FILE-HAS-DATA MOVE "Y" TO SALES-FLAG END-IF. CHECK-INVENTORY-DATA. * Logic to determine if inventory data exists IF INVENTORY-FILE-HAS-DATA MOVE "Y" TO INVENTORY-FLAG END-IF.
REPORTING clause enables dynamic report sections based on data availability.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576* Performance-optimized report with REPORTING control REPORTS SECTION. RD OPTIMIZED-REPORT PAGE LIMIT IS 66 LINES HEADING 1 FIRST DETAIL 5 LAST DETAIL 60 FOOTING 64. * Essential header always printed 01 ESSENTIAL-HEADER TYPE IS REPORT HEADING REPORTING ON LINE 1. 05 COLUMN 1 PIC X(20) VALUE "ESSENTIAL REPORT". * Optional detailed header 01 DETAILED-HEADER TYPE IS REPORT HEADING REPORTING CONDITION DETAILED-MODE LINE 2. 05 COLUMN 1 PIC X(30) VALUE "DETAILED ANALYSIS MODE". * Basic detail line 01 BASIC-DETAIL TYPE IS DETAIL REPORTING ON LINE PLUS 1. 05 COLUMN 1 PIC X(10) SOURCE BASIC-DATA. * Extended detail line (conditional) 01 EXTENDED-DETAIL TYPE IS DETAIL REPORTING CONDITION DETAILED-MODE LINE PLUS 1. 05 COLUMN 1 PIC X(10) SOURCE EXTENDED-DATA. 05 COLUMN 15 PIC X(20) SOURCE ADDITIONAL-INFO. * Summary footer always printed 01 SUMMARY-FOOTER TYPE IS REPORT FOOTING REPORTING ON LINE 64. 05 COLUMN 1 PIC X(15) VALUE "REPORT COMPLETE". * Detailed footer (conditional) 01 DETAILED-FOOTER TYPE IS REPORT FOOTING REPORTING CONDITION DETAILED-MODE LINE 63. 05 COLUMN 1 PIC X(20) VALUE "DETAILED ANALYSIS COMPLETE". WORKING-STORAGE SECTION. 01 REPORT-MODE. 05 DETAILED-MODE-FLAG PIC X VALUE "N". 88 DETAILED-MODE VALUE "Y". PROCEDURE DIVISION. GENERATE-OPTIMIZED-REPORT. * Set report mode based on user preference or system parameter IF USER-REQUESTED-DETAILED MOVE "Y" TO DETAILED-MODE-FLAG END-IF INITIATE OPTIMIZED-REPORT PERFORM UNTIL END-OF-FILE READ DATA-FILE AT END MOVE "Y" TO EOF-FLAG NOT AT END * Always generate basic detail GENERATE BASIC-DETAIL * Conditionally generate extended detail IF DETAILED-MODE GENERATE EXTENDED-DETAIL END-IF END-READ END-PERFORM TERMINATE OPTIMIZED-REPORT.
REPORTING clause optimizes performance by controlling report detail levels.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111* Report with error handling using REPORTING REPORTS SECTION. RD ERROR-REPORT PAGE LIMIT IS 60 LINES HEADING 1 FIRST DETAIL 5 LAST DETAIL 55 FOOTING 58. * Standard header 01 REPORT-HEADER TYPE IS REPORT HEADING REPORTING ON LINE 1. 05 COLUMN 1 PIC X(25) VALUE "ERROR HANDLING REPORT". * Error section header 01 ERROR-SECTION-HEADER TYPE IS CONTROL HEADING REPORTING CONDITION ERRORS-PRESENT LINE PLUS 2. 05 COLUMN 1 PIC X(20) VALUE "ERRORS ENCOUNTERED:". * Error detail lines 01 ERROR-DETAIL TYPE IS DETAIL REPORTING CONDITION ERRORS-PRESENT LINE PLUS 1. 05 COLUMN 1 PIC X(10) SOURCE ERROR-CODE. 05 COLUMN 15 PIC X(30) SOURCE ERROR-MESSAGE. 05 COLUMN 50 PIC 9(8) SOURCE ERROR-DATE. * Warning section header 01 WARNING-SECTION-HEADER TYPE IS CONTROL HEADING REPORTING CONDITION WARNINGS-PRESENT LINE PLUS 2. 05 COLUMN 1 PIC X(20) VALUE "WARNINGS ENCOUNTERED:". * Warning detail lines 01 WARNING-DETAIL TYPE IS DETAIL REPORTING CONDITION WARNINGS-PRESENT LINE PLUS 1. 05 COLUMN 1 PIC X(10) SOURCE WARNING-CODE. 05 COLUMN 15 PIC X(30) SOURCE WARNING-MESSAGE. * Success section header 01 SUCCESS-SECTION-HEADER TYPE IS CONTROL HEADING REPORTING CONDITION SUCCESS-PRESENT LINE PLUS 2. 05 COLUMN 1 PIC X(20) VALUE "SUCCESSFUL OPERATIONS:". * Success detail lines 01 SUCCESS-DETAIL TYPE IS DETAIL REPORTING CONDITION SUCCESS-PRESENT LINE PLUS 1. 05 COLUMN 1 PIC X(10) SOURCE SUCCESS-CODE. 05 COLUMN 15 PIC X(30) SOURCE SUCCESS-MESSAGE. * Summary footer 01 SUMMARY-FOOTER TYPE IS REPORT FOOTING REPORTING ON LINE 58. 05 COLUMN 1 PIC X(20) VALUE "REPORT SUMMARY:". WORKING-STORAGE SECTION. 01 ERROR-STATUS. 05 ERROR-FLAG PIC X VALUE "N". 88 ERRORS-PRESENT VALUE "Y". 05 WARNING-FLAG PIC X VALUE "N". 88 WARNINGS-PRESENT VALUE "Y". 05 SUCCESS-FLAG PIC X VALUE "N". 88 SUCCESS-PRESENT VALUE "Y". PROCEDURE DIVISION. GENERATE-ERROR-REPORT. * Check for different types of status PERFORM CHECK-ERROR-STATUS PERFORM CHECK-WARNING-STATUS PERFORM CHECK-SUCCESS-STATUS INITIATE ERROR-REPORT * Generate sections based on status IF ERRORS-PRESENT PERFORM GENERATE-ERROR-SECTION END-IF IF WARNINGS-PRESENT PERFORM GENERATE-WARNING-SECTION END-IF IF SUCCESS-PRESENT PERFORM GENERATE-SUCCESS-SECTION END-IF TERMINATE ERROR-REPORT. CHECK-ERROR-STATUS. * Logic to determine if errors occurred IF ERROR-COUNT > 0 MOVE "Y" TO ERROR-FLAG END-IF. CHECK-WARNING-STATUS. * Logic to determine if warnings occurred IF WARNING-COUNT > 0 MOVE "Y" TO WARNING-FLAG END-IF. CHECK-SUCCESS-STATUS. * Logic to determine if successful operations occurred IF SUCCESS-COUNT > 0 MOVE "Y" TO SUCCESS-FLAG END-IF.
REPORTING clause enables conditional error handling and status reporting.
Following these best practices ensures effective use of the REPORTING clause in COBOL applications.
Pitfall | Problem | Solution |
---|---|---|
Conflicting conditions | Unexpected behavior | Ensure conditions are mutually exclusive |
Unset conditions | Missing output | Always set condition flags |
Complex condition logic | Maintenance difficulties | Keep conditions simple |
Missing condition testing | Undetected errors | Test all condition paths |
Poor condition naming | Code confusion | Use descriptive condition names |
Scenario | Use REPORTING | Use Other Methods |
---|---|---|
Conditional report sections | Yes | No |
Performance optimization | Yes | No |
Dynamic formatting | Yes | No |
Complex business logic | No | Yes (procedures) |
Data transformation | No | Yes (data manipulation) |
Usage | Syntax | Purpose |
---|---|---|
Enable report group | REPORTING ON | Always process report group |
Disable report group | REPORTING OFF | Never process report group |
Conditional processing | REPORTING CONDITION name | Process when condition is true |
Multiple conditions | Multiple REPORTING clauses | Complex conditional logic |
Dynamic control | REPORTING with program logic | Runtime condition setting |
1. What is the primary purpose of the REPORTING clause in COBOL?
2. In which context is the REPORTING clause most commonly used?
3. What happens when a REPORTING clause is executed?
4. What is the relationship between REPORTING and Report Writer verbs?
5. Which of the following is a valid REPORTING clause usage?
Complete guide to COBOL Report Writer feature.
Using REPORT clause for report structure definition.
Using INITIATE to start Report Writer reports.
Using GENERATE to create report output.
Using TERMINATE to end Report Writer reports.