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

7.0 KiB
Raw Permalink Blame History

詳細設計書

基本情報

# 項目 内容
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