The GENERATE statement represents a sophisticated automated report output mechanism within COBOL's Report Writer facility, serving as the primary command for producing formatted report content through intelligent data presentation and automatic layout management. This statement embodies the principles of declarative reporting by providing comprehensive output generation capabilities that automatically handle page formatting, control break processing, summary calculations, and line positioning while maintaining consistent report structure and ensuring professional presentation standards in enterprise reporting environments that require reliable document generation and business intelligence output capabilities.
1234567GENERATE report-group-name GENERATE report-name *> Examples: GENERATE EMPLOYEE-DETAIL GENERATE DEPARTMENT-SUMMARY GENERATE PAYROLL-REPORT
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121IDENTIFICATION DIVISION. PROGRAM-ID. GENERATE-EXAMPLES. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT EMPLOYEE-FILE ASSIGN TO 'EMPLOYEES.DAT' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS INPUT-FILE-STATUS. SELECT REPORT-FILE ASSIGN TO 'EMPRPT.RPT' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS REPORT-FILE-STATUS. DATA DIVISION. FILE SECTION. FD EMPLOYEE-FILE RECORD CONTAINS 100 CHARACTERS. 01 EMPLOYEE-RECORD. 05 EMP-ID PIC 9(6). 05 EMP-NAME PIC X(30). 05 EMP-DEPARTMENT PIC X(15). 05 EMP-SALARY PIC 9(7)V99. 05 EMP-HIRE-DATE PIC 9(8). 05 FILLER PIC X(32). FD REPORT-FILE RECORD CONTAINS 132 CHARACTERS. 01 REPORT-RECORD PIC X(132). REPORT SECTION. RD EMPLOYEE-REPORT CONTROLS ARE FINAL EMP-DEPARTMENT PAGE LIMIT IS 66 LINES HEADING 1 FIRST DETAIL 8 LAST DETAIL 58 FOOTING 62. 01 REPORT-HEADER TYPE IS REPORT HEADING. 05 LINE NUMBER IS 1. 10 COLUMN 1 PIC X(30) VALUE 'EMPLOYEE SALARY REPORT'. 10 COLUMN 50 PIC X(5) VALUE 'PAGE:'. 10 COLUMN 56 PIC ZZ9 SOURCE IS PAGE-COUNTER. 05 LINE NUMBER IS 3. 10 COLUMN 1 PIC X(80) VALUE ALL '='. 01 PAGE-HEADER TYPE IS PAGE HEADING. 05 LINE NUMBER IS 5. 10 COLUMN 1 PIC X(6) VALUE 'EMP ID'. 10 COLUMN 10 PIC X(20) VALUE 'EMPLOYEE NAME'. 10 COLUMN 35 PIC X(15) VALUE 'DEPARTMENT'. 10 COLUMN 55 PIC X(10) VALUE 'SALARY'. 10 COLUMN 70 PIC X(10) VALUE 'HIRE DATE'. 05 LINE NUMBER IS 6. 10 COLUMN 1 PIC X(80) VALUE ALL '-'. 01 EMPLOYEE-DETAIL TYPE IS DETAIL. 05 LINE NUMBER IS PLUS 1. 10 COLUMN 1 PIC 9(6) SOURCE IS EMP-ID. 10 COLUMN 10 PIC X(20) SOURCE IS EMP-NAME. 10 COLUMN 35 PIC X(15) SOURCE IS EMP-DEPARTMENT. 10 COLUMN 55 PIC ZZZ,ZZ9.99 SOURCE IS EMP-SALARY. 10 COLUMN 70 PIC 99/99/9999 SOURCE IS EMP-HIRE-DATE. 01 DEPT-FOOTER TYPE IS CONTROL FOOTING EMP-DEPARTMENT. 05 LINE NUMBER IS PLUS 2. 10 COLUMN 35 PIC X(15) VALUE 'DEPT TOTAL:'. 10 COLUMN 55 PIC ZZZ,ZZ9.99 SUM EMP-SALARY. 05 LINE NUMBER IS PLUS 1. 10 COLUMN 35 PIC X(15) VALUE 'DEPT COUNT:'. 10 COLUMN 55 PIC ZZZ,ZZ9 COUNT EMP-SALARY. 01 FINAL-FOOTER TYPE IS CONTROL FOOTING FINAL. 05 LINE NUMBER IS PLUS 3. 10 COLUMN 1 PIC X(15) VALUE 'GRAND TOTALS:'. 05 LINE NUMBER IS PLUS 1. 10 COLUMN 35 PIC X(15) VALUE 'TOTAL PAYROLL:'. 10 COLUMN 55 PIC ZZZ,ZZ9.99 SUM EMP-SALARY. 05 LINE NUMBER IS PLUS 1. 10 COLUMN 35 PIC X(15) VALUE 'TOTAL EMPLOYEES:'. 10 COLUMN 55 PIC ZZZ,ZZ9 COUNT EMP-SALARY. WORKING-STORAGE SECTION. 01 FILE-STATUS-FIELDS. 05 INPUT-FILE-STATUS PIC XX. 88 INPUT-SUCCESS VALUE '00'. 88 INPUT-EOF VALUE '10'. 05 REPORT-FILE-STATUS PIC XX. 88 REPORT-SUCCESS VALUE '00'. PROCEDURE DIVISION. MAIN-PROCESSING. OPEN INPUT EMPLOYEE-FILE OPEN OUTPUT REPORT-FILE INITIATE EMPLOYEE-REPORT READ EMPLOYEE-FILE AT END SET INPUT-EOF TO TRUE END-READ PERFORM UNTIL INPUT-EOF GENERATE EMPLOYEE-DETAIL READ EMPLOYEE-FILE AT END SET INPUT-EOF TO TRUE END-READ END-PERFORM TERMINATE EMPLOYEE-REPORT CLOSE EMPLOYEE-FILE CLOSE REPORT-FILE STOP RUN.
12345678910111213PROCEDURE DIVISION. INITIATE SALES-REPORT PERFORM UNTIL END-OF-FILE READ SALES-FILE AT END SET END-OF-FILE TO TRUE NOT AT END GENERATE SALES-DETAIL END-READ END-PERFORM TERMINATE SALES-REPORT.
1234567891011PROCEDURE DIVISION. INITIATE SUMMARY-REPORT *> Generate summary lines only PERFORM VARYING DEPT-CODE FROM 1 BY 1 UNTIL DEPT-CODE > MAX-DEPARTMENTS MOVE DEPT-CODE TO SUMMARY-DEPT-CODE GENERATE DEPARTMENT-SUMMARY END-PERFORM TERMINATE SUMMARY-REPORT.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859IDENTIFICATION DIVISION. PROGRAM-ID. ADVANCED-GENERATE. DATA DIVISION. REPORT SECTION. RD MULTI-LEVEL-REPORT CONTROLS ARE FINAL REGION-CODE DISTRICT-CODE STORE-CODE PAGE LIMIT IS 66 LINES HEADING 1 FIRST DETAIL 10 LAST DETAIL 55 FOOTING 60. *> Multiple control break levels 01 STORE-DETAIL TYPE IS DETAIL. 05 LINE NUMBER IS PLUS 1. 10 COLUMN 5 PIC X(10) SOURCE IS STORE-NAME. 10 COLUMN 20 PIC ZZ,ZZ9.99 SOURCE IS DAILY-SALES. 10 COLUMN 35 PIC ZZ9 SOURCE IS TRANSACTION-COUNT. 01 STORE-TOTAL TYPE IS CONTROL FOOTING STORE-CODE. 05 LINE NUMBER IS PLUS 1. 10 COLUMN 5 PIC X(15) VALUE 'Store Total:'. 10 COLUMN 20 PIC ZZ,ZZ9.99 SUM DAILY-SALES. 01 DISTRICT-TOTAL TYPE IS CONTROL FOOTING DISTRICT-CODE. 05 LINE NUMBER IS PLUS 2. 10 COLUMN 5 PIC X(15) VALUE 'District Total:'. 10 COLUMN 20 PIC ZZZ,ZZ9.99 SUM DAILY-SALES. 01 REGION-TOTAL TYPE IS CONTROL FOOTING REGION-CODE. 05 LINE NUMBER IS PLUS 2. 10 COLUMN 5 PIC X(15) VALUE 'Region Total:'. 10 COLUMN 20 PIC ZZZ,ZZ9.99 SUM DAILY-SALES. 01 GRAND-TOTAL TYPE IS CONTROL FOOTING FINAL. 05 LINE NUMBER IS PLUS 3. 10 COLUMN 5 PIC X(15) VALUE 'Grand Total:'. 10 COLUMN 20 PIC Z,ZZZ,ZZ9.99 SUM DAILY-SALES. PROCEDURE DIVISION. ADVANCED-PROCESSING. INITIATE MULTI-LEVEL-REPORT PERFORM UNTIL END-OF-INPUT READ SALES-INPUT-FILE AT END SET END-OF-INPUT TO TRUE NOT AT END *> Generate detail and automatic control breaks GENERATE STORE-DETAIL END-READ END-PERFORM TERMINATE MULTI-LEVEL-REPORT STOP RUN.
What must you do before using GENERATE statements?
Answer: You must INITIATE the report before using GENERATE statements. This initializes the Report Writer and prepares the report for output generation.
How does GENERATE handle control breaks automatically?
Answer: GENERATE automatically detects control field changes and produces appropriate control footing groups before generating the current detail line, handling totals and summaries automatically.
What statement finalizes report generation?
Answer: TERMINATE report-name finalizes report generation, produces final control footings, and completes the report output process.
12345678910111213141516PROCEDURE DIVISION. OPEN INPUT DATA-FILE OPEN OUTPUT REPORT-FILE INITIATE DETAIL-REPORT PERFORM UNTIL END-OF-FILE READ DATA-FILE AT END SET END-OF-FILE TO TRUE NOT AT END GENERATE DETAIL-LINE END-READ END-PERFORM TERMINATE DETAIL-REPORT CLOSE DATA-FILE REPORT-FILE.
123456789101112PROCEDURE DIVISION. INITIATE SUMMARY-REPORT *> Process aggregated data PERFORM VARYING CATEGORY FROM 1 BY 1 UNTIL CATEGORY > MAX-CATEGORIES MOVE CATEGORY-TOTALS(CATEGORY) TO SUMMARY-AMOUNT GENERATE SUMMARY-LINE END-PERFORM TERMINATE SUMMARY-REPORT.