COBOL PRINTING represents comprehensive report generation and sophisticated document formatting capabilities within enterprise business environments, providing advanced output production mechanisms for professional document creation, enhanced formatting features for business reporting, and intelligent print control capabilities that enable precise document layout, optimal report formatting workflows, and systematic output generation while maintaining formatting accuracy, ensuring predictable print behavior, and enabling flexible document production architectures across business applications requiring exact report formatting, professional document generation, and reliable output production throughout sophisticated financial reporting and business documentation scenarios.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321*> Basic printing and output operations ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT REPORT-FILE ASSIGN TO "REPORT.PRT" ORGANIZATION IS SEQUENTIAL ACCESS IS SEQUENTIAL. SELECT INVOICE-FILE ASSIGN TO "INVOICE.TXT" ORGANIZATION IS SEQUENTIAL ACCESS IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD REPORT-FILE RECORDING MODE IS F BLOCK CONTAINS 0 RECORDS RECORD CONTAINS 132 CHARACTERS. 01 REPORT-RECORD PIC X(132). FD INVOICE-FILE RECORDING MODE IS F BLOCK CONTAINS 0 RECORDS RECORD CONTAINS 80 CHARACTERS. 01 INVOICE-RECORD PIC X(80). WORKING-STORAGE SECTION. 01 WS-PRINT-CONTROL. 05 WS-PAGE-NUMBER PIC 9(3) VALUE 1. 05 WS-LINE-NUMBER PIC 9(2) VALUE 1. 05 WS-LINES-PER-PAGE PIC 9(2) VALUE 60. 05 WS-PAGE-OVERFLOW PIC X VALUE 'N'. 01 WS-REPORT-HEADERS. 05 WS-COMPANY-HEADER. 10 FILLER PIC X(45) VALUE SPACES. 10 WS-COMPANY-NAME PIC X(30) VALUE "ACME CORPORATION". 10 FILLER PIC X(57) VALUE SPACES. 05 WS-REPORT-TITLE. 10 FILLER PIC X(50) VALUE SPACES. 10 WS-TITLE-TEXT PIC X(25) VALUE "MONTHLY SALES REPORT". 10 FILLER PIC X(57) VALUE SPACES. 05 WS-DATE-HEADER. 10 FILLER PIC X(55) VALUE SPACES. 10 WS-REPORT-DATE PIC X(10). 10 FILLER PIC X(67) VALUE SPACES. 01 WS-COLUMN-HEADERS. 05 WS-HEADER-LINE-1. 10 FILLER PIC X(5) VALUE "DEPT". 10 FILLER PIC X(3) VALUE SPACES. 10 FILLER PIC X(15) VALUE "DEPARTMENT NAME". 10 FILLER PIC X(3) VALUE SPACES. 10 FILLER PIC X(12) VALUE "SALES AMOUNT". 10 FILLER PIC X(3) VALUE SPACES. 10 FILLER PIC X(10) VALUE "PERCENTAGE". 10 FILLER PIC X(81) VALUE SPACES. 05 WS-HEADER-LINE-2. 10 FILLER PIC X(5) VALUE "----". 10 FILLER PIC X(3) VALUE SPACES. 10 FILLER PIC X(15) VALUE "---------------". 10 FILLER PIC X(3) VALUE SPACES. 10 FILLER PIC X(12) VALUE "------------". 10 FILLER PIC X(3) VALUE SPACES. 10 FILLER PIC X(10) VALUE "----------". 10 FILLER PIC X(81) VALUE SPACES. 01 WS-DETAIL-LINE. 05 WS-DEPT-CODE PIC X(5). 05 FILLER PIC X(3) VALUE SPACES. 05 WS-DEPT-NAME PIC X(15). 05 FILLER PIC X(3) VALUE SPACES. 05 WS-SALES-AMOUNT PIC $ZZZ,ZZ9.99. 05 FILLER PIC X(3) VALUE SPACES. 05 WS-SALES-PERCENT PIC ZZ9.9%. 05 FILLER PIC X(91) VALUE SPACES. 01 WS-SUMMARY-LINES. 05 WS-TOTAL-LINE. 10 FILLER PIC X(26) VALUE SPACES. 10 FILLER PIC X(12) VALUE "TOTAL SALES:". 10 FILLER PIC X(2) VALUE SPACES. 10 WS-TOTAL-AMOUNT PIC $ZZZ,ZZ9.99. 10 FILLER PIC X(82) VALUE SPACES. PROCEDURE DIVISION. MAIN-PRINTING-DEMO. DISPLAY "=== COBOL PRINTING DEMONSTRATION ===" PERFORM OPEN-PRINT-FILES PERFORM GENERATE-SALES-REPORT PERFORM GENERATE-INVOICE-DOCUMENT PERFORM CLOSE-PRINT-FILES DISPLAY "=== PRINTING DEMO COMPLETE ===" STOP RUN. OPEN-PRINT-FILES. DISPLAY "Opening print files..." OPEN OUTPUT REPORT-FILE OPEN OUTPUT INVOICE-FILE DISPLAY "✅ Print files opened successfully" GENERATE-SALES-REPORT. DISPLAY "Generating sales report..." *> Initialize report MOVE FUNCTION CURRENT-DATE(1:8) TO WS-REPORT-DATE MOVE 1 TO WS-PAGE-NUMBER MOVE 1 TO WS-LINE-NUMBER PERFORM PRINT-REPORT-HEADERS PERFORM PRINT-COLUMN-HEADERS PERFORM PRINT-SALES-DATA PERFORM PRINT-REPORT-SUMMARY DISPLAY "✅ Sales report generated" PRINT-REPORT-HEADERS. *> Print company header MOVE WS-COMPANY-HEADER TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER *> Print blank line MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER *> Print report title MOVE WS-REPORT-TITLE TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER *> Print date MOVE WS-DATE-HEADER TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER *> Print page number STRING "PAGE: " WS-PAGE-NUMBER DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER *> Print separator line MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER PRINT-COLUMN-HEADERS. *> Print column headers MOVE WS-HEADER-LINE-1 TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER MOVE WS-HEADER-LINE-2 TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER *> Print blank line after headers MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER PRINT-SALES-DATA. *> Sample sales data printing PERFORM PRINT-DEPARTMENT-SALES WITH "DEPT1" "Electronics" 125000.75 25.5 PERFORM PRINT-DEPARTMENT-SALES WITH "DEPT2" "Clothing" 98750.50 20.1 PERFORM PRINT-DEPARTMENT-SALES WITH "DEPT3" "Home & Garden" 87500.25 17.8 PERFORM PRINT-DEPARTMENT-SALES WITH "DEPT4" "Sports" 76250.00 15.5 PERFORM PRINT-DEPARTMENT-SALES WITH "DEPT5" "Books" 62500.75 12.7 PRINT-DEPARTMENT-SALES. USING DEPT-CODE-PARM DEPT-NAME-PARM SALES-AMT-PARM PERCENT-PARM. *> Check for page overflow IF WS-LINE-NUMBER >= WS-LINES-PER-PAGE PERFORM NEW-PAGE END-IF *> Format detail line MOVE DEPT-CODE-PARM TO WS-DEPT-CODE MOVE DEPT-NAME-PARM TO WS-DEPT-NAME MOVE SALES-AMT-PARM TO WS-SALES-AMOUNT MOVE PERCENT-PARM TO WS-SALES-PERCENT *> Print detail line MOVE WS-DETAIL-LINE TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER NEW-PAGE. *> Start new page ADD 1 TO WS-PAGE-NUMBER MOVE 1 TO WS-LINE-NUMBER *> Print form feed or page break indicator MOVE "--- NEW PAGE ---" TO REPORT-RECORD WRITE REPORT-RECORD *> Reprint headers on new page PERFORM PRINT-REPORT-HEADERS PERFORM PRINT-COLUMN-HEADERS PRINT-REPORT-SUMMARY. *> Print summary section MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER *> Calculate and print total COMPUTE WS-TOTAL-AMOUNT = 125000.75 + 98750.50 + 87500.25 + 76250.00 + 62500.75 MOVE WS-TOTAL-LINE TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER *> Print report footer MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-LINE-NUMBER STRING "Report generated on " FUNCTION CURRENT-DATE(1:8) " at " FUNCTION CURRENT-DATE(9:6) DELIMITED BY SIZE INTO REPORT-RECORD WRITE REPORT-RECORD GENERATE-INVOICE-DOCUMENT. DISPLAY "Generating invoice document..." PERFORM PRINT-INVOICE-HEADER PERFORM PRINT-INVOICE-DETAILS PERFORM PRINT-INVOICE-SUMMARY DISPLAY "✅ Invoice document generated" PRINT-INVOICE-HEADER. *> Print invoice header MOVE "INVOICE #INV-2023-001" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "Date: 2023-12-01" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE SPACES TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "Bill To:" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "ABC Corporation" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "123 Business Street" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "New York, NY 10001" TO INVOICE-RECORD WRITE INVOICE-RECORD PRINT-INVOICE-DETAILS. *> Print invoice line items MOVE SPACES TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "ITEM DESCRIPTION QTY PRICE TOTAL" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "---- ----------- --- ----- -----" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "001 Widget A 5 $29.99 $149.95" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "002 Widget B 2 $75.00 $150.00" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "003 Service Fee 1 $50.00 $50.00" TO INVOICE-RECORD WRITE INVOICE-RECORD PRINT-INVOICE-SUMMARY. *> Print invoice summary MOVE SPACES TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE " Subtotal: $349.95" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE " Tax (8.25%): $28.87" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE " TOTAL: $378.82" TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE SPACES TO INVOICE-RECORD WRITE INVOICE-RECORD MOVE "Thank you for your business!" TO INVOICE-RECORD WRITE INVOICE-RECORD CLOSE-PRINT-FILES. DISPLAY "Closing print files..." CLOSE REPORT-FILE CLOSE INVOICE-FILE DISPLAY "✅ Print files closed successfully" DISPLAY " " DISPLAY "📄 Generated Documents:" DISPLAY " • Sales Report: REPORT.PRT" DISPLAY " • Invoice Document: INVOICE.TXT" DISPLAY " " DISPLAY "📊 Printing Statistics:" DISPLAY " • Report pages: " WS-PAGE-NUMBER DISPLAY " • Report lines: " WS-LINE-NUMBER
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374*> Advanced report writing with sophisticated formatting 01 WS-ADVANCED-REPORT-CONTROL. 05 WS-REPORT-PARAMETERS. 10 WS-REPORT-WIDTH PIC 9(3) VALUE 132. 10 WS-REPORT-HEIGHT PIC 9(2) VALUE 66. 10 WS-HEADER-LINES PIC 9(2) VALUE 8. 10 WS-FOOTER-LINES PIC 9(2) VALUE 5. 10 WS-DETAIL-LINES PIC 9(2) VALUE 53. 05 WS-PAGINATION-CONTROL. 10 WS-CURRENT-PAGE PIC 9(4) VALUE 1. 10 WS-CURRENT-LINE PIC 9(2) VALUE 1. 10 WS-TOTAL-PAGES PIC 9(4) VALUE 0. 10 WS-LINES-PRINTED PIC 9(6) VALUE 0. 01 WS-FORMATTING-TEMPLATES. 05 WS-FINANCIAL-TEMPLATE. 10 WS-CURRENCY-FORMAT PIC $ZZZ,ZZZ,ZZ9.99-. 10 WS-PERCENT-FORMAT PIC ZZ9.99%. 10 WS-NUMBER-FORMAT PIC ZZZ,ZZZ,ZZ9. 05 WS-DATE-FORMATS. 10 WS-SHORT-DATE PIC 99/99/9999. 10 WS-LONG-DATE PIC X(20). 10 WS-TIMESTAMP PIC X(26). 01 WS-REPORT-STYLES. 05 WS-BORDER-CHARACTERS. 10 WS-TOP-LEFT PIC X VALUE "┌". 10 WS-TOP-RIGHT PIC X VALUE "┐". 10 WS-BOTTOM-LEFT PIC X VALUE "└". 10 WS-BOTTOM-RIGHT PIC X VALUE "┘". 10 WS-HORIZONTAL PIC X VALUE "─". 10 WS-VERTICAL PIC X VALUE "│". 10 WS-CROSS PIC X VALUE "┼". 05 WS-ALIGNMENT-CONTROLS. 10 WS-LEFT-ALIGN PIC X VALUE "L". 10 WS-CENTER-ALIGN PIC X VALUE "C". 10 WS-RIGHT-ALIGN PIC X VALUE "R". 01 WS-FINANCIAL-REPORT-DATA. 05 WS-FINANCIAL-RECORDS OCCURS 100 TIMES. 10 WS-ACCOUNT-CODE PIC X(8). 10 WS-ACCOUNT-NAME PIC X(30). 10 WS-BEGINNING-BAL PIC S9(10)V99 COMP-3. 10 WS-DEBITS PIC S9(10)V99 COMP-3. 10 WS-CREDITS PIC S9(10)V99 COMP-3. 10 WS-ENDING-BAL PIC S9(10)V99 COMP-3. 05 WS-RECORD-COUNT PIC 9(3) VALUE 0. 01 WS-REPORT-TOTALS. 05 WS-TOTAL-BEGINNING PIC S9(12)V99 COMP-3 VALUE 0. 05 WS-TOTAL-DEBITS PIC S9(12)V99 COMP-3 VALUE 0. 05 WS-TOTAL-CREDITS PIC S9(12)V99 COMP-3 VALUE 0. 05 WS-TOTAL-ENDING PIC S9(12)V99 COMP-3 VALUE 0. PROCEDURE DIVISION. ADVANCED-REPORT-GENERATION. DISPLAY "=== ADVANCED REPORT GENERATION ===" PERFORM INITIALIZE-REPORT-SYSTEM PERFORM LOAD-FINANCIAL-DATA PERFORM GENERATE-COMPREHENSIVE-REPORT PERFORM GENERATE-EXECUTIVE-SUMMARY PERFORM FINALIZE-REPORT-SYSTEM DISPLAY "=== ADVANCED REPORTING COMPLETE ===" INITIALIZE-REPORT-SYSTEM. DISPLAY "Initializing advanced report system..." *> Open advanced report file OPEN OUTPUT FINANCIAL-REPORT-FILE *> Set up formatting parameters MOVE FUNCTION CURRENT-DATE TO WS-TIMESTAMP MOVE FUNCTION CURRENT-DATE(1:8) TO WS-SHORT-DATE *> Format long date STRING FUNCTION CURRENT-DATE(5:2) "/" FUNCTION CURRENT-DATE(7:2) "/" FUNCTION CURRENT-DATE(1:4) DELIMITED BY SIZE INTO WS-LONG-DATE END-STRING DISPLAY "✅ Report system initialized" LOAD-FINANCIAL-DATA. DISPLAY "Loading financial data for reporting..." *> Load sample financial data ADD 1 TO WS-RECORD-COUNT MOVE "10001000" TO WS-ACCOUNT-CODE(WS-RECORD-COUNT) MOVE "Cash - Operating Account" TO WS-ACCOUNT-NAME(WS-RECORD-COUNT) MOVE 50000.00 TO WS-BEGINNING-BAL(WS-RECORD-COUNT) MOVE 125000.00 TO WS-DEBITS(WS-RECORD-COUNT) MOVE 100000.00 TO WS-CREDITS(WS-RECORD-COUNT) MOVE 75000.00 TO WS-ENDING-BAL(WS-RECORD-COUNT) ADD 1 TO WS-RECORD-COUNT MOVE "12001000" TO WS-ACCOUNT-CODE(WS-RECORD-COUNT) MOVE "Accounts Receivable" TO WS-ACCOUNT-NAME(WS-RECORD-COUNT) MOVE 85000.00 TO WS-BEGINNING-BAL(WS-RECORD-COUNT) MOVE 200000.00 TO WS-DEBITS(WS-RECORD-COUNT) MOVE 175000.00 TO WS-CREDITS(WS-RECORD-COUNT) MOVE 110000.00 TO WS-ENDING-BAL(WS-RECORD-COUNT) ADD 1 TO WS-RECORD-COUNT MOVE "15001000" TO WS-ACCOUNT-CODE(WS-RECORD-COUNT) MOVE "Inventory - Raw Materials" TO WS-ACCOUNT-NAME(WS-RECORD-COUNT) MOVE 150000.00 TO WS-BEGINNING-BAL(WS-RECORD-COUNT) MOVE 300000.00 TO WS-DEBITS(WS-RECORD-COUNT) MOVE 275000.00 TO WS-CREDITS(WS-RECORD-COUNT) MOVE 175000.00 TO WS-ENDING-BAL(WS-RECORD-COUNT) DISPLAY "✅ Financial data loaded (" WS-RECORD-COUNT " accounts)" GENERATE-COMPREHENSIVE-REPORT. DISPLAY "Generating comprehensive financial report..." PERFORM PRINT-ADVANCED-HEADER PERFORM PRINT-FORMATTED-DETAIL-LINES PERFORM PRINT-SUBTOTALS-AND-SUMMARY DISPLAY "✅ Comprehensive report generated" PRINT-ADVANCED-HEADER. *> Print sophisticated header with borders PERFORM PRINT-HEADER-BORDER-TOP PERFORM PRINT-COMPANY-INFORMATION PERFORM PRINT-REPORT-TITLE-SECTION PERFORM PRINT-DATE-AND-PAGE-INFO PERFORM PRINT-HEADER-BORDER-BOTTOM PERFORM PRINT-COLUMN-HEADER-SECTION PRINT-HEADER-BORDER-TOP. *> Create top border STRING WS-TOP-LEFT FUNCTION UNSTRING(WS-HORIZONTAL, WS-REPORT-WIDTH - 2) WS-TOP-RIGHT DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD ADD 1 TO WS-CURRENT-LINE PRINT-COMPANY-INFORMATION. *> Print centered company information PERFORM CENTER-TEXT WITH "FINANCIAL DYNAMICS CORPORATION" PERFORM CENTER-TEXT WITH "GENERAL LEDGER TRIAL BALANCE" PERFORM CENTER-TEXT WITH "FOR THE PERIOD ENDING " WS-LONG-DATE CENTER-TEXT. USING TEXT-TO-CENTER. COMPUTE WS-CENTER-POSITION = (WS-REPORT-WIDTH - FUNCTION LENGTH(TEXT-TO-CENTER)) / 2 STRING WS-VERTICAL FUNCTION UNSTRING(" ", WS-CENTER-POSITION - 1) TEXT-TO-CENTER FUNCTION UNSTRING(" ", WS-CENTER-POSITION - 1) WS-VERTICAL DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD ADD 1 TO WS-CURRENT-LINE PRINT-FORMATTED-DETAIL-LINES. DISPLAY "Printing formatted detail lines..." PERFORM VARYING DETAIL-INDEX FROM 1 BY 1 UNTIL DETAIL-INDEX > WS-RECORD-COUNT PERFORM CHECK-PAGE-OVERFLOW PERFORM FORMAT-ACCOUNT-DETAIL-LINE PERFORM CALCULATE-RUNNING-TOTALS END-PERFORM CHECK-PAGE-OVERFLOW. IF WS-CURRENT-LINE >= WS-DETAIL-LINES PERFORM NEW-PAGE-WITH-HEADERS END-IF FORMAT-ACCOUNT-DETAIL-LINE. *> Format sophisticated detail line with proper alignment STRING WS-VERTICAL " " WS-ACCOUNT-CODE(DETAIL-INDEX) " " WS-ACCOUNT-NAME(DETAIL-INDEX) FUNCTION UNSTRING(" ", 32 - FUNCTION LENGTH(WS-ACCOUNT-NAME(DETAIL-INDEX))) WS-BEGINNING-BAL(DETAIL-INDEX) " " WS-DEBITS(DETAIL-INDEX) " " WS-CREDITS(DETAIL-INDEX) " " WS-ENDING-BAL(DETAIL-INDEX) " " WS-VERTICAL DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD ADD 1 TO WS-CURRENT-LINE CALCULATE-RUNNING-TOTALS. ADD WS-BEGINNING-BAL(DETAIL-INDEX) TO WS-TOTAL-BEGINNING ADD WS-DEBITS(DETAIL-INDEX) TO WS-TOTAL-DEBITS ADD WS-CREDITS(DETAIL-INDEX) TO WS-TOTAL-CREDITS ADD WS-ENDING-BAL(DETAIL-INDEX) TO WS-TOTAL-ENDING PRINT-SUBTOTALS-AND-SUMMARY. DISPLAY "Printing subtotals and summary..." *> Print separator line PERFORM PRINT-SEPARATOR-LINE *> Print total line PERFORM PRINT-TOTALS-LINE *> Print analysis section PERFORM PRINT-FINANCIAL-ANALYSIS *> Print report footer PERFORM PRINT-REPORT-FOOTER PRINT-SEPARATOR-LINE. STRING WS-CROSS FUNCTION UNSTRING(WS-HORIZONTAL, WS-REPORT-WIDTH - 2) WS-CROSS DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD ADD 1 TO WS-CURRENT-LINE PRINT-TOTALS-LINE. STRING WS-VERTICAL " " "TOTALS:" FUNCTION UNSTRING(" ", 25) WS-TOTAL-BEGINNING " " WS-TOTAL-DEBITS " " WS-TOTAL-CREDITS " " WS-TOTAL-ENDING " " WS-VERTICAL DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD ADD 1 TO WS-CURRENT-LINE PRINT-FINANCIAL-ANALYSIS. *> Print blank line MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD ADD 1 TO WS-CURRENT-LINE *> Calculate and print analysis COMPUTE WS-NET-CHANGE = WS-TOTAL-ENDING - WS-TOTAL-BEGINNING STRING "NET CHANGE IN BALANCES: " WS-NET-CHANGE DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD ADD 1 TO WS-CURRENT-LINE *> Calculate percentage change IF WS-TOTAL-BEGINNING NOT = 0 COMPUTE WS-PERCENT-CHANGE = (WS-NET-CHANGE / WS-TOTAL-BEGINNING) * 100 STRING "PERCENTAGE CHANGE: " WS-PERCENT-CHANGE "%" DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD ADD 1 TO WS-CURRENT-LINE END-IF PRINT-REPORT-FOOTER. *> Print bottom border STRING WS-BOTTOM-LEFT FUNCTION UNSTRING(WS-HORIZONTAL, WS-REPORT-WIDTH - 2) WS-BOTTOM-RIGHT DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD ADD 1 TO WS-CURRENT-LINE *> Print report generation info MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD STRING "Report generated: " WS-TIMESTAMP " Page " WS-CURRENT-PAGE " of " WS-TOTAL-PAGES DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD GENERATE-EXECUTIVE-SUMMARY. DISPLAY "Generating executive summary..." *> Create separate executive summary PERFORM PRINT-EXECUTIVE-HEADER PERFORM PRINT-KEY-METRICS PERFORM PRINT-EXECUTIVE-ANALYSIS DISPLAY "✅ Executive summary generated" PRINT-EXECUTIVE-HEADER. MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD PERFORM CENTER-TEXT WITH "EXECUTIVE SUMMARY" PERFORM CENTER-TEXT WITH "FINANCIAL POSITION OVERVIEW" PRINT-KEY-METRICS. MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD STRING "KEY FINANCIAL METRICS:" DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD STRING " Total Assets: " WS-TOTAL-ENDING DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD STRING " Net Activity: " WS-NET-CHANGE DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD PRINT-EXECUTIVE-ANALYSIS. MOVE SPACES TO REPORT-RECORD WRITE REPORT-RECORD STRING "ANALYSIS:" DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD IF WS-NET-CHANGE > 0 STRING " • Positive net change indicates growth" DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD ELSE STRING " • Negative net change requires attention" DELIMITED BY SIZE INTO REPORT-RECORD END-STRING WRITE REPORT-RECORD END-IF FINALIZE-REPORT-SYSTEM. DISPLAY "Finalizing report system..." CLOSE FINANCIAL-REPORT-FILE DISPLAY "📊 Report Generation Summary:" DISPLAY " Total pages: " WS-CURRENT-PAGE DISPLAY " Total lines: " WS-LINES-PRINTED DISPLAY " Accounts processed: " WS-RECORD-COUNT DISPLAY " Report file: FINANCIAL-REPORT.PRT" DISPLAY "✅ Report system finalized"