Files
cobol-tna-system/詳細設計書/詳細設計書_ZAN05CAL.md

7.4 KiB
Raw Permalink Blame History

詳細設計書

基本情報

# 項目 内容
1 システム名 残業統計管理システム
2 プログラムID ZAN05CAL
3 プログラム名 残業時間集約処理
4 PGMタイプ メイン
5 PGMパターン キーブレイク(集計)
6 機能概要 OVT-SORTED2(申請番号+処理番号昇順)をキーブレイク集約し、
7 同一APPL-IDの全レコードの加班時間を積算し、
8 OVT-SUMMARYに1レコードに集計して出力する。
9 キーブレイク制御にCONTINUE/SET、時間計算にCOMPUTE ROUNDED/DIVIDEをそれぞれ使用する。

※PGMタイプ:メイン、サブ ※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新

前提条件

NO 対象ファイル 条件
1 ファイルR01OVT-SORTED2 申請番号(APPL-ID)>処理番号(PROC-SEQ)で昇順ソート済

使用ファイル一覧

NO 使用ファイル/DB名 識別子 DD名 I/O COPY群 形式 ブロック レコード長 媒体 備考
1 OVT-SORTED2 R01 ZAN05R01 I ZAN02REC FB 80 PS マッチング結果(APPL-ID+PROC-SEQ昇順)
2 OVT-SUMMARY W01 ZAN05W01 O ZAN03REC FB 80 PS 集約結果(加班時間付加)

キー項目一覧

NO ファイル名 ソート条件(キー項目) キー条件(マッチング/キーブレイク)
1 ファイルR01 APPL-ID>PROC-SEQ(同一APPL-ID内複数明細あり) APPL-ID(キーブレイク)

使用モジュール一覧

NO 機能 プログラムID 使用COPY名
1 運用日付取得SUB SUB01DAT ZANDATAC
2 メッセージ編集出力SUB SUB02MSG ZANMSGAC
3 ABEND処理SUB SUB03END ZANENDAC
4 時刻丸め計算SUB SUB05TIM ZANTIMAC

処理詳細

