The HEADING statement represents a fundamental report formatting and page control mechanism within COBOL Report Writer environments, serving as the primary specification for creating structured headers, page titles, section dividers, and document organization elements that provide consistent formatting across enterprise reporting applications. This statement embodies sophisticated document layout principles by enabling precise control over header placement, text formatting, data positioning, and page organization while supporting complex business reporting requirements including multi-level headers, conditional header display, dynamic content generation, and integrated formatting capabilities that ensure professional document presentation, maintain corporate standards, and deliver comprehensive reporting solutions for diverse business domains requiring structured data presentation, regulatory compliance documentation, and maintainable report generation with consistent visual hierarchy and professional appearance standards.
123456789101112131415161718192021222324252627282930313233*> Basic HEADING syntax 01 heading-name TYPE IS PAGE HEADING. 05 LINE NUMBER IS line-number. 05 COLUMN NUMBER IS column-number PIC clause VALUE literal. *> Report Section HEADING REPORT SECTION. RD report-name PAGE LIMIT IS number LINES HEADING number FIRST DETAIL number LAST DETAIL number FOOTING number. 01 PAGE-HEADER TYPE IS PAGE HEADING. 05 LINE NUMBER IS 1. 05 COLUMN NUMBER IS 1 PIC X(20) VALUE "COMPANY REPORT". 05 COLUMN NUMBER IS 60 PIC X(10) VALUE "PAGE ". 05 COLUMN NUMBER IS 70 PIC Z9 SOURCE IS PAGE-COUNTER. *> Group HEADING 01 DEPT-HEADER TYPE IS CONTROL HEADING dept-code. 05 LINE NUMBER IS PLUS 2. 05 COLUMN NUMBER IS 10 PIC X(15) VALUE "DEPARTMENT: ". 05 COLUMN NUMBER IS 25 PIC X(20) SOURCE IS DEPT-NAME. *> Detail line with heading characteristics 01 COLUMN-HEADERS TYPE IS PAGE HEADING. 05 LINE NUMBER IS 3. 05 COLUMN NUMBER IS 1 PIC X(10) VALUE "EMPLOYEE". 05 COLUMN NUMBER IS 15 PIC X(15) VALUE "NAME". 05 COLUMN NUMBER IS 35 PIC X(10) VALUE "SALARY". 05 COLUMN NUMBER IS 50 PIC X(10) VALUE "DEPARTMENT".
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224IDENTIFICATION DIVISION. PROGRAM-ID. HEADING-EXAMPLES. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT EMPLOYEE-FILE ASSIGN TO "EMPLOYEE.DAT" ORGANIZATION IS SEQUENTIAL. SELECT REPORT-FILE ASSIGN TO "REPORT.TXT" ORGANIZATION IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD EMPLOYEE-FILE. 01 EMPLOYEE-RECORD. 05 EMP-ID PIC 9(6). 05 EMP-NAME PIC X(25). 05 EMP-DEPT PIC X(10). 05 EMP-SALARY PIC 9(7)V99. 05 EMP-HIRE-DATE PIC 9(8). FD REPORT-FILE. 01 REPORT-LINE PIC X(132). WORKING-STORAGE SECTION. 01 WS-PAGE-COUNTER PIC 99 VALUE 1. 01 WS-LINE-COUNTER PIC 99 VALUE 0. 01 WS-CURRENT-DATE. 05 WS-YEAR PIC 9(4). 05 WS-MONTH PIC 9(2). 05 WS-DAY PIC 9(2). *> Page header structure 01 PAGE-HEADER. 05 PH-LINE1. 10 FILLER PIC X(45) VALUE SPACES. 10 FILLER PIC X(25) VALUE "EMPLOYEE SALARY REPORT". 10 FILLER PIC X(62) VALUE SPACES. 05 PH-LINE2. 10 FILLER PIC X(10) VALUE "DATE: ". 10 PH-DATE PIC X(10). 10 FILLER PIC X(92) VALUE SPACES. 10 FILLER PIC X(6) VALUE "PAGE ". 10 PH-PAGE PIC Z9. 10 FILLER PIC X(12) VALUE SPACES. 05 PH-LINE3 PIC X(132) VALUE ALL "-". *> Column headers 01 COLUMN-HEADER. 05 CH-LINE1. 10 FILLER PIC X(2) VALUE SPACES. 10 FILLER PIC X(8) VALUE "EMP ID". 10 FILLER PIC X(5) VALUE SPACES. 10 FILLER PIC X(15) VALUE "EMPLOYEE NAME". 10 FILLER PIC X(10) VALUE SPACES. 10 FILLER PIC X(10) VALUE "DEPARTMENT". 10 FILLER PIC X(7) VALUE SPACES. 10 FILLER PIC X(10) VALUE "SALARY". 10 FILLER PIC X(10) VALUE SPACES. 10 FILLER PIC X(10) VALUE "HIRE DATE". 10 FILLER PIC X(45) VALUE SPACES. 05 CH-LINE2 PIC X(132) VALUE ALL "=". *> Department header 01 DEPT-HEADER. 05 DH-LINE1 PIC X(132) VALUE SPACES. 05 DH-LINE2. 10 FILLER PIC X(5) VALUE SPACES. 10 FILLER PIC X(12) VALUE "DEPARTMENT: ". 10 DH-DEPT PIC X(10). 10 FILLER PIC X(105) VALUE SPACES. 05 DH-LINE3 PIC X(132) VALUE ALL "-". *> Summary header 01 SUMMARY-HEADER. 05 SH-LINE1 PIC X(132) VALUE SPACES. 05 SH-LINE2. 10 FILLER PIC X(50) VALUE SPACES. 10 FILLER PIC X(15) VALUE "SALARY SUMMARY". 10 FILLER PIC X(67) VALUE SPACES. 05 SH-LINE3 PIC X(132) VALUE ALL "=". PROCEDURE DIVISION. MAIN-PROCESSING. OPEN INPUT EMPLOYEE-FILE OPEN OUTPUT REPORT-FILE PERFORM PRINT-PAGE-HEADER PERFORM PRINT-COLUMN-HEADER PERFORM PROCESS-EMPLOYEES UNTIL END-OF-FILE PERFORM PRINT-SUMMARY-HEADER PERFORM PRINT-SUMMARY CLOSE EMPLOYEE-FILE CLOSE REPORT-FILE STOP RUN. PRINT-PAGE-HEADER. *> Format current date MOVE FUNCTION CURRENT-DATE(1:8) TO WS-CURRENT-DATE STRING WS-MONTH "/" WS-DAY "/" WS-YEAR DELIMITED BY SIZE INTO PH-DATE *> Set page number MOVE WS-PAGE-COUNTER TO PH-PAGE *> Write page header lines MOVE PH-LINE1 TO REPORT-LINE WRITE REPORT-LINE ADD 1 TO WS-LINE-COUNTER MOVE PH-LINE2 TO REPORT-LINE WRITE REPORT-LINE ADD 1 TO WS-LINE-COUNTER MOVE PH-LINE3 TO REPORT-LINE WRITE REPORT-LINE ADD 1 TO WS-LINE-COUNTER *> Add blank line MOVE SPACES TO REPORT-LINE WRITE REPORT-LINE ADD 1 TO WS-LINE-COUNTER. PRINT-COLUMN-HEADER. MOVE CH-LINE1 TO REPORT-LINE WRITE REPORT-LINE ADD 1 TO WS-LINE-COUNTER MOVE CH-LINE2 TO REPORT-LINE WRITE REPORT-LINE ADD 1 TO WS-LINE-COUNTER *> Add blank line MOVE SPACES TO REPORT-LINE WRITE REPORT-LINE ADD 1 TO WS-LINE-COUNTER. PRINT-DEPT-HEADER. *> Check for page break IF WS-LINE-COUNTER > 55 PERFORM NEW-PAGE END-IF MOVE DH-LINE1 TO REPORT-LINE WRITE REPORT-LINE ADD 1 TO WS-LINE-COUNTER MOVE EMP-DEPT TO DH-DEPT MOVE DH-LINE2 TO REPORT-LINE WRITE REPORT-LINE ADD 1 TO WS-LINE-COUNTER MOVE DH-LINE3 TO REPORT-LINE WRITE REPORT-LINE ADD 1 TO WS-LINE-COUNTER. PRINT-SUMMARY-HEADER. *> Ensure enough space for summary IF WS-LINE-COUNTER > 50 PERFORM NEW-PAGE END-IF MOVE SH-LINE1 TO REPORT-LINE WRITE REPORT-LINE ADD 1 TO WS-LINE-COUNTER MOVE SH-LINE2 TO REPORT-LINE WRITE REPORT-LINE ADD 1 TO WS-LINE-COUNTER MOVE SH-LINE3 TO REPORT-LINE WRITE REPORT-LINE ADD 1 TO WS-LINE-COUNTER. NEW-PAGE. *> Form feed or page break MOVE X"0C" TO REPORT-LINE WRITE REPORT-LINE ADD 1 TO WS-PAGE-COUNTER MOVE 0 TO WS-LINE-COUNTER PERFORM PRINT-PAGE-HEADER PERFORM PRINT-COLUMN-HEADER. PROCESS-EMPLOYEES. READ EMPLOYEE-FILE AT END SET END-OF-FILE TO TRUE NOT AT END PERFORM PROCESS-EMPLOYEE-RECORD END-READ. PROCESS-EMPLOYEE-RECORD. *> Check for new department IF EMP-DEPT NOT = PREVIOUS-DEPT PERFORM PRINT-DEPT-HEADER MOVE EMP-DEPT TO PREVIOUS-DEPT END-IF *> Format and write employee detail PERFORM FORMAT-EMPLOYEE-LINE MOVE EMPLOYEE-DETAIL TO REPORT-LINE WRITE REPORT-LINE ADD 1 TO WS-LINE-COUNTER *> Check for page break IF WS-LINE-COUNTER > 58 PERFORM NEW-PAGE END-IF. PRINT-SUMMARY. *> Print summary totals with appropriate spacing MOVE SPACES TO REPORT-LINE WRITE REPORT-LINE MOVE "TOTAL EMPLOYEES: 999" TO REPORT-LINE WRITE REPORT-LINE MOVE "TOTAL SALARIES: $9,999,999.99" TO REPORT-LINE WRITE REPORT-LINE.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209IDENTIFICATION DIVISION. PROGRAM-ID. ADVANCED-HEADING-PATTERNS. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT SALES-FILE ASSIGN TO "SALES.DAT". SELECT REPORT-FILE ASSIGN TO "SALES-REPORT.TXT". DATA DIVISION. FILE SECTION. FD SALES-FILE. 01 SALES-RECORD. 05 SALE-REGION PIC X(10). 05 SALE-TERRITORY PIC X(10). 05 SALE-REP PIC X(20). 05 SALE-AMOUNT PIC 9(8)V99. 05 SALE-DATE PIC 9(8). REPORT SECTION. RD SALES-REPORT PAGE LIMIT IS 60 LINES HEADING 1 FIRST DETAIL 10 LAST DETAIL 50 FOOTING 55. *> Multi-level heading structure 01 COMPANY-HEADER TYPE IS PAGE HEADING. 05 LINE NUMBER IS 1. 05 COLUMN NUMBER IS 30 PIC X(30) VALUE "ACME CORPORATION". 05 LINE NUMBER IS 2. 05 COLUMN NUMBER IS 25 PIC X(40) VALUE "QUARTERLY SALES PERFORMANCE REPORT". 05 LINE NUMBER IS 3. 05 COLUMN NUMBER IS 1 PIC X(10) VALUE "REPORT ID:". 05 COLUMN NUMBER IS 12 PIC X(10) SOURCE IS REPORT-ID. 05 COLUMN NUMBER IS 60 PIC X(6) VALUE "DATE: ". 05 COLUMN NUMBER IS 66 PIC X(10) SOURCE IS CURRENT-DATE-FORMATTED. 05 COLUMN NUMBER IS 80 PIC X(5) VALUE "PAGE ". 05 COLUMN NUMBER IS 85 PIC ZZ9 SOURCE IS PAGE-COUNTER. 05 LINE NUMBER IS 5. 05 COLUMN NUMBER IS 1 PIC X(80) VALUE ALL "=". *> Region-level control heading 01 REGION-HEADER TYPE IS CONTROL HEADING SALE-REGION. 05 LINE NUMBER IS PLUS 2. 05 COLUMN NUMBER IS 1 PIC X(8) VALUE "REGION: ". 05 COLUMN NUMBER IS 9 PIC X(10) SOURCE IS SALE-REGION. 05 COLUMN NUMBER IS 30 PIC X(20) SOURCE IS REGION-NAME. 05 LINE NUMBER IS PLUS 1. 05 COLUMN NUMBER IS 1 PIC X(60) VALUE ALL "-". *> Territory-level control heading 01 TERRITORY-HEADER TYPE IS CONTROL HEADING SALE-TERRITORY. 05 LINE NUMBER IS PLUS 1. 05 COLUMN NUMBER IS 5 PIC X(12) VALUE "TERRITORY: ". 05 COLUMN NUMBER IS 17 PIC X(10) SOURCE IS SALE-TERRITORY. 05 COLUMN NUMBER IS 35 PIC X(20) SOURCE IS TERRITORY-NAME. *> Column headers for detail section 01 COLUMN-HEADERS TYPE IS PAGE HEADING. 05 LINE NUMBER IS 8. 05 COLUMN NUMBER IS 1 PIC X(12) VALUE "SALES REP". 05 COLUMN NUMBER IS 20 PIC X(12) VALUE "SALE DATE". 05 COLUMN NUMBER IS 35 PIC X(15) VALUE "SALE AMOUNT". 05 COLUMN NUMBER IS 55 PIC X(15) VALUE "COMMISSION". 05 COLUMN NUMBER IS 75 PIC X(10) VALUE "STATUS". 05 LINE NUMBER IS 9. 05 COLUMN NUMBER IS 1 PIC X(80) VALUE ALL "-". WORKING-STORAGE SECTION. 01 WS-REPORT-VARIABLES. 05 WS-REPORT-ID PIC X(10) VALUE "RPT-001". 05 WS-CURRENT-DATE-FORMATTED PIC X(10). 05 WS-REGION-NAME PIC X(20). 05 WS-TERRITORY-NAME PIC X(20). 01 WS-TOTALS. 05 WS-REGION-TOTAL PIC 9(10)V99. 05 WS-TERRITORY-TOTAL PIC 9(10)V99. 05 WS-GRAND-TOTAL PIC 9(12)V99. PROCEDURE DIVISION. MAIN-PROCESSING. OPEN INPUT SALES-FILE OPEN OUTPUT REPORT-FILE INITIATE SALES-REPORT PERFORM UNTIL END-OF-FILE READ SALES-FILE AT END SET END-OF-FILE TO TRUE NOT AT END PERFORM PROCESS-SALE END-READ END-PERFORM TERMINATE SALES-REPORT CLOSE SALES-FILE CLOSE REPORT-FILE STOP RUN. PROCESS-SALE. *> Look up region and territory names PERFORM LOOKUP-REGION-NAME PERFORM LOOKUP-TERRITORY-NAME *> Generate detail line GENERATE SALE-DETAIL *> Accumulate totals ADD SALE-AMOUNT TO WS-TERRITORY-TOTAL ADD SALE-AMOUNT TO WS-REGION-TOTAL ADD SALE-AMOUNT TO WS-GRAND-TOTAL. *> Custom heading with conditional content CUSTOM-CONDITIONAL-HEADER. *> Dynamic header based on data content IF SALE-AMOUNT > 10000 MOVE "HIGH VALUE SALES" TO HEADER-TITLE ELSE IF SALE-AMOUNT > 5000 MOVE "MEDIUM VALUE SALES" TO HEADER-TITLE ELSE MOVE "STANDARD SALES" TO HEADER-TITLE END-IF *> Format header with current context STRING "SALES ANALYSIS - " HEADER-TITLE " FOR " SALE-REGION DELIMITED BY SIZE INTO DYNAMIC-HEADER-TEXT *> Write custom header MOVE DYNAMIC-HEADER-TEXT TO REPORT-LINE WRITE REPORT-LINE AFTER ADVANCING 2 LINES. *> Multi-column header alignment MULTI-COLUMN-HEADER. *> Left-aligned section MOVE "DEPARTMENT SUMMARY" TO LEFT-HEADER *> Center-aligned section MOVE "QUARTERLY RESULTS" TO CENTER-HEADER *> Right-aligned section STRING "PRINTED: " FUNCTION CURRENT-DATE(1:8) DELIMITED BY SIZE INTO RIGHT-HEADER *> Format complete header line STRING LEFT-HEADER DELIMITED BY SIZE SPACES DELIMITED BY SIZE CENTER-HEADER DELIMITED BY SIZE SPACES DELIMITED BY SIZE RIGHT-HEADER DELIMITED BY SIZE INTO FORMATTED-HEADER MOVE FORMATTED-HEADER TO REPORT-LINE WRITE REPORT-LINE. *> Hierarchical header structure HIERARCHICAL-HEADERS. *> Level 1 - Company header MOVE "ACME CORPORATION" TO LEVEL1-HEADER PERFORM PRINT-HEADER-LEVEL-1 *> Level 2 - Division header MOVE "SALES DIVISION" TO LEVEL2-HEADER PERFORM PRINT-HEADER-LEVEL-2 *> Level 3 - Department header MOVE "FIELD SALES DEPARTMENT" TO LEVEL3-HEADER PERFORM PRINT-HEADER-LEVEL-3 *> Level 4 - Section header MOVE "REGIONAL PERFORMANCE" TO LEVEL4-HEADER PERFORM PRINT-HEADER-LEVEL-4. PRINT-HEADER-LEVEL-1. MOVE SPACES TO REPORT-LINE STRING SPACES(30) LEVEL1-HEADER DELIMITED BY SIZE INTO REPORT-LINE WRITE REPORT-LINE AFTER ADVANCING 1 LINE MOVE ALL "=" TO UNDERLINE-CHAR PERFORM PRINT-UNDERLINE. PRINT-HEADER-LEVEL-2. MOVE SPACES TO REPORT-LINE STRING SPACES(25) LEVEL2-HEADER DELIMITED BY SIZE INTO REPORT-LINE WRITE REPORT-LINE AFTER ADVANCING 2 LINES MOVE ALL "-" TO UNDERLINE-CHAR PERFORM PRINT-UNDERLINE. PRINT-UNDERLINE. MOVE SPACES TO REPORT-LINE STRING SPACES(25) UNDERLINE-CHAR(1:LENGTH OF CURRENT-HEADER) DELIMITED BY SIZE INTO REPORT-LINE WRITE REPORT-LINE AFTER ADVANCING 1 LINE.
1234567891011121314151617181920212223*> Create a basic page header for employee report 01 EMPLOYEE-PAGE-HEADER. 05 EPH-LINE1. 10 FILLER PIC X(50) VALUE SPACES. 10 FILLER PIC X(20) VALUE "EMPLOYEE DIRECTORY". 10 FILLER PIC X(62) VALUE SPACES. 05 EPH-LINE2. 10 FILLER PIC X(10) VALUE "RUN DATE: ". 10 EPH-RUN-DATE PIC X(10). 10 FILLER PIC X(92) VALUE SPACES. 10 FILLER PIC X(6) VALUE "PAGE ". 10 EPH-PAGE-NUM PIC Z9. 10 FILLER PIC X(12) VALUE SPACES. PROCEDURE DIVISION. PRINT-PAGE-HEADER. MOVE FUNCTION CURRENT-DATE(1:8) TO EPH-RUN-DATE MOVE PAGE-COUNTER TO EPH-PAGE-NUM MOVE EPH-LINE1 TO PRINT-LINE WRITE PRINT-LINE MOVE EPH-LINE2 TO PRINT-LINE.
12345678910111213141516171819202122232425262728*> Create a control break header for department changes 01 DEPT-BREAK-HEADER. 05 DBH-LINE1 PIC X(132) VALUE SPACES. 05 DBH-LINE2. 10 FILLER PIC X(10) VALUE SPACES. 10 FILLER PIC X(15) VALUE "DEPARTMENT: ". 10 DBH-DEPT-CODE PIC X(5). 10 FILLER PIC X(3) VALUE " - ". 10 DBH-DEPT-NAME PIC X(25). 10 FILLER PIC X(74) VALUE SPACES. 05 DBH-LINE3 PIC X(132) VALUE ALL "-". PRINT-DEPT-HEADER. IF LINE-COUNT > 55 PERFORM NEW-PAGE END-IF MOVE DEPT-CODE TO DBH-DEPT-CODE MOVE DEPT-NAME TO DBH-DEPT-NAME MOVE DBH-LINE1 TO PRINT-LINE WRITE PRINT-LINE MOVE DBH-LINE2 TO PRINT-LINE WRITE PRINT-LINE MOVE DBH-LINE3 TO PRINT-LINE WRITE PRINT-LINE.
What is the primary purpose of HEADING statements in COBOL reports?
Answer: HEADING statements provide structure and organization to reports by defining headers for pages, sections, or control groups. They ensure consistent formatting and help readers navigate and understand report content.
What are the different types of headers commonly used in COBOL reports?
Answer: Common header types include page headers (appear on every page), control headers (appear on control breaks), section headers (divide report sections), and column headers (label data columns).
How do you implement conditional header display in COBOL?
Answer: Conditional headers can be implemented using IF statements to check data conditions, control break logic for group changes, or line counting for page management before writing header content.
12345678901 FINANCIAL-HEADER. 05 FH-TITLE. 10 FILLER PIC X(40) VALUE "MONTHLY FINANCIAL STATEMENT". 05 FH-PERIOD. 10 FILLER PIC X(8) VALUE "PERIOD: ". 10 FH-MONTH PIC X(15). 05 FH-DATE. 10 FILLER PIC X(15) VALUE "REPORT DATE: ". 10 FH-RUN-DATE PIC X(10).
12345678901 INVENTORY-HEADER. 05 IH-TITLE. 10 FILLER PIC X(30) VALUE "INVENTORY STATUS REPORT". 05 IH-LOCATION. 10 FILLER PIC X(12) VALUE "WAREHOUSE: ". 10 IH-WAREHOUSE PIC X(10). 05 IH-CATEGORY. 10 FILLER PIC X(12) VALUE "CATEGORY: ". 10 IH-CAT-NAME PIC X(20).