The ADVANCING clause represents one of COBOL's most essential and sophisticated output formatting mechanisms, serving as the primary tool for controlling line spacing, page management, and precise report formatting in business applications. Far more than a simple line control directive, the ADVANCING clause embodies COBOL's comprehensive approach to output presentation by providing precise control over vertical positioning, page breaks, line advancement, and complex formatting patterns that enable applications to generate professional-quality reports and documents while maintaining the precision and consistency characteristics that make COBOL ideal for enterprise reporting environments requiring sophisticated output formatting capabilities.
In enterprise computing environments, the ADVANCING clause serves as a critical foundation for advanced report generation, enabling developers to create sophisticated business applications that handle complex formatting requirements, multi-page reports, detailed financial statements, and professional document layouts. Its capabilities extend far beyond simple line spacing to encompass sophisticated page management, conditional formatting, dynamic spacing control, and integration with modern printing systems that are essential for applications requiring professional-quality output and comprehensive document formatting capabilities.
1234567891011121314*> Basic line advancement WRITE REPORT-LINE AFTER ADVANCING 1 LINE. *> Multiple line advancement WRITE REPORT-LINE AFTER ADVANCING 3 LINES. *> Page advancement WRITE REPORT-LINE AFTER ADVANCING PAGE. *> No advancement WRITE REPORT-LINE AFTER ADVANCING 0 LINES. *> Before advancing (less common) WRITE REPORT-LINE BEFORE ADVANCING 2 LINES.
Basic ADVANCING syntax for controlling line spacing and page breaks in output.
1234567891011121314151617*> Using variables for dynamic spacing 01 WS-LINE-SPACING PIC 9(2) VALUE 1. 01 WS-PAGE-BREAK PIC X(5) VALUE "PAGE". *> Variable line advancement WRITE REPORT-LINE AFTER ADVANCING WS-LINE-SPACING LINES. *> Conditional spacing IF DETAIL-TYPE = "HEADER" MOVE 2 TO WS-LINE-SPACING ELSE MOVE 1 TO WS-LINE-SPACING END-IF. WRITE REPORT-LINE AFTER ADVANCING WS-LINE-SPACING LINES. *> Page break using variable WRITE REPORT-LINE AFTER ADVANCING WS-PAGE-BREAK.
ADVANCING with variables enables dynamic spacing control based on runtime conditions.
1234567891011121314*> Report header with page break WRITE REPORT-HEADER AFTER ADVANCING PAGE. *> Column headers with spacing WRITE COLUMN-HEADERS AFTER ADVANCING 2 LINES. *> Detail lines with single spacing WRITE DETAIL-LINE AFTER ADVANCING 1 LINE. *> Summary section with extra spacing WRITE SUMMARY-LINE AFTER ADVANCING 3 LINES. *> Footer at bottom of page WRITE PAGE-FOOTER BEFORE ADVANCING PAGE.
ADVANCING in report generation provides precise control over document layout and formatting.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274IDENTIFICATION DIVISION. PROGRAM-ID. ADVANCING-DEMO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CUSTOMER-FILE ASSIGN TO "CUSTOMERS.DAT" ORGANIZATION IS SEQUENTIAL FILE STATUS IS WS-CUST-STATUS. SELECT REPORT-FILE ASSIGN TO "CUSTOMER-REPORT.TXT" ORGANIZATION IS LINE SEQUENTIAL FILE STATUS IS WS-REPORT-STATUS. DATA DIVISION. FILE SECTION. FD CUSTOMER-FILE. 01 CUSTOMER-RECORD. 05 CUST-ID PIC X(10). 05 CUST-NAME PIC X(30). 05 CUST-BALANCE PIC S9(8)V99. 05 CUST-REGION PIC X(10). 05 CUST-STATUS PIC X(10). FD REPORT-FILE. 01 REPORT-RECORD PIC X(132). WORKING-STORAGE SECTION. *> File status variables 01 WS-CUST-STATUS PIC X(2). 88 CUST-SUCCESS VALUE "00". 88 CUST-EOF VALUE "10". 01 WS-REPORT-STATUS PIC X(2). 88 REPORT-SUCCESS VALUE "00". *> Report formatting variables 01 REPORT-LINES. 05 REPORT-HEADER. 10 FILLER PIC X(45) VALUE SPACES. 10 FILLER PIC X(42) VALUE "CUSTOMER BALANCE REPORT". 10 FILLER PIC X(45) VALUE SPACES. 05 PAGE-HEADER. 10 FILLER PIC X(10) VALUE "PAGE: ". 10 PAGE-NUMBER PIC ZZ9. 10 FILLER PIC X(50) VALUE SPACES. 10 FILLER PIC X(10) VALUE "DATE: ". 10 CURRENT-DATE PIC X(10). 10 FILLER PIC X(39) VALUE SPACES. 05 COLUMN-HEADERS. 10 FILLER PIC X(12) VALUE "CUSTOMER ID". 10 FILLER PIC X(32) VALUE "CUSTOMER NAME". 10 FILLER PIC X(15) VALUE "BALANCE". 10 FILLER PIC X(12) VALUE "REGION". 10 FILLER PIC X(12) VALUE "STATUS". 10 FILLER PIC X(49) VALUE SPACES. 05 UNDERLINE. 10 FILLER PIC X(11) VALUE ALL "-". 10 FILLER PIC X(1) VALUE SPACE. 10 FILLER PIC X(30) VALUE ALL "-". 10 FILLER PIC X(1) VALUE SPACE. 10 FILLER PIC X(13) VALUE ALL "-". 10 FILLER PIC X(1) VALUE SPACE. 10 FILLER PIC X(10) VALUE ALL "-". 10 FILLER PIC X(1) VALUE SPACE. 10 FILLER PIC X(10) VALUE ALL "-". 10 FILLER PIC X(54) VALUE SPACES. 05 DETAIL-LINE. 10 DL-CUST-ID PIC X(11). 10 FILLER PIC X(1) VALUE SPACE. 10 DL-CUST-NAME PIC X(30). 10 FILLER PIC X(1) VALUE SPACE. 10 DL-BALANCE PIC $$,$$$,$$9.99. 10 FILLER PIC X(1) VALUE SPACE. 10 DL-REGION PIC X(10). 10 FILLER PIC X(1) VALUE SPACE. 10 DL-STATUS PIC X(10). 10 FILLER PIC X(56) VALUE SPACES. 05 REGION-SUMMARY. 10 FILLER PIC X(15) VALUE "REGION TOTAL: ". 10 RS-REGION PIC X(10). 10 FILLER PIC X(5) VALUE SPACES. 10 RS-COUNT PIC ZZ,ZZ9. 10 FILLER PIC X(10) VALUE " customers". 10 FILLER PIC X(5) VALUE SPACES. 10 RS-TOTAL PIC $$$,$$$,$$9.99. 10 FILLER PIC X(57) VALUE SPACES. 05 GRAND-SUMMARY. 10 FILLER PIC X(15) VALUE "GRAND TOTAL: ". 10 FILLER PIC X(15) VALUE SPACES. 10 GS-COUNT PIC ZZ,ZZ9. 10 FILLER PIC X(10) VALUE " customers". 10 FILLER PIC X(5) VALUE SPACES. 10 GS-TOTAL PIC $$$,$$$,$$9.99. 10 FILLER PIC X(57) VALUE SPACES. *> Control variables 01 CONTROL-VARIABLES. 05 WS-PAGE-NUMBER PIC 9(3) VALUE 1. 05 WS-LINES-ON-PAGE PIC 9(3) VALUE 0. 05 WS-MAX-LINES PIC 9(3) VALUE 50. 05 WS-CURRENT-REGION PIC X(10) VALUE SPACES. 05 WS-PREV-REGION PIC X(10) VALUE SPACES. *> Counters and totals 01 ACCUMULATOR-FIELDS. 05 WS-CUSTOMER-COUNT PIC 9(6) VALUE 0. 05 WS-GRAND-TOTAL PIC S9(10)V99 VALUE 0. 05 WS-REGION-COUNT PIC 9(6) VALUE 0. 05 WS-REGION-TOTAL PIC S9(10)V99 VALUE 0. *> Spacing control 01 SPACING-CONTROL. 05 WS-NORMAL-SPACING PIC 9(1) VALUE 1. 05 WS-DOUBLE-SPACING PIC 9(1) VALUE 2. 05 WS-TRIPLE-SPACING PIC 9(1) VALUE 3. PROCEDURE DIVISION. MAIN-PROCESSING. DISPLAY "=== ADVANCING Clause Demonstration ===". DISPLAY " ". PERFORM INITIALIZE-REPORT PERFORM PROCESS-CUSTOMERS PERFORM FINALIZE-REPORT DISPLAY " ". DISPLAY "Report generation completed successfully". STOP RUN. INITIALIZE-REPORT. DISPLAY "1. Initializing Report Generation:". DISPLAY " ===============================". *> Open files OPEN INPUT CUSTOMER-FILE. IF NOT CUST-SUCCESS DISPLAY " ERROR: Could not open customer file" STOP RUN END-IF. OPEN OUTPUT REPORT-FILE. IF NOT REPORT-SUCCESS DISPLAY " ERROR: Could not open report file" STOP RUN END-IF. *> Write report header with page break ACCEPT CURRENT-DATE FROM DATE YYYYMMDD. MOVE WS-PAGE-NUMBER TO PAGE-NUMBER. WRITE REPORT-RECORD FROM REPORT-HEADER AFTER ADVANCING PAGE. ADD 1 TO WS-LINES-ON-PAGE. WRITE REPORT-RECORD FROM PAGE-HEADER AFTER ADVANCING WS-DOUBLE-SPACING. ADD 2 TO WS-LINES-ON-PAGE. WRITE REPORT-RECORD FROM COLUMN-HEADERS AFTER ADVANCING WS-TRIPLE-SPACING. ADD 3 TO WS-LINES-ON-PAGE. WRITE REPORT-RECORD FROM UNDERLINE AFTER ADVANCING WS-NORMAL-SPACING. ADD 1 TO WS-LINES-ON-PAGE. DISPLAY " Report initialized with headers". DISPLAY " ". PROCESS-CUSTOMERS. DISPLAY "2. Processing Customer Records:". DISPLAY " =============================". PERFORM UNTIL CUST-EOF READ CUSTOMER-FILE IF CUST-SUCCESS PERFORM PROCESS-CUSTOMER-RECORD END-IF END-PERFORM. *> Print final region summary if needed IF WS-REGION-COUNT > 0 PERFORM PRINT-REGION-SUMMARY END-IF. DISPLAY " Customer processing completed". DISPLAY " Total customers processed: " WS-CUSTOMER-COUNT. DISPLAY " ". PROCESS-CUSTOMER-RECORD. *> Check for region break MOVE CUST-REGION TO WS-CURRENT-REGION. IF WS-PREV-REGION NOT = SPACES AND WS-CURRENT-REGION NOT = WS-PREV-REGION PERFORM PRINT-REGION-SUMMARY PERFORM CHECK-PAGE-BREAK END-IF. *> Check if page break needed PERFORM CHECK-PAGE-BREAK. *> Format and print detail line MOVE CUST-ID TO DL-CUST-ID. MOVE CUST-NAME TO DL-CUST-NAME. MOVE CUST-BALANCE TO DL-BALANCE. MOVE CUST-REGION TO DL-REGION. MOVE CUST-STATUS TO DL-STATUS. WRITE REPORT-RECORD FROM DETAIL-LINE AFTER ADVANCING WS-NORMAL-SPACING. ADD 1 TO WS-LINES-ON-PAGE. *> Update accumulators ADD 1 TO WS-CUSTOMER-COUNT WS-REGION-COUNT. ADD CUST-BALANCE TO WS-GRAND-TOTAL WS-REGION-TOTAL. MOVE WS-CURRENT-REGION TO WS-PREV-REGION. PRINT-REGION-SUMMARY. *> Print region summary with extra spacing MOVE WS-PREV-REGION TO RS-REGION. MOVE WS-REGION-COUNT TO RS-COUNT. MOVE WS-REGION-TOTAL TO RS-TOTAL. WRITE REPORT-RECORD FROM REGION-SUMMARY AFTER ADVANCING WS-DOUBLE-SPACING. ADD 2 TO WS-LINES-ON-PAGE. *> Reset region accumulators MOVE 0 TO WS-REGION-COUNT WS-REGION-TOTAL. CHECK-PAGE-BREAK. *> Check if we need a new page IF WS-LINES-ON-PAGE >= WS-MAX-LINES PERFORM START-NEW-PAGE END-IF. START-NEW-PAGE. *> Start new page with headers ADD 1 TO WS-PAGE-NUMBER. MOVE WS-PAGE-NUMBER TO PAGE-NUMBER. WRITE REPORT-RECORD FROM REPORT-HEADER AFTER ADVANCING PAGE. WRITE REPORT-RECORD FROM PAGE-HEADER AFTER ADVANCING WS-DOUBLE-SPACING. WRITE REPORT-RECORD FROM COLUMN-HEADERS AFTER ADVANCING WS-TRIPLE-SPACING. WRITE REPORT-RECORD FROM UNDERLINE AFTER ADVANCING WS-NORMAL-SPACING. MOVE 7 TO WS-LINES-ON-PAGE. FINALIZE-REPORT. DISPLAY "3. Finalizing Report:". DISPLAY " ===================". *> Print grand summary with extra spacing MOVE WS-CUSTOMER-COUNT TO GS-COUNT. MOVE WS-GRAND-TOTAL TO GS-TOTAL. WRITE REPORT-RECORD FROM GRAND-SUMMARY AFTER ADVANCING WS-TRIPLE-SPACING. *> Print end of report marker MOVE ALL "=" TO REPORT-RECORD. WRITE REPORT-RECORD AFTER ADVANCING WS-DOUBLE-SPACING. *> Close files CLOSE CUSTOMER-FILE REPORT-FILE. DISPLAY " Report finalized successfully". DISPLAY " Total pages: " WS-PAGE-NUMBER.