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

170 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 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 | 初期値 | |