Files
cobol-tna-system/詳細設計書/詳細設計書_KIN03EXP.md

171 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 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.出力ファイルOPENW01
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(情報メッセージ)
PARM1WRK-BFR-EMP-ID
PARM2CUN-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(終了メッセージ)
```
---
## 出力レコード定義
### 出力ファイル1W01/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 |