What Report Writer Automates
Report Writer is an optional COBOL feature that lets a programmer describe the desired layout of a printed report declaratively, in the REPORT SECTION of the DATA DIVISION, instead of writing procedural logic to track line counts, page breaks, and control totals by hand. The RD (Report Description) entry links a report to an output file declared with REPORT IS in the FD, and beneath it, 01-level report group entries describe headings, detail lines, and footings using clauses like TYPE IS PAGE HEADING, TYPE IS DETAIL, and TYPE IS CONTROL FOOTING, with the runtime automatically handling page overflow via LINE-COUNTER and PAGE-COUNTER special registers that the programmer never has to increment manually.
Cricket analogy: Report Writer is like a modern broadcast graphics system that automatically updates the scoreboard overlay after each ball, instead of a producer manually typing in the new score every time.
Report Groups: HEADING, DETAIL, and FOOTING
A report is built from named report groups, each an 01-level entry under the RD with a TYPE clause: TYPE IS REPORT HEADING prints once at the very start, TYPE IS PAGE HEADING prints at the top of every page (often via automatic overflow), TYPE IS DETAIL (abbreviated DE) prints one line per data record via the GENERATE statement, TYPE IS CONTROL FOOTING prints subtotal lines whenever a designated control field changes value, and TYPE IS REPORT FOOTING prints once at the very end for grand totals. Individual fields within these groups use LINE NUMBER and COLUMN NUMBER (or PLUS n for relative positioning) to place data precisely, and a SUM clause on a control footing field, such as 05 TOTAL-BY-REGION PIC 9(9)V99 SUM REGION-SALES, tells Report Writer to automatically accumulate and reset the total whenever the control break occurs — no manual ADD or MOVE-to-zero logic required.
Cricket analogy: CONTROL FOOTING triggering on a field change is like a scoreboard automatically inserting a 'End of Innings' summary line the moment the tenth wicket falls, without an operator manually typing the trigger.
INITIATE, GENERATE, and TERMINATE
Report Writer is driven procedurally by three statements: INITIATE opens the report and resets its internal counters and control fields, GENERATE produces output — either GENERATE detail-name for a specific detail line (which also triggers any due control footings and headings automatically) or GENERATE report-name to force just the control-break logic without a detail line, and TERMINATE closes out the report, firing any final CONTROL FOOTING and the REPORT FOOTING before the underlying file can be closed. Because GENERATE handles page overflow, heading repetition, and control-break totaling internally, the procedural code in a Report Writer program is dramatically shorter than the equivalent hand-coded report logic, though this conciseness comes at the cost of a steep learning curve and reduced flexibility for irregular, non-tabular layouts.
Cricket analogy: INITIATE is like the umpires resetting all counters to zero before the first ball of a new match, and TERMINATE is like the final scorecard being signed and closed after the last wicket or over.
DATA DIVISION.
FILE SECTION.
FD REPORT-FILE
REPORT IS SALES-REPORT.
REPORT SECTION.
RD SALES-REPORT
CONTROLS ARE REGION-NAME
PAGE LIMIT IS 60 LINES.
01 TYPE IS PAGE HEADING.
05 LINE 1 COLUMN 30 PIC X(20) VALUE 'REGIONAL SALES REPORT'.
01 DETAIL-LINE TYPE IS DETAIL LINE PLUS 1.
05 COLUMN 5 REGION-NAME PIC X(15).
05 COLUMN 25 SALE-AMOUNT PIC $$$,$$9.99.
01 TYPE IS CONTROL FOOTING REGION-NAME LINE PLUS 2.
05 COLUMN 5 VALUE 'REGION TOTAL:'.
05 COLUMN 25 TOTAL-BY-REGION PIC $$$,$$9.99
SUM SALE-AMOUNT.
PROCEDURE DIVISION.
MAIN-LOGIC.
INITIATE SALES-REPORT
PERFORM UNTIL WS-EOF-FLAG = 'Y'
READ SALES-FILE
AT END MOVE 'Y' TO WS-EOF-FLAG
NOT AT END GENERATE DETAIL-LINE
END-READ
END-PERFORM
TERMINATE SALES-REPORT.The CONTROLS ARE clause on the RD entry lists control fields in major-to-minor order (e.g., REGION-NAME then SALES-REP-NAME). Report Writer compares each control field's value on every GENERATE and automatically fires the matching CONTROL FOOTING when any of them changes.
Report Writer is not supported by every COBOL compiler or runtime (some modern platforms and open-source compilers have limited or no support), so verify compiler compatibility before designing a new program around it; many contemporary shops replicate its behavior with hand-coded control-break logic for portability.
- Report Writer declaratively defines report layout in the REPORT SECTION, tied to a file via RD and REPORT IS.
- Report groups use TYPE IS clauses: REPORT HEADING, PAGE HEADING, DETAIL, CONTROL FOOTING, REPORT FOOTING.
- SUM on a control footing field auto-accumulates and resets totals at control breaks, no manual ADD needed.
- INITIATE resets the report; GENERATE produces detail lines and triggers due control footings; TERMINATE closes it out.
- CONTROLS ARE lists control fields major-to-minor for automatic break detection.
- LINE-COUNTER and PAGE-COUNTER special registers manage pagination automatically.
- Report Writer support varies by compiler; verify availability before relying on it for portability.
Practice what you learned
1. What DATA DIVISION section contains a Report Writer report's layout definition?
2. Which clause on a report group field automatically accumulates a total at each control break?
3. Which statement produces a detail line and triggers any due control footings automatically?
4. What does the CONTROLS ARE clause on an RD entry specify?
5. What should a developer verify before designing a new program around Report Writer?
Was this page helpful?
You May Also Like
SORT and MERGE in COBOL
Learn how COBOL's built-in SORT and MERGE verbs reorder and combine files using the language's native sort work file mechanism.
Sequential File Processing
Learn how COBOL reads, writes, and updates records in a sequential file, the oldest and most common file organization in mainframe batch systems.
Indexed File Processing (VSAM)
Understand how COBOL uses indexed files, typically backed by VSAM KSDS on mainframes, to perform fast random and sequential access by key.
Related Reading
Related Study Notes in Programming
Browse all study notesApache Spark Study Notes
Programming · 30 topics
ProgrammingApache Flink Study Notes
Programming · 30 topics
ProgrammingHadoop Study Notes
Programming · 30 topics
ProgrammingSnowflake Study Notes
Programming · 30 topics
ProgrammingApache Airflow Study Notes
Programming · 30 topics
Programmingdbt (Data Build Tool) Study Notes
Programming · 30 topics