# 詳細設計書 ## 基本情報 | # | 項目 | 内容 | |---|------|------| | 1 | システム名 | 給与計算システム | | 2 | プログラムID | KYU09MRG | | 3 | プログラム名 | 支給データ結合処理 | | 4 | PGMタイプ | メイン | | 5 | PGMパターン | MERGE(複数ファイル結合) | | 6 | 機能概要 | SALARY-NETとBONUS-DATAをMERGE文で社員番号昇順に結合する。 | | 7 | | OUTPUT PROCEDURE内で同一社員の給与(TYPE=S)と賞与(TYPE=B)を統合し、 | | 8 | | 支給データ(PAYMENT-DATA)として出力する。 | ※PGMタイプ:メイン、サブ ※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 ### 前提条件 | NO | 対象ファイル | 条件 | |----|-------------|------| | 1 | SALARY-NET(KYU09M01) | 社員番号(EMP-ID)昇順であること(MERGE文で内部ソート) | | 2 | BONUS-DATA(KYU09M02) | 社員番号(EMP-ID)昇順であること(MERGE文で内部ソート) | | 3 | MERGE作業ファイル | ソート前処理不要。MERGE文が自ら2ファイルを結合する。 | ### 使用ファイル一覧 | NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | |----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| | 1 | SALARY-NET | M01 | KYU09M01 | I | KYU04REC | F | | 200 | PS | REC-TYPE='S' | | 2 | BONUS-DATA | M02 | KYU09M02 | I | KYU04REC | F | | 200 | PS | REC-TYPE='B' | | 3 | WORK-FILE | M99 | KYU09M99 | I | 自前(200B) | F | | 200 | PS | MERGE作業用SD | | 4 | PAYMENT-DATA | W01 | KYU09W01 | O | KYU06REC | F | | 200 | PS | | | 5 | ERROR-LOG | W02 | KYU09W02 | O | KYU99REC | VB | | 200 | PS | | ### キー項目一覧 | NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | |----|-----------|---------------------|-------------------------------------------| | 1 | SALARY-NET | 社員番号(昇順) | MERGEキー(社員番号) | | 2 | BONUS-DATA | 社員番号(昇順) | MERGEキー(社員番号) | ### 使用モジュール一覧 | NO | 機能 | プログラムID | 使用COPY名 | |----|------|-------------|-----------| | 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC | | 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC | | 3 | ABEND処理SUB | SUB03END | ZANENDAC | --- ## 処理詳細 ``` 1.初期処理(1000ITTSOR) 1-1.開始メッセージ出力 【メッセージ編集】 メッセージ番号:1(開始メッセージ) 1-2.コンパイル日時出力 【メッセージ編集】 メッセージ番号:33(コンパイル日時) PARM1:コンパイル日時 PARM2:'COMPILED' 1-3.ワークエリアの初期化 1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。 復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。 【メッセージ編集】 メッセージ番号:5(サブエラー) PARM1:'SUB01DAT' PARM2:復帰コード 【ABEND処理SUB】 ABENDコード:999 1-5.出力ファイルのオープン W01OUTFIL(OUTPUT)、W02OUTFIL(OUTPUT)をOPEN (入力ファイルはMERGE文が自動OPENするため明示OPEN不要) 2.MERGE出力処理(2000MRGOUTSOR) 2-1.MERGE文実行(0000MAJCOLSOR内) MERGE MERGE-FILE ON ASCENDING KEY MERGE-EMP-ID USING SALARY-FILE BONUS-FILE OUTPUT PROCEDURE 2000MRGOUTSOR 給与(SALARY-NET)と賞与(BONUS-DATA)を社員番号昇順で結合。 結合結果はOUTPUT PROCEDUREに渡される。 2-2.RETURNでMERGE結果取得ループ PERFORM WITH TEST AFTER UNTIL WRK-MERGE-EOF-Y RETURN MERGE-FILE INTO MERGE-REC AT END SET WRK-MERGE-EOF-Y TO TRUE 2-2-1.現社員番号をWRK-CURRENT-EMPに設定 2-2-2.WRK-SALARY-AMOUNT/WRK-BONUS-AMOUNTをZERO初期化 2-2-3.同一社員内ループ(WRK-CURRENT-EMP ≠ MERGE-EMP-IDまで) 2-2-3-1.MERGE-REC-TYPE = 'S'(給与)の場合 MERGE-PAY-AMOUNT → WRK-SALARY-AMOUNT MERGE-GROSS-PAYMENT → WRK-BANK-CODE MERGE-EMP-ID(1:4) → WRK-ACCOUNT-NO 2-2-3-2.上記以外(賞与)の場合 MERGE-PAY-AMOUNT → WRK-BONUS-AMOUNT 2-2-3-3.RETURNで次レコード取得 AT END → HIGH-VALUES設定、EXIT PERFORM 2-2-4.給与+賞与合算 ADD WRK-SALARY-AMOUNT TO WRK-BONUS-AMOUNT GIVING WRK-TOTAL-PAYMENT 2-2-5.2100PAYOUTSORでPAYMENT-DATA出力 2-2-5-1.W01OUTREC初期化 2-2-5-2.WRK-CURRENT-EMP → W01EMP-ID 2-2-5-3.'T' → W01PAY-TYPE(支給合算) 2-2-5-4.WRK-TOTAL-PAYMENT → W01AMOUNT 2-2-5-5.WRK-BANK-CODE → W01BANK-CODE 2-2-5-6.WRK-ACCOUNT-NO → W01ACCOUNT-NO 2-2-5-7.W01OUTRECをWRITE 2-2-5-8.CUN-W01OUTを+1 3.ENTRY代替エントリポイント(0010DIRECTSOR) 3-1.'KYU09ENT'で直接呼出し可能 3-2.直接結合モードで簡易エラーログ出力 【エラー出力】 ERR-DETAIL:'DIRECT ENTRY' 4.終了処理(3000STPSOR) 4-1.出力ファイルのクローズ W01OUTFIL、W02OUTFILをCLOSE 4-2.入出力件数出力メッセージ出力 【入力メッセージ編集】 メッセージ番号:6(入力件数メッセージ) PARM1:'MERGE-FILE' PARM2:CUN-W01OUT 【出力メッセージ編集】 メッセージ番号:7(出力件数メッセージ) PARM1:'KYU09W01' PARM2:CUN-W01OUT 【出力メッセージ編集】 メッセージ番号:7(出力件数メッセージ) PARM1:'KYU09W02' PARM2:CUN-W02OUT 4-3.終了メッセージ出力 【メッセージ編集】 メッセージ番号:2(終了メッセージ) ``` --- ## 出力レコード定義 ### 出力ファイル1(W01/PAYMENT-DATA) | No | 項目名 | 設定元 | 備考 | |----|--------|--------|------| | 1 | EMP-ID | WRK-CURRENT-EMPを設定 | X(008) | | 2 | PAY-TYPE | 'T'(支給合算)固定 | X(001) | | 3 | AMOUNT | WRK-TOTAL-PAYMENT(給与+賞与)を設定 | 9(009) | | 4 | BANK-CODE | WRK-BANK-CODE(給与レコードのGROSS-PAYMENT)を設定 | X(004) | | 5 | ACCOUNT-NO | WRK-ACCOUNT-NO(EMP-ID(1:4))を設定 | 9(008) | | 6 | FILLER | SPACE | X(170) | ### 出力ファイル2(W02/ERROR-LOG) | No | 項目名 | 設定元 | 備考 | |----|--------|--------|------| | 1 | ERR-CATEGORY | 該当エラー種別 | X(008) | | 2 | ERR-DETAIL | STRINGで編集 | エラー内容 |