171 lines
7.0 KiB
Markdown
171 lines
7.0 KiB
Markdown
# 詳細設計書
|
||
|
||
## 基本情報
|
||
|
||
| # | 項目 | 内容 |
|
||
|---|------|------|
|
||
| 1 | システム名 | 勤怠休暇管理システム |
|
||
| 2 | プログラムID | KIN03EXP |
|
||
| 3 | プログラム名 | 休暇日別展開処理 |
|
||
| 4 | PGMタイプ | メイン |
|
||
| 5 | PGMパターン | キーブレイク(集計) |
|
||
| 6 | 機能概要 | LEAVE_RECORDS(DB2)より有効申請(STATUS='1')を読込み、開始日〜終了日の期間を日別に展開し、休日・週末を除外してLEAVE-DAILYファイルを出力する。 |
|
||
| 7 | | 社員番号(EMP_ID)キーブレイクで小計出力を行う。 |
|
||
|
||
※PGMタイプ:メイン、サブ
|
||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||
|
||
### 前提条件
|
||
|
||
| NO | 対象ファイル | 条件 |
|
||
|----|-------------|------|
|
||
| 1 | DB(LEAVE_RECORDS) | EMP_ID, START_DATE順にソート済(ORDER BYで取得) |
|
||
|
||
### 使用ファイル一覧
|
||
|
||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||
| 1 | LEAVE-DAILY | W01 | KIN02W01.DAT | O | KIN02REC | FB | | 80 | PS | 日別展開後レコード |
|
||
| 2 | LEAVE_RECORDS | DB | — | I | — | — | — | — | DB | SQLite |
|
||
| 3 | HOLIDAY_CALENDAR | DB | — | I | — | — | — | — | DB | SQLite |
|
||
|
||
### キー項目一覧
|
||
|
||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||
|----|-----------|---------------------|-------------------------------------------|
|
||
| 1 | DB(LEAVE_RECORDS) | EMP-ID, START_DATE(昇順) | キーブレイク: EMP-ID |
|
||
|
||
### 使用モジュール一覧
|
||
|
||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||
|----|------|-------------|-----------|
|
||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||
|
||
---
|
||
|
||
## 処理詳細
|
||
|
||
```
|
||
1.初期処理(1000ITTSOR)
|
||
1-1.開始メッセージ出力
|
||
【メッセージ編集】
|
||
メッセージ番号:1(開始メッセージ)
|
||
1-2.コンパイル日時出力
|
||
【メッセージ編集】
|
||
メッセージ番号:33(コンパイル日時)
|
||
PARM1:コンパイル日時
|
||
PARM2:'COMPILED'
|
||
1-3.ワークエリアの初期化
|
||
1-4.DB接続
|
||
EXEC SQL CONNECT TO 'data/kin.db'
|
||
1-5.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||
【メッセージ編集】
|
||
メッセージ番号:5(サブエラー)
|
||
PARM1:'SUB01DAT'
|
||
PARM2:復帰コード
|
||
【ABEND処理SUB】
|
||
ABENDコード:999
|
||
1-6.休日カレンダーテーブル読込(1200HDINNSOR)
|
||
【SQL】
|
||
SELECT HOLIDAY_DATE FROM HOLIDAY_CALENDAR ORDER BY HOLIDAY_DATE
|
||
FETCHループでWORKING-STORAGEのWRK-HOLIDAY-TABLEに全件格納する。
|
||
WRK-HD-COUNTに件数を保持。最大366件(ODO定義)。
|
||
1-7.出力ファイルOPEN(W01)
|
||
1-8.C1カーソル初回FETCH(1100C1INITSOR)
|
||
【SQL】
|
||
SELECT APPLICATION_ID, EMP_ID, LEAVE_TYPE,
|
||
START_DATE, START_TIME, END_DATE, END_TIME
|
||
FROM LEAVE_RECORDS
|
||
WHERE STATUS = '1'
|
||
ORDER BY EMP_ID, START_DATE
|
||
INTO :SQL-APPL-ID, :SQL-EMP-ID, :SQL-LEAVE-TYPE,
|
||
:SQL-START-DATE, :SQL-START-TIME,
|
||
:SQL-END-DATE, :SQL-END-TIME
|
||
SQLCODE=0の場合、入力件数+1
|
||
SQLCODE≠0の場合、WRK-R01EOF='1'(EOF)
|
||
|
||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||
2-1.社員番号キー保存
|
||
SQL-EMP-ID → WRK-BFR-EMP-ID
|
||
2-2.1社員分処理(2100-PROCESS-EMP)(PERFORM THRU)
|
||
2-2-1.CUN-EMP-SUB初期化(ZERO)
|
||
2-2-2.EOFまたはキー変化(SQL-EMP-ID≠WRK-BFR-EMP-ID)まで繰り返し
|
||
2-2-2-1.日付展開処理(2200-EXPAND-DATE)(PERFORM THRU)
|
||
2-2-2-1-1.開始日(SQL-START-DATE)→WRK-DATE-CURRENT
|
||
終了日(SQL-END-DATE)→WRK-DATE-END
|
||
2-2-2-1-2.WRK-DATE-CURRENT > WRK-DATE-END までループ
|
||
2-2-2-1-2-1.曜日判定
|
||
COMPUTE WRK-DAY-OF-WEEK = FUNCTION MOD(
|
||
FUNCTION INTEGER-OF-DATE(WRK-DATE-CURRENT), 7)
|
||
0=日曜日、6=土曜日 → 週末としてスキップ
|
||
2-2-2-1-2-2.非週末の場合、休日テーブル検索
|
||
SEARCH ALL WRK-HD-ENTRY(昇順KEY=WRK-HD-DATE)
|
||
WRK-HD-DATE(WRK-HD-IDX) = WRK-DATE-CURRENT → 休日としてスキップ
|
||
2-2-2-1-2-3.非週末かつ非休日の場合、W01出力
|
||
W01レコード初期化
|
||
APPL-ID = SQL-APPL-ID
|
||
EMP-ID = WRK-BFR-EMP-ID
|
||
LEAVE-TYPE = SQL-LEAVE-TYPE
|
||
START-TIME = SQL-START-TIME
|
||
END-TIME = SQL-END-TIME
|
||
DATE = WRK-DATE-ALPHA(現在日付)
|
||
WRITE W01OUTREC
|
||
CUN-W01OUT +1
|
||
CUN-EMP-SUB +1
|
||
2-2-2-1-2-4.日付加算(2300-DATE-ADD-1)
|
||
WRK-DATE-DAY + 1
|
||
各月の最終日判定:
|
||
- 1/3/5/7/8/10/12月:31日超で月+1、13月→年+1
|
||
- 4/6/9/11月:30日超で月+1
|
||
- 2月:閏年判定(MOD年400=0 または MOD年4=0 AND MOD年100≠0)
|
||
閏年→29日超、平年→28日超で月+1
|
||
2-2-3.次レコードFETCH(1100C1FETCHSOR)
|
||
CALL 'br_fetch_next' USING SQLCODE
|
||
SQLCODE=0の場合、br_get_colで各カラムを取得
|
||
SQLCODE≠0の場合、WRK-R01EOF='1'
|
||
2-2-4.社員別小計出力(キーブレイク)
|
||
【メッセージ編集】
|
||
メッセージ番号:33(情報メッセージ)
|
||
PARM1:WRK-BFR-EMP-ID
|
||
PARM2:CUN-EMP-SUB
|
||
PARM3:'EMP SUB'
|
||
|
||
3.終了処理(3000STPSOR)
|
||
3-1.出力ファイルのクローズ
|
||
3-2.件数メッセージ出力
|
||
【メッセージ編集】
|
||
メッセージ番号:6(入力件数)
|
||
PARM1:'LEAVE_RECORDS'
|
||
PARM2:入力件数
|
||
【メッセージ編集】
|
||
メッセージ番号:7(出力件数)
|
||
PARM1:'KIN02W01'
|
||
PARM2:出力件数
|
||
【メッセージ編集】
|
||
メッセージ番号:33(情報)
|
||
PARM1:'HOLIDAYS LOADED'
|
||
PARM2:休日テーブル件数
|
||
3-3.終了メッセージ出力
|
||
【メッセージ編集】
|
||
メッセージ番号:2(終了メッセージ)
|
||
```
|
||
|
||
---
|
||
|
||
## 出力レコード定義
|
||
|
||
### 出力ファイル1(W01/LEAVE-DAILY) KIN02REC 80B FB
|
||
|
||
| No | 項目名 | 設定元 | 備考 |
|
||
|----|--------|--------|------|
|
||
| 1 | EMP-ID | WRK-BFR-EMP-ID | キーブレイク単位 |
|
||
| 2 | DATE | WRK-DATE-ALPHA | 展開された日付(YYYYMMDD) |
|
||
| 3 | LEAVE-TYPE | SQL-LEAVE-TYPE | 01/02/03/04 |
|
||
| 4 | START-TIME | SQL-START-TIME | 元申請の開始時刻(HHMM) |
|
||
| 5 | END-TIME | SQL-END-TIME | 元申請の終了時刻(HHMM) |
|
||
| 6 | APPL-ID | SQL-APPL-ID | APPLICATION_ID |
|
||
| 7 | FILLER | SPACE | 45B |
|