The INITIATE statement represents the fundamental initialization mechanism for COBOL Report Writer functionality, providing comprehensive report preparation capabilities that establish proper reporting environments, configure output streams, and prepare formatted document generation. This statement embodies the principles of structured report processing by supporting automatic setup procedures, control field initialization, and page management while ensuring proper report structure, maintaining consistent formatting standards, and facilitating professional document generation across enterprise applications requiring sophisticated reporting capabilities, multi-level control breaks, and comprehensive output management with optimal performance and reliable execution characteristics.
12345678910111213141516171819202122232425262728293031323334353637383940*> Basic INITIATE syntax INITIATE report-name-1 [, report-name-2, ...] *> Report Writer context REPORT SECTION. RD SALES-REPORT CONTROLS ARE FINAL, DEPARTMENT, SALESPERSON PAGE LIMIT IS 60 LINES HEADING 1 FIRST DETAIL 8 LAST DETAIL 55 FOOTING 58. 01 REPORT-HEADER TYPE IS REPORT HEADING. 05 LINE NUMBER IS 1. 10 COLUMN 25 PIC X(20) VALUE "SALES ANALYSIS REPORT". 01 PAGE-HEADER TYPE IS PAGE HEADING. 05 LINE NUMBER IS 3. 10 COLUMN 1 PIC X(10) VALUE "DEPARTMENT". 10 COLUMN 20 PIC X(10) VALUE "SALESPERSON". 10 COLUMN 40 PIC X(12) VALUE "SALES AMOUNT". PROCEDURE DIVISION. MAIN-PROCESSING. *> Initialize the report INITIATE SALES-REPORT *> Now ready for GENERATE statements PERFORM UNTIL END-OF-DATA READ INPUT-FILE AT END SET END-OF-DATA TO TRUE NOT AT END GENERATE DETAIL-LINE END-READ END-PERFORM *> Terminate when done TERMINATE SALES-REPORT.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412IDENTIFICATION DIVISION. PROGRAM-ID. INITIATE-REPORT-DEMO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT EMPLOYEE-FILE ASSIGN TO "EMPLOYEE.DAT" ORGANIZATION IS LINE SEQUENTIAL. SELECT SALES-FILE ASSIGN TO "SALES.DAT" ORGANIZATION IS LINE SEQUENTIAL. SELECT REPORT-OUTPUT ASSIGN TO "REPORTS.TXT" ORGANIZATION IS LINE 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-DEPARTMENT PIC X(15). 05 EMP-SALARY PIC 9(7)V99. 05 EMP-HIRE-DATE PIC 9(8). FD SALES-FILE. 01 SALES-RECORD. 05 SALE-EMP-ID PIC 9(6). 05 SALE-DATE PIC 9(8). 05 SALE-AMOUNT PIC 9(7)V99. 05 SALE-COMMISSION PIC 9(5)V99. 05 SALE-REGION PIC X(10). FD REPORT-OUTPUT. 01 REPORT-LINE PIC X(132). WORKING-STORAGE SECTION. 01 WS-FLAGS. 05 WS-EOF-EMP PIC X VALUE 'N'. 88 EOF-EMPLOYEE VALUE 'Y'. 05 WS-EOF-SALES PIC X VALUE 'N'. 88 EOF-SALES VALUE 'Y'. 05 WS-REPORT-ACTIVE PIC X VALUE 'N'. 88 REPORT-RUNNING VALUE 'Y'. 88 REPORT-STOPPED VALUE 'N'. 01 WS-REPORT-CONTROL. 05 WS-CURRENT-DATE PIC 9(8). 05 WS-REPORT-COUNT PIC 9(3) VALUE 0. 05 WS-PAGE-LIMIT PIC 9(2) VALUE 60. 01 WS-TOTALS. 05 WS-TOTAL-EMPLOYEES PIC 9(6) VALUE 0. 05 WS-TOTAL-SALARY PIC 9(10)V99 VALUE 0. 05 WS-TOTAL-SALES PIC 9(12)V99 VALUE 0. REPORT SECTION. *> Employee Summary Report RD EMPLOYEE-SUMMARY-REPORT CONTROLS ARE FINAL, EMP-DEPARTMENT PAGE LIMIT IS 60 LINES HEADING 1 FIRST DETAIL 10 LAST DETAIL 55 FOOTING 58. 01 EMP-REPORT-HEADING TYPE IS REPORT HEADING. 05 LINE NUMBER IS 1. 10 COLUMN 1 PIC X(132) VALUE ALL "*". 05 LINE NUMBER IS PLUS 1. 10 COLUMN 40 PIC X(25) VALUE "EMPLOYEE SUMMARY REPORT". 05 LINE NUMBER IS PLUS 1. 10 COLUMN 1 PIC X(132) VALUE ALL "*". 05 LINE NUMBER IS PLUS 2. 10 COLUMN 1 PIC X(12) VALUE "RUN DATE: ". 10 COLUMN 15 PIC 99/99/9999 SOURCE WS-CURRENT-DATE. 01 EMP-PAGE-HEADING TYPE IS PAGE HEADING. 05 LINE NUMBER IS 6. 10 COLUMN 1 PIC X(6) VALUE "EMP ID". 10 COLUMN 10 PIC X(20) VALUE "NAME". 10 COLUMN 35 PIC X(10) VALUE "DEPARTMENT". 10 COLUMN 50 PIC X(8) VALUE "SALARY". 10 COLUMN 70 PIC X(9) VALUE "HIRE DATE". 05 LINE NUMBER IS PLUS 1. 10 COLUMN 1 PIC X(80) VALUE ALL "-". 01 EMP-DEPARTMENT-HEADING TYPE IS CONTROL HEADING EMP-DEPARTMENT. 05 LINE NUMBER IS PLUS 2. 10 COLUMN 1 PIC X(12) VALUE "DEPARTMENT: ". 10 COLUMN 14 PIC X(15) SOURCE EMP-DEPARTMENT. 01 EMP-DETAIL-LINE TYPE IS DETAIL. 05 LINE NUMBER IS PLUS 1. 10 COLUMN 1 PIC 9(6) SOURCE EMP-ID. 10 COLUMN 10 PIC X(25) SOURCE EMP-NAME. 10 COLUMN 35 PIC X(15) SOURCE EMP-DEPARTMENT. 10 COLUMN 50 PIC ZZ,ZZZ,ZZ9.99 SOURCE EMP-SALARY. 10 COLUMN 70 PIC 99/99/9999 SOURCE EMP-HIRE-DATE. 01 EMP-DEPARTMENT-FOOTING TYPE IS CONTROL FOOTING EMP-DEPARTMENT. 05 LINE NUMBER IS PLUS 1. 10 COLUMN 35 PIC X(15) VALUE "DEPT TOTAL:". 10 COLUMN 50 PIC ZZ,ZZZ,ZZ9.99 SUM EMP-SALARY. 05 LINE NUMBER IS PLUS 1. 10 COLUMN 35 PIC X(15) VALUE "DEPT COUNT:". 10 COLUMN 50 PIC ZZ,ZZ9 COUNT EMP-ID. 01 EMP-FINAL-FOOTING TYPE IS CONTROL FOOTING FINAL. 05 LINE NUMBER IS PLUS 2. 10 COLUMN 1 PIC X(80) VALUE ALL "=". 05 LINE NUMBER IS PLUS 1. 10 COLUMN 35 PIC X(15) VALUE "GRAND TOTAL:". 10 COLUMN 50 PIC ZZZ,ZZZ,ZZ9.99 SUM EMP-SALARY. 05 LINE NUMBER IS PLUS 1. 10 COLUMN 35 PIC X(15) VALUE "TOTAL COUNT:". 10 COLUMN 50 PIC ZZ,ZZ9 COUNT EMP-ID. *> Sales Analysis Report RD SALES-ANALYSIS-REPORT CONTROLS ARE FINAL, SALE-REGION, SALE-EMP-ID PAGE LIMIT IS 55 LINES HEADING 1 FIRST DETAIL 8 LAST DETAIL 50 FOOTING 53. 01 SALES-REPORT-HEADING TYPE IS REPORT HEADING. 05 LINE NUMBER IS 1. 10 COLUMN 35 PIC X(20) VALUE "SALES ANALYSIS REPORT". 05 LINE NUMBER IS PLUS 2. 10 COLUMN 1 PIC X(10) VALUE "RUN DATE: ". 10 COLUMN 12 PIC 99/99/9999 SOURCE WS-CURRENT-DATE. 01 SALES-PAGE-HEADING TYPE IS PAGE HEADING. 05 LINE NUMBER IS 4. 10 COLUMN 1 PIC X(8) VALUE "REGION". 10 COLUMN 15 PIC X(6) VALUE "EMP ID". 10 COLUMN 25 PIC X(9) VALUE "SALE DATE". 10 COLUMN 40 PIC X(11) VALUE "SALE AMOUNT". 10 COLUMN 55 PIC X(10) VALUE "COMMISSION". 05 LINE NUMBER IS PLUS 1. 10 COLUMN 1 PIC X(70) VALUE ALL "-". 01 SALES-REGION-HEADING TYPE IS CONTROL HEADING SALE-REGION. 05 LINE NUMBER IS PLUS 2. 10 COLUMN 1 PIC X(8) VALUE "REGION: ". 10 COLUMN 10 PIC X(10) SOURCE SALE-REGION. 01 SALES-DETAIL-LINE TYPE IS DETAIL. 05 LINE NUMBER IS PLUS 1. 10 COLUMN 1 PIC X(10) SOURCE SALE-REGION. 10 COLUMN 15 PIC 9(6) SOURCE SALE-EMP-ID. 10 COLUMN 25 PIC 99/99/9999 SOURCE SALE-DATE. 10 COLUMN 40 PIC ZZ,ZZZ,ZZ9.99 SOURCE SALE-AMOUNT. 10 COLUMN 55 PIC Z,ZZZ,ZZ9.99 SOURCE SALE-COMMISSION. 01 SALES-REGION-FOOTING TYPE IS CONTROL FOOTING SALE-REGION. 05 LINE NUMBER IS PLUS 1. 10 COLUMN 25 PIC X(15) VALUE "REGION TOTAL:". 10 COLUMN 40 PIC ZZ,ZZZ,ZZ9.99 SUM SALE-AMOUNT. 01 SALES-FINAL-FOOTING TYPE IS CONTROL FOOTING FINAL. 05 LINE NUMBER IS PLUS 2. 10 COLUMN 25 PIC X(15) VALUE "GRAND TOTAL:". 10 COLUMN 40 PIC ZZZ,ZZZ,ZZ9.99 SUM SALE-AMOUNT. PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM INITIALIZE-PROCESSING PERFORM PROCESS-EMPLOYEE-REPORT PERFORM PROCESS-SALES-REPORT PERFORM FINALIZE-PROCESSING STOP RUN. INITIALIZE-PROCESSING. DISPLAY "=== INITIATE STATEMENT DEMONSTRATION ===" OPEN INPUT EMPLOYEE-FILE OPEN INPUT SALES-FILE OPEN OUTPUT REPORT-OUTPUT ACCEPT WS-CURRENT-DATE FROM DATE YYYYMMDD DISPLAY "Files opened successfully" DISPLAY "Report processing starting with date: " WS-CURRENT-DATE DISPLAY SPACES. PROCESS-EMPLOYEE-REPORT. DISPLAY "=== EMPLOYEE REPORT PROCESSING ===" *> INITIATE the employee report DISPLAY "Initiating Employee Summary Report..." INITIATE EMPLOYEE-SUMMARY-REPORT SET REPORT-RUNNING TO TRUE DISPLAY "Employee report initialized successfully" DISPLAY "Report heading and page setup completed" *> Process employee records PERFORM READ-EMPLOYEE-RECORD PERFORM UNTIL EOF-EMPLOYEE ADD 1 TO WS-TOTAL-EMPLOYEES ADD EMP-SALARY TO WS-TOTAL-SALARY GENERATE EMP-DETAIL-LINE PERFORM READ-EMPLOYEE-RECORD END-PERFORM *> Terminate the employee report DISPLAY "Terminating Employee Summary Report..." TERMINATE EMPLOYEE-SUMMARY-REPORT SET REPORT-STOPPED TO TRUE DISPLAY "Employee report completed" DISPLAY "Total employees processed: " WS-TOTAL-EMPLOYEES DISPLAY "Total salary amount: $" WS-TOTAL-SALARY DISPLAY SPACES. PROCESS-SALES-REPORT. DISPLAY "=== SALES REPORT PROCESSING ===" *> INITIATE the sales report DISPLAY "Initiating Sales Analysis Report..." INITIATE SALES-ANALYSIS-REPORT SET REPORT-RUNNING TO TRUE DISPLAY "Sales report initialized successfully" DISPLAY "Control breaks set up for region and employee" *> Process sales records PERFORM READ-SALES-RECORD PERFORM UNTIL EOF-SALES ADD SALE-AMOUNT TO WS-TOTAL-SALES GENERATE SALES-DETAIL-LINE PERFORM READ-SALES-RECORD END-PERFORM *> Terminate the sales report DISPLAY "Terminating Sales Analysis Report..." TERMINATE SALES-ANALYSIS-REPORT SET REPORT-STOPPED TO TRUE DISPLAY "Sales report completed" DISPLAY "Total sales amount: $" WS-TOTAL-SALES DISPLAY SPACES. READ-EMPLOYEE-RECORD. READ EMPLOYEE-FILE AT END SET EOF-EMPLOYEE TO TRUE END-READ. READ-SALES-RECORD. READ SALES-FILE AT END SET EOF-SALES TO TRUE END-READ. FINALIZE-PROCESSING. DISPLAY "=== PROCESSING SUMMARY ===" CLOSE EMPLOYEE-FILE CLOSE SALES-FILE CLOSE REPORT-OUTPUT DISPLAY "All files closed successfully" DISPLAY "Final statistics:" DISPLAY " Employees processed: " WS-TOTAL-EMPLOYEES DISPLAY " Total payroll: $" WS-TOTAL-SALARY DISPLAY " Total sales: $" WS-TOTAL-SALES DISPLAY "Report processing completed successfully". *> Advanced INITIATE examples MULTI-REPORT-PROCESSING. DISPLAY "=== MULTIPLE REPORT INITIATION ===" *> Initialize multiple reports simultaneously INITIATE EMPLOYEE-SUMMARY-REPORT, SALES-ANALYSIS-REPORT DISPLAY "Multiple reports initiated" *> Process data for both reports PERFORM PROCESS-DUAL-REPORTS *> Terminate both reports TERMINATE EMPLOYEE-SUMMARY-REPORT, SALES-ANALYSIS-REPORT DISPLAY "All reports terminated". PROCESS-DUAL-REPORTS. *> Example of processing data for multiple reports PERFORM UNTIL EOF-EMPLOYEE OR EOF-SALES IF NOT EOF-EMPLOYEE GENERATE EMP-DETAIL-LINE PERFORM READ-EMPLOYEE-RECORD END-IF IF NOT EOF-SALES GENERATE SALES-DETAIL-LINE PERFORM READ-SALES-RECORD END-IF END-PERFORM. ERROR-HANDLING-WITH-INITIATE. DISPLAY "=== ERROR HANDLING SCENARIOS ===" *> Check if report is already initiated IF REPORT-RUNNING DISPLAY "Error: Report already active" DISPLAY "Must TERMINATE before re-initiating" ELSE INITIATE EMPLOYEE-SUMMARY-REPORT SET REPORT-RUNNING TO TRUE DISPLAY "Report successfully initiated" END-IF *> Validate report setup before processing IF REPORT-RUNNING DISPLAY "Report ready for GENERATE statements" PERFORM PROCESS-REPORT-DATA ELSE DISPLAY "Error: Report not properly initiated" PERFORM ERROR-RECOVERY END-IF. CONDITIONAL-INITIATE. DISPLAY "=== CONDITIONAL REPORT INITIATION ===" *> Initiate based on data availability IF WS-TOTAL-EMPLOYEES > 0 INITIATE EMPLOYEE-SUMMARY-REPORT DISPLAY "Employee report initiated - data available" ELSE DISPLAY "No employee data - skipping report" END-IF *> Initiate with parameter checking IF WS-CURRENT-DATE NOT = ZERO INITIATE SALES-ANALYSIS-REPORT DISPLAY "Sales report initiated with date: " WS-CURRENT-DATE ELSE DISPLAY "Invalid date - cannot initiate report" END-IF. REPORT-STATUS-MONITORING. DISPLAY "=== REPORT STATUS MONITORING ===" *> Monitor report initialization INITIATE EMPLOYEE-SUMMARY-REPORT IF REPORT-RUNNING DISPLAY "Report status: ACTIVE" DISPLAY "Page counter initialized" DISPLAY "Line counter initialized" DISPLAY "Control fields prepared" END-IF *> Process with status checking PERFORM UNTIL EOF-EMPLOYEE IF REPORT-RUNNING GENERATE EMP-DETAIL-LINE ELSE DISPLAY "Error: Report no longer active" EXIT PERFORM END-IF PERFORM READ-EMPLOYEE-RECORD END-PERFORM. PERFORMANCE-OPTIMIZED-INITIATE. DISPLAY "=== PERFORMANCE OPTIMIZATION ===" *> Batch multiple initiations INITIATE EMPLOYEE-SUMMARY-REPORT, SALES-ANALYSIS-REPORT *> Single setup for multiple reports PERFORM SETUP-COMMON-DATA *> Efficient report processing PERFORM PROCESS-ALL-REPORTS *> Batch termination TERMINATE EMPLOYEE-SUMMARY-REPORT, SALES-ANALYSIS-REPORT. SETUP-COMMON-DATA. *> Common initialization for multiple reports ACCEPT WS-CURRENT-DATE FROM DATE YYYYMMDD MOVE 0 TO WS-TOTAL-EMPLOYEES MOVE 0 TO WS-TOTAL-SALES. PROCESS-ALL-REPORTS. *> Optimized processing for multiple reports PERFORM UNTIL EOF-EMPLOYEE AND EOF-SALES IF NOT EOF-EMPLOYEE GENERATE EMP-DETAIL-LINE ADD 1 TO WS-TOTAL-EMPLOYEES PERFORM READ-EMPLOYEE-RECORD END-IF IF NOT EOF-SALES GENERATE SALES-DETAIL-LINE ADD SALE-AMOUNT TO WS-TOTAL-SALES PERFORM READ-SALES-RECORD END-IF END-PERFORM.
Initializes page counters, line counters, and control break fields
Sets up page limits, line positioning, and page numbering
Prepares control break fields and group processing
Generates REPORT HEADING groups if defined
1234567891011121314151617RD SIMPLE-REPORT PAGE LIMIT IS 60 LINES HEADING 1 FIRST DETAIL 5 LAST DETAIL 55. 01 PAGE-HEADER TYPE IS PAGE HEADING. 05 LINE 1. 10 COLUMN 25 PIC X(15) VALUE "SIMPLE REPORT". PROCEDURE DIVISION. INITIATE SIMPLE-REPORT *> Now ready for GENERATE statements GENERATE DETAIL-LINE TERMINATE SIMPLE-REPORT.
123456789101112*> Initialize multiple reports INITIATE SUMMARY-REPORT, DETAIL-REPORT *> Process data for both PERFORM UNTIL END-OF-DATA GENERATE SUMMARY-LINE GENERATE DETAIL-LINE READ INPUT-FILE END-PERFORM *> Terminate both reports TERMINATE SUMMARY-REPORT, DETAIL-REPORT.
What is the primary purpose of the INITIATE statement?
Answer: INITIATE prepares a Report Writer report for output generation by setting up counters, initializing control fields, configuring page management, and making the report ready for GENERATE statements.
What must happen before and after INITIATE?
Answer: Before INITIATE: Open output files and prepare data. After INITIATE: Use GENERATE statements to produce output, then TERMINATE the report when finished.