Subsystem A KIN04-07追加、KIN02UPD/KIN03EXP更新(APPLICATION_ID対応+br_get_colバグ修正)、テスト済み全シナリオPASS
This commit is contained in:
@@ -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) | |
|
||||
Reference in New Issue
Block a user