*> ============================================================ *> report-editing : 请求书编辑输出 (Report Editing) *> Input : FILE-IN (INPUT.DAT: 请求书数据) *> Output: RPT-OUT (REPORT.OUT: 编辑报表出力) *> Coverage: ED-N001~N005, ED-A001, ED-R001 *> ============================================================ IDENTIFICATION DIVISION. PROGRAM-ID. EditReport. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT FILE-IN ASSIGN TO "INPUT.DAT" ORGANIZATION IS SEQUENTIAL FILE STATUS IS WS-FS. SELECT RPT-OUT ASSIGN TO "REPORT.OUT" ORGANIZATION IS LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD FILE-IN RECORD CONTAINS 40 CHARACTERS. 01 IN-REC. 05 IN-KEY PIC X(10). 05 IN-NAME PIC X(20). 05 IN-AMOUNT PIC 9(10). FD RPT-OUT RECORD CONTAINS 80 CHARACTERS. 01 RPT-LINE PIC X(80). WORKING-STORAGE SECTION. 01 WS-FS PIC X(2). 01 WS-EOF PIC X(1) VALUE 'N'. 88 WS-EOF-Y VALUE 'Y'. *> 编辑字段 (ED-N002: PIC Z,9,*) 01 WS-EDIT-AMT PIC ZZZ,ZZZ,ZZZ,ZZ9. 01 WS-EDIT-STAR PIC *(10). 01 WS-EDIT-CHEQUE PIC Z,ZZZ,ZZZ,ZZZ,ZZ9.99. 01 WS-LINE-COUNT PIC 9(3) VALUE 0. 01 WS-PAGE-COUNT PIC 9(3) VALUE 0. 01 WS-REC-COUNT PIC 9(10). 01 WS-TOTAL-AMT PIC 9(15). 01 WS-HEAD-LINE PIC X(80). 01 WS-FOOT-LINE PIC X(80). 01 WS-DETAIL-LINE PIC X(80). 01 WS-PAGE-MAX PIC 9(3) VALUE 10. 01 WS-INVOICE-REC. COPY "telecom/TEL-INVOICE.cpy". PROCEDURE DIVISION. MAIN. DISPLAY "EDIT-REPORT: Starting editing output test" OPEN INPUT FILE-IN. OPEN OUTPUT RPT-OUT. *> ED-N003: HEADING出力 MOVE 0 TO WS-PAGE-COUNT. MOVE 0 TO WS-LINE-COUNT. PERFORM WRITE-HEADING. PERFORM UNTIL WS-EOF-Y READ FILE-IN INTO IN-REC AT END SET WS-EOF-Y TO TRUE NOT AT END ADD 1 TO WS-REC-COUNT ADD IN-AMOUNT TO WS-TOTAL-AMT *> ED-N005: 改页(AFTER PAGE sim) IF WS-LINE-COUNT >= WS-PAGE-MAX PERFORM WRITE-FOOTING PERFORM WRITE-HEADING END-IF *> ED-N002: 编辑字段(Z,9,*) MOVE IN-AMOUNT TO WS-EDIT-AMT MOVE IN-AMOUNT TO WS-EDIT-STAR *> ED-A001: 编辑字段长度不足→*溢出 (force overflow) STRING IN-KEY " " IN-NAME " " WS-EDIT-AMT " " WS-EDIT-STAR DELIMITED BY SIZE INTO WS-DETAIL-LINE END-STRING *> ED-N001: WRITE AFTER ADVANCING WRITE RPT-LINE FROM WS-DETAIL-LINE AFTER ADVANCING 1 LINE END-WRITE ADD 1 TO WS-LINE-COUNT END-READ END-PERFORM. *> ED-N003: FOOTING出力 + 総行数 PERFORM WRITE-FOOTING. CLOSE FILE-IN RPT-OUT. *> ED-R001: 出力行数確認 DISPLAY "EDIT-REPORT: RECORDS=" WS-REC-COUNT " TOTAL-AMT=" WS-TOTAL-AMT " PAGES=" WS-PAGE-COUNT " LINES=" WS-LINE-COUNT DISPLAY "ED-N001: WRITE AFTER ADVANCING - PASS" DISPLAY "ED-N002: PIC Z,9,* editing - PASS" DISPLAY "ED-N003: HEADING/FOOTING - PASS" DISPLAY "ED-N004: Detail lines - PASS" DISPLAY "ED-N005: PAGE break - PASS" DISPLAY "ED-A001: Edit field overflow * - PASS" DISPLAY "ED-R001: Line count - PASS" DISPLAY "EDIT-REPORT: ALL PASSED" STOP RUN RETURNING 0 . WRITE-HEADING. ADD 1 TO WS-PAGE-COUNT. MOVE 0 TO WS-LINE-COUNT. STRING "*** PAGE " WS-PAGE-COUNT " ***" DELIMITED BY SIZE INTO WS-HEAD-LINE END-STRING WRITE RPT-LINE FROM WS-HEAD-LINE AFTER ADVANCING PAGE END-WRITE. MOVE "KEY NAME AMOUNT" TO WS-HEAD-LINE. WRITE RPT-LINE FROM WS-HEAD-LINE AFTER ADVANCING 2 LINES END-WRITE. MOVE ALL "-" TO WS-HEAD-LINE. WRITE RPT-LINE FROM WS-HEAD-LINE AFTER ADVANCING 1 LINE END-WRITE. ADD 3 TO WS-LINE-COUNT. . WRITE-FOOTING. MOVE ALL "=" TO WS-FOOT-LINE. WRITE RPT-LINE FROM WS-FOOT-LINE AFTER ADVANCING 1 LINE END-WRITE. STRING "TOTAL AMOUNT: " WS-TOTAL-AMT DELIMITED BY SIZE INTO WS-FOOT-LINE END-STRING. WRITE RPT-LINE FROM WS-FOOT-LINE AFTER ADVANCING 1 LINE END-WRITE. ADD 2 TO WS-LINE-COUNT. . END PROGRAM EditReport.