Master Mainframe Technologies - COBOL, JCL, DB2, VSAM, CICS & More
ABEND Codes SQLCODEs File Status Interview Prep Contact
← Back to File Handling
File Handling | Advanced | COBOL

Control Break Report

Problem Description

Generate report with control breaks (subtotals by group).

Expected Output

Report with group subtotals

Hints

Detect when key field changes, print subtotal.

Solution

IDENTIFICATION DIVISION. PROGRAM-ID. CTRLBRK. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-SALES-DATA. 05 WS-SALE OCCURS 8 TIMES. 10 WS-DEPT PIC X(10). 10 WS-EMP PIC X(15). 10 WS-AMOUNT PIC 9(6)V99. 01 WS-I PIC 9. 01 WS-PREV-DEPT PIC X(10) VALUE SPACES. 01 WS-DEPT-TOTAL PIC 9(8)V99 VALUE 0. 01 WS-GRAND-TOTAL PIC 9(9)V99 VALUE 0. 01 WS-DISP PIC ZZ,ZZ,ZZ9.99. PROCEDURE DIVISION. PERFORM INIT-DATA. DISPLAY "===========================================". DISPLAY " SALES BY DEPARTMENT ". DISPLAY "===========================================". PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 8 * Check for control break IF WS-DEPT(WS-I) NOT = WS-PREV-DEPT IF WS-PREV-DEPT NOT = SPACES MOVE WS-DEPT-TOTAL TO WS-DISP DISPLAY " SUBTOTAL: " WS-DISP DISPLAY "-------------------------------------------" END-IF DISPLAY "DEPARTMENT: " WS-DEPT(WS-I) MOVE 0 TO WS-DEPT-TOTAL MOVE WS-DEPT(WS-I) TO WS-PREV-DEPT END-IF MOVE WS-AMOUNT(WS-I) TO WS-DISP DISPLAY " " WS-EMP(WS-I) " " WS-DISP ADD WS-AMOUNT(WS-I) TO WS-DEPT-TOTAL ADD WS-AMOUNT(WS-I) TO WS-GRAND-TOTAL END-PERFORM. * Final subtotal MOVE WS-DEPT-TOTAL TO WS-DISP. DISPLAY " SUBTOTAL: " WS-DISP. DISPLAY "===========================================". MOVE WS-GRAND-TOTAL TO WS-DISP. DISPLAY "GRAND TOTAL: " WS-DISP. STOP RUN. INIT-DATA. MOVE "FINANCE" TO WS-DEPT(1). MOVE "ALICE" TO WS-EMP(1). MOVE 5000.00 TO WS-AMOUNT(1). MOVE "FINANCE" TO WS-DEPT(2). MOVE "BOB" TO WS-EMP(2). MOVE 6500.00 TO WS-AMOUNT(2). MOVE "FINANCE" TO WS-DEPT(3). MOVE "CHARLIE" TO WS-EMP(3). MOVE 5500.00 TO WS-AMOUNT(3). MOVE "IT" TO WS-DEPT(4). MOVE "DIANA" TO WS-EMP(4). MOVE 7000.00 TO WS-AMOUNT(4). MOVE "IT" TO WS-DEPT(5). MOVE "EDWARD" TO WS-EMP(5). MOVE 8000.00 TO WS-AMOUNT(5). MOVE "SALES" TO WS-DEPT(6). MOVE "FIONA" TO WS-EMP(6). MOVE 9500.00 TO WS-AMOUNT(6). MOVE "SALES" TO WS-DEPT(7). MOVE "GEORGE" TO WS-EMP(7). MOVE 8500.00 TO WS-AMOUNT(7). MOVE "SALES" TO WS-DEPT(8). MOVE "HELEN" TO WS-EMP(8). MOVE 7500.00 TO WS-AMOUNT(8).

Explanation:

Track previous key value. When it changes, print subtotal and reset.