170 lines
7.4 KiB
Markdown
170 lines
7.4 KiB
Markdown
# 詳細設計書
|
||
|
||
## 基本情報
|
||
|
||
| # | 項目 | 内容 |
|
||
|---|------|------|
|
||
| 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 | ファイル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.ワークエリアの初期化(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 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 | 初期値 | |
|