MainframeMaster

COBOL Tutorial

COBOL GENERATE Statement

The GENERATE statement represents a sophisticated automated report output mechanism within COBOL's Report Writer facility, serving as the primary command for producing formatted report content through intelligent data presentation and automatic layout management. This statement embodies the principles of declarative reporting by providing comprehensive output generation capabilities that automatically handle page formatting, control break processing, summary calculations, and line positioning while maintaining consistent report structure and ensuring professional presentation standards in enterprise reporting environments that require reliable document generation and business intelligence output capabilities.

Syntax and Usage

GENERATE Statement Syntax
cobol
1
2
3
4
5
6
7
GENERATE report-group-name GENERATE report-name *> Examples: GENERATE EMPLOYEE-DETAIL GENERATE DEPARTMENT-SUMMARY GENERATE PAYROLL-REPORT
Report Writer
Output Control
Automated Generation

Basic GENERATE Examples

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
112
113
114
115
116
117
118
119
120
121
IDENTIFICATION DIVISION. PROGRAM-ID. GENERATE-EXAMPLES. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT EMPLOYEE-FILE ASSIGN TO 'EMPLOYEES.DAT' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS INPUT-FILE-STATUS. SELECT REPORT-FILE ASSIGN TO 'EMPRPT.RPT' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS REPORT-FILE-STATUS. DATA DIVISION. FILE SECTION. FD EMPLOYEE-FILE RECORD CONTAINS 100 CHARACTERS. 01 EMPLOYEE-RECORD. 05 EMP-ID PIC 9(6). 05 EMP-NAME PIC X(30). 05 EMP-DEPARTMENT PIC X(15). 05 EMP-SALARY PIC 9(7)V99. 05 EMP-HIRE-DATE PIC 9(8). 05 FILLER PIC X(32). FD REPORT-FILE RECORD CONTAINS 132 CHARACTERS. 01 REPORT-RECORD PIC X(132). REPORT SECTION. RD EMPLOYEE-REPORT CONTROLS ARE FINAL EMP-DEPARTMENT PAGE LIMIT IS 66 LINES HEADING 1 FIRST DETAIL 8 LAST DETAIL 58 FOOTING 62. 01 REPORT-HEADER TYPE IS REPORT HEADING. 05 LINE NUMBER IS 1. 10 COLUMN 1 PIC X(30) VALUE 'EMPLOYEE SALARY REPORT'. 10 COLUMN 50 PIC X(5) VALUE 'PAGE:'. 10 COLUMN 56 PIC ZZ9 SOURCE IS PAGE-COUNTER. 05 LINE NUMBER IS 3. 10 COLUMN 1 PIC X(80) VALUE ALL '='. 01 PAGE-HEADER TYPE IS PAGE HEADING. 05 LINE NUMBER IS 5. 10 COLUMN 1 PIC X(6) VALUE 'EMP ID'. 10 COLUMN 10 PIC X(20) VALUE 'EMPLOYEE NAME'. 10 COLUMN 35 PIC X(15) VALUE 'DEPARTMENT'. 10 COLUMN 55 PIC X(10) VALUE 'SALARY'. 10 COLUMN 70 PIC X(10) VALUE 'HIRE DATE'. 05 LINE NUMBER IS 6. 10 COLUMN 1 PIC X(80) VALUE ALL '-'. 01 EMPLOYEE-DETAIL TYPE IS DETAIL. 05 LINE NUMBER IS PLUS 1. 10 COLUMN 1 PIC 9(6) SOURCE IS EMP-ID. 10 COLUMN 10 PIC X(20) SOURCE IS EMP-NAME. 10 COLUMN 35 PIC X(15) SOURCE IS EMP-DEPARTMENT. 10 COLUMN 55 PIC ZZZ,ZZ9.99 SOURCE IS EMP-SALARY. 10 COLUMN 70 PIC 99/99/9999 SOURCE IS EMP-HIRE-DATE. 01 DEPT-FOOTER TYPE IS CONTROL FOOTING EMP-DEPARTMENT. 05 LINE NUMBER IS PLUS 2. 10 COLUMN 35 PIC X(15) VALUE 'DEPT TOTAL:'. 10 COLUMN 55 PIC ZZZ,ZZ9.99 SUM EMP-SALARY. 05 LINE NUMBER IS PLUS 1. 10 COLUMN 35 PIC X(15) VALUE 'DEPT COUNT:'. 10 COLUMN 55 PIC ZZZ,ZZ9 COUNT EMP-SALARY. 01 FINAL-FOOTER TYPE IS CONTROL FOOTING FINAL. 05 LINE NUMBER IS PLUS 3. 10 COLUMN 1 PIC X(15) VALUE 'GRAND TOTALS:'. 05 LINE NUMBER IS PLUS 1. 10 COLUMN 35 PIC X(15) VALUE 'TOTAL PAYROLL:'. 10 COLUMN 55 PIC ZZZ,ZZ9.99 SUM EMP-SALARY. 05 LINE NUMBER IS PLUS 1. 10 COLUMN 35 PIC X(15) VALUE 'TOTAL EMPLOYEES:'. 10 COLUMN 55 PIC ZZZ,ZZ9 COUNT EMP-SALARY. WORKING-STORAGE SECTION. 01 FILE-STATUS-FIELDS. 05 INPUT-FILE-STATUS PIC XX. 88 INPUT-SUCCESS VALUE '00'. 88 INPUT-EOF VALUE '10'. 05 REPORT-FILE-STATUS PIC XX. 88 REPORT-SUCCESS VALUE '00'. PROCEDURE DIVISION. MAIN-PROCESSING. OPEN INPUT EMPLOYEE-FILE OPEN OUTPUT REPORT-FILE INITIATE EMPLOYEE-REPORT READ EMPLOYEE-FILE AT END SET INPUT-EOF TO TRUE END-READ PERFORM UNTIL INPUT-EOF GENERATE EMPLOYEE-DETAIL READ EMPLOYEE-FILE AT END SET INPUT-EOF TO TRUE END-READ END-PERFORM TERMINATE EMPLOYEE-REPORT CLOSE EMPLOYEE-FILE CLOSE REPORT-FILE STOP RUN.

