# KIN03EXP 使用資源一覧 ## プログラム概要 - **プログラムID**: KIN03EXP - **プログラム名**: 休暇日別展開処理 - **処理概要**: LEAVE_RECORDS(DB2)より有効申請(STATUS='1')を読込み、開始日〜終了日の期間を日別に展開し、休日・週末を除外してLEAVE-DAILYファイルを出力する。社員番号キーブレイクで小計出力を行う。 ## 使用ファイル | DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | |------|---------------|------|-------------|-----------|--------| | KIN02W01.DAT | LEAVE-DAILY | 順編成 | F (固定長) | 80B | KIN02REC | ## 使用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 | | br_fetch_next | SQLカーソル次行FETCH(bridge) | 1100C1FETCHSOR, 1200HDINNSOR | | br_get_col | SQLカラム値取得(bridge) | 1100C1FETCHSOR, 1200HDINNSOR | ## 使用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 | | SELECT | HOLIDAY_DATE FROM HOLIDAY_CALENDAR | 常時(初回のみ) | 1200HDINNSOR | | SELECT | LEAVE_RECORDS(全件) | 常時(初回のみ) | 1100C1INITSOR | ## 処理フロー 1. 初期処理(開始メッセージ→DB接続→運用日付取得) 2. 休日カレンダー全件読込(WORKING-STORAGEに格納) 3. 出力ファイルOPEN 4. DB初回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. 終了処理(CLOSE→件数出力→終了メッセージ)