MainframeMaster

COBOL Tutorial

COBOL REPORTING Clause - Quick Reference

Progress0 of 0 lessons

Overview

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.

Purpose and Usage

  • Conditional control - Control report generation based on conditions
  • Formatting control - Manage report formatting and appearance
  • Performance optimization - Reduce unnecessary report processing
  • Dynamic behavior - Adapt report output based on data or logic
  • Output suppression - Control when report sections are generated

REPORTING vs REPORT Concept

REPORT: [Structure Definition] → [Report Framework]
REPORTING: [Behavior Control] → [Formatting Options]
REPORT defines structure, REPORTING controls behavior

REPORTING clause provides detailed control over Report Writer behavior.

Syntax

The REPORTING clause follows specific syntax patterns within report group definitions and can include various control options.

Basic Syntax

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
* 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.

REPORTING vs REPORT Comparison

AspectREPORTINGREPORT
LevelReport group (01)Report description (RD)
PurposeBehavior controlStructure definition
ScopeIndividual groupsEntire report
OptionsON/OFF/CONDITIONPage limits, formatting
UsageWithin report groupsAt report level

REPORTING Options

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
* 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.

Practical Examples

These examples demonstrate how to use the REPORTING clause effectively in different report control scenarios.

Conditional Sales Report

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
IDENTIFICATION 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.

Dynamic Report Sections

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
* 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.

Performance-Optimized Report

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
* 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.

Error Handling Report

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
* 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.

Best Practices and Tips

Following these best practices ensures effective use of the REPORTING clause in COBOL applications.

REPORTING Best Practices

  • Use meaningful condition names - Choose descriptive condition identifiers
  • Plan condition logic carefully - Ensure conditions are mutually exclusive when needed
  • Test all condition paths - Verify behavior with various data scenarios
  • Document condition logic - Clearly document when conditions are set
  • Optimize performance - Use REPORTING to reduce unnecessary processing
  • Maintain consistency - Use consistent condition naming conventions

Common Pitfalls to Avoid

PitfallProblemSolution
Conflicting conditionsUnexpected behaviorEnsure conditions are mutually exclusive
Unset conditionsMissing outputAlways set condition flags
Complex condition logicMaintenance difficultiesKeep conditions simple
Missing condition testingUndetected errorsTest all condition paths
Poor condition namingCode confusionUse descriptive condition names

Performance Considerations

  • Conditional processing - REPORTING can reduce unnecessary output generation
  • Memory efficiency - Suppressed report groups use less memory
  • Processing optimization - Conditional logic can improve overall performance
  • Output control - REPORTING helps manage output volume
  • Resource management - Efficient use of Report Writer resources

When to Use REPORTING vs Other Methods

ScenarioUse REPORTINGUse Other Methods
Conditional report sectionsYesNo
Performance optimizationYesNo
Dynamic formattingYesNo
Complex business logicNoYes (procedures)
Data transformationNoYes (data manipulation)

REPORTING Clause Quick Reference

UsageSyntaxPurpose
Enable report groupREPORTING ONAlways process report group
Disable report groupREPORTING OFFNever process report group
Conditional processingREPORTING CONDITION nameProcess when condition is true
Multiple conditionsMultiple REPORTING clausesComplex conditional logic
Dynamic controlREPORTING with program logicRuntime condition setting

Test Your Knowledge

1. What is the primary purpose of the REPORTING clause in COBOL?

  • To create reports
  • To control Report Writer behavior and formatting
  • To generate file reports
  • To create program documentation

2. In which context is the REPORTING clause most commonly used?

  • PROCEDURE DIVISION
  • Report group definitions
  • FILE SECTION
  • WORKING-STORAGE SECTION

3. What happens when a REPORTING clause is executed?

  • A report is automatically generated
  • Report formatting is controlled
  • A report file is created
  • Report data is processed

4. What is the relationship between REPORTING and Report Writer verbs?

  • They are the same thing
  • REPORTING controls behavior, verbs execute actions
  • REPORTING is faster than verbs
  • They cannot be used together

5. Which of the following is a valid REPORTING clause usage?

  • REPORTING ON
  • REPORTING OFF
  • REPORTING CONDITION
  • All of the above

Frequently Asked Questions