      ******************************************************************
      * PROGRAM-ID : SALES01                                             *
      * 概  要     : 各店舗の日次売上ファイルを読み込み、               *
      *              店舗別合計および全店合計を集計する。               *
      * 作成       : 1987-04-15 田中 一郎                                *
      * 履歴       : 2008-03-31 直営店12店舗→32店舗対応                  *
      *            : 2014-06-10 期間限定商品(SAKURA)処理追加              *
      *            : 2020-12-25 軽減税率の内訳項目を追加                 *
      ******************************************************************
       IDENTIFICATION DIVISION.
       PROGRAM-ID.    SALES01.
       AUTHOR.        ICHIRO-TANAKA.
       DATE-WRITTEN.  1987-04-15.
      *
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT SALES-IN-FILE   ASSIGN TO "SALESIN"
                                  ORGANIZATION IS SEQUENTIAL.
           SELECT SALES-OUT-FILE  ASSIGN TO "SALESOUT"
                                  ORGANIZATION IS SEQUENTIAL.
           SELECT SHOP-MASTER     ASSIGN TO "SHOPMST"
                                  ORGANIZATION IS INDEXED
                                  ACCESS MODE IS RANDOM
                                  RECORD KEY IS SM-SHOP-CODE.
      *
       DATA DIVISION.
       FILE SECTION.
       FD  SALES-IN-FILE
           RECORDING MODE IS F.
       01  SALES-IN-RECORD.
           05  SI-SHOP-CODE      PIC 9(4).
           05  SI-SALE-DATE      PIC 9(8).
           05  SI-PRODUCT-CODE   PIC X(6).
           05  SI-QTY            PIC 9(5).
           05  SI-UNIT-PRICE     PIC 9(7)V99.
           05  SI-TAX-RATE       PIC 9(2)V99.
           05  SI-FILLER         PIC X(20).
      *
       FD  SALES-OUT-FILE
           RECORDING MODE IS F.
       01  SALES-OUT-RECORD.
           05  SO-DATE           PIC 9(8).
           05  SO-SHOP-CODE      PIC 9(4).
           05  SO-SHOP-NAME      PIC X(30).
           05  SO-TOTAL-QTY      PIC 9(7).
           05  SO-TOTAL-AMOUNT   PIC 9(11)V99.
           05  SO-TAX8-AMOUNT    PIC 9(11)V99.
           05  SO-TAX10-AMOUNT   PIC 9(11)V99.
      *
       FD  SHOP-MASTER.
       01  SHOP-MASTER-RECORD.
           05  SM-SHOP-CODE      PIC 9(4).
           05  SM-SHOP-NAME      PIC X(30).
           05  SM-AREA-CODE      PIC X(2).
           05  SM-OPEN-DATE      PIC 9(8).
           05  SM-FILLER         PIC X(20).
      *
       WORKING-STORAGE SECTION.
       01  WS-PARAMETERS.
           05  WS-RUN-DATE       PIC 9(8).
           05  WS-RC             PIC 9(2).
       01  WS-EOF-FLAG           PIC X(1)   VALUE "N".
           88  EOF-YES                      VALUE "Y".
           88  EOF-NO                       VALUE "N".
      *
       01  WS-CURRENT-SHOP.
           05  WS-CURRENT-CODE   PIC 9(4)   VALUE ZERO.
           05  WS-CURRENT-NAME   PIC X(30)  VALUE SPACES.
           05  WS-TOTAL-QTY      PIC 9(7)   VALUE ZERO.
           05  WS-TOTAL-AMOUNT   PIC 9(11)V99 VALUE ZERO.
           05  WS-TAX8-AMOUNT    PIC 9(11)V99 VALUE ZERO.
           05  WS-TAX10-AMOUNT   PIC 9(11)V99 VALUE ZERO.
      *
       01  WS-GRAND-TOTAL.
           05  WS-GT-QTY         PIC 9(9)   VALUE ZERO.
           05  WS-GT-AMOUNT      PIC 9(13)V99 VALUE ZERO.
           05  WS-GT-SHOPS       PIC 9(4)   VALUE ZERO.
      *
       01  WS-LINE-AMOUNT        PIC 9(11)V99 VALUE ZERO.
       01  WS-COUNTERS.
           05  WS-READ-CNT       PIC 9(9)   VALUE ZERO.
           05  WS-WRITE-CNT      PIC 9(9)   VALUE ZERO.
           05  WS-SKIP-CNT       PIC 9(9)   VALUE ZERO.
      *
       LINKAGE SECTION.
       01  LK-RUN-DATE           PIC 9(8).
       01  LK-RETURN-CODE        PIC 9(2).
      *
       PROCEDURE DIVISION USING LK-RUN-DATE LK-RETURN-CODE.
      *
       0000-MAIN.
           PERFORM 1000-INITIAL
           PERFORM 2000-READ-FIRST
           PERFORM 3000-PROCESS-LOOP UNTIL EOF-YES
           PERFORM 8000-FLUSH-LAST-SHOP
           PERFORM 9000-TERMINATE
           MOVE 0 TO LK-RETURN-CODE
           EXIT PROGRAM.
      *
       1000-INITIAL.
           MOVE LK-RUN-DATE TO WS-RUN-DATE
           OPEN INPUT  SALES-IN-FILE
           OPEN INPUT  SHOP-MASTER
           OPEN OUTPUT SALES-OUT-FILE
           MOVE ZERO TO WS-READ-CNT WS-WRITE-CNT WS-SKIP-CNT.
      *
       2000-READ-FIRST.
           READ SALES-IN-FILE
               AT END SET EOF-YES TO TRUE
           END-READ
           IF EOF-NO
              ADD 1 TO WS-READ-CNT
              MOVE SI-SHOP-CODE TO WS-CURRENT-CODE
              PERFORM 4000-LOOKUP-SHOP-NAME
           END-IF.
      *
       3000-PROCESS-LOOP.
           IF SI-SHOP-CODE NOT = WS-CURRENT-CODE
              PERFORM 8000-FLUSH-LAST-SHOP
              MOVE SI-SHOP-CODE TO WS-CURRENT-CODE
              MOVE ZERO TO WS-TOTAL-QTY WS-TOTAL-AMOUNT
              MOVE ZERO TO WS-TAX8-AMOUNT WS-TAX10-AMOUNT
              PERFORM 4000-LOOKUP-SHOP-NAME
           END-IF
           PERFORM 5000-ACCUMULATE
           READ SALES-IN-FILE
               AT END SET EOF-YES TO TRUE
           END-READ
           IF EOF-NO
              ADD 1 TO WS-READ-CNT
           END-IF.
      *
       4000-LOOKUP-SHOP-NAME.
           MOVE WS-CURRENT-CODE TO SM-SHOP-CODE
           READ SHOP-MASTER
               INVALID KEY
                  MOVE "未登録店舗"            TO WS-CURRENT-NAME
               NOT INVALID KEY
                  MOVE SM-SHOP-NAME           TO WS-CURRENT-NAME
           END-READ.
      *
       5000-ACCUMULATE.
           COMPUTE WS-LINE-AMOUNT = SI-QTY * SI-UNIT-PRICE
           ADD SI-QTY        TO WS-TOTAL-QTY
           ADD WS-LINE-AMOUNT TO WS-TOTAL-AMOUNT
           IF SI-TAX-RATE = 8.00
              ADD WS-LINE-AMOUNT TO WS-TAX8-AMOUNT
           ELSE
              IF SI-TAX-RATE = 10.00
                 ADD WS-LINE-AMOUNT TO WS-TAX10-AMOUNT
              ELSE
                 ADD 1 TO WS-SKIP-CNT
              END-IF
           END-IF.
      *
       8000-FLUSH-LAST-SHOP.
           MOVE WS-RUN-DATE      TO SO-DATE
           MOVE WS-CURRENT-CODE  TO SO-SHOP-CODE
           MOVE WS-CURRENT-NAME  TO SO-SHOP-NAME
           MOVE WS-TOTAL-QTY     TO SO-TOTAL-QTY
           MOVE WS-TOTAL-AMOUNT  TO SO-TOTAL-AMOUNT
           MOVE WS-TAX8-AMOUNT   TO SO-TAX8-AMOUNT
           MOVE WS-TAX10-AMOUNT  TO SO-TAX10-AMOUNT
           WRITE SALES-OUT-RECORD
           ADD 1 TO WS-WRITE-CNT
           ADD WS-TOTAL-QTY     TO WS-GT-QTY
           ADD WS-TOTAL-AMOUNT  TO WS-GT-AMOUNT
           ADD 1                TO WS-GT-SHOPS.
      *
       9000-TERMINATE.
           CLOSE SALES-IN-FILE
                 SHOP-MASTER
                 SALES-OUT-FILE
           DISPLAY "SALES01 完了 店舗数=" WS-GT-SHOPS
                   " 売上合計=" WS-GT-AMOUNT.
      *