Key Features and Benefits

Automated Processing
  • • Automatic page formatting
  • • Control break processing
  • • Summary calculations
  • • Line spacing management
Report Management
  • • Page break handling
  • • Header and footer control
  • • Data presentation formatting
  • • Professional output quality

Interactive Tutorial

Hands-On Exercise: Report Generation
Practice using GENERATE for different report scenarios

Exercise 1: Simple Detail Report

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
PROCEDURE DIVISION. INITIATE SALES-REPORT PERFORM UNTIL END-OF-FILE READ SALES-FILE AT END SET END-OF-FILE TO TRUE NOT AT END GENERATE SALES-DETAIL END-READ END-PERFORM TERMINATE SALES-REPORT.

Exercise 2: Summary Report

cobol
1
2
3
4
5
6
7
8
9
10
11
PROCEDURE DIVISION. INITIATE SUMMARY-REPORT *> Generate summary lines only PERFORM VARYING DEPT-CODE FROM 1 BY 1 UNTIL DEPT-CODE > MAX-DEPARTMENTS MOVE DEPT-CODE TO SUMMARY-DEPT-CODE GENERATE DEPARTMENT-SUMMARY END-PERFORM TERMINATE SUMMARY-REPORT.

Advanced GENERATE Patterns

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
IDENTIFICATION DIVISION. PROGRAM-ID. ADVANCED-GENERATE. DATA DIVISION. REPORT SECTION. RD MULTI-LEVEL-REPORT CONTROLS ARE FINAL REGION-CODE DISTRICT-CODE STORE-CODE PAGE LIMIT IS 66 LINES HEADING 1 FIRST DETAIL 10 LAST DETAIL 55 FOOTING 60. *> Multiple control break levels 01 STORE-DETAIL TYPE IS DETAIL. 05 LINE NUMBER IS PLUS 1. 10 COLUMN 5 PIC X(10) SOURCE IS STORE-NAME. 10 COLUMN 20 PIC ZZ,ZZ9.99 SOURCE IS DAILY-SALES. 10 COLUMN 35 PIC ZZ9 SOURCE IS TRANSACTION-COUNT. 01 STORE-TOTAL TYPE IS CONTROL FOOTING STORE-CODE. 05 LINE NUMBER IS PLUS 1. 10 COLUMN 5 PIC X(15) VALUE 'Store Total:'. 10 COLUMN 20 PIC ZZ,ZZ9.99 SUM DAILY-SALES. 01 DISTRICT-TOTAL TYPE IS CONTROL FOOTING DISTRICT-CODE. 05 LINE NUMBER IS PLUS 2. 10 COLUMN 5 PIC X(15) VALUE 'District Total:'. 10 COLUMN 20 PIC ZZZ,ZZ9.99 SUM DAILY-SALES. 01 REGION-TOTAL TYPE IS CONTROL FOOTING REGION-CODE. 05 LINE NUMBER IS PLUS 2. 10 COLUMN 5 PIC X(15) VALUE 'Region Total:'. 10 COLUMN 20 PIC ZZZ,ZZ9.99 SUM DAILY-SALES. 01 GRAND-TOTAL TYPE IS CONTROL FOOTING FINAL. 05 LINE NUMBER IS PLUS 3. 10 COLUMN 5 PIC X(15) VALUE 'Grand Total:'. 10 COLUMN 20 PIC Z,ZZZ,ZZ9.99 SUM DAILY-SALES. PROCEDURE DIVISION. ADVANCED-PROCESSING. INITIATE MULTI-LEVEL-REPORT PERFORM UNTIL END-OF-INPUT READ SALES-INPUT-FILE AT END SET END-OF-INPUT TO TRUE NOT AT END *> Generate detail and automatic control breaks GENERATE STORE-DETAIL END-READ END-PERFORM TERMINATE MULTI-LEVEL-REPORT STOP RUN.

