# KIN03EXP 使用資源一覧 ## プログラム概要 - **プログラムID**: KIN03EXP - **プログラム名**: 休暇日別展開処理 - **処理概要**: LEAVE_RECORDS(DB2)より有効申請(STATUS='1')を読込み、開始日〜終了日の期間を日別に展開し、休日・週末を除外してLEAVE-DAILYファイルを出力する。社員番号キーブレイクで小計出力を行う。 ## 使用ファイル | DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | FILE STATUS | |------|---------------|------|-------------|-----------|--------|-------------| | KIN02W01.DAT | LEAVE-DAILY | 順編成 | F (固定長) | 80B | KIN02REC | WS-W01-STATUS | ## 使用COPY句 | COPY句 | 用途 | 使用箇所 | |--------|------|---------| | KIN02REC | レコード定義(W01出力ファイル) | FILE SECTION | | ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | | ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | | ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | | SQLCA | SQL通信領域 | WORKING-STORAGE | ## 使用サブプログラム | サブPGM | 役割 | CALL箇所 | |---------|------|---------| | SUB01DAT | 運用日付取得 | 1000ITTSOR | | SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | | SUB03END | ABEND処理 | 9999ABDSOR | ## 使用DB2テーブル | テーブル名 | 操作 | 備考 | |-----------|------|------| | LEAVE_RECORDS | SELECT | STATUS='1'、ORDER BY EMP_ID, START_DATE | | HOLIDAY_CALENDAR | SELECT | 休日マスタ、ORDER BY HOLIDAY_DATE | ## EXEC SQL一覧 | SQL種別 | 処理 | 実行条件 | 使用箇所 | |---------|------|---------|---------| | CONNECT | TO 'data/kin.db' | 常時 | 1000ITTSOR | | DECLARE C1 CURSOR | SELECT FROM LEAVE_RECORDS | 常時 | 1100C1INITSOR | | OPEN C1 | CURSOR OPEN | SQLCODE=0 | 1100C1INITSOR | | FETCH C1 | INTO 変数(初回+次回) | SQLCODE=0 | 1100C1INITSOR, 1100C1FETCHSOR | | DECLARE C2 CURSOR | SELECT FROM HOLIDAY_CALENDAR | 常時 | 1200HDINNSOR | | OPEN C2 | CURSOR OPEN | 常時 | 1200HDINNSOR | | FETCH C2 | INTO :SQL-HD-DATE(全件) | SQLCODE=0 | 1200HDINNSOR | | CLOSE C1 | CURSOR CLOSE | 常時 | 3000STPSOR | | CLOSE C2 | CURSOR CLOSE | 常時 | 3000STPSOR | ## 処理フロー 1. 初期処理(開始メッセージ→DB接続→運用日付取得) 2. 休日カレンダー全件読込(WORKING-STORAGEに格納) 3. 出力ファイルOPEN 4. C1 DECLARE/OPEN/初回FETCH(LEAVE_RECORDS:STATUS='1'、ORDER BY EMP_ID, START_DATE) 5. 社員番号キーブレイクループ - 社員別に期間内を日別展開 - 週末判定(MOD(INTEGER-OF-DATE,7)=0/6)→除外 - 休日判定(SEARCH ALL on WRK-HOLIDAY-TABLE)→除外 - 非週末・非休日 → LEAVE-DAILY出力 - 日付加算(月跨ぎ/閏年対応) - キーブレイク時:社員別小計メッセージ出力 6. 終了処理(CURSOR CLOSE→出力CLOSE→件数出力→終了メッセージ)