Subsystem A KIN04-07追加、KIN02UPD/KIN03EXP更新(APPLICATION_ID対応+br_get_colバグ修正)、テスト済み全シナリオPASS
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 勤怠休暇管理システム |
|
||||
| 2 | プログラムID | KIN04CHK |
|
||||
| 3 | プログラム名 | 打刻項目チェック処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | 項目チェック(重複なし) |
|
||||
| 6 | 機能概要 | CSV形式の打刻データファイルを読み込み、項目チェックを行い、正常レコードをEDITED-PUNCHへ、異常レコードをERROR-LOGへ振り分ける。 |
|
||||
| 7 | | チェックはIF多重ネスト(THEN句)で4段階:社員番号必須→日付妥当性→時刻妥当性→出勤<退勤 |
|
||||
| 8 | | 正常出力はWRITE FROMを使用する(新規カバレッジ) |
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | KIN04R01(CSV) | ソート不要。CSV形式(カンマ区切り、6項目) |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | RAW-PUNCH | R01 | KIN04R01 | I | 自前(80B) | F | | 80 | PS | CSV形式 |
|
||||
| 2 | EDITED-PUNCH | W01 | KIN04W01 | O | KIN04REC | FB | | 80 | PS | WRITE FROM使用 |
|
||||
| 3 | ERROR-LOG | W02 | KIN04W02 | O | KIN05REC | VB | | 200 | PS | |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | RAW-PUNCH | なし | なし |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
| 4 | 項目チェックSUB | SUB04CHK | ZANCHKAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
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.使用ファイルのオープン(R01:入力、W01/W02:出力)
|
||||
1-6.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.CSVの分解(2010CSVSOR)
|
||||
UNSTRINGでカンマ区切りのCSVを6項目に分解する。
|
||||
(EMP-ID, DATE, TIME-IN, TIME-OUT, DEPT-ID, TERMINAL)
|
||||
2.1.5.社員番号チェック(2021EMPIDSOR)
|
||||
SUB04CHK('EMPID')により社員番号のフォーマットチェックを実施する。
|
||||
SUB04CHKの復帰コードにより正常/異常を判定する。
|
||||
2-2.IF多重ネストチェック(2020VALIDATESOR)
|
||||
第1段階: フィールド数チェック + 社員番号チェック(2021EMPIDSOR)
|
||||
IF フィールド数=6 THEN
|
||||
2021EMPIDSORを実行
|
||||
IF 社員番号正常 THEN
|
||||
SUB04CHK('DATE')で日付チェック
|
||||
IF 正常 THEN
|
||||
SUB04CHK('TIME')で時刻チェック(出勤)
|
||||
IF 正常 THEN
|
||||
SUB04CHK('TIME')で時刻チェック(退勤)
|
||||
IF 正常 THEN
|
||||
IF 出勤時刻 < 退勤時刻 THEN
|
||||
WRITE FROMでW01出力(2050NORMSOR)
|
||||
ELSE
|
||||
エラー区分='02'でW02出力(2090ERRORSOR)
|
||||
END-IF
|
||||
ELSE
|
||||
エラー区分='02'でW02出力(2090ERRORSOR)
|
||||
END-IF
|
||||
ELSE
|
||||
エラー区分='02'でW02出力(2090ERRORSOR)
|
||||
END-IF
|
||||
ELSE
|
||||
エラー区分='02'でW02出力(2090ERRORSOR)
|
||||
END-IF
|
||||
ELSE
|
||||
エラー区分='02'でW02出力(2090ERRORSOR)
|
||||
END-IF
|
||||
ELSE
|
||||
エラー区分='02'でW02出力(2090ERRORSOR)
|
||||
END-IF
|
||||
|
||||
2021EMPIDSOR (社員番号チェック)
|
||||
本Paragraphは2020VALIDATESORの第1段階(フィールド数OK時)に
|
||||
PERFORMされる。
|
||||
SUB04CHK('EMPID')により社員番号のフォーマットチェックを実施する。
|
||||
復帰コード=ZEROなら正常、≠ZEROなら異常として呼び出し元に戻る。
|
||||
|
||||
2-3.R01を読み込む。(1100R01INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'KIN04R01'
|
||||
PARM2:当該入力ファイルの件数
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KIN04W01'、'KIN04W02'
|
||||
PARM2:当該出力ファイルの件数
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/EDITED-PUNCH) KIN04REC 80B FB
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | EMP-ID | WRK-CSV-EMP-ID | 社員番号 |
|
||||
| 2 | WORK-DATE | WRK-CSV-DATE | YYYYMMDD |
|
||||
| 3 | STR-TIME | WRK-CSV-TIME-IN | HHMM |
|
||||
| 4 | END-TIME | WRK-CSV-TIME-OUT | HHMM |
|
||||
| 5 | DEPT-ID | WRK-CSV-DEPT-ID | 部署ID |
|
||||
| 6 | TERMINAL | WRK-CSV-TERMINAL | 端末ID |
|
||||
| 7 | FILLER | SPACE | 46B |
|
||||
|
||||
### 出力ファイル2(W02/ERROR-LOG) KIN05REC 200B VB
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | '02'固定 | 打刻エラー |
|
||||
| 2 | ERR-DETAIL | STRING編集 | エラー内容(198B) |
|
||||
@@ -0,0 +1,128 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 勤怠休暇管理システム |
|
||||
| 2 | プログラムID | KIN05MAT |
|
||||
| 3 | プログラム名 | 打刻休暇照合処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | マッチング(1:N) |
|
||||
| 6 | 機能概要 | EDITED-PUNCH(打刻側、R01)とLEAVE-DAILY(休暇側、R02)を社員番号+日付キーで照合し、KIN-LEAVE(160B)に出力する。R01側が主駆動で、1件の打刻に対してN件の休暇レコードが存在しうる(1:N)。 |
|
||||
| 7 | | マッチング制御はEVALUATE TRUEで3分岐:R01key<R02key(打刻のみ)、R01key=R02key(マッチ)、R01key>R02key(休暇のみスキップ)。 |
|
||||
| 8 | | マッチ時は休暇種別優先順位(01>02>03>04)で最適な1件を選定し、KIN-LEAVEに出力する。 |
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | KIN04W01(R01) | 社員番号+日付で昇順ソート済み(JCL SORT KINJ022) |
|
||||
| 2 | KIN02W01(R02) | 社員番号+日付で昇順ソート済み(KIN03EXP出力保証) |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | EDITED-PUNCH | R01 | KIN04W01 | I | KIN04REC | FB | | 80 | PS | 打刻側、主駆動 |
|
||||
| 2 | LEAVE-DAILY | R02 | KIN02W01 | I | KIN02REC | FB | | 80 | PS | 休暇側、N件あり |
|
||||
| 3 | KIN-LEAVE | W01 | KIN05W01 | O | KIN03REC | FB | | 160 | PS | 照合結果 |
|
||||
|
||||
### ファイルステータス
|
||||
|
||||
| ファイル | DD名 | ファイルステータス項目 |
|
||||
|---------|------|---------------------|
|
||||
| EDITED-PUNCH(R01) | KIN04W01 | WS-R01-STATUS |
|
||||
| LEAVE-DAILY(R02) | KIN02W01 | WS-R02-STATUS |
|
||||
| KIN-LEAVE(W01) | KIN05W01 | WS-W01-STATUS |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | EDITED-PUNCH | 社員番号(1-8B)+日付(9-16B) | 主キー(R01) |
|
||||
| 2 | LEAVE-DAILY | 社員番号(1-8B)+日付(9-16B) | 従キー(R02)、N件あり |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.使用ファイルのオープン(R01/R02:入力、W01:出力)
|
||||
1-4-1.OPENチェック
|
||||
各ファイルのFILE STATUS(WS-R01-STATUS/WS-R02-STATUS/WS-W01-STATUS)を確認
|
||||
ステータス≠00の場合、SUB03END(ZANENDAC)で異常終了
|
||||
1-5.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||
1-6.R02を読み込む。(1200R02INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.R02キー設定
|
||||
R02が有効な場合、R02レコードからWRK-R02KEYを設定。
|
||||
2-2.EVALUATE TRUE マッチング制御
|
||||
WHEN R01key < R02key OR R02-EOF:
|
||||
打刻のみ(休暇なし)→ KIN-LEAVE出力(LEAVE-TYPE='99', HOURS=0)
|
||||
R01を次へ読み込み
|
||||
WHEN R01key = R02key:
|
||||
マッチング処理実行(2020MATCHSOR)
|
||||
R01を次へ読み込み
|
||||
R02も次へ読み込み(N:1の場合はループ内で全R02処理)
|
||||
WHEN R01key > R02key:
|
||||
R02のみ(該当打刻なし)→ スキップ
|
||||
R02を次へ読み込み
|
||||
2-3.上記をR01終了まで繰り返す。
|
||||
|
||||
3.マッチング処理(2020MATCHSOR)
|
||||
R02がEOFになるか、キーが変わるまで、以下のループを実行:
|
||||
3-1.現在のR02レコードから休暇種別・時刻・申請IDを取得
|
||||
3-2.選定ロジック:
|
||||
- 初回 → ベストとして保持
|
||||
- 既にベストあり → 優先順位で比較(01>02>03>04)
|
||||
- 同種別 → 申請IDの小さい方を採用
|
||||
3-3.R02を次へ読み込み
|
||||
3-4.キーが一致しなくなるかR02-EOFまで3-1〜3-3を繰り返す
|
||||
3-5.ベストの休暇情報をKIN-LEAVEに出力
|
||||
ベストがない場合は'99'として出力
|
||||
|
||||
4.終了処理(3000STPSOR)
|
||||
4-1.入出力ファイルのクローズ
|
||||
4-2.入出力件数出力メッセージ出力
|
||||
4-3.終了メッセージ出力
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル(W01/KIN-LEAVE) KIN03REC 160B FB
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | EMP-ID | R01EMP-ID | 打刻情報(1-80BはEDITED-PUNCHと同一) |
|
||||
| 2 | WORK-DATE | R01WORK-DATE | |
|
||||
| 3 | STR-TIME | R01STR-TIME | |
|
||||
| 4 | END-TIME | R01END-TIME | |
|
||||
| 5 | DEPT-ID | R01DEPT-ID | |
|
||||
| 6 | TERMINAL | R01TERMINAL | |
|
||||
| 7-13 | 休暇情報 | マッチ結果 | 81-160B |
|
||||
| 7 | LEAVE-TYPE | 選定結果 | '01'〜'04' or '99' |
|
||||
| 8 | LEAVE-STR-TIME | 選定したR02START-TIME | |
|
||||
| 9 | LEAVE-END-TIME | 選定したR02END-TIME | |
|
||||
| 10 | LEAVE-HOURS | ZERO | KIN07DAIで後に計算 |
|
||||
| 11 | APPLICATION-ID | 選定したR02APPL-ID | 該当なしはZERO |
|
||||
@@ -0,0 +1,116 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 勤怠休暇管理システム |
|
||||
| 2 | プログラムID | KIN06CLD |
|
||||
| 3 | プログラム名 | 出勤日カレンダー生成処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | レイアウト編集のみ(GETPUT) |
|
||||
| 6 | 機能概要 | PARMで指定された年月の出勤日カレンダーを生成する。在籍社員一覧をDBから取得し、各社員について当月1日〜月末日をPERFORM VARYINGでループ。休日判定(PERFORM VARYING線形探索 + 曜日判定)を行い、出勤日のみWORK-DAY-FILEに出力する。 |
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル/DB | 条件 |
|
||||
|----|----------------|------|
|
||||
| 1 | EMP_MASTER | 在籍社員(STATUS='1')が登録済みであること |
|
||||
| 2 | HOLIDAY_CALENDAR | 対象年月の休日が登録済みであること |
|
||||
|
||||
### PARM引数
|
||||
|
||||
コマンドラインで `YEARMONTH=YYYYMM` 形式で指定。必須。
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|
|
||||
| 1 | WORK-DAY-FILE | OUTREC | KIN06W01 | O | KIN06REC | FB | | 80 | PS |
|
||||
|
||||
### 使用DBテーブル
|
||||
|
||||
| NO | テーブル名 | 処理内容 |
|
||||
|----|-----------|---------|
|
||||
| 1 | EMP_MASTER | SELECT EMP_ID WHERE STATUS='1' ORDER BY EMP_ID (CURSOR) |
|
||||
| 2 | HOLIDAY_CALENDAR | SELECT HOLIDAY_DATE WHERE HOLIDAY_DATE LIKE 'YYYYMM%' → WORKING-STORAGE格納 |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.PARM解析(YEARMONTH=YYYYMM から対象年月を抽出)
|
||||
必須チェック:PARMなし→ABEND
|
||||
形式チェック:YEARMONTH= から始まること
|
||||
値範囲:XXXX01〜XXXX12
|
||||
月チェック(1-12): WRK-MONTH < 1 OR > 12 → ABEND(CALL SUB03END)
|
||||
1-4.ワークエリア初期化
|
||||
1-5.DB接続(EXEC SQL CONNECT TO 'data/kin.db')
|
||||
1-6.休日データ読込(HOLIDAY_CALENDARから対象月の祝日をSELECT)
|
||||
テーブルに格納(PERFORM VARYING線形探索用)
|
||||
【ガード】HOLIDAY-COUNTが50未満の場合のみADD+参照を行う(テーブル溢れ防止)
|
||||
ループ条件で HOLIDAY-COUNT < 50 をチェック(HOLIDAY-COUNT PIC 9(2)対応)
|
||||
1-7.出力ファイルOPEN
|
||||
1-8.社員一覧取得(EMP_MASTER CURSOR OPEN→初回FETCH)
|
||||
|
||||
2.主処理(2000MAJSOR)(社員EOFまで下記を繰り返す)
|
||||
2-1.当月1日〜月末日をループ(PERFORM VARYING)
|
||||
2-1-1.日付文字列構築(YYYYMMDD)
|
||||
2-1-2.曜日計算(INTEGER-OF-DATE)
|
||||
- INTEGER-OF-DATE('YYYYMMDD') で通算日数を取得
|
||||
- MOD(通算日数, 7) で曜日:0=日, 1=月, 2=火, …, 6=土
|
||||
2-1-3.休日判定(PERFORM VARYING線形探索)
|
||||
祝日テーブルを先頭から線形探索(部分埋めテーブル対応のためSEARCH ALL不使用)
|
||||
2-1-4.曜日判定
|
||||
土曜(0) または 日曜(6)→休日としてスキップ(CONTINUE)
|
||||
2-1-5.出勤日 → WRITE FROMで出力(社員番号+日付+曜日)
|
||||
2-2.次の社員をFETCH
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.CURSOR CLOSE
|
||||
3-2.DB切断
|
||||
3-3.出力ファイルCLOSE
|
||||
3-4.出力件数メッセージ出力
|
||||
3-5.終了メッセージ出力
|
||||
```
|
||||
|
||||
### 曜日計算
|
||||
|
||||
INTEGER-OF-DATE('YYYYMMDD') は1601-01-01からの通算日数を返す。
|
||||
- 1601-01-01 = Monday → MOD(x,7):0=Sun, 1=Mon, 2=Tue, 3=Wed, 4=Thu, 5=Fri, 6=Sat
|
||||
|
||||
### 休日判定ロジック
|
||||
|
||||
1. HOLIDAY_CALENDARに日付が存在する → 休日(PERFORM VARYING線形探索)
|
||||
2. 曜日が土曜(6)または日曜(0) → 休日
|
||||
3. 上記以外 → 出勤日
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル(OUTREC/WORK-DAY-FILE)KIN06REC 80B FB
|
||||
|
||||
| No | 項目名 | 設定元 | 属性 | 備考 |
|
||||
|----|--------|--------|------|------|
|
||||
| 1 | EMP-ID | 社員マスタのEMP_ID | X(8) | 社員番号 |
|
||||
| 2 | DATE | ループ変数 | 9(8) | YYYYMMDD |
|
||||
| 3 | DAY-OF-WEEK | 曜日計算結果 | 9(1) | 1=月…7=日 |
|
||||
| 4 | FILLER | SPACE | X(63) | |
|
||||
@@ -0,0 +1,167 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 勤怠休暇管理システム |
|
||||
| 2 | プログラムID | KIN07DAI |
|
||||
| 3 | プログラム名 | 日別勤怠計算処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | マッチング(1:N) + EVALUATE 4パターン分岐 |
|
||||
| 6 | 機能概要 | WORK-DAY-FILE(主駆動)とKIN-LEAVE/LEAVE-DAILYを社員番号+日付で照合し、 |
|
||||
| 7 | | 4パターンに分岐して日別勤怠記録(DAILY-RECORD)を出力する。 |
|
||||
| 8 | | パターンA: 打刻+休暇あり / B: 打刻のみ / C: 休暇のみ / D: 欠勤 |
|
||||
| 9 | | 休暇時間はランチ除外+0.1h切上丸め。MULTIPLY/SUBTRACT時間計算。 |
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | R01(WORK-DAY-FILE) | 社員番号+日付の昇順でソートされていること |
|
||||
| 2 | R02(KIN-LEAVE) | 社員番号+日付の昇順でソートされていること |
|
||||
| 3 | R03(LEAVE-DAILY) | 社員番号+日付の昇順でソートされていること |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|---------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | WORK-DAY-FILE | R01 | KIN07R01 | I | KIN06REC | FB | | 80 | PS | 出勤日カレンダー(COPY句定義書.md参照) |
|
||||
| 2 | KIN-LEAVE | R02 | KIN07R02 | I | KIN03REC | FB | | 160 | PS | 打刻+休暇照合結果(COPY句定義書.md参照) |
|
||||
| 3 | LEAVE-DAILY | R03 | KIN07R03 | I | KIN02REC | FB | | 80 | PS | 日別展開休暇(COPY句定義書.md参照) |
|
||||
| 4 | DAILY-RECORD | W01 | KIN07W01 | O | KIN07REC | FB | | 200 | PS | 日別勤怠計算結果(COPY句定義書.md参照) |
|
||||
| 5 | ERROR-LOG | W02 | KIN07E01 | O | KIN05REC | VB | | 200 | PS | エラーログ(COPY句定義書.md参照) |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | ファイルR01 | 社員番号>日付(昇順) | 社員番号+日付(マッチングキー) |
|
||||
| 2 | ファイルR02 | 社員番号>日付(昇順) | 社員番号+日付(マッチングキー) |
|
||||
| 3 | ファイルR03 | 社員番号>日付(昇順) | 社員番号+日付(マッチングキー) |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | メッセージ編集出力 | SUB02MSG | ZANMSGAC |
|
||||
| 2 | ABEND処理 | SUB03END | ZANENDAC |
|
||||
| 3 | 時刻丸め計算(0.1h切上) | SUB05TIM | ZANTIMAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理 (1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化(INITIALIZE WRKARA)
|
||||
1-4.入出力ファイルOPEN
|
||||
INPUT: R01INNFIL, R02INNFIL, R03INNFIL
|
||||
OUTPUT: W01OUTFIL, W02OUTFIL
|
||||
1-5.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||
1-6.R02を読み込む。(1200R02INNSOR)(1回目)
|
||||
1-7.R03を読み込む。(1300R03INNSOR)(1回目)
|
||||
|
||||
2.主処理 (2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.キー比較:R01とR02/R03のキーを比較し、PATTERN-NUMを設定
|
||||
【MULTIPLY使用】時間→分換算時にMULTIPLY文を使用
|
||||
【SUBTRACT使用】ランチ除外時にSUBTRACT文を使用
|
||||
2-2.パターン判定(EVALUATE)
|
||||
EVALUATE PATTERN-NUM
|
||||
WHEN 1 → PERFORM 6100PATTERNASOR (打刻+休暇)
|
||||
WHEN 2 → PERFORM 6200PATTERNSOR (打刻のみ)
|
||||
WHEN 3 → PERFORM 6300PATTERNSOR (休暇のみ)
|
||||
WHEN 4 → PERFORM 6400PATTERNSOR (欠勤)
|
||||
END-EVALUATE
|
||||
|
||||
2-3.【パターンA(6100PATTERNASOR)】:R01+R02+R03(打刻+休暇)
|
||||
2-3-1.打刻情報設定:R02の出勤時刻/退勤時刻をDAILY-RECORDに設定
|
||||
2-3-2.休暇時間計算:R03の開始時刻/終了時刻からランチ除外+丸め計算
|
||||
MULTIPLY: WRK-START-HOUR × 60 GIVING WRK-START-MIN(時→分変換)
|
||||
SUBTRACT: ランチ時間(60分)をWRK-START-MINから除外
|
||||
2-3-3.SUB05TIM呼出(モード1:0.1h切上)
|
||||
【CALL 'SUB05TIM'】
|
||||
CALL 'SUB05TIM' USING T01TIMPAR
|
||||
T01TIMHRS=WRK-LEAVE-HOURS, T01TIMRRC=1(0.1h切上モード)
|
||||
T01TIMOUTをWRK-LEAVE-HOURSに退避
|
||||
2-3-4.DAILY-RECORD出力
|
||||
2-3-5.R01/R02/R03次読込
|
||||
|
||||
2-4.【パターンB(6200PATTERNSOR)】:R01+R02のみ(打刻のみ)
|
||||
2-4-1.打刻情報設定:R02の出勤時刻/退勤時刻をDAILY-RECORDに設定
|
||||
2-4-2.休暇時間=0, 欠勤=0
|
||||
2-4-3.DAILY-RECORD出力
|
||||
2-4-4.R01/R02次読込(R03はキー不一致のため読込済み)
|
||||
|
||||
2-5.【パターンC(6300PATTERNSOR)】:R01+R03のみ(休暇のみ)
|
||||
2-5-1.打刻情報=0000
|
||||
2-5-2.休暇時間計算:ランチ除外+丸め(所定労働時間8h上限)
|
||||
MULTIPLY/SUBTRACT使用(パターンAと同様)
|
||||
WRK-LEAVE-HOURS > 8.0 → 8.0に制限
|
||||
2-5-3.SUB05TIM呼出(モード1:0.1h切上)
|
||||
2-5-4.DAILY-RECORD出力
|
||||
2-5-5.R01/R03次読込(R02はキー不一致のため読込済み)
|
||||
|
||||
2-6.【パターンD(6400PATTERNSOR)】:R01のみ(欠勤)
|
||||
2-6-1.打刻情報=0000, 休暇=0
|
||||
2-6-2.未申請欠勤=8.0h
|
||||
2-6-3.DAILY-RECORD出力
|
||||
2-6-4.R01次読込(R02/R03はキー不一致のため読込済み)
|
||||
|
||||
2-7.各パターンセクションはPERFORMで呼び出され、EXITで自動復帰
|
||||
主処理ループ(2000MAJSOR)に戻り、次のR01レコードを処理する。
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:6(入力件数)
|
||||
PARM1:該当ファイルDD名
|
||||
PARM2:該当ファイル件数
|
||||
メッセージ番号:7(出力件数)
|
||||
PARM1:該当ファイルDD名
|
||||
PARM2:該当ファイル件数
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
|
||||
4.メッセージ出力(4000MSGOUTSOR)
|
||||
SUB02MSG呼出し
|
||||
|
||||
9.ABEND処理(9999ABDSOR)
|
||||
SUB03END呼出し
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01: DAILY-RECORD)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | SD-EMP-ID | SW-EMP-ID(R01) | 社員番号 |
|
||||
| 2 | SD-DATE | SW-DATE(R01) | YYYYMMDD |
|
||||
| 3 | SD-TIME-IN | SR-STR-TIME(R02) or '0000' | 出勤時刻(パターンC/Dは0000) |
|
||||
| 4 | SD-TIME-OUT | SR-END-TIME(R02) or '0000' | 退勤時刻(パターンC/Dは0000) |
|
||||
| 5 | SD-ANNUAL-H | R03(LEAVE-TYPE='01')より計算 | 年休使用時間(ランチ除外+丸め) |
|
||||
| 6 | SD-PERSONAL-H | R03(LEAVE-TYPE='02')より計算 | 事假時間 |
|
||||
| 7 | SD-OFFICIAL-H | R03(LEAVE-TYPE='03')より計算 | 因公特批假時間 |
|
||||
| 8 | SD-SICK-H | R03(LEAVE-TYPE='04')より計算 | 病欠時間 |
|
||||
| 9 | SD-ABSENT-H | パターンDのみ8.0固定 | 未申請欠勤時間 |
|
||||
| 10 | SD-FILLER | SPACE | 予備領域 |
|
||||
|
||||
### 出力ファイル2(W02: ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | WEERR-CATEGORY | '99'固定 | エラー区分(未使用だが予約) |
|
||||
| 2 | WEERR-DETAIL | STRING編集 | エラー詳細(SUB05TIM異常時等) |
|
||||
Reference in New Issue
Block a user