100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace
Programming

Report Writer Basics

Explore COBOL's Report Writer feature, a declarative way to generate formatted, control-broken reports without manually coding line spacing and totals.

File HandlingAdvanced11 min readJul 10, 2026
Analogies

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.

cobol
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

Was this page helpful?

Topics covered

#Programming#COBOLStudyNotes#ReportWriterBasics#Report#Writer#Automates#Groups#StudyNotes#SkillVeris#ExamPrep