初歩的な質問となりますが悩んでいます。作成方法について教えていただける方いらっしゃいましたら、よろしくお願いします。
【質問内容】
2つのファイルをマッチングさせて出力ファイルを作成しています。
入力1:売上ファイル(URIF)
顧客ID,氏名,売上日,担当者ID(KOKID,NAME,URIYMD,TANTOU)
0001,A田B夫,20101105,1201
0002,C下D介,20101106,1305
0003,E岡F子,20101107,1103
入力2:売上明細ファイル(MEISAIF)
顧客ID,商品区分,金額(KOKID,KUBUN,KINGAK)
0001,01,10500
0001,03,5250
0002,01,3150
0002,02,1575
0002,03,2100
0003,02,1050
0003,03,7350
出力:売上詳細ファイル(SYOUSAIF)
顧客ID,氏名,売上日,担当者ID,金額1,金額2,金額3(KOKID,NAME,URIYMD,TANTOU,KINGAK1,KINGAK2,KINGAK3)
0001,A田B夫,20101105,1201,10500, ,5250
0002,C下D介,20101106,1305,3150,1575,2100
0003,E岡F子,20101107,1103, ,1050,7350
IF URIF-KOKID = MEISAIF-KOKID
THEN
PERFORM WITH TEST BEFORE
UNTIL URIF-KOKID > MEISAIF-KOKID
PERFORM MAKE-PROC
END-PERFORM
PERFORM MEISAIF-READ-PROC
ELSE
IF URIF-KOKID > MEISAIF-KOKID
THEN
PERFORM MEISAIF-READ-PROC
UNTIL MEISAI-KOKID NOT < URIF-KOKID
ELSE
PERFORM WITH TEST BEFORE
UNTIL MEISAI-KOKID NOT > URIF-KOKID
PERFORM URIF-READ-PROC
END-PERFORM
END-IF
END-IF.
MAKE-PROC SECTION.
MAKE-PROC-010.
MOVE URIF-KOKID TO SYOUSAIF-KOKID.
MOVE URIF-NAME TO SYOUSAIF-NAME.
MOVE URIF-URIYMD TO SYOUSAIF-URIYMD.
MOVE URIF-TANTOU TO SYOUSAIF-TANTOU.
EVALUATE MEISAI-KUBUN
WHEN '01'
MOVE MEISAIF-KINGAK TO SYOUSAIF-KINGAK1
WHEN '02'
MOVE MEISAIF-KINGAK TO SYOUSAIF-KINGAK2
WHEN '03'
MOVE MEISAIF-KINGAK TO SYOUSAIF-KINGAK3
END-EVALUATE.
上記のように作成してみると、出力されたデータが以下のようになってしまいます。
顧客ID,氏名,売上日,担当者ID,金額1,金額2,金額3
0001,A田B夫,20101105,1201,10500, ,
0001,A田B夫,20101105,1201,10500, ,5250
0002,C下D介,20101106,1305,3150, ,
0002,C下D介,20101106,1305,3150,1575,
0002,C下D介,20101106,1305,3150,1575,2100
0003,E岡F子,20101107,1103, ,1050,
0003,E岡F子,20101107,1103, ,1050,7350
どのようにしたら本来の1件化した形にできるのか考えているのですが、
一向に解決する方法が見つかりません。
もし解決策があるようでしたらご指導願いたく思います。
よろしくお願いします。
お礼
早速ありがとうございました。出力しているところについて、追記しております。この内容だと、全件出力するような仕掛けになってますよね。ブレークした部分で書き出しということですが、SYOUSAI-FILE-WRITE-PROC SECTIONのところで指定してあげれば良いのでしょうか?どのようにコーディングしたらいいのか正直なところ悩んでるところです。 IF URIF-KOKID = MEISAIF-KOKID THEN PERFORM WITH TEST BEFORE UNTIL URIF-KOKID > MEISAIF-KOKID PERFORM MAKE-PROC END-PERFORM PERFORM MEISAIF-READ-PROC ELSE IF URIF-KOKID > MEISAIF-KOKID THEN PERFORM MEISAIF-READ-PROC UNTIL MEISAI-KOKID NOT < URIF-KOKID ELSE PERFORM WITH TEST BEFORE UNTIL MEISAI-KOKID NOT > URIF-KOKID PERFORM URIF-READ-PROC END-PERFORM END-IF END-IF. MAKE-PROC SECTION. MAKE-PROC-010. MOVE URIF-KOKID TO SYOUSAIF-KOKID. MOVE URIF-NAME TO SYOUSAIF-NAME. MOVE URIF-URIYMD TO SYOUSAIF-URIYMD. MOVE URIF-TANTOU TO SYOUSAIF-TANTOU. EVALUATE MEISAI-KUBUN WHEN '01' MOVE MEISAIF-KINGAK TO SYOUSAIF-KINGAK1 WHEN '02' MOVE MEISAIF-KINGAK TO SYOUSAIF-KINGAK2 WHEN '03' MOVE MEISAIF-KINGAK TO SYOUSAIF-KINGAK3 END-EVALUATE. PERFORM SYOUSAI-FILE-WRITE-PROC. MAKE-PROC-999. SYOUSAI-FILE-WRITE-PROC SECTION. SYOUSAI-FILE-WRITE-010. WRITE SYOUSAIF INVALID KEY MOVE '1' TO SYOUSAI-FILE-WRITE-INVALID. IF SYOUSAI-FILE-WRITE-INVALID = '1' THEN CONTINUE ELSE ADD 1 TO SYOUSAI-FILE-CNT END-IF. SYOUSAI-FILE-WRITE-999. EXIT.