1.初期処理(1000ITTSOR
   1-1.開始メッセージ出力
     【メッセージ編集】
     メッセージ番号:1(開始メッセージ)
   1-2.コンパイル日時出力
     【メッセージ編集】
     メッセージ番号:33(コンパイル日時)
     PARM1:コンパイル日時
     PARM2'COMPILED'
    1-3.ワークエリアの初期化(WRK-ACCUM-MIN含む)
    1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。
     復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
     【メッセージ編集】
     メッセージ番号:5(サブエラー)
     PARM1'SUB01DAT'
     PARM2:復帰コード
     【ABEND処理SUB】
     ABENDコード:999
   1-6.使用ファイルのオープン(R01入力、W01出力)
   1-7.R01の初回読込(1100R01INNSOR
   1-8.初回読込成功時、WRK-PREV-APPL-IDに設定
       WRK-GROUP-STARTに現レコードのSTARTを保持
       WRK-LAST-RECに現レコードを保持
       SET WRK-GROUP-IS-ACTIVE TO TRUE
       (積算は主処理2000MAJSOR内の各分岐で行う)

2.主処理(2000MAJSOR)(R01を全て読み終え、最終グループ出力完了まで下記を繰り返す)
   2-1.EOFの場合(WRK-R01KEY = HIGH-VALUE
     2-1-1.WRK-GROUP-IS-ACTIVEなら最終グループを出力(2100OUTSOR
     2-1-2.SET WRK-GROUP-NOT-ACTIVE TO TRUE(ループ終了条件)
   2-2.初回設定済みの場合(WRK-PREV-APPL-ID = 初回値あり)
      2-2-1.同一APPL-IDの場合
        現レコードの時間差分を積算(2200ACCUMSOR
        現レコードをWRK-LAST-RECに上書き保持(ENDは最終明細で上書きされる)
        グループ内最初の明細のSTARTはWRK-GROUP-STARTに保持済のため不変
        R01次回読込(1100R01INNSOR
      2-2-2.異なるAPPL-IDの場合(キーブレイク)
        WRK-GROUP-IS-ACTIVEなら直前に保持していたグループを出力(2100OUTSOR
        WRK-PREV-APPL-IDを現レコードのAPPL-IDで更新
        WRK-GROUP-STARTに現レコードのSTARTを保持
        現レコードをWRK-LAST-RECに設定
        2200ACCUMSORを呼出(新グループ初回レコードの時間差分を積算)
        SET WRK-GROUP-IS-ACTIVE TO TRUE
        R01次回読込(1100R01INNSOR

3.積算処理(2200ACCUMSOR
   3-1.現レコードの時刻→分変換
      DIVIDE R01START-TIME BY 100 GIVING WRK-START-HOUR REMAINDER WRK-START-MIN
      DIVIDE R01END-TIME BY 100 GIVING WRK-END-HOUR REMAINDER WRK-END-MIN
     COMPUTE WRK-START-TOTAL = WRK-START-HOUR * 60 + WRK-START-MIN
     COMPUTE WRK-END-TOTAL = WRK-END-HOUR * 60 + WRK-END-MIN
   3-2.差分計算
     COMPUTE WRK-DIFF-MIN = WRK-END-TOTAL - WRK-START-TOTAL
   3-3.WRK-ACCUM-MINに積算
     COMPUTE WRK-ACCUM-MIN = WRK-ACCUM-MIN + WRK-DIFF-MIN

4.計算出力処理(2100OUTSOR
   4-1.分→時間変換(DIVIDE for coverage
     DIVIDE WRK-ACCUM-MIN BY 60 GIVING WRK-INT-HOURS REMAINDER WRK-REMAIN-MIN
   4-2.COMPUTE ROUNDED for coverage(結果はSUB05TIMには渡さない)
     COMPUTE WRK-OVT-HOURS ROUNDED = WRK-ACCUM-MIN / 60
       ON SIZE ERROR
         CONTINUE
         MOVE ZERO TO WRK-OVT-HOURS
     END-COMPUTE
   4-3.SUB05TIM呼出(mode 20.1h単位切捨)
     COMPUTE WRK-TEMP-HOURS = WRK-ACCUM-MIN / 60(切捨用にそのまま)
     MOVE WRK-TEMP-HOURS TO T01TIMHRS
     MOVE 2 TO T01TIMRRCmode 2
     CALL 'SUB05TIM' USING T01TIMPAR
     MOVE T01TIMOUT TO WRK-OVT-HOURS
   4-4.OVT-SUMMARY出力
     【STRING編集相当(MOVE)】
     INITIALIZE W01OUTREC
     MOVE WRK-LAST-APPL-ID TO W01APPL-ID
     MOVE WRK-LAST-EMP-ID TO W01EMP-ID
     MOVE WRK-LAST-APPL-DATE TO W01APPL-DATE
     MOVE WRK-GROUP-START TO W01START-TIME
     MOVE WRK-LAST-END TO W01END-TIME
     MOVE WRK-OVT-HOURS TO W01OVT-HOURS
     MOVE WRK-LAST-OVT-TYPE TO W01OVT-TYPE
     WRITE W01OUTREC
     W01出力カウンタ加算
   4-5.WRK-ACCUM-MINをZEROに初期化(次グループ用)

5.終了処理(3000STPSOR
   5-1.入出力ファイルのクローズ
   5-2.入出力件数出力メッセージ出力
     【入力メッセージ編集】
     メッセージ番号:6(入力件数メッセージ)
     PARM1'ZAN05R01'
     PARM2:入力件数
     【出力メッセージ編集】
     メッセージ番号:7(出力件数メッセージ)
     PARM1'ZAN05W01'
     PARM2:出力件数
   5-3.終了メッセージ出力
     【メッセージ編集】
     メッセージ番号:2(終了メッセージ)

出力レコード定義

出力ファイル1W01/OVT-SUMMARY

No 項目名 設定元 備考
1 APPL-ID WRK-LAST-APPL-ID 申請番号
2 EMP-ID WRK-LAST-EMP-ID 社員番号
3 APPL-DATE WRK-LAST-APPL-DATE 申請日 YYYYMMDD
4 START-TIME WRK-GROUP-START 開始時刻 HHMM(グループ最初の明細のSTART)
5 END-TIME WRK-LAST-END 終了時刻 HHMM
6 OVT-HOURS SUB05TIM出力(T01TIMOUT 加班時間(0.1h単位切捨)
7 OVT-TYPE WRK-LAST-OVT-TYPE W=平日 / H=休日
8 FILLER 初期値