feat: サブシステムB 残業統計管理 初回production反映
- 全6プログラム(ZAN01CHK~ZAN06UPD)ソース・実行ファイル - 5サブプログラム(SUB01DAT~SUB05TIM)ソース・DLL - 10 COPY書式ファイル - 詳細設計書12ファイル - サブシステムB全体設計書 - bin/配下の実行ファイル资産
This commit is contained in:
@@ -0,0 +1,173 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 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、 |
|
||||
| 10 | | 処理日付取得にACCEPT FROM DATEをそれぞれ使用する。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | ファイルR01(OVT-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.ACCEPT FROM DATEで処理日付を取得(WRK-DATE-8)
|
||||
【新規カバレッジ】
|
||||
ACCEPT FROM DATE YYYYMMDD
|
||||
1-4.ワークエリアの初期化(WRK-ACCUM-MIN含む)
|
||||
1-5.運用日付取得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 WRK-KEY-START BY 100 GIVING WRK-START-HOUR REMAINDER WRK-START-MIN
|
||||
DIVIDE WRK-KEY-END 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 2:0.1h単位切捨)
|
||||
COMPUTE WRK-TEMP-HOURS = WRK-ACCUM-MIN / 60(切捨用にそのまま)
|
||||
MOVE WRK-TEMP-HOURS TO T01TIMHRS
|
||||
MOVE 2 TO T01TIMRRC(mode 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(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/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 | 初期値 | |
|
||||
Reference in New Issue
Block a user