PAGE handling in COBOL represents sophisticated report formatting and comprehensive pagination control capabilities within enterprise printing environments, providing advanced page break management mechanisms for document generation, enhanced header and footer processing features, and intelligent line counting patterns that enable professional report layouts, optimal page utilization workflows, and systematic document formatting requirements while maintaining print quality, ensuring proper page boundaries, and enabling flexible report architectures across business applications requiring precise page control, standardized document layouts, and reliable pagination throughout sophisticated reporting scenarios.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071*> File definition with LINAGE for page control FD REPORT-FILE LINAGE IS 60 LINES WITH FOOTING AT 55 LINES AT TOP 5 LINES AT BOTTOM 3. 01 REPORT-RECORD PIC X(132). *> Working storage for page control WORKING-STORAGE SECTION. 01 WS-PAGE-CONTROL. 05 WS-PAGE-NUMBER PIC 9(4) VALUE 1. 05 WS-LINE-COUNT PIC 99 VALUE 0. 05 WS-LINES-PER-PAGE PIC 99 VALUE 60. 05 WS-MAX-LINES PIC 99 VALUE 55. 01 WS-REPORT-HEADERS. 05 WS-PAGE-HEADER. 10 FILLER PIC X(40) VALUE SPACES. 10 FILLER PIC X(20) VALUE "COMPANY SALES REPORT". 10 FILLER PIC X(20) VALUE SPACES. 10 FILLER PIC X(5) VALUE "PAGE ". 10 WS-PAGE-NUM-DISP PIC Z(3)9. 10 FILLER PIC X(43) VALUE SPACES. 05 WS-COLUMN-HEADERS. 10 FILLER PIC X(20) VALUE "EMPLOYEE NAME". 10 FILLER PIC X(15) VALUE "DEPARTMENT". 10 FILLER PIC X(12) VALUE "SALES AMOUNT". 10 FILLER PIC X(15) VALUE "COMMISSION". 10 FILLER PIC X(70) VALUE SPACES. PROCEDURE DIVISION. REPORT-PROCESSING. OPEN OUTPUT REPORT-FILE PERFORM WRITE-PAGE-HEADER PERFORM PROCESS-REPORT-DATA CLOSE REPORT-FILE. WRITE-PAGE-HEADER. *> Manual page break WRITE REPORT-RECORD FROM SPACES AFTER ADVANCING PAGE *> Write header information MOVE WS-PAGE-NUMBER TO WS-PAGE-NUM-DISP WRITE REPORT-RECORD FROM WS-PAGE-HEADER AFTER ADVANCING 1 LINE WRITE REPORT-RECORD FROM SPACES AFTER ADVANCING 1 LINE WRITE REPORT-RECORD FROM WS-COLUMN-HEADERS AFTER ADVANCING 1 LINE WRITE REPORT-RECORD FROM SPACES AFTER ADVANCING 1 LINE MOVE 5 TO WS-LINE-COUNT. CHECK-PAGE-OVERFLOW. IF WS-LINE-COUNT >= WS-MAX-LINES ADD 1 TO WS-PAGE-NUMBER PERFORM WRITE-PAGE-HEADER END-IF. WRITE-DETAIL-LINE. ADD 1 TO WS-LINE-COUNT PERFORM CHECK-PAGE-OVERFLOW WRITE REPORT-RECORD FROM WS-DETAIL-LINE AFTER ADVANCING 1 LINE
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117*> Enhanced file definition with full LINAGE control FD DETAILED-REPORT LINAGE IS 66 LINES WITH FOOTING AT 60 LINES AT TOP 6 LINES AT BOTTOM 4. 01 DETAIL-RECORD PIC X(132). *> Advanced page management 01 WS-ADVANCED-PAGE-CONTROL. 05 WS-CURRENT-PAGE PIC 9(4) VALUE 1. 05 WS-TOTAL-PAGES PIC 9(4) VALUE 0. 05 WS-CURRENT-LINE PIC 99 VALUE 0. 05 WS-DETAIL-LINES PIC 99 VALUE 0. 05 WS-HEADER-LINES PIC 9 VALUE 6. 05 WS-FOOTER-LINES PIC 9 VALUE 4. 05 WS-BODY-LINES PIC 99 VALUE 56. 01 WS-PAGE-FORMATTING. 05 WS-HEADER-SECTION. 10 WS-REPORT-TITLE. 15 FILLER PIC X(50) VALUE SPACES. 15 FILLER PIC X(32) VALUE "COMPREHENSIVE BUSINESS REPORT". 15 FILLER PIC X(50) VALUE SPACES. 10 WS-DATE-TIME-LINE. 15 FILLER PIC X(10) VALUE "DATE: ". 15 WS-REPORT-DATE PIC X(10). 15 FILLER PIC X(20) VALUE SPACES. 15 FILLER PIC X(10) VALUE "TIME: ". 15 WS-REPORT-TIME PIC X(8). 15 FILLER PIC X(20) VALUE SPACES. 15 FILLER PIC X(8) VALUE "PAGE: ". 15 WS-PAGE-DISPLAY PIC ZZ9. 15 FILLER PIC X(4) VALUE " OF ". 15 WS-TOTAL-DISPLAY PIC ZZ9. 15 FILLER PIC X(40) VALUE SPACES. 05 WS-FOOTER-SECTION. 10 WS-FOOTER-LINE1. 15 FILLER PIC X(30) VALUE SPACES. 15 FILLER PIC X(72) VALUE ALL "-". 15 FILLER PIC X(30) VALUE SPACES. 10 WS-FOOTER-LINE2. 15 FILLER PIC X(40) VALUE SPACES. 15 FILLER PIC X(20) VALUE "CONFIDENTIAL REPORT". 15 FILLER PIC X(72) VALUE SPACES. ADVANCED-PAGE-CONTROL. *> Calculate total pages before processing PERFORM CALCULATE-TOTAL-PAGES *> Process with enhanced page management PERFORM WRITE-ENHANCED-HEADER PERFORM PROCESS-DETAILED-REPORT PERFORM WRITE-FINAL-FOOTER. CALCULATE-TOTAL-PAGES. *> Count total records to calculate pages needed MOVE 0 TO WS-RECORD-COUNT PERFORM COUNT-INPUT-RECORDS COMPUTE WS-TOTAL-PAGES = (WS-RECORD-COUNT + WS-BODY-LINES - 1) / WS-BODY-LINES IF WS-TOTAL-PAGES = 0 MOVE 1 TO WS-TOTAL-PAGES END-IF. WRITE-ENHANCED-HEADER. *> Start new page WRITE DETAIL-RECORD FROM SPACES AFTER ADVANCING PAGE *> Current date and time MOVE FUNCTION CURRENT-DATE(1:8) TO WS-REPORT-DATE MOVE FUNCTION CURRENT-DATE(9:6) TO WS-REPORT-TIME MOVE WS-CURRENT-PAGE TO WS-PAGE-DISPLAY MOVE WS-TOTAL-PAGES TO WS-TOTAL-DISPLAY *> Write header section WRITE DETAIL-RECORD FROM WS-REPORT-TITLE AFTER ADVANCING 1 LINE WRITE DETAIL-RECORD FROM SPACES AFTER ADVANCING 1 LINE WRITE DETAIL-RECORD FROM WS-DATE-TIME-LINE AFTER ADVANCING 1 LINE WRITE DETAIL-RECORD FROM SPACES AFTER ADVANCING 2 LINES MOVE WS-HEADER-LINES TO WS-CURRENT-LINE. CHECK-END-OF-PAGE. IF WS-CURRENT-LINE >= WS-BODY-LINES PERFORM WRITE-PAGE-FOOTER ADD 1 TO WS-CURRENT-PAGE PERFORM WRITE-ENHANCED-HEADER END-IF. WRITE-PAGE-FOOTER. *> Position to footer area COMPUTE WS-LINES-TO-FOOTER = WS-BODY-LINES - WS-CURRENT-LINE + 1 IF WS-LINES-TO-FOOTER > 0 WRITE DETAIL-RECORD FROM SPACES AFTER ADVANCING WS-LINES-TO-FOOTER LINES END-IF *> Write footer content WRITE DETAIL-RECORD FROM WS-FOOTER-LINE1 AFTER ADVANCING 1 LINE WRITE DETAIL-RECORD FROM WS-FOOTER-LINE2 AFTER ADVANCING 1 LINE
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313IDENTIFICATION DIVISION. PROGRAM-ID. PAGE-CONTROL-DEMO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT EMPLOYEE-FILE ASSIGN TO "EMPLOYEE.DAT" ORGANIZATION IS SEQUENTIAL. SELECT REPORT-FILE ASSIGN TO "REPORT.RPT" ORGANIZATION IS SEQUENTIAL LINAGE IS 60 LINES WITH FOOTING AT 55 LINES AT TOP 5 LINES AT BOTTOM 3. DATA DIVISION. FILE SECTION. FD EMPLOYEE-FILE. 01 EMPLOYEE-RECORD. 05 EMP-ID PIC X(8). 05 EMP-NAME PIC X(30). 05 EMP-DEPARTMENT PIC X(20). 05 EMP-SALARY PIC 9(8)V99. 05 EMP-COMMISSION PIC 9(6)V99. FD REPORT-FILE. 01 REPORT-LINE PIC X(132). WORKING-STORAGE SECTION. *> Comprehensive page control system 01 WS-PAGE-MANAGEMENT. 05 WS-CURRENT-PAGE PIC 9(4) VALUE 1. 05 WS-TOTAL-PAGES PIC 9(4) VALUE 0. 05 WS-LINES-USED PIC 99 VALUE 0. 05 WS-LINES-AVAILABLE PIC 99 VALUE 50. 05 WS-RECORDS-PROCESSED PIC 9(6) VALUE 0. 05 WS-PAGES-WRITTEN PIC 9(4) VALUE 0. *> Multi-section report headers 01 WS-REPORT-HEADERS. 05 WS-MAIN-TITLE. 10 FILLER PIC X(45) VALUE SPACES. 10 FILLER PIC X(42) VALUE "EMPLOYEE COMPENSATION ANALYSIS REPORT". 10 FILLER PIC X(45) VALUE SPACES. 05 WS-SUBTITLE. 10 FILLER PIC X(35) VALUE SPACES. 10 FILLER PIC X(32) VALUE "QUARTERLY PERFORMANCE SUMMARY". 10 FILLER PIC X(65) VALUE SPACES. 05 WS-PAGE-INFO. 10 WS-DATE-LABEL PIC X(12) VALUE "Report Date:". 10 WS-DATE-VALUE PIC X(10). 10 FILLER PIC X(15) VALUE SPACES. 10 WS-TIME-LABEL PIC X(12) VALUE "Report Time:". 10 WS-TIME-VALUE PIC X(8). 10 FILLER PIC X(15) VALUE SPACES. 10 WS-PAGE-LABEL PIC X(5) VALUE "Page:". 10 WS-PAGE-VALUE PIC Z(3)9. 10 WS-OF-LABEL PIC X(4) VALUE " of ". 10 WS-TOTAL-VALUE PIC Z(3)9. 10 FILLER PIC X(44) VALUE SPACES. *> Detailed column headers 01 WS-COLUMN-HEADERS. 05 WS-HEADER-LINE1. 10 FILLER PIC X(8) VALUE "EMP ID". 10 FILLER PIC X(2) VALUE SPACES. 10 FILLER PIC X(20) VALUE "EMPLOYEE NAME". 10 FILLER PIC X(2) VALUE SPACES. 10 FILLER PIC X(15) VALUE "DEPARTMENT". 10 FILLER PIC X(2) VALUE SPACES. 10 FILLER PIC X(12) VALUE "BASE SALARY". 10 FILLER PIC X(2) VALUE SPACES. 10 FILLER PIC X(11) VALUE "COMMISSION". 10 FILLER PIC X(2) VALUE SPACES. 10 FILLER PIC X(13) VALUE "TOTAL COMP". 10 FILLER PIC X(43) VALUE SPACES. 05 WS-HEADER-LINE2. 10 FILLER PIC X(132) VALUE ALL "-". *> Detail line formatting 01 WS-DETAIL-FORMATTING. 05 WS-DETAIL-LINE. 10 WS-DET-EMP-ID PIC X(8). 10 FILLER PIC X(2) VALUE SPACES. 10 WS-DET-NAME PIC X(20). 10 FILLER PIC X(2) VALUE SPACES. 10 WS-DET-DEPT PIC X(15). 10 FILLER PIC X(2) VALUE SPACES. 10 WS-DET-SALARY PIC $ZZ,ZZ9.99. 10 FILLER PIC X(2) VALUE SPACES. 10 WS-DET-COMM PIC $Z,ZZ9.99. 10 FILLER PIC X(2) VALUE SPACES. 10 WS-DET-TOTAL PIC $ZZ,ZZ9.99. 10 FILLER PIC X(43) VALUE SPACES. *> Summary and footer information 01 WS-SUMMARY-LINES. 05 WS-SUMMARY-HEADER. 10 FILLER PIC X(45) VALUE SPACES. 10 FILLER PIC X(42) VALUE "DEPARTMENTAL SUMMARY TOTALS". 10 FILLER PIC X(45) VALUE SPACES. 05 WS-GRAND-TOTAL-LINE. 10 FILLER PIC X(40) VALUE "GRAND TOTAL COMPENSATION: ". 10 WS-GRAND-TOTAL PIC $ZZZ,ZZZ,ZZ9.99. 10 FILLER PIC X(70) VALUE SPACES. PROCEDURE DIVISION. MAIN-PAGE-CONTROL-DEMO. DISPLAY "=== PAGE CONTROL DEMONSTRATION ===" PERFORM INITIALIZE-PAGE-SYSTEM PERFORM GENERATE-COMPREHENSIVE-REPORT PERFORM DISPLAY-PAGE-STATISTICS DISPLAY "=== PAGE CONTROL DEMO COMPLETE ===" STOP RUN. INITIALIZE-PAGE-SYSTEM. DISPLAY "Initializing page control system..." OPEN INPUT EMPLOYEE-FILE OPEN OUTPUT REPORT-FILE *> Calculate total pages needed PERFORM COUNT-INPUT-RECORDS COMPUTE WS-TOTAL-PAGES = (WS-RECORDS-PROCESSED + WS-LINES-AVAILABLE - 1) / WS-LINES-AVAILABLE IF WS-TOTAL-PAGES = 0 MOVE 1 TO WS-TOTAL-PAGES END-IF MOVE 0 TO WS-RECORDS-PROCESSED CLOSE EMPLOYEE-FILE OPEN INPUT EMPLOYEE-FILE DISPLAY "✅ Page system initialized" DISPLAY " Total records: " WS-RECORDS-PROCESSED DISPLAY " Estimated pages: " WS-TOTAL-PAGES. COUNT-INPUT-RECORDS. MOVE 0 TO WS-RECORDS-PROCESSED READ EMPLOYEE-FILE AT END SET EOF-FLAG TO TRUE END-READ PERFORM UNTIL EOF-FLAG ADD 1 TO WS-RECORDS-PROCESSED READ EMPLOYEE-FILE AT END SET EOF-FLAG TO TRUE END-READ END-PERFORM. GENERATE-COMPREHENSIVE-REPORT. DISPLAY "Generating comprehensive paginated report..." PERFORM WRITE-REPORT-HEADER PERFORM PROCESS-EMPLOYEE-RECORDS PERFORM WRITE-REPORT-SUMMARY CLOSE EMPLOYEE-FILE CLOSE REPORT-FILE DISPLAY "✅ Report generation complete". WRITE-REPORT-HEADER. *> Start new page with comprehensive header WRITE REPORT-LINE FROM SPACES AFTER ADVANCING PAGE *> Format date and time MOVE FUNCTION CURRENT-DATE(1:8) TO WS-DATE-VALUE MOVE FUNCTION CURRENT-DATE(9:6) TO WS-TIME-VALUE MOVE WS-CURRENT-PAGE TO WS-PAGE-VALUE MOVE WS-TOTAL-PAGES TO WS-TOTAL-VALUE *> Write header sequence WRITE REPORT-LINE FROM WS-MAIN-TITLE AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM WS-SUBTITLE AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM SPACES AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM WS-PAGE-INFO AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM SPACES AFTER ADVANCING 2 LINES *> Column headers WRITE REPORT-LINE FROM WS-HEADER-LINE1 AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM WS-HEADER-LINE2 AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM SPACES AFTER ADVANCING 1 LINE MOVE 10 TO WS-LINES-USED. PROCESS-EMPLOYEE-RECORDS. READ EMPLOYEE-FILE AT END SET EOF-FLAG TO TRUE END-READ PERFORM UNTIL EOF-FLAG *> Check for page overflow before writing PERFORM CHECK-PAGE-BREAK *> Format detail line MOVE EMP-ID TO WS-DET-EMP-ID MOVE EMP-NAME TO WS-DET-NAME MOVE EMP-DEPARTMENT TO WS-DET-DEPT MOVE EMP-SALARY TO WS-DET-SALARY MOVE EMP-COMMISSION TO WS-DET-COMM COMPUTE WS-DET-TOTAL = EMP-SALARY + EMP-COMMISSION *> Write detail line WRITE REPORT-LINE FROM WS-DETAIL-LINE AFTER ADVANCING 1 LINE ADD 1 TO WS-LINES-USED ADD 1 TO WS-RECORDS-PROCESSED *> Read next record READ EMPLOYEE-FILE AT END SET EOF-FLAG TO TRUE END-READ END-PERFORM. CHECK-PAGE-BREAK. *> Check if we need a new page IF WS-LINES-USED >= WS-LINES-AVAILABLE PERFORM WRITE-PAGE-FOOTER ADD 1 TO WS-CURRENT-PAGE ADD 1 TO WS-PAGES-WRITTEN PERFORM WRITE-REPORT-HEADER END-IF. WRITE-PAGE-FOOTER. *> Calculate lines to footer position COMPUTE WS-LINES-TO-SKIP = 55 - WS-LINES-USED IF WS-LINES-TO-SKIP > 0 WRITE REPORT-LINE FROM SPACES AFTER ADVANCING WS-LINES-TO-SKIP LINES END-IF *> Write footer information WRITE REPORT-LINE FROM ALL "-" AFTER ADVANCING 1 LINE STRING "Page " DELIMITED BY SIZE WS-CURRENT-PAGE DELIMITED BY SIZE " - Confidential Report" DELIMITED BY SIZE INTO WS-FOOTER-TEXT END-STRING WRITE REPORT-LINE FROM WS-FOOTER-TEXT AFTER ADVANCING 1 LINE. WRITE-REPORT-SUMMARY. *> Ensure we have space for summary IF WS-LINES-USED > (WS-LINES-AVAILABLE - 5) PERFORM WRITE-PAGE-FOOTER ADD 1 TO WS-CURRENT-PAGE PERFORM WRITE-REPORT-HEADER END-IF *> Write summary section WRITE REPORT-LINE FROM SPACES AFTER ADVANCING 2 LINES WRITE REPORT-LINE FROM WS-SUMMARY-HEADER AFTER ADVANCING 1 LINE WRITE REPORT-LINE FROM SPACES AFTER ADVANCING 1 LINE COMPUTE WS-GRAND-TOTAL = WS-TOTAL-COMPENSATION WRITE REPORT-LINE FROM WS-GRAND-TOTAL-LINE AFTER ADVANCING 1 LINE. DISPLAY-PAGE-STATISTICS. DISPLAY " " DISPLAY "📊 PAGE CONTROL STATISTICS" DISPLAY "==========================" DISPLAY "Records processed: " WS-RECORDS-PROCESSED DISPLAY "Pages written: " WS-PAGES-WRITTEN DISPLAY "Lines per page: " WS-LINES-AVAILABLE DISPLAY "Header lines: 10" DISPLAY "Footer lines: 3" DISPLAY "Average records per page: " WS-RECORDS-PROCESSED / WS-PAGES-WRITTEN DISPLAY " " DISPLAY "🎯 Key Page Features Demonstrated:" DISPLAY " • Automatic page breaks" DISPLAY " • Comprehensive headers and footers" DISPLAY " • Page numbering with totals" DISPLAY " • Consistent formatting across pages" DISPLAY " • Overflow detection and handling" DISPLAY " • Summary placement optimization"