Best Practices

Knowledge Check

Test Your Understanding

Question 1: Basic Usage

What must you do before using GENERATE statements?

Answer: You must INITIATE the report before using GENERATE statements. This initializes the Report Writer and prepares the report for output generation.

Question 2: Control Breaks

How does GENERATE handle control breaks automatically?

Answer: GENERATE automatically detects control field changes and produces appropriate control footing groups before generating the current detail line, handling totals and summaries automatically.

Question 3: Report Completion

What statement finalizes report generation?

Answer: TERMINATE report-name finalizes report generation, produces final control footings, and completes the report output process.

Common Patterns

Detail Report Pattern
cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PROCEDURE DIVISION. OPEN INPUT DATA-FILE OPEN OUTPUT REPORT-FILE INITIATE DETAIL-REPORT PERFORM UNTIL END-OF-FILE READ DATA-FILE AT END SET END-OF-FILE TO TRUE NOT AT END GENERATE DETAIL-LINE END-READ END-PERFORM TERMINATE DETAIL-REPORT CLOSE DATA-FILE REPORT-FILE.
Summary Report Pattern
cobol
1
2
3
4
5
6
7
8
9
10
11
12
PROCEDURE DIVISION. INITIATE SUMMARY-REPORT *> Process aggregated data PERFORM VARYING CATEGORY FROM 1 BY 1 UNTIL CATEGORY > MAX-CATEGORIES MOVE CATEGORY-TOTALS(CATEGORY) TO SUMMARY-AMOUNT GENERATE SUMMARY-LINE END-PERFORM TERMINATE SUMMARY-REPORT.

Frequently Asked Questions