MainframeMaster

COBOL Tutorial

COBOL Report Writer

Progress0 of 0 lessons

Report Writer Fundamentals

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.

What is Report Writer?

Report Writer is a COBOL feature that automates the creation of professional reports. It handles:

  • Automatic page numbering and headers/footers
  • Control break processing with subtotals
  • Line spacing and formatting
  • Report group organization
  • Summary calculations
  • Consistent report layouts

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.

Report Writer Structure

A Report Writer program consists of several key components:

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
IDENTIFICATION 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.

Key Report Writer Components

ComponentPurposeLocation
REPORT SECTIONContains report definitionsDATA DIVISION
RD (Report Description)Defines report layout and control breaksREPORT SECTION
Report GroupsDefine specific report lines and formattingREPORT SECTION
INITIATEStarts report processingPROCEDURE DIVISION
GENERATEProduces report linesPROCEDURE DIVISION
TERMINATEEnds report processingPROCEDURE DIVISION

Report Description (RD) Entries

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.

Basic RD Structure

The RD entry follows a specific format with various clauses that control report behavior:

cobol
1
2
3
4
5
6
7
8
RD 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.

Page Layout Clauses

These clauses control the physical layout of each page:

cobol
1
2
3
4
5
6
7
RD 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 ...

  • PAGE LIMIT - Total number of lines per page
  • HEADING - Line number for page headings
  • FIRST DETAIL - First line available for detail records
  • LAST DETAIL - Last line available for detail records
  • FOOTING - Line number for page footings

Control Break Clauses

The CONTROL clause defines when control breaks occur and in what order:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
* 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.

Advanced RD Clauses

Additional clauses provide more control over report behavior:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
RD 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 ...

  • CONTROL FOOTING/HEADING IS OMITTED - Skip specific control groups
  • LINE COUNTER - Variable to track current line number
  • PAGE COUNTER - Variable to track current page number
  • NEXT GROUP - Control line spacing between groups

RD Entry Requirements

ClauseRequiredDefaultPurpose
PAGE LIMITYesNoneDefine page size
HEADINGNo1Page heading line
FIRST DETAILNoHEADING + 1First detail line
LAST DETAILNoPAGE LIMIT - 1Last detail line
FOOTINGNoPAGE LIMITPage footing line
CONTROLNoFINAL onlyControl break fields

Report Groups

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.

Types of Report Groups

Report Writer provides several types of report groups, each serving a specific purpose:

TypeWhen ProcessedPurposeExample Use
REPORT HEADINGOnce at startReport title and setupReport title, date, parameters
PAGE HEADINGEach pageColumn headersColumn titles, page numbers
CONTROL HEADINGControl breaksGroup headersRegion/state headers
DETAILEach recordMain dataSales records, customer data
CONTROL FOOTINGControl breaksGroup summariesSubtotals, counts
PAGE FOOTINGEach pagePage summariesPage totals, footnotes
REPORT FOOTINGOnce at endFinal summariesGrand totals, final notes

Report Heading and Footing Groups

These groups appear once at the beginning and end of the entire report:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
* 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.

Page Heading and Footing Groups

These groups appear on every page of the report:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
* 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.

Control Heading and Footing Groups

These groups are processed when control breaks occur:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
* 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 Report Groups

Detail groups are processed for each input record and contain the main report data:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
* 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 Group Processing Order

Report groups are processed in a specific order:

  1. REPORT HEADING - Once at the beginning
  2. PAGE HEADING - At the start of each page
  3. CONTROL FOOTING - When control breaks occur (highest to lowest level)
  4. CONTROL HEADING - When control breaks occur (lowest to highest level)
  5. DETAIL - For each input record
  6. PAGE FOOTING - At the end of each page
  7. REPORT FOOTING - Once at the end

Report Writer Verbs and Processing

Report Writer uses specific verbs to control report processing. Understanding these verbs and their proper usage is essential for creating functional reports.

INITIATE Statement

The INITIATE statement starts report processing and must be called before any GENERATE statements:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
* 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.

GENERATE Statement

The GENERATE statement produces report lines according to the report group definitions:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
* 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.

TERMINATE Statement

The TERMINATE statement ends report processing and must be called after all data has been processed:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
* 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 Processing Flow

  1. Open Files - Open input and output files
  2. INITIATE - Start report processing
  3. Read Input Data - Read records from input file
  4. GENERATE - Process each record through Report Writer
  5. TERMINATE - End report processing
  6. Close Files - Close all files

Formatting and Data Sources

Report Writer provides powerful formatting capabilities and various data sources for creating professional-looking reports with dynamic content.

Data Sources

Report Writer can use different sources for data in report groups:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
* 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.

Line Positioning

Report Writer provides flexible line positioning options:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
* 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.

Conditional Formatting

Report Writer supports conditional formatting for dynamic reports:

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
* 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.

Formatting Options Summary

OptionPurposeExample
SOURCEReference data fieldsSOURCE CUSTOMER-NAME
VALUEConstant textVALUE "TOTAL:"
SUMAutomatic totalsSUM SALES-AMOUNT
LINELine positioningLINE 1 or LINE PLUS 2
COLUMNColumn positioningCOLUMN 30
WHENConditional formattingWHEN SALES-AMOUNT > 10000

Exercises

Exercise 1: Simple Sales Report

Create a Report Writer program that generates a simple sales report with the following requirements:

  • Report heading with title and date
  • Page heading with column headers
  • Detail lines showing customer name, sales amount, and date
  • Page footing with page totals
  • Report footing with grand total

Solution
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
IDENTIFICATION 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.

Exercise 2: Control Break Report

Create a Report Writer program with control breaks for region and state. The program should:

  • Group sales by region and state
  • Show region and state headers
  • Display subtotals for each state and region
  • Include a grand total at the end
  • Use conditional formatting for high-value sales

Solution
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
IDENTIFICATION 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.

Exercise 3: Advanced Report with Calculations

Create a comprehensive Report Writer program that includes:

  • Multiple control break levels (region, state, city)
  • Calculated fields (commission, tax)
  • Conditional formatting based on multiple criteria
  • Page totals and running totals
  • Summary statistics (count, average, maximum)

Solution
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
IDENTIFICATION 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.

Test Your Knowledge

1. What is the purpose of the Report Writer feature in COBOL?

  • To create database tables
  • To generate formatted reports with headers, footers, and control breaks
  • To process input files
  • To perform calculations

2. What is a Report Description (RD) entry?

  • A file description for report files
  • A description of the report layout and formatting rules
  • A working storage variable
  • A procedure division paragraph

3. What is a control break in Report Writer?

  • A page break that occurs automatically
  • A change in a control field value that triggers special processing
  • A program termination condition
  • A file error condition

4. Which Report Writer verb is used to generate a report line?

  • WRITE
  • GENERATE
  • PRINT
  • DISPLAY

5. What is the purpose of the FINAL clause in a Report Description?

  • To end the report
  • To specify final processing after all data has been processed
  • To define the last page of the report
  • To close the report file

Frequently Asked Questions