diff --git a/bin/KIN01INP.exe b/bin/KIN01INP.exe deleted file mode 100644 index 51740ca..0000000 Binary files a/bin/KIN01INP.exe and /dev/null differ diff --git a/bin/KIN02UPD.exe b/bin/KIN02UPD.exe deleted file mode 100644 index 3c29c5d..0000000 Binary files a/bin/KIN02UPD.exe and /dev/null differ diff --git a/bin/KIN03EXP.exe b/bin/KIN03EXP.exe deleted file mode 100644 index 9b634ab..0000000 Binary files a/bin/KIN03EXP.exe and /dev/null differ diff --git a/bin/KIN04CHK.exe b/bin/KIN04CHK.exe deleted file mode 100644 index 1a10981..0000000 Binary files a/bin/KIN04CHK.exe and /dev/null differ diff --git a/bin/KIN06CLD.exe b/bin/KIN06CLD.exe deleted file mode 100644 index 1d324c8..0000000 Binary files a/bin/KIN06CLD.exe and /dev/null differ diff --git a/bin/KIN07DAI.exe b/bin/KIN07DAI.exe deleted file mode 100644 index 00db8ce..0000000 Binary files a/bin/KIN07DAI.exe and /dev/null differ diff --git a/src/KIN01INP.cbl b/src/KIN01INP.cbl deleted file mode 100644 index 4331765..0000000 --- a/src/KIN01INP.cbl +++ /dev/null @@ -1,615 +0,0 @@ - IDENTIFICATION DIVISION. - PROGRAM-ID. KIN01INP. - ***************************************************************** - * システム名 : 勤怠休暇管理システム * - * プログラムID : KIN01INP * - * プログラム名 : 休暇申請CSV取込・検証処理 * - * 作成日 : 2026-06-17 * - * 処理概要 : CSV形式の休暇申請ファイルを読み込み、 * - * 休暇種別テーブル検索と項目チェックを行い、 * - * ステータスによってWORK-LEAVEまたは * - * ERROR-LOGへ振り分ける。 * - ***************************************************************** - * 更新履歴 * - *---------------------------------------------------------------* - * 更新日付 担当者 更新内容 * - *---------------------------------------------------------------* - * 26-06-17 @@@ 新規作成 * - * * - ***************************************************************** - ENVIRONMENT DIVISION. - CONFIGURATION SECTION. - SOURCE-COMPUTER. IBM-ZSERIES. - OBJECT-COMPUTER. IBM-ZSERIES. - * - INPUT-OUTPUT SECTION. - FILE-CONTROL. - SELECT R01INNFIL ASSIGN TO KIN01R01 - FILE STATUS IS WS-R01-STATUS. - SELECT W01OUTFIL ASSIGN TO KIN01W01 - FILE STATUS IS WS-W01-STATUS. - SELECT W02OUTFIL ASSIGN TO KIN01W02 - FILE STATUS IS WS-W02-STATUS. - * - DATA DIVISION. - FILE SECTION. - * - ***************************************************************** - * ##R01## * - ***************************************************************** - FD R01INNFIL - LABEL RECORD IS STANDARD - BLOCK CONTAINS 0 - RECORDING MODE IS F. - 01 R01INNREC. - 03 R01LINE PIC X(80). - * - ***************************************************************** - * ##W01## * - ***************************************************************** - FD W01OUTFIL - LABEL RECORD IS STANDARD - BLOCK CONTAINS 0 - RECORDING MODE IS F. - 01 W01OUTREC. - COPY KIN01REC REPLACING ==(A)== BY ==W01==. - * - ***************************************************************** - * ##W02## * - ***************************************************************** - FD W02OUTFIL - LABEL RECORD IS STANDARD - BLOCK CONTAINS 0 - RECORDING MODE IS V. - 01 W02OUTREC. - COPY KIN05REC REPLACING ==(A)== BY ==W02==. - * - WORKING-STORAGE SECTION. - * - ***************************************************************** - * コンスタント領域 * - ***************************************************************** - 01 CNSARA. - 03 CNS-PRGIDX PIC X(008) VALUE 'KIN01INP'. - 03 CNS-MSGSTR PIC 9(003) VALUE 001. - 03 CNS-MSGFIN PIC 9(003) VALUE 002. - 03 CNS-MSGSUBEEK PIC 9(003) VALUE 005. - 03 CNS-MSGIINKES PIC 9(003) VALUE 006. - 03 CNS-MSGOUTKES PIC 9(003) VALUE 007. - 03 CNS-MSGKEYINF PIC 9(003) VALUE 033. - 03 CNS-KN0002 PIC 9(001) VALUE 2. - 03 CNS-ABD999 PIC 9(003) VALUE 999. - 03 CNS-STAT-1 PIC X(001) VALUE '1'. - 03 CNS-STAT-9 PIC X(001) VALUE '9'. - 03 CNS-LEAVE-01 PIC X(002) VALUE '01'. - 03 CNS-LEAVE-02 PIC X(002) VALUE '02'. - 03 CNS-LEAVE-03 PIC X(002) VALUE '03'. - 03 CNS-LEAVE-04 PIC X(002) VALUE '04'. - * - ***************************************************************** - * カウンタ領域 * - ***************************************************************** - 01 CUNARA. - 03 CUN-R01INN PIC S9(009) COMP-3 - VALUE ZERO. - 03 CUN-W01OUT PIC S9(009) COMP-3 - VALUE ZERO. - 03 CUN-W02OUT PIC S9(009) COMP-3 - VALUE ZERO. - * - ***************************************************************** - * 作業領域 * - ***************************************************************** - 01 WRKARA. - *** ファイルステータス - 03 WS-R01-STATUS PIC X(002). - 03 WS-W01-STATUS PIC X(002). - 03 WS-W02-STATUS PIC X(002). - *** 運用日付 - 03 WRK-U06 PIC 9(008). - *** 読込フラグ - 03 WRK-R01EOF PIC X(001). - *** CSV分解用 - 03 WRK-COMMA-CNT PIC 9(002) COMP. - 03 WRK-COMMA-DISP PIC 9(002). - 03 WRK-LT-FOUND PIC X(001). - 03 WRK-ERR-TYPE PIC X(001). - 03 WRK-CSV-APPL-ID PIC X(009). - 03 WRK-CSV-EMP-ID PIC X(008). - 03 WRK-CSV-START-DATE PIC X(008). - 03 WRK-CSV-START-TIME PIC X(004). - 03 WRK-CSV-END-DATE PIC X(008). - 03 WRK-CSV-END-TIME PIC X(004). - 03 WRK-CSV-LEAVE-TYPE PIC X(002). - 03 WRK-CSV-STATUS PIC X(001). - *** ステータス再定義(数値+88条件) - 03 WRK-STATUS-NUM REDEFINES WRK-CSV-STATUS - PIC 9(001). - 88 WRK-STATUS-ACTIVE VALUE 1. - 88 WRK-STATUS-CANCEL VALUE 9. - *** 休暇種別内部テーブル(4件) - 03 WRK-LEAVE-TYPE-TABLE. - 05 WRK-LT-ENTRY OCCURS 4 TIMES - INDEXED BY WRK-LT-IDX. - 07 WRK-LT-CODE PIC X(002). - *** REDEFINESデモ(同一領域 複数型 来回代入) - 03 WRK-DEMO-AREA PIC 9(008). - 03 WRK-DEMO-ALPHA REDEFINES WRK-DEMO-AREA - PIC X(008). - 03 WRK-DEMO-GRP REDEFINES WRK-DEMO-AREA. - 05 WRK-DEMO-TYPE PIC 9(004). - 05 WRK-DEMO-VALUE PIC 9(004). - * - ***************************************************************** - * サブプログラム連絡領域 * - ***************************************************************** - *** 運用日付取得 - COPY ZANDATAC. - *** メッセージ編集出力SR用 - COPY ZANMSGAC. - *** ABEND処理SR用 - COPY ZANENDAC. - *** 項目チェックSR用 - COPY ZANCHKAC. - * - PROCEDURE DIVISION. - ***************************************************************** - * サブモジュールNO: (0.0) * - * サブモジュール名: 制御処理 * - * 処理概要 : メインコントロール処理 * - ***************************************************************** - 0000MAJCOLSOR SECTION. - * - *** 初期処理 - PERFORM 1000ITTSOR. - * - *** メイン処理 - PERFORM 2000MAJSOR - UNTIL WRK-R01EOF = '1'. - * - *** 終了処理 - PERFORM 3000STPSOR. - * - 0000MAJCOLSOR-EXT. - GOBACK. - ***************************************************************** - * サブモジュールNO: (1.0) * - * サブモジュール名: 初期処理 * - * 処理概要 : 開始メッセージ出力・各種初期化処理 * - ***************************************************************** - 1000ITTSOR SECTION. - * - *** 開始メッセージ出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGSTR TO M00MSGCOD. - PERFORM 4000MSGOUTSOR. - * - *** コンパイル日時出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGKEYINF TO M00MSGCOD. - MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01. - MOVE 'COMPILED' TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - *** ワークエリア初期化 - INITIALIZE WRKARA. - * - *** 休暇種別テーブル設定 - MOVE '01' TO WRK-LT-CODE(1). - MOVE '02' TO WRK-LT-CODE(2). - MOVE '03' TO WRK-LT-CODE(3). - MOVE '04' TO WRK-LT-CODE(4). - * - *** 運用日付取得 - INITIALIZE D01UBSPAR. - CALL 'SUB01DAT' USING D01UBSPAR. - IF D01FKICOD = ZERO - MOVE D01UBSUDATE TO WRK-U06 - ELSE - INITIALIZE M00MHOPAR - MOVE CNS-MSGSUBEEK TO M00MSGCOD - MOVE 'SUB01DAT' TO M00UMKDATS22-01 - MOVE D01FKICOD TO M00UMKDATS22-02 - PERFORM 4000MSGOUTSOR - PERFORM 9999ABDSOR - END-IF. - * - *** 入出力ファイルOPEN - OPEN INPUT R01INNFIL - OUTPUT W01OUTFIL - W02OUTFIL. - * - *** OPENチェック - IF WS-R01-STATUS NOT = '00' - MOVE CNS-ABD999 TO E01ABDCOD - CALL 'SUB03END' USING E01ABDPAR - END-IF. - IF WS-W01-STATUS NOT = '00' - MOVE CNS-ABD999 TO E01ABDCOD - CALL 'SUB03END' USING E01ABDPAR - END-IF. - IF WS-W02-STATUS NOT = '00' - MOVE CNS-ABD999 TO E01ABDCOD - CALL 'SUB03END' USING E01ABDPAR - END-IF. - * - *** #R01#を読み込み - PERFORM 1100R01INNSOR. - * - 1000ITTSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(1.1) * - * サブモジュール名:##R01##読込処理 * - * 処理概要 : レコード読込・EOF判定処理 * - ***************************************************************** - 1100R01INNSOR SECTION. - * - READ R01INNFIL - AT END - MOVE '1' TO WRK-R01EOF - NOT AT END - ADD 1 TO CUN-R01INN - END-READ. - * - 1100R01INNSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(2.0) * - * サブモジュール名: 主処理 * - * 処理概要 : CSV分解・休暇種別検索・ステータス振分 * - ***************************************************************** - 2000MAJSOR SECTION. - * - *** CSV分解 - PERFORM 2010CSVSOR. - * - *** 休暇種別テーブル検索 - PERFORM 2020LEAVSERSOR. - * - *** エラー判定(フィールド数/休暇種別) - IF WRK-COMMA-CNT NOT = 8 - MOVE 'F' TO WRK-ERR-TYPE - PERFORM 2050ERRORSOR - ELSE IF WRK-LT-FOUND NOT = '1' - MOVE 'L' TO WRK-ERR-TYPE - PERFORM 2050ERRORSOR - ELSE - *** ステータス判定(IF/ELSE連鎖) - IF WRK-STATUS-ACTIVE - PERFORM 2030VALIDATESOR - ELSE IF WRK-STATUS-CANCEL - PERFORM 2040CANCELSOR - ELSE - MOVE 'S' TO WRK-ERR-TYPE - PERFORM 2050ERRORSOR - END-IF - END-IF. - * - *** 次のレコード読込 - PERFORM 1100R01INNSOR. - * - 2000MAJSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(2.1) * - * サブモジュール名: CSV分解処理 * - * 処理概要 : UNSTRINGでCSVを8項目に分解する * - ***************************************************************** - 2010CSVSOR SECTION. - * - MOVE ZERO TO WRK-COMMA-CNT. - INITIALIZE WRK-CSV-APPL-ID - WRK-CSV-EMP-ID - WRK-CSV-START-DATE - WRK-CSV-START-TIME - WRK-CSV-END-DATE - WRK-CSV-END-TIME - WRK-CSV-LEAVE-TYPE - WRK-CSV-STATUS. - UNSTRING R01INNREC - DELIMITED BY ',' - INTO WRK-CSV-APPL-ID - WRK-CSV-EMP-ID - WRK-CSV-START-DATE - WRK-CSV-START-TIME - WRK-CSV-END-DATE - WRK-CSV-END-TIME - WRK-CSV-LEAVE-TYPE - WRK-CSV-STATUS - TALLYING IN WRK-COMMA-CNT - END-UNSTRING. - * - 2010CSVSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(2.2) * - * サブモジュール名: 休暇種別テーブル検索処理 * - * 処理概要 : SEARCH(非ALL)で休暇種別の妥当性を検証 * - ***************************************************************** - 2020LEAVSERSOR SECTION. - * - MOVE '0' TO WRK-LT-FOUND. - SET WRK-LT-IDX TO 1. - SEARCH WRK-LT-ENTRY - VARYING WRK-LT-IDX - AT END - CONTINUE - WHEN WRK-LT-CODE(WRK-LT-IDX) - = WRK-CSV-LEAVE-TYPE - MOVE '1' TO WRK-LT-FOUND - END-SEARCH. - * - 2020LEAVSERSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(2.3) * - * サブモジュール名: 有効申請処理 * - * 処理概要 : SUB04CHKで日付/時刻チェックしW01出力 * - ***************************************************************** - 2030VALIDATESOR SECTION. - * - *** W01レコード初期化 - INITIALIZE W01OUTREC. - * - *** SUB04CHKで社員番号チェック - INITIALIZE C01CHKPAR. - MOVE WRK-CSV-EMP-ID TO C01CHKDAT. - MOVE 'EMPID' TO C01CHKTYP. - CALL 'SUB04CHK' USING C01CHKPAR. - IF C01CHKRRC NOT = ZERO - MOVE '01' TO W02ERR-CATEGORY - STRING 'EMP-ID ERROR EMP=' - WRK-CSV-EMP-ID - DELIMITED BY SIZE - INTO W02ERR-DETAIL - WRITE W02OUTREC - ADD 1 TO CUN-W02OUT - GO TO 2030VALIDATESOR-EXT - END-IF. - * - *** SUB04CHKで開始日付チェック - INITIALIZE C01CHKPAR. - MOVE WRK-CSV-START-DATE TO C01CHKDAT. - MOVE 'DATE' TO C01CHKTYP. - CALL 'SUB04CHK' USING C01CHKPAR. - IF C01CHKRRC NOT = ZERO - MOVE '01' TO W02ERR-CATEGORY - STRING 'START-DATE ERROR EMP=' - WRK-CSV-EMP-ID - ' DATE=' - WRK-CSV-START-DATE - DELIMITED BY SIZE - INTO W02ERR-DETAIL - WRITE W02OUTREC - ADD 1 TO CUN-W02OUT - GO TO 2030VALIDATESOR-EXT - END-IF. - * - *** SUB04CHKで開始時刻チェック - INITIALIZE C01CHKPAR. - MOVE WRK-CSV-START-TIME TO C01CHKDAT. - MOVE 'TIME' TO C01CHKTYP. - CALL 'SUB04CHK' USING C01CHKPAR. - IF C01CHKRRC NOT = ZERO - MOVE '01' TO W02ERR-CATEGORY - STRING 'START-TIME ERROR EMP=' - WRK-CSV-EMP-ID - ' TIME=' - WRK-CSV-START-TIME - DELIMITED BY SIZE - INTO W02ERR-DETAIL - WRITE W02OUTREC - ADD 1 TO CUN-W02OUT - GO TO 2030VALIDATESOR-EXT - END-IF. - * - *** SUB04CHKで終了日付チェック - INITIALIZE C01CHKPAR. - MOVE WRK-CSV-END-DATE TO C01CHKDAT. - MOVE 'DATE' TO C01CHKTYP. - CALL 'SUB04CHK' USING C01CHKPAR. - IF C01CHKRRC NOT = ZERO - MOVE '01' TO W02ERR-CATEGORY - STRING 'END-DATE ERROR EMP=' - WRK-CSV-EMP-ID - ' DATE=' - WRK-CSV-END-DATE - DELIMITED BY SIZE - INTO W02ERR-DETAIL - WRITE W02OUTREC - ADD 1 TO CUN-W02OUT - GO TO 2030VALIDATESOR-EXT - END-IF. - * - *** SUB04CHKで終了時刻チェック - INITIALIZE C01CHKPAR. - MOVE WRK-CSV-END-TIME TO C01CHKDAT. - MOVE 'TIME' TO C01CHKTYP. - CALL 'SUB04CHK' USING C01CHKPAR. - IF C01CHKRRC NOT = ZERO - MOVE '01' TO W02ERR-CATEGORY - STRING 'END-TIME ERROR EMP=' - WRK-CSV-EMP-ID - ' TIME=' - WRK-CSV-END-TIME - DELIMITED BY SIZE - INTO W02ERR-DETAIL - WRITE W02OUTREC - ADD 1 TO CUN-W02OUT - GO TO 2030VALIDATESOR-EXT - END-IF. - * - *** 複合条件デモ(AND+OR+3段ネスト) - IF W01START-DATE NOT = ZERO - AND W01END-DATE NOT = ZERO - AND W01START-TIME NOT = ZERO - IF W01START-DATE > W01END-DATE - OR (W01START-DATE = W01END-DATE - AND W01START-TIME >= W01END-TIME) - MOVE 10 TO WRK-DEMO-TYPE - ELSE - MOVE 20 TO WRK-DEMO-TYPE - END-IF - END-IF. - * - *** W01出力(新規/変更: APPL-ID=CSV値, STATUS='1') - MOVE WRK-CSV-APPL-ID TO W01APPL-ID. - MOVE WRK-CSV-EMP-ID TO W01EMP-ID. - MOVE WRK-CSV-LEAVE-TYPE TO W01LEAVE-TYPE. - MOVE WRK-CSV-START-DATE TO W01START-DATE. - MOVE WRK-CSV-START-TIME TO W01START-TIME. - MOVE WRK-CSV-END-DATE TO W01END-DATE. - MOVE WRK-CSV-END-TIME TO W01END-TIME. - MOVE WRK-CSV-STATUS TO W01STATUS. - WRITE W01OUTREC. - ADD 1 TO CUN-W01OUT. - * - 2030VALIDATESOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(2.4) * - * サブモジュール名: 取消申請処理 * - * 処理概要 : 取消レコードをW01出力(検証は行わない) * - ***************************************************************** - 2040CANCELSOR SECTION. - * - *** W01レコード初期化 - INITIALIZE W01OUTREC. - * - *** W01出力(取消: APPL-ID=CSV値, STATUS='9') - MOVE WRK-CSV-APPL-ID TO W01APPL-ID. - MOVE WRK-CSV-EMP-ID TO W01EMP-ID. - MOVE WRK-CSV-LEAVE-TYPE TO W01LEAVE-TYPE. - MOVE WRK-CSV-START-DATE TO W01START-DATE. - MOVE WRK-CSV-START-TIME TO W01START-TIME. - MOVE WRK-CSV-END-DATE TO W01END-DATE. - MOVE WRK-CSV-END-TIME TO W01END-TIME. - MOVE WRK-CSV-STATUS TO W01STATUS. - WRITE W01OUTREC. - ADD 1 TO CUN-W01OUT. - * - 2040CANCELSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(2.5) * - * サブモジュール名: エラー処理 * - * 処理概要 : エラーレコードをW02出力 * - ***************************************************************** - 2050ERRORSOR SECTION. - * - *** W02レコード初期化 - INITIALIZE W02OUTREC. - MOVE '01' TO W02ERR-CATEGORY. - * - *** エラー種別判定 - EVALUATE WRK-ERR-TYPE - WHEN 'F' - MOVE 1 TO WRK-DEMO-TYPE - MOVE WRK-COMMA-CNT TO WRK-DEMO-VALUE - STRING 'FIELD COUNT ERROR CNT=' - WRK-DEMO-ALPHA - DELIMITED BY SIZE - INTO W02ERR-DETAIL - WHEN 'L' - MOVE 2 TO WRK-DEMO-TYPE - MOVE 0 TO WRK-DEMO-VALUE - STRING 'INVALID LEAVE TYPE=' - WRK-CSV-LEAVE-TYPE - ' EMP=' - WRK-CSV-EMP-ID - ' ERR=' - WRK-DEMO-ALPHA - DELIMITED BY SIZE - INTO W02ERR-DETAIL - WHEN 'S' - MOVE 3 TO WRK-DEMO-TYPE - MOVE 0 TO WRK-DEMO-VALUE - STRING 'INVALID STATUS=' - WRK-CSV-STATUS - ' EMP=' - WRK-CSV-EMP-ID - ' ERR=' - WRK-DEMO-ALPHA - DELIMITED BY SIZE - INTO W02ERR-DETAIL - WHEN OTHER - MOVE 9 TO WRK-DEMO-TYPE - MOVE 0 TO WRK-DEMO-VALUE - STRING 'UNKNOWN ERROR EMP=' - WRK-CSV-EMP-ID - ' ERR=' - WRK-DEMO-ALPHA - DELIMITED BY SIZE - INTO W02ERR-DETAIL - END-EVALUATE. - * - WRITE W02OUTREC. - ADD 1 TO CUN-W02OUT. - * - 2050ERRORSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(3.0) * - * サブモジュール名: 終了処理 * - * 処理概要 : ファイルクローズ・件数と終了メッセージ出力 * - ***************************************************************** - 3000STPSOR SECTION. - * - *** 入出力ファイルCLOSE - CLOSE R01INNFIL - W01OUTFIL - W02OUTFIL. - * - *** 入出力ファイル件数出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGIINKES TO M00MSGCOD. - MOVE 'KIN01R01' TO M00UMKDATS22-01. - MOVE CUN-R01INN TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - INITIALIZE M00MHOPAR. - MOVE CNS-MSGOUTKES TO M00MSGCOD. - MOVE 'KIN01W01' TO M00UMKDATS22-01. - MOVE CUN-W01OUT TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - INITIALIZE M00MHOPAR. - MOVE CNS-MSGOUTKES TO M00MSGCOD. - MOVE 'KIN01W02' TO M00UMKDATS22-01. - MOVE CUN-W02OUT TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - *** 終了メッセージ出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGFIN TO M00MSGCOD. - PERFORM 4000MSGOUTSOR. - * - 3000STPSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(4.0) * - * サブモジュール名: メッセージ編集出力処理 * - * 処理概要 : メッセージ編集出力サブPGM呼出 * - ***************************************************************** - 4000MSGOUTSOR SECTION. - * - MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1). - MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1). - MOVE CNS-PRGIDX TO M00UMKDATS22-05. - CALL 'SUB02MSG' USING M00MHOPAR. - * - 4000MSGOUTSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(9.9) * - * サブモジュール名: ABEND処理 * - * 処理概要 : ABENDサブPGM呼出 * - ***************************************************************** - 9999ABDSOR SECTION. - * - MOVE CNS-ABD999 TO E01ABDCOD. - CALL 'SUB03END' USING E01ABDPAR. - * - 9999ABDSOR-EXT. - EXIT. diff --git a/src/KIN02UPD.cbl b/src/KIN02UPD.cbl deleted file mode 100644 index 5463048..0000000 --- a/src/KIN02UPD.cbl +++ /dev/null @@ -1,454 +0,0 @@ - IDENTIFICATION DIVISION. - PROGRAM-ID. KIN02UPD. - ***************************************************************** - * システム名 : 勤怠休暇管理システム * - * プログラムID : KIN02UPD * - * プログラム名 : 休暇申請DB更新処理 * - * 作成日 : 2026-06-17 * - * 処理概要 : WORK-LEAVEの各レコードをDB2テーブル * - * LEAVE_RECORDSに反映する。 * - * ステータスに応じて新規登録(INSERT)、 * - * 変更(DELETE+INSERT)、取消(DELETE)を行う。 * - * * - ***************************************************************** - * 更新履歴 * - *---------------------------------------------------------------* - * 更新日付 担当者 更新内容 * - *---------------------------------------------------------------* - * 26-06-17 @@@ 新規作成 * - * * - ***************************************************************** - ENVIRONMENT DIVISION. - CONFIGURATION SECTION. - SOURCE-COMPUTER. IBM-ZSERIES. - OBJECT-COMPUTER. IBM-ZSERIES. - * - INPUT-OUTPUT SECTION. - FILE-CONTROL. - SELECT R01INNFIL ASSIGN TO KIN01W01 - FILE STATUS IS WS-R01-STATUS. - SELECT W01OUTFIL ASSIGN TO KIN02W01 - FILE STATUS IS WS-W01-STATUS. - * - DATA DIVISION. - FILE SECTION. - * - ***************************************************************** - * R01 (WORK-LEAVE) 80B FB * - ***************************************************************** - FD R01INNFIL - LABEL RECORD IS STANDARD - BLOCK CONTAINS 0 - RECORDING MODE IS F. - 01 R01INNREC. - COPY KIN01REC REPLACING ==(A)== BY ==R01==. - * - * - ***************************************************************** - * W01 (ERROR-LOG) 200B VB * - ***************************************************************** - FD W01OUTFIL - LABEL RECORD IS STANDARD - BLOCK CONTAINS 0 - RECORDING MODE IS V. - 01 W01OUTREC. - COPY KIN05REC REPLACING ==(A)== BY ==W01==. - * - WORKING-STORAGE SECTION. - * - ***************************************************************** - * SQLCA * - ***************************************************************** - EXEC SQL INCLUDE SQLCA END-EXEC. - * - ***************************************************************** - * コンスタント領域 * - ***************************************************************** - 01 CNSARA. - 03 CNS-PRGIDX PIC X(008) VALUE 'KIN02UPD'. - 03 CNS-MSGSTR PIC 9(003) VALUE 001. - 03 CNS-MSGFIN PIC 9(003) VALUE 002. - 03 CNS-MSGSUBEEK PIC 9(003) VALUE 005. - 03 CNS-MSGIINKES PIC 9(003) VALUE 006. - 03 CNS-MSGOUTKES PIC 9(003) VALUE 007. - 03 CNS-MSGKEYINF PIC 9(003) VALUE 033. - 03 CNS-ABD999 PIC 9(003) VALUE 999. - 03 CNS-KN0002 PIC 9(001) VALUE 2. - * - ***************************************************************** - * カウンタ領域 * - ***************************************************************** - 01 CUNARA. - 03 CUN-R01INN PIC S9(009) COMP-3 - VALUE ZERO. - 03 CUN-DBXINS PIC S9(009) COMP-3 - VALUE ZERO. - 03 CUN-DBXDEL PIC S9(009) COMP-3 - VALUE ZERO. - 03 CUN-DBXUPD PIC S9(009) COMP-3 - VALUE ZERO. - 03 CUN-W01OUT PIC S9(009) COMP-3 - VALUE ZERO. - * - ***************************************************************** - * 作業領域 * - ***************************************************************** - 01 WRKARA. - *** ファイルステータス - 03 WS-R01-STATUS PIC X(002). - 03 WS-W01-STATUS PIC X(002). - *** EOF判定 - 03 WRK-R01EOF PIC X(001). - 88 WRK-R01-EOF VALUE '1'. - *** SQL用ホスト変数 - 03 WS-APPL-ID PIC 9(009). - 03 WS-EMP-ID PIC X(008). - 03 WS-LEAVE-TYPE PIC X(002). - 03 WS-START-DATE PIC X(008). - 03 WS-START-TIME PIC X(004). - 03 WS-END-DATE PIC X(008). - 03 WS-END-TIME PIC X(004). - 03 WS-STATUS PIC X(001). - *** SQLCODE表示用 - 03 WRK-SQLCODE-DISP PIC +9(009). - *** エラーログ編集領域 - 03 WRK-ERR-CATEGORY PIC 9(002). - 03 WRK-ERR-DETAIL PIC X(198). - * - ***************************************************************** - * サブプログラム連絡領域 * - ***************************************************************** - *** メッセージ編集出力SR用 - COPY ZANMSGAC. - *** ABEND処理SR用 - COPY ZANENDAC. - * - PROCEDURE DIVISION. - ***************************************************************** - * サブモジュールNO: (0.0) * - * サブモジュール名: 制御処理 * - * 処理概要 : メインコントロール処理 * - ***************************************************************** - 0000MAJCOLSOR SECTION. - * - *** 初期処理 - PERFORM 1000ITTSOR. - * - *** メイン処理 - PERFORM 2000MAJSOR - UNTIL WRK-R01-EOF. - * - *** 終了処理 - PERFORM 3000STPSOR. - * - 0000MAJCOLSOR-EXT. - GOBACK. - ***************************************************************** - * サブモジュールNO: (1.0) * - * サブモジュール名: 初期処理 * - * 処理概要 : 開始メッセージ出力・各種初期化処理 * - ***************************************************************** - 1000ITTSOR SECTION. - * - *** 開始メッセージ出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGSTR TO M00MSGCOD. - PERFORM 4000MSGOUTSOR. - * - *** コンパイル日時出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGKEYINF TO M00MSGCOD. - MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01. - MOVE 'COMPILED' TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - *** ワークエリア初期化 - INITIALIZE WRKARA. - * - *** DB接続 - EXEC SQL CONNECT TO 'data/kin.db' END-EXEC. - * - *** R01ファイルOPEN - OPEN INPUT R01INNFIL. - *** OPENチェック(R01) - IF WS-R01-STATUS NOT = '00' - MOVE CNS-ABD999 TO E01ABDCOD - CALL 'SUB03END' USING E01ABDPAR - END-IF. - *** W01ファイルOPEN - OPEN OUTPUT W01OUTFIL. - *** OPENチェック(W01) - IF WS-W01-STATUS NOT = '00' - MOVE CNS-ABD999 TO E01ABDCOD - CALL 'SUB03END' USING E01ABDPAR - END-IF. - * - *** R01を初回読込 - PERFORM 1100R01INNSOR. - * - 1000ITTSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(1.1) * - * サブモジュール名:R01読込処理 * - * 処理概要 : WORK-LEAVE読込 * - ***************************************************************** - 1100R01INNSOR SECTION. - * - READ R01INNFIL - AT END - MOVE '1' TO WRK-R01EOF - NOT AT END - ADD 1 TO CUN-R01INN - END-READ. - * - 1100R01INNSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(2.0) * - * サブモジュール名:主処理 * - * 処理概要 : R01(WORK-LEAVE)→DB更新処理 * - ***************************************************************** - 2000MAJSOR SECTION. - * - *** レコード処理 - PERFORM 2100PROCSOR. - * - *** 次レコード読込 - PERFORM 1100R01INNSOR. - * - 2000MAJSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(2.1) * - * サブモジュール名:レコード判定処理 * - * 処理概要 : ステータス判定→各DB更新処理分岐 * - ***************************************************************** - 2100PROCSOR SECTION. - * - MOVE R01APPL-ID TO WS-APPL-ID. - MOVE R01EMP-ID TO WS-EMP-ID. - MOVE R01LEAVE-TYPE TO WS-LEAVE-TYPE. - MOVE R01START-DATE TO WS-START-DATE. - MOVE R01START-TIME TO WS-START-TIME. - MOVE R01END-DATE TO WS-END-DATE. - MOVE R01END-TIME TO WS-END-TIME. - MOVE R01STATUS TO WS-STATUS. - * - EVALUATE TRUE - WHEN WS-STATUS = '1' - AND WS-APPL-ID = 0 - PERFORM 2110INSERTSOR - WHEN WS-STATUS = '1' - AND WS-APPL-ID > 0 - PERFORM 2120UPDATESOR - WHEN WS-STATUS = '9' - PERFORM 2130DELETESOR - WHEN OTHER - CONTINUE - END-EVALUATE. - * - 2100PROCSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(2.1.1) * - * サブモジュール名:INSERT処理(新規登録) * - * 処理概要 : LEAVE_RECORDSに新規レコード追加 * - ***************************************************************** - 2110INSERTSOR SECTION. - * - EXEC SQL - INSERT INTO LEAVE_RECORDS - (EMP_ID, LEAVE_TYPE, - START_DATE, START_TIME, - END_DATE, END_TIME, - STATUS) - VALUES - (:WS-EMP-ID, :WS-LEAVE-TYPE, - :WS-START-DATE, :WS-START-TIME, - :WS-END-DATE, :WS-END-TIME, - :WS-STATUS) - END-EXEC. - * - IF SQLCODE NOT = 0 - PERFORM 9100DBERRSOR - END-IF. - * - ADD 1 TO CUN-DBXINS. - * - 2110INSERTSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(2.1.2) * - * サブモジュール名:UPDATE処理(変更) * - * 処理概要 : DELETE(旧レコード)→INSERT(新レコード) * - ***************************************************************** - 2120UPDATESOR SECTION. - * - EXEC SQL - DELETE FROM LEAVE_RECORDS - WHERE APPLICATION_ID = :WS-APPL-ID - END-EXEC. - * - IF SQLCODE NOT = 0 - PERFORM 9100DBERRSOR - END-IF. - * - EXEC SQL - INSERT INTO LEAVE_RECORDS - (EMP_ID, LEAVE_TYPE, - START_DATE, START_TIME, - END_DATE, END_TIME, - STATUS) - VALUES - (:WS-EMP-ID, :WS-LEAVE-TYPE, - :WS-START-DATE, :WS-START-TIME, - :WS-END-DATE, :WS-END-TIME, - :WS-STATUS) - END-EXEC. - * - IF SQLCODE NOT = 0 - PERFORM 9100DBERRSOR - END-IF. - * - ADD 1 TO CUN-DBXUPD. - * - 2120UPDATESOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(2.1.3) * - * サブモジュール名:DELETE処理(取消) * - * 処理概要 : APPL-ID一致レコードをDELETE * - ***************************************************************** - 2130DELETESOR SECTION. - * - EXEC SQL - DELETE FROM LEAVE_RECORDS - WHERE APPLICATION_ID = :WS-APPL-ID - END-EXEC. - * - IF SQLCODE NOT = 0 - PERFORM 9100DBERRSOR - END-IF. - * - ADD 1 TO CUN-DBXDEL. - * - 2130DELETESOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(3.0) * - * サブモジュール名:終了処理 * - * 処理概要 : COMMIT・ファイルクローズ・件数出力 * - ***************************************************************** - 3000STPSOR SECTION. - * - *** COMMIT - EXEC SQL - COMMIT WORK - END-EXEC. - * - *** 入出力ファイルCLOSE - CLOSE R01INNFIL - W01OUTFIL. - * - *** 件数メッセージ出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGIINKES TO M00MSGCOD. - MOVE 'KIN01W01' TO M00UMKDATS22-01. - MOVE CUN-R01INN TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - INITIALIZE M00MHOPAR. - MOVE CNS-MSGIINKES TO M00MSGCOD. - MOVE 'INS' TO M00UMKDATS22-01. - MOVE CUN-DBXINS TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - INITIALIZE M00MHOPAR. - MOVE CNS-MSGIINKES TO M00MSGCOD. - MOVE 'UPD' TO M00UMKDATS22-01. - MOVE CUN-DBXUPD TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - INITIALIZE M00MHOPAR. - MOVE CNS-MSGOUTKES TO M00MSGCOD. - MOVE 'DEL' TO M00UMKDATS22-01. - MOVE CUN-DBXDEL TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - INITIALIZE M00MHOPAR. - MOVE CNS-MSGOUTKES TO M00MSGCOD. - MOVE 'KIN02W01' TO M00UMKDATS22-01. - MOVE CUN-W01OUT TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - *** 終了メッセージ出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGFIN TO M00MSGCOD. - PERFORM 4000MSGOUTSOR. - * - 3000STPSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(4.0) * - * サブモジュール名:メッセージ編集出力処理 * - * 処理概要 : メッセージ編集出力サブPGM呼出 * - ***************************************************************** - 4000MSGOUTSOR SECTION. - * - MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1). - MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1). - MOVE CNS-PRGIDX TO M00UMKDATS22-05. - CALL 'SUB02MSG' USING M00MHOPAR. - * - 4000MSGOUTSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(9.1) * - * サブモジュール名:DBエラー処理 * - * 処理概要 : SQLエラー→ROLLBACK+メッセージ出力+ABEND * - ***************************************************************** - 9100DBERRSOR SECTION. - * - *** ROLLBACK - EXEC SQL - ROLLBACK WORK - END-EXEC. - * - *** エラーログ出力 - INITIALIZE W01OUTREC. - MOVE '01' TO W01ERR-CATEGORY. - MOVE SQLCODE TO WRK-SQLCODE-DISP. - STRING 'KIN02UPD SQLCODE=' - WRK-SQLCODE-DISP DELIMITED BY SIZE - ' APPL-ID=' - WS-APPL-ID DELIMITED BY SIZE - INTO W01ERR-DETAIL - END-STRING. - WRITE W01OUTREC. - ADD 1 TO CUN-W01OUT. - * - *** エラーメッセージ出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGSUBEEK TO M00MSGCOD. - MOVE 'KIN02UPD SQL ERROR' TO M00UMKDATS22-01. - MOVE WRK-SQLCODE-DISP TO M00UMKDATS22-02. - MOVE WS-APPL-ID TO M00UMKDATS22-03. - PERFORM 4000MSGOUTSOR. - * - PERFORM 9999ABDSOR. - * - 9100DBERRSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(9.9) * - * サブモジュール名:ABEND処理 * - * 処理概要 : ABENDサブPGM呼出 * - ***************************************************************** - 9999ABDSOR SECTION. - * - MOVE CNS-ABD999 TO E01ABDCOD. - CALL 'SUB03END' USING E01ABDPAR. - * - 9999ABDSOR-EXT. - EXIT. diff --git a/src/KIN03EXP.cbl b/src/KIN03EXP.cbl deleted file mode 100644 index 7ea3d14..0000000 --- a/src/KIN03EXP.cbl +++ /dev/null @@ -1,520 +0,0 @@ - IDENTIFICATION DIVISION. - PROGRAM-ID. KIN03EXP. - ***************************************************************** - * システム名 : 勤怠休暇管理システム * - * プログラムID : KIN03EXP * - * プログラム名 : 休暇日別展開処理 * - * 作成日 : 2026-06-17 * - * 処理概要 : LEAVE_RECORDS(DB2)より有効申請を読込み、 * - * 開始日〜終了日の期間を日別に展開し、 * - * 休日・週末を除外してLEAVE-DAILY-fileを出力 * - * する。社員番号キーブレイクで小計出力を行う。* - ***************************************************************** - * 更新履歴 * - *---------------------------------------------------------------* - * 更新日付 担当者 更新内容 * - *---------------------------------------------------------------* - * 26-06-17 @@@ 新規作成 * - * * - ***************************************************************** - ENVIRONMENT DIVISION. - CONFIGURATION SECTION. - SOURCE-COMPUTER. IBM-ZSERIES. - OBJECT-COMPUTER. IBM-ZSERIES. - * - INPUT-OUTPUT SECTION. - FILE-CONTROL. - SELECT W01OUTFIL ASSIGN TO "KIN02W01.DAT" - FILE STATUS IS WS-W01-STATUS. - * - DATA DIVISION. - FILE SECTION. - * - ***************************************************************** - * W01 (LEAVE-DAILY) 80B FB * - ***************************************************************** - FD W01OUTFIL - LABEL RECORD IS STANDARD - BLOCK CONTAINS 0 - RECORDING MODE IS F. - 01 W01OUTREC. - COPY KIN02REC REPLACING ==(A)== BY ==W01==. - * - WORKING-STORAGE SECTION. - * - ***************************************************************** - * SQLCA * - ***************************************************************** - EXEC SQL INCLUDE SQLCA END-EXEC. - * - ***************************************************************** - * コンスタント領域 * - ***************************************************************** - 01 CNSARA. - 03 CNS-PRGIDX PIC X(008) VALUE 'KIN03EXP'. - 03 CNS-MSGSTR PIC 9(003) VALUE 001. - 03 CNS-MSGFIN PIC 9(003) VALUE 002. - 03 CNS-MSGSUBEEK PIC 9(003) VALUE 005. - 03 CNS-MSGIINKES PIC 9(003) VALUE 006. - 03 CNS-MSGOUTKES PIC 9(003) VALUE 007. - 03 CNS-MSGKEYINF PIC 9(003) VALUE 033. - 03 CNS-KN0002 PIC 9(001) VALUE 2. - 03 CNS-ABD999 PIC 9(003) VALUE 999. - * - ***************************************************************** - * カウンタ領域 * - ***************************************************************** - 01 CUNARA. - 03 CUN-R01INN PIC S9(009) COMP-3 - VALUE ZERO. - 03 CUN-W01OUT PIC S9(009) COMP-3 - VALUE ZERO. - * - ***************************************************************** - * DBホスト変数(DISPLAY形式:bridgeテキストI/F対応) * - ***************************************************************** - 01 SQL-HOST-VARS. - 03 SQL-APPL-ID PIC X(009). - 03 SQL-EMP-ID PIC X(008). - 03 SQL-LEAVE-TYPE PIC X(002). - 03 SQL-START-DATE PIC X(008). - 03 SQL-START-TIME PIC X(004). - 03 SQL-END-DATE PIC X(008). - 03 SQL-END-TIME PIC X(004). - 03 SQL-HD-DATE PIC X(008). - * - ***************************************************************** - * 作業領域 * - ***************************************************************** - 01 WRKARA. - *** ファイルステータス - 03 WS-W01-STATUS PIC X(002). - *** EOF判定 - 03 WRK-R01EOF PIC X(001). - 88 WRK-R01-EOF VALUE '1'. - *** キーブレイク用 - 03 WRK-BFR-EMP-ID PIC X(008). - *** 社員別小計カウンタ - 03 CUN-EMP-SUB PIC S9(009) COMP-3 - VALUE ZERO. - *** 日付展開用 - 03 WRK-DATE-CURRENT PIC 9(008). - 03 WRK-DATE-ALPHA REDEFINES WRK-DATE-CURRENT - PIC X(008). - 03 WRK-DATE-NUM REDEFINES WRK-DATE-CURRENT. - 05 WRK-DATE-YEAR PIC 9(004). - 05 WRK-DATE-MONTH PIC 9(002). - 05 WRK-DATE-DAY PIC 9(002). - 03 WRK-DATE-END PIC 9(008). - *** 曜日判定用 - 03 WRK-DAY-OF-WEEK PIC 9(001). - *** 休日テーブル件数(ODO前に定義) - 03 WRK-HD-COUNT PIC 9(004) COMP - VALUE ZERO. - *** 休日テーブル存在フラグ - 03 WRK-HD-FOUND PIC X(001). - *** 休日テーブル(ODOは末尾に配置) - 03 WRK-HOLIDAY-TABLE. - 05 WRK-HD-ENTRY OCCURS 1 TO 366 TIMES - DEPENDING ON WRK-HD-COUNT - ASCENDING KEY IS WRK-HD-DATE - INDEXED BY WRK-HD-IDX. - 07 WRK-HD-DATE PIC 9(008). - * - ***************************************************************** - * サブプログラム連絡領域 * - ***************************************************************** - *** 運用日付取得 - COPY ZANDATAC. - *** メッセージ編集出力SR用 - COPY ZANMSGAC. - *** ABEND処理SR用 - COPY ZANENDAC. - * - PROCEDURE DIVISION. - ***************************************************************** - * サブモジュールNO: (0.0) * - * サブモジュール名: 制御処理 * - * 処理概要 : メインコントロール処理 * - ***************************************************************** - 0000MAJCOLSOR SECTION. - * - *** 初期処理 - PERFORM 1000ITTSOR. - * - *** メイン処理 - PERFORM 2000MAJSOR - UNTIL WRK-R01EOF = '1'. - * - *** 終了処理 - PERFORM 3000STPSOR. - * - 0000MAJCOLSOR-EXT. - GOBACK. - ***************************************************************** - * サブモジュールNO: (1.0) * - * サブモジュール名: 初期処理 * - * 処理概要 : 開始メッセージ出力・各種初期化処理 * - ***************************************************************** - 1000ITTSOR SECTION. - * - *** 開始メッセージ出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGSTR TO M00MSGCOD. - PERFORM 4000MSGOUTSOR. - * - *** コンパイル日時出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGKEYINF TO M00MSGCOD. - MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01. - MOVE 'COMPILED' TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - *** ワークエリア初期化 - INITIALIZE WRKARA. - * - *** DB接続 - EXEC SQL CONNECT TO 'data/kin.db' END-EXEC. - * - *** 運用日付取得 - INITIALIZE D01UBSPAR. - CALL 'SUB01DAT' USING D01UBSPAR. - IF D01FKICOD = ZERO - MOVE D01UBSUDATE TO WRK-DATE-CURRENT - ELSE - INITIALIZE M00MHOPAR - MOVE CNS-MSGSUBEEK TO M00MSGCOD - MOVE 'SUB01DAT' TO M00UMKDATS22-01 - MOVE D01FKICOD TO M00UMKDATS22-02 - PERFORM 4000MSGOUTSOR - PERFORM 9999ABDSOR - END-IF. - * - *** 休日カレンダーテーブル読込 - PERFORM 1200HDINNSOR. - * - *** 出力ファイルOPEN - OPEN OUTPUT W01OUTFIL. - * - *** OPENチェック - IF WS-W01-STATUS NOT = '00' - MOVE CNS-ABD999 TO E01ABDCOD - CALL 'SUB03END' USING E01ABDPAR - END-IF. - * - *** C1カーソル初回FETCH(SELECT INTO) - PERFORM 1100C1INITSOR. - * - 1000ITTSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(1.1) * - * サブモジュール名:C1初回FETCH処理 * - * 処理概要 : LEAVE_RECORDSをSELECT INTO(初回のみ) * - ***************************************************************** - 1100C1INITSOR SECTION. - * - MOVE SPACES TO SQL-APPL-ID. - EXEC 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 - END-EXEC. - * - IF SQLCODE = 0 - ADD 1 TO CUN-R01INN - ELSE - MOVE '1' TO WRK-R01EOF - END-IF. - * - 1100C1INITSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(1.2) * - * サブモジュール名:C1次回FETCH処理 * - * 処理概要 : br_fetch_nextで次行を読込(2回目以降) * - ***************************************************************** - 1100C1FETCHSOR SECTION. - * - CALL 'br_fetch_next' USING SQLCODE. - * - IF SQLCODE = 0 - MOVE SPACES TO SQL-APPL-ID - MOVE 0 TO WS-COL-IDX - MOVE 256 TO WS-COL-LEN - CALL 'br_get_col' USING - WS-COL-IDX, SQL-APPL-ID, WS-COL-LEN - MOVE 1 TO WS-COL-IDX - MOVE 256 TO WS-COL-LEN - CALL 'br_get_col' USING - WS-COL-IDX, SQL-EMP-ID, WS-COL-LEN - MOVE 2 TO WS-COL-IDX - MOVE 256 TO WS-COL-LEN - CALL 'br_get_col' USING - WS-COL-IDX, SQL-LEAVE-TYPE, WS-COL-LEN - MOVE 3 TO WS-COL-IDX - MOVE 256 TO WS-COL-LEN - CALL 'br_get_col' USING - WS-COL-IDX, SQL-START-DATE, WS-COL-LEN - MOVE 4 TO WS-COL-IDX - MOVE 256 TO WS-COL-LEN - CALL 'br_get_col' USING - WS-COL-IDX, SQL-START-TIME, WS-COL-LEN - MOVE 5 TO WS-COL-IDX - MOVE 256 TO WS-COL-LEN - CALL 'br_get_col' USING - WS-COL-IDX, SQL-END-DATE, WS-COL-LEN - MOVE 6 TO WS-COL-IDX - MOVE 256 TO WS-COL-LEN - CALL 'br_get_col' USING - WS-COL-IDX, SQL-END-TIME, WS-COL-LEN - ADD 1 TO CUN-R01INN - ELSE - MOVE '1' TO WRK-R01EOF - END-IF. - * - 1100C1FETCHSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(1.3) * - * サブモジュール名: 休日カレンダー読込処理 * - * 処理概要 : HOLIDAY_CALENDARをWORKING-STORAGEに格納 * - ***************************************************************** - 1200HDINNSOR SECTION. - * - *** C2初回FETCH(SELECT INTO) - EXEC SQL - SELECT HOLIDAY_DATE - FROM HOLIDAY_CALENDAR - ORDER BY HOLIDAY_DATE - INTO :SQL-HD-DATE - END-EXEC. - * - *** 休日テーブルに全件読込 - PERFORM UNTIL SQLCODE NOT = 0 - ADD 1 TO WRK-HD-COUNT - MOVE SQL-HD-DATE TO WRK-HD-DATE(WRK-HD-COUNT) - CALL 'br_fetch_next' USING SQLCODE - IF SQLCODE = 0 - MOVE 0 TO WS-COL-IDX - MOVE 256 TO WS-COL-LEN - CALL 'br_get_col' USING - WS-COL-IDX, SQL-HD-DATE, WS-COL-LEN - END-IF - END-PERFORM. - * - 1200HDINNSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO: (2.0) * - * サブモジュール名: 主処理 * - * 処理概要 : キーブレイク(社員番号)毎の処理を行う * - ***************************************************************** - 2000MAJSOR SECTION. - * - *** 社員番号キー保存 - MOVE SQL-EMP-ID TO WRK-BFR-EMP-ID. - * - *** 1社員分処理(キーブレイク範囲) - PERFORM 2100-PROCESS-EMP - THRU 2100-PROCESS-EMP-EXIT. - * - 2000MAJSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO: (2.1) * - * サブモジュール名: 社員別処理 * - * 処理概要 : 1社員の全申請を処理(PERFORM THRU対象) * - ***************************************************************** - 2100-PROCESS-EMP SECTION. - * - MOVE ZERO TO CUN-EMP-SUB. - * - PERFORM UNTIL WRK-R01EOF = '1' - OR SQL-EMP-ID NOT = WRK-BFR-EMP-ID - PERFORM 2200-EXPAND-DATE - THRU 2200-EXPAND-DATE-EXIT - PERFORM 1100C1FETCHSOR - END-PERFORM. - * - *** 社員別小計出力(キーブレイク) - INITIALIZE M00MHOPAR. - MOVE CNS-MSGKEYINF TO M00MSGCOD. - MOVE WRK-BFR-EMP-ID TO M00UMKDATS22-01. - MOVE CUN-EMP-SUB TO M00UMKDATS22-02. - MOVE 'EMP SUB' TO M00UMKDATS22-03. - PERFORM 4000MSGOUTSOR. - * - 2100-PROCESS-EMP-EXIT. - EXIT. - ***************************************************************** - * サブモジュールNO: (2.2) * - * サブモジュール名: 日付展開処理 * - * 処理概要 : 開始日〜終了日をループ(PERFORM THRU対象) * - * 休日/週末を除外してLEAVE-DAILYを出力 * - ***************************************************************** - 2200-EXPAND-DATE SECTION. - * - MOVE SQL-START-DATE TO WRK-DATE-CURRENT. - MOVE SQL-END-DATE TO WRK-DATE-END. - * - PERFORM UNTIL WRK-DATE-CURRENT > WRK-DATE-END - COMPUTE WRK-DAY-OF-WEEK = - FUNCTION MOD( - FUNCTION INTEGER-OF-DATE(WRK-DATE-CURRENT), 7) - IF WRK-DAY-OF-WEEK = 0 - OR WRK-DAY-OF-WEEK = 6 - IF WRK-HD-COUNT > 0 - AND WRK-DATE-CURRENT NOT = ZERO - CONTINUE - ELSE - CONTINUE - END-IF - ELSE - *** 休日テーブル検索 - MOVE '0' TO WRK-HD-FOUND - IF WRK-HD-COUNT > 0 - SET WRK-HD-IDX TO 1 - SEARCH ALL WRK-HD-ENTRY - AT END - CONTINUE - WHEN WRK-HD-DATE(WRK-HD-IDX) - = WRK-DATE-CURRENT - MOVE '1' TO WRK-HD-FOUND - END-SEARCH - END-IF - IF WRK-HD-FOUND = '0' - INITIALIZE W01OUTREC - MOVE FUNCTION NUMVAL(SQL-APPL-ID) - TO W01APPL-ID - MOVE WRK-BFR-EMP-ID TO W01EMP-ID - MOVE SQL-LEAVE-TYPE TO W01LEAVE-TYPE - MOVE SQL-START-TIME TO W01START-TIME - MOVE SQL-END-TIME TO W01END-TIME - MOVE WRK-DATE-ALPHA - TO W01DATE - WRITE W01OUTREC - ADD 1 TO CUN-W01OUT - ADD 1 TO CUN-EMP-SUB - END-IF - END-IF - *** 日付加算 - PERFORM 2300-DATE-ADD-1 - END-PERFORM. - * - 2200-EXPAND-DATE-EXIT. - EXIT. - ***************************************************************** - * サブモジュールNO: (2.3) * - * サブモジュール名: 日付加算処理 * - * 処理概要 : 日付を1日進める(月/年跨ぎ対応) * - ***************************************************************** - 2300-DATE-ADD-1 SECTION. - * - ADD 1 TO WRK-DATE-DAY. - * - EVALUATE WRK-DATE-MONTH - WHEN 1 WHEN 3 WHEN 5 WHEN 7 - WHEN 8 WHEN 10 WHEN 12 - IF WRK-DATE-DAY > 31 - MOVE 1 TO WRK-DATE-DAY - ADD 1 TO WRK-DATE-MONTH - IF WRK-DATE-MONTH > 12 - MOVE 1 TO WRK-DATE-MONTH - ADD 1 TO WRK-DATE-YEAR - END-IF - END-IF - WHEN 4 WHEN 6 WHEN 9 WHEN 11 - IF WRK-DATE-DAY > 30 - MOVE 1 TO WRK-DATE-DAY - ADD 1 TO WRK-DATE-MONTH - END-IF - WHEN 2 - IF (FUNCTION MOD(WRK-DATE-YEAR, 400) = 0) - OR (FUNCTION MOD(WRK-DATE-YEAR, 4) = 0 - AND FUNCTION MOD(WRK-DATE-YEAR, 100) - NOT = 0) - IF WRK-DATE-DAY > 29 - MOVE 1 TO WRK-DATE-DAY - ADD 1 TO WRK-DATE-MONTH - END-IF - ELSE - IF WRK-DATE-DAY > 28 - MOVE 1 TO WRK-DATE-DAY - ADD 1 TO WRK-DATE-MONTH - END-IF - END-IF - END-EVALUATE. - * - 2300-DATE-ADD-1-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO: (3.0) * - * サブモジュール名: 終了処理 * - * 処理概要 : ファイルクローズ・件数出力 * - ***************************************************************** - 3000STPSOR SECTION. - * - *** 出力ファイルCLOSE - CLOSE W01OUTFIL. - * - *** 入力件数出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGIINKES TO M00MSGCOD. - MOVE 'LEAVE_RECORDS' TO M00UMKDATS22-01. - MOVE CUN-R01INN TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - *** 出力件数出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGOUTKES TO M00MSGCOD. - MOVE 'KIN02W01' TO M00UMKDATS22-01. - MOVE CUN-W01OUT TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - *** 休日テーブル件数出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGKEYINF TO M00MSGCOD. - MOVE 'HOLIDAYS LOADED' TO M00UMKDATS22-01. - MOVE WRK-HD-COUNT TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - *** 終了メッセージ出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGFIN TO M00MSGCOD. - PERFORM 4000MSGOUTSOR. - * - 3000STPSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO: (4.0) * - * サブモジュール名: メッセージ編集出力処理 * - * 処理概要 : メッセージ編集出力サブPGM呼出 * - ***************************************************************** - 4000MSGOUTSOR SECTION. - * - MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1). - MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1). - MOVE CNS-PRGIDX TO M00UMKDATS22-05. - CALL 'SUB02MSG' USING M00MHOPAR. - * - 4000MSGOUTSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(9.9) * - * サブモジュール名: ABEND処理 * - * 処理概要 : ABENDサブPGM呼出 * - ***************************************************************** - 9999ABDSOR SECTION. - * - MOVE CNS-ABD999 TO E01ABDCOD. - CALL 'SUB03END' USING E01ABDPAR. - * - 9999ABDSOR-EXT. - EXIT. diff --git a/src/KIN04CHK.cbl b/src/KIN04CHK.cbl deleted file mode 100644 index 1301120..0000000 --- a/src/KIN04CHK.cbl +++ /dev/null @@ -1,493 +0,0 @@ - IDENTIFICATION DIVISION. - PROGRAM-ID. KIN04CHK. - ***************************************************************** - * システム名 : 勤怠休暇管理システム * - * プログラムID : KIN04CHK * - * プログラム名 : 打刻項目チェック処理 * - * 作成日 : 2026-06-19 * - * 処理概要 : CSV形式の打刻データファイルを読み込み、 * - * IF多重ネスト(THEN句)で4段階チェックを実施、 * - * 正常はWRITE FROMでEDITED-PUNCHに出力、 * - * 異常はERROR-LOGに出力する。 * - ***************************************************************** - * 更新履歴 * - *---------------------------------------------------------------* - * 更新日付 担当者 更新内容 * - *---------------------------------------------------------------* - * 26-06-19 @@@ 新規作成 * - ***************************************************************** - ENVIRONMENT DIVISION. - CONFIGURATION SECTION. - SOURCE-COMPUTER. IBM-ZSERIES. - OBJECT-COMPUTER. IBM-ZSERIES. - * - INPUT-OUTPUT SECTION. - FILE-CONTROL. - SELECT R01INNFIL ASSIGN TO KIN04R01 - FILE STATUS IS WS-R01-STATUS. - SELECT W01OUTFIL ASSIGN TO KIN04W01 - FILE STATUS IS WS-W01-STATUS. - SELECT W02OUTFIL ASSIGN TO KIN04W02 - FILE STATUS IS WS-W02-STATUS. - * - DATA DIVISION. - FILE SECTION. - * - ***************************************************************** - * ##R01## * - ***************************************************************** - FD R01INNFIL - LABEL RECORD IS STANDARD - BLOCK CONTAINS 0 - RECORDING MODE IS F. - 01 R01INNREC. - 03 R01LINE PIC X(80). - * - ***************************************************************** - * ##W01## * - ***************************************************************** - FD W01OUTFIL - LABEL RECORD IS STANDARD - BLOCK CONTAINS 0 - RECORDING MODE IS F. - 01 W01OUTREC. - COPY KIN04REC REPLACING ==(A)== BY ==W01==. - * - ***************************************************************** - * ##W02## * - ***************************************************************** - FD W02OUTFIL - LABEL RECORD IS STANDARD - BLOCK CONTAINS 0 - RECORDING MODE IS V. - 01 W02OUTREC. - COPY KIN05REC REPLACING ==(A)== BY ==W02==. - * - WORKING-STORAGE SECTION. - * - ***************************************************************** - * コンスタント領域 * - ***************************************************************** - 01 CNSARA. - 03 CNS-PRGIDX PIC X(008) VALUE 'KIN04CHK'. - 03 CNS-MSGSTR PIC 9(003) VALUE 001. - 03 CNS-MSGFIN PIC 9(003) VALUE 002. - 03 CNS-MSGSUBEEK PIC 9(003) VALUE 005. - 03 CNS-MSGIINKES PIC 9(003) VALUE 006. - 03 CNS-MSGOUTKES PIC 9(003) VALUE 007. - 03 CNS-MSGKEYINF PIC 9(003) VALUE 033. - 03 CNS-KN0002 PIC 9(001) VALUE 2. - 03 CNS-ABD999 PIC 9(003) VALUE 999. - 03 CNS-ERR-PUNCH PIC 9(002) VALUE 02. - 03 CNS-FIELD-COUNT-6 PIC 9(002) VALUE 6. - * - ***************************************************************** - * カウンタ領域 * - ***************************************************************** - 01 CUNARA. - 03 CUN-R01INN PIC S9(009) COMP-3 - VALUE ZERO. - 03 CUN-W01OUT PIC S9(009) COMP-3 - VALUE ZERO. - 03 CUN-W02OUT PIC S9(009) COMP-3 - VALUE ZERO. - * - ***************************************************************** - * 作業領域 * - ***************************************************************** - 01 WRKARA. - *** ファイルステータス - 03 WS-R01-STATUS PIC X(002). - 03 WS-W01-STATUS PIC X(002). - 03 WS-W02-STATUS PIC X(002). - *** 読込フラグ - 03 WRK-R01EOF PIC X(001). - *** CSV分解用 - 03 WRK-COMMA-CNT PIC 9(002) COMP. - 03 WRK-CSV-EMP-ID PIC X(008). - 03 WRK-CSV-DATE PIC X(008). - 03 WRK-CSV-TIME-IN PIC X(004). - 03 WRK-CSV-TIME-OUT PIC X(004). - 03 WRK-CSV-DEPT-ID PIC X(004). - 03 WRK-CSV-TERMINAL PIC X(006). - *** 時刻数値変換用 - 03 WRK-TIME-IN-NUM PIC 9(004). - 03 WRK-TIME-OUT-NUM PIC 9(004). - *** DISPLAY変換用 - 03 WRK-COMMA-DISP PIC 9(002). - *** EMPIDチェック結果 - 03 WRK-EMPID-OK PIC X(001). - 88 WRK-EMPID-IS-OK VALUE '1'. - * - ***************************************************************** - * WRITE FROM用 出力レコード領域 * - ***************************************************************** - 01 WS-W01REC. - COPY KIN04REC REPLACING ==(A)== BY ==O1==. - * - ***************************************************************** - * サブプログラム連絡領域 * - ***************************************************************** - *** 運用日付取得 - COPY ZANDATAC. - *** メッセージ編集出力SR用 - COPY ZANMSGAC. - *** ABEND処理SR用 - COPY ZANENDAC. - *** 項目チェックSR用 - COPY ZANCHKAC. - * - PROCEDURE DIVISION. - ***************************************************************** - * サブモジュールNO: (0.0) * - * サブモジュール名: 制御処理 * - * 処理概要 : メインコントロール処理 * - ***************************************************************** - 0000MAJCOLSOR SECTION. - * - *** 初期処理 - PERFORM 1000ITTSOR. - * - *** メイン処理 - PERFORM 2000MAJSOR - UNTIL WRK-R01EOF = '1'. - * - *** 終了処理 - PERFORM 3000STPSOR. - * - 0000MAJCOLSOR-EXT. - GOBACK. - ***************************************************************** - * サブモジュールNO: (1.0) * - * サブモジュール名: 初期処理 * - * 処理概要 : 開始メッセージ出力・各種初期化処理 * - ***************************************************************** - 1000ITTSOR SECTION. - * - *** 開始メッセージ出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGSTR TO M00MSGCOD. - PERFORM 4000MSGOUTSOR. - * - *** コンパイル日時出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGKEYINF TO M00MSGCOD. - MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01. - MOVE 'COMPILED' TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - *** ワークエリア初期化 - INITIALIZE WRKARA. - * - *** 運用日付取得 - INITIALIZE D01UBSPAR. - CALL 'SUB01DAT' USING D01UBSPAR. - IF D01FKICOD = ZERO - CONTINUE - ELSE - INITIALIZE M00MHOPAR - MOVE CNS-MSGSUBEEK TO M00MSGCOD - MOVE 'SUB01DAT' TO M00UMKDATS22-01 - MOVE D01FKICOD TO M00UMKDATS22-02 - PERFORM 4000MSGOUTSOR - PERFORM 9999ABDSOR - END-IF. - * - *** 入出力ファイルOPEN - OPEN INPUT R01INNFIL - OUTPUT W01OUTFIL - W02OUTFIL. - * - *** OPENチェック - IF WS-R01-STATUS NOT = '00' - MOVE CNS-ABD999 TO E01ABDCOD - CALL 'SUB03END' USING E01ABDPAR - END-IF. - IF WS-W01-STATUS NOT = '00' - MOVE CNS-ABD999 TO E01ABDCOD - CALL 'SUB03END' USING E01ABDPAR - END-IF. - IF WS-W02-STATUS NOT = '00' - MOVE CNS-ABD999 TO E01ABDCOD - CALL 'SUB03END' USING E01ABDPAR - END-IF. - * - *** R01を読み込み - PERFORM 1100R01INNSOR. - * - 1000ITTSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(1.1) * - * サブモジュール名:R01読込処理 * - * 処理概要 : レコード読込・EOF判定処理 * - ***************************************************************** - 1100R01INNSOR SECTION. - * - READ R01INNFIL - AT END - MOVE '1' TO WRK-R01EOF - NOT AT END - ADD 1 TO CUN-R01INN - END-READ. - * - 1100R01INNSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(2.0) * - * サブモジュール名: 主処理 * - * 処理概要 : CSV分解・IF多重ネスト(THEN句)で4段階チェック * - ***************************************************************** - 2000MAJSOR SECTION. - * - *** CSV分解 - PERFORM 2010CSVSOR. - * - *** 社員番号チェック - PERFORM 2021EMPIDSOR. - * - *** 項目チェック(IF多重ネスト THEN句) - PERFORM 2020VALIDATESOR. - * - *** 次のレコード読込 - PERFORM 1100R01INNSOR. - * - 2000MAJSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(2.1) * - * サブモジュール名: CSV分解処理 * - * 処理概要 : UNSTRINGでCSVを6項目に分解する * - ***************************************************************** - 2010CSVSOR SECTION. - * - MOVE ZERO TO WRK-COMMA-CNT. - INITIALIZE WRK-CSV-EMP-ID - WRK-CSV-DATE - WRK-CSV-TIME-IN - WRK-CSV-TIME-OUT - WRK-CSV-DEPT-ID - WRK-CSV-TERMINAL. - UNSTRING R01INNREC - DELIMITED BY ',' - INTO WRK-CSV-EMP-ID - WRK-CSV-DATE - WRK-CSV-TIME-IN - WRK-CSV-TIME-OUT - WRK-CSV-DEPT-ID - WRK-CSV-TERMINAL - TALLYING IN WRK-COMMA-CNT - END-UNSTRING. - * - 2010CSVSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(2.1.5) * - * サブモジュール名: 社員番号チェック * - * 処理概要 : SUB04CHK EMPIDで社員番号の妥当性チェック * - ***************************************************************** - 2021EMPIDSOR SECTION. - * - MOVE '0' TO WRK-EMPID-OK. - IF WRK-COMMA-CNT = CNS-FIELD-COUNT-6 - INITIALIZE C01CHKPAR - MOVE WRK-CSV-EMP-ID TO C01CHKDAT - MOVE 'EMPID' TO C01CHKTYP - CALL 'SUB04CHK' USING C01CHKPAR - IF C01CHKRRC = ZERO - MOVE '1' TO WRK-EMPID-OK - END-IF - END-IF. - * - 2021EMPIDSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(2.2) * - * サブモジュール名: 項目チェック(IF多重ネスト THEN句) * - * 処理概要 : フィールド数→社員番号→日付→時刻→時刻順の * - * 4段階ネストチェックをTHEN句で記述 * - ***************************************************************** - 2020VALIDATESOR SECTION. - * - *** IF多重ネスト THEN句 (4段階) - *** 第1段階: フィールド数 + 社員番号必須 - IF WRK-COMMA-CNT = CNS-FIELD-COUNT-6 - AND WRK-EMPID-IS-OK - THEN - *** 第2段階: 日付チェック(SUB04CHK) - INITIALIZE C01CHKPAR - MOVE WRK-CSV-DATE TO C01CHKDAT - MOVE 'DATE' TO C01CHKTYP - CALL 'SUB04CHK' USING C01CHKPAR - IF C01CHKRRC = ZERO - THEN - *** 第3段階: 出勤時刻チェック(SUB04CHK) - INITIALIZE C01CHKPAR - MOVE WRK-CSV-TIME-IN TO C01CHKDAT - MOVE 'TIME' TO C01CHKTYP - CALL 'SUB04CHK' USING C01CHKPAR - IF C01CHKRRC = ZERO - THEN - *** 第3段階: 退勤時刻チェック(SUB04CHK) - INITIALIZE C01CHKPAR - MOVE WRK-CSV-TIME-OUT - TO C01CHKDAT - MOVE 'TIME' TO C01CHKTYP - CALL 'SUB04CHK' USING C01CHKPAR - IF C01CHKRRC = ZERO - THEN - *** 第4段階: 出勤<退勤チェック - MOVE WRK-CSV-TIME-IN - TO WRK-TIME-IN-NUM - MOVE WRK-CSV-TIME-OUT - TO WRK-TIME-OUT-NUM - IF WRK-TIME-IN-NUM - < WRK-TIME-OUT-NUM - THEN - PERFORM 2050NORMSOR - ELSE - PERFORM 2090ERRORSOR - END-IF - ELSE - PERFORM 2090ERRORSOR - END-IF - ELSE - PERFORM 2090ERRORSOR - END-IF - ELSE - PERFORM 2090ERRORSOR - END-IF - ELSE - PERFORM 2090ERRORSOR - END-IF. - * - 2020VALIDATESOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(2.5) * - * サブモジュール名: 正常出力処理 * - * 処理概要 : WRITE FROMでEDITED-PUNCHに出力 * - ***************************************************************** - 2050NORMSOR SECTION. - * - *** WORKING-STORAGEに編集 - MOVE WRK-CSV-EMP-ID TO O1EMP-ID. - MOVE WRK-CSV-DATE TO O1WORK-DATE. - MOVE WRK-CSV-TIME-IN TO O1STR-TIME. - MOVE WRK-CSV-TIME-OUT TO O1END-TIME. - MOVE WRK-CSV-DEPT-ID TO O1DEPT-ID. - MOVE WRK-CSV-TERMINAL TO O1TERMINAL. - *** WRITE FROM (新規カバレッジ) - WRITE W01OUTREC - FROM WS-W01REC. - ADD 1 TO CUN-W01OUT. - * - 2050NORMSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(2.9) * - * サブモジュール名: エラー処理 * - * 処理概要 : エラーレコードをW02(ERROR-LOG)に出力 * - ***************************************************************** - 2090ERRORSOR SECTION. - * - *** W02レコード初期化 - INITIALIZE W02OUTREC. - MOVE CNS-ERR-PUNCH TO W02ERR-CATEGORY. - * - *** エラー種別判定 - IF WRK-COMMA-CNT NOT = CNS-FIELD-COUNT-6 - MOVE WRK-COMMA-CNT TO WRK-COMMA-DISP - STRING - 'FIELD COUNT ERR CNT=' - WRK-COMMA-DISP - DELIMITED BY SIZE - INTO W02ERR-DETAIL - ELSE IF WRK-CSV-EMP-ID = SPACE - STRING - 'EMP-ID EMPTY' - DELIMITED BY SIZE - INTO W02ERR-DETAIL - ELSE - STRING - 'VALIDATION ERR EMP=' - WRK-CSV-EMP-ID - ' DATE=' - WRK-CSV-DATE - ' TI=' - WRK-CSV-TIME-IN - ' TO=' - WRK-CSV-TIME-OUT - DELIMITED BY SIZE - INTO W02ERR-DETAIL - END-IF. - * - WRITE W02OUTREC. - ADD 1 TO CUN-W02OUT. - * - 2090ERRORSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(3.0) * - * サブモジュール名: 終了処理 * - * 処理概要 : ファイルクローズ・件数と終了メッセージ出力 * - ***************************************************************** - 3000STPSOR SECTION. - * - *** 入出力ファイルCLOSE - CLOSE R01INNFIL - W01OUTFIL - W02OUTFIL. - * - *** 入出力ファイル件数出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGIINKES TO M00MSGCOD. - MOVE 'KIN04R01' TO M00UMKDATS22-01. - MOVE CUN-R01INN TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - INITIALIZE M00MHOPAR. - MOVE CNS-MSGOUTKES TO M00MSGCOD. - MOVE 'KIN04W01' TO M00UMKDATS22-01. - MOVE CUN-W01OUT TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - INITIALIZE M00MHOPAR. - MOVE CNS-MSGOUTKES TO M00MSGCOD. - MOVE 'KIN04W02' TO M00UMKDATS22-01. - MOVE CUN-W02OUT TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - *** 終了メッセージ出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGFIN TO M00MSGCOD. - PERFORM 4000MSGOUTSOR. - * - 3000STPSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(4.0) * - * サブモジュール名: メッセージ編集出力処理 * - * 処理概要 : メッセージ編集出力サブPGM呼出 * - ***************************************************************** - 4000MSGOUTSOR SECTION. - * - MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1). - MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1). - MOVE CNS-PRGIDX TO M00UMKDATS22-05. - CALL 'SUB02MSG' USING M00MHOPAR. - * - 4000MSGOUTSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(9.9) * - * サブモジュール名: ABEND処理 * - * 処理概要 : ABENDサブPGM呼出 * - ***************************************************************** - 9999ABDSOR SECTION. - * - MOVE CNS-ABD999 TO E01ABDCOD. - CALL 'SUB03END' USING E01ABDPAR. - * - 9999ABDSOR-EXT. - EXIT. diff --git a/src/KIN06CLD.cbl b/src/KIN06CLD.cbl deleted file mode 100644 index 5b34860..0000000 --- a/src/KIN06CLD.cbl +++ /dev/null @@ -1,449 +0,0 @@ - IDENTIFICATION DIVISION. - PROGRAM-ID. KIN06CLD. - ***************************************************************** - * システム名 : 勤怠休暇管理システム * - * プログラムID : KIN06CLD * - * プログラム名 : 出勤日カレンダー生成処理 * - * 作成日 : 2026-06-20 * - * 処理概要 : PARM指定年月の出勤日カレンダーを生成。 * - * 在籍社員×当月全日をループし、休日判定 * - * (SEARCH ALL + 曜日)を行い出勤日のみ出力。 * - ***************************************************************** - * 更新履歴 * - *---------------------------------------------------------------* - * 更新日付 担当者 更新内容 * - *---------------------------------------------------------------* - * 26-06-20 @@@ 新規作成 * - * 26-06-21 @@@ GnuCOBOL CONTINUE-in-ELSE-IF 回避 * - ***************************************************************** - ENVIRONMENT DIVISION. - CONFIGURATION SECTION. - SOURCE-COMPUTER. IBM-ZSERIES. - OBJECT-COMPUTER. IBM-ZSERIES. - * - INPUT-OUTPUT SECTION. - FILE-CONTROL. - SELECT OUTRECFIL ASSIGN TO "data\KIN06W01.DAT" - FILE STATUS IS WS-OUT-STATUS. - * - DATA DIVISION. - FILE SECTION. - * - ***************************************************************** - * ##OUTREC## WORK-DAY-FILE * - ***************************************************************** - FD OUTRECFIL - LABEL RECORD IS STANDARD - BLOCK CONTAINS 0 - RECORDING MODE IS F. - 01 OUTREC. - COPY KIN06REC REPLACING ==(A)== BY ==OUT==. - * - WORKING-STORAGE SECTION. - * - ***************************************************************** - * コンスタント領域 * - ***************************************************************** - 01 CNSARA. - 03 CNS-PRGIDX PIC X(008) VALUE 'KIN06CLD'. - 03 CNS-MSGSTR PIC 9(003) VALUE 001. - 03 CNS-MSGFIN PIC 9(003) VALUE 002. - 03 CNS-MSGOUTKES PIC 9(003) VALUE 007. - 03 CNS-MSGKEYINF PIC 9(003) VALUE 033. - 03 CNS-KN0002 PIC 9(001) VALUE 2. - 03 CNS-ABD999 PIC 9(003) VALUE 999. - * - ***************************************************************** - * 月日数テーブル * - ***************************************************************** - 01 MONTH-DAYS. - 03 FILLER PIC 9(002) VALUE 31. - 03 FILLER PIC 9(002) VALUE 28. - 03 FILLER PIC 9(002) VALUE 31. - 03 FILLER PIC 9(002) VALUE 30. - 03 FILLER PIC 9(002) VALUE 31. - 03 FILLER PIC 9(002) VALUE 30. - 03 FILLER PIC 9(002) VALUE 31. - 03 FILLER PIC 9(002) VALUE 31. - 03 FILLER PIC 9(002) VALUE 30. - 03 FILLER PIC 9(002) VALUE 31. - 03 FILLER PIC 9(002) VALUE 30. - 03 FILLER PIC 9(002) VALUE 31. - 01 MONTH-DAYS-R REDEFINES MONTH-DAYS. - 03 MONTH-DAY PIC 9(002) OCCURS 12. - * - ***************************************************************** - * 休日テーブル(SEARCH ALL用) * - ***************************************************************** - 01 HOLIDAY-TABLE. - 03 HOLIDAY-ENTRIES OCCURS 50 TIMES - ASCENDING KEY IS HOLIDAY-DATE-ENT - INDEXED BY HOLIDAY-IDX. - 05 HOLIDAY-DATE-ENT PIC X(008). - 03 HOLIDAY-COUNT PIC 9(002). - * - ***************************************************************** - * カウンタ領域 * - ***************************************************************** - 01 CUN-OUTREC PIC S9(009) COMP-3 VALUE ZERO. - * - ***************************************************************** - * 作業領域 * - ***************************************************************** - 01 WRKARA. - *** ファイルステータス - 03 WS-OUT-STATUS PIC X(002). - * PARM解析 - 03 WRK-CMDLINE PIC X(200). - 03 WRK-PARM-POS PIC 9(004). - 03 WRK-PARM-OK PIC X(001). - 88 WRK-PARM-FOUND VALUE '1'. - 03 WRK-PARM-CHECK PIC X(006). - 03 WRK-YEARMONTH PIC 9(006). - 03 WRK-YEAR PIC 9(004). - 03 WRK-MONTH PIC 9(002). - 03 WRK-LAST-DAY PIC 9(002). - * 日付ループ - 03 WRK-DAY PIC 9(002). - 03 WRK-DATE-INT PIC S9(009). - 03 WRK-DOW PIC 9(001). - 88 WRK-IS-SUNDAY VALUE 0. - 88 WRK-IS-SATURDAY VALUE 6. - 03 WRK-DATE-STR PIC 9(008). - 03 WRK-DATE-STR-X PIC X(008). - * 社員CURSOR - 03 WRK-EMP-EOF PIC X(001). - 88 WRK-EMP-EOF-Y VALUE '1'. - * 休日判定 - 03 WRK-HOLIDAY-FOUND PIC X(001). - 88 WRK-IS-HOLIDAY VALUE '1'. - * - ***************************************************************** - * DBホスト変数 * - ***************************************************************** - 01 HV-EMP-ID PIC X(008). - 01 HV-HOLIDAY-DATE PIC X(008). - * - ***************************************************************** - * サブプログラム連絡領域 * - ***************************************************************** - * メッセージ編集出力SR用 - COPY ZANMSGAC. - * ABEND処理SR用 - COPY ZANENDAC. - * - PROCEDURE DIVISION. - ***************************************************************** - * サブモジュールNO: (0.0) * - * サブモジュール名: 制御処理 * - * 処理概要 : メインコントロール処理 * - ***************************************************************** - 0000MAJCOLSOR SECTION. - * - PERFORM 1000ITTSOR. - PERFORM 2000MAJSOR - UNTIL WRK-EMP-EOF-Y. - PERFORM 3000STPSOR. - * - 0000MAJCOLSOR-EXT. - GOBACK. - ***************************************************************** - * サブモジュールNO: (1.0) * - * サブモジュール名: 初期処理 * - * 処理概要 : 開始メッセージ出力・PARM解析・DB接続・ * - * 休日読込・社員CURSOR OPEN * - ***************************************************************** - 1000ITTSOR SECTION. - * - * 開始メッセージ出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGSTR TO M00MSGCOD. - PERFORM 4000MSGOUTSOR. - * - * コンパイル日時出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGKEYINF TO M00MSGCOD. - MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01. - MOVE 'COMPILED' TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - * ワークエリア初期化 - INITIALIZE WRKARA - HOLIDAY-TABLE. - * - * PARM解析 - PERFORM 1100PARMSOR. - * - * DB接続(bridge直接→EXEC SQLはWAで追加変数生成) - CALL 'br_open' USING 'data/kin.db'. - * - * 休日データ読込(bridge直接→EXEC SQL変換回避) - PERFORM 1200HOLIDAYSOR. - * - * 出力ファイルOPEN - OPEN OUTPUT OUTRECFIL. - * - * OPENチェック - IF WS-OUT-STATUS NOT = '00' - MOVE CNS-ABD999 TO E01ABDCOD - CALL 'SUB03END' USING E01ABDPAR - END-IF. - * - * 社員CURSOR OPEN - PERFORM 1300EMPOPNSOR. - * - 1000ITTSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(1.1) * - * サブモジュール名: PARM解析 * - * 処理概要 : コマンドラインからYEARMONTH=を解析 * - ***************************************************************** - 1100PARMSOR SECTION. - * - INITIALIZE WRK-CMDLINE. - ACCEPT WRK-CMDLINE FROM COMMAND-LINE. - * - * YEARMONTH=を検索(PERFORM VARYINGでスキャン) - MOVE '0' TO WRK-PARM-OK. - MOVE 1 TO WRK-PARM-POS. - PERFORM UNTIL WRK-PARM-POS > 190 - IF WRK-CMDLINE(WRK-PARM-POS:10) = 'YEARMONTH=' - COMPUTE WRK-PARM-POS = - WRK-PARM-POS + 10 - MOVE WRK-CMDLINE(WRK-PARM-POS:6) - TO WRK-PARM-CHECK - MOVE WRK-PARM-CHECK TO WRK-YEARMONTH - IF WRK-YEARMONTH NUMERIC - MOVE WRK-YEARMONTH - TO WRK-PARM-CHECK - IF WRK-CMDLINE(WRK-PARM-POS:6) - = WRK-PARM-CHECK - MOVE '1' TO WRK-PARM-OK - END-IF - END-IF - EXIT PERFORM - END-IF - ADD 1 TO WRK-PARM-POS - END-PERFORM. - * - * PARM必須チェック - IF NOT WRK-PARM-FOUND - MOVE CNS-ABD999 TO E01ABDCOD - CALL 'SUB03END' USING E01ABDPAR - END-IF. - * - * 年・月分解 - MOVE WRK-YEARMONTH(1:4) TO WRK-YEAR. - MOVE WRK-YEARMONTH(5:2) TO WRK-MONTH. - * - * 月チェック(1-12) - IF WRK-MONTH < 1 OR WRK-MONTH > 12 - MOVE CNS-ABD999 TO E01ABDCOD - CALL 'SUB03END' USING E01ABDPAR - END-IF. - * - * 月の日数計算(閏年対応) - MOVE MONTH-DAY(WRK-MONTH) TO WRK-LAST-DAY. - * - * 閏年判定(2月のみ) - IF WRK-MONTH = 02 - IF (FUNCTION MOD(WRK-YEAR, 400) = 0) - OR (FUNCTION MOD(WRK-YEAR, 4) = 0 - AND FUNCTION MOD(WRK-YEAR, 100) NOT = 0) - MOVE 29 TO WRK-LAST-DAY - END-IF - END-IF. - * - 1100PARMSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(1.2) * - * サブモジュール名: 休日データ読込 * - * 処理概要 : HOLIDAY_CALENDARから全祝日をSELECT * - ***************************************************************** - 1200HOLIDAYSOR SECTION. - * - INITIALIZE HOLIDAY-TABLE. - * - * 休日SELECT(bridge直接) - >>SOURCE FORMAT IS FREE - STRING - 'SELECT HOLIDAY_DATE FROM HOLIDAY_CALENDAR ORDER BY HOLIDAY_DATE' - X"00" INTO WS-SQL-STR - END-STRING - >>SOURCE FORMAT IS FIXED - * - CALL 'br_query' USING WS-SQL-STR, SQLCODE. - * - * 1行目を格納 - IF SQLCODE = 0 - IF HOLIDAY-COUNT < 50 - ADD 1 TO HOLIDAY-COUNT - INITIALIZE HV-HOLIDAY-DATE - MOVE 0 TO WS-COL-IDX - MOVE 256 TO WS-COL-LEN - CALL 'br_get_col' USING - WS-COL-IDX, HV-HOLIDAY-DATE, WS-COL-LEN - MOVE HV-HOLIDAY-DATE TO - HOLIDAY-DATE-ENT(HOLIDAY-COUNT) - END-IF - END-IF. - * - * 続行をbr_fetch_next+br_get_colで読込 - PERFORM UNTIL SQLCODE NOT = 0 - CALL 'br_fetch_next' USING SQLCODE - IF SQLCODE = 0 - IF HOLIDAY-COUNT < 50 - ADD 1 TO HOLIDAY-COUNT - INITIALIZE HV-HOLIDAY-DATE - MOVE 0 TO WS-COL-IDX - MOVE 256 TO WS-COL-LEN - CALL 'br_get_col' USING - WS-COL-IDX, HV-HOLIDAY-DATE, WS-COL-LEN - MOVE HV-HOLIDAY-DATE TO - HOLIDAY-DATE-ENT(HOLIDAY-COUNT) - END-IF - END-IF - END-PERFORM. - * - 1200HOLIDAYSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(1.3) * - * サブモジュール名: 社員CURSOR OPEN * - * 処理概要 : EMP_MASTERから在籍社員一覧を取得 * - ***************************************************************** - 1300EMPOPNSOR SECTION. - * - EXEC SQL - SELECT EMP_ID - FROM EMP_MASTER - WHERE STATUS = '1' - ORDER BY EMP_ID - INTO :HV-EMP-ID - END-EXEC. - * - IF SQLCODE NOT = 0 - MOVE '1' TO WRK-EMP-EOF - END-IF. - * - 1300EMPOPNSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(2.0) * - * サブモジュール名: 主処理(社員ループ) * - * 処理概要 : 各社員について当月1日〜月末日をループ * - ***************************************************************** - 2000MAJSOR SECTION. - * - * 当月1日〜月末日をループ - MOVE 1 TO WRK-DAY. - PERFORM UNTIL WRK-DAY > WRK-LAST-DAY - * - * 日付文字列構築(COMPUTE演算→参照変更バグ回避) - COMPUTE WRK-DATE-STR = WRK-YEAR * 10000 - + WRK-MONTH * 100 + WRK-DAY - MOVE WRK-DATE-STR TO WRK-DATE-STR-X - * - * 曜日計算 - COMPUTE WRK-DATE-INT = - FUNCTION INTEGER-OF-DATE(WRK-DATE-STR) - COMPUTE WRK-DOW = - FUNCTION MOD(WRK-DATE-INT, 7) - * - * 休日判定(部分埋め→PERFORM VARYING) - MOVE '0' TO WRK-HOLIDAY-FOUND - PERFORM VARYING WS-COL-IDX FROM 1 BY 1 - UNTIL WS-COL-IDX > HOLIDAY-COUNT - IF HOLIDAY-DATE-ENT(WS-COL-IDX) = WRK-DATE-STR-X - MOVE '1' TO WRK-HOLIDAY-FOUND - END-IF - END-PERFORM - * - * 出勤日のみ出力(単一IF+ORで記述→GnuCOBOL対策) - IF WRK-IS-HOLIDAY OR WRK-IS-SUNDAY - OR WRK-IS-SATURDAY - CONTINUE - ELSE - INITIALIZE OUTREC - MOVE HV-EMP-ID TO OUTEMP-ID - MOVE WRK-DATE-STR TO OUTDATE - * MOD(7):0=日…6=土 → 1=月…7=日に変換 - IF WRK-DOW = 0 - MOVE 7 TO OUTDAY-OF-WEEK - ELSE - MOVE WRK-DOW TO OUTDAY-OF-WEEK - END-IF - WRITE OUTREC - ADD 1 TO CUN-OUTREC - END-IF - * - ADD 1 TO WRK-DAY - END-PERFORM. - * - * 次の社員をFETCH(br_fetch_next+br_get_col) - CALL 'br_fetch_next' USING SQLCODE. - * - IF SQLCODE = 0 - INITIALIZE HV-EMP-ID - MOVE 0 TO WS-COL-IDX - MOVE 256 TO WS-COL-LEN - CALL 'br_get_col' USING - WS-COL-IDX, HV-EMP-ID, WS-COL-LEN - ELSE - MOVE '1' TO WRK-EMP-EOF - END-IF. - * - 2000MAJSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(3.0) * - * サブモジュール名: 終了処理 * - * 処理概要 : ファイルCLOSE・件数出力 * - ***************************************************************** - 3000STPSOR SECTION. - * - * 出力ファイルCLOSE - CLOSE OUTRECFIL. - * - * 出力件数メッセージ - INITIALIZE M00MHOPAR. - MOVE CNS-MSGOUTKES TO M00MSGCOD. - MOVE 'KIN06W01' TO M00UMKDATS22-01. - MOVE CUN-OUTREC TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - * 終了メッセージ出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGFIN TO M00MSGCOD. - PERFORM 4000MSGOUTSOR. - * - 3000STPSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(4.0) * - * サブモジュール名: メッセージ編集出力処理 * - * 処理概要 : メッセージ編集出力サブPGM呼出 * - ***************************************************************** - 4000MSGOUTSOR SECTION. - * - MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1). - MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1). - MOVE CNS-PRGIDX TO M00UMKDATS22-05. - CALL 'SUB02MSG' USING M00MHOPAR. - * - 4000MSGOUTSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(9.9) * - * サブモジュール名: ABEND処理 * - * 処理概要 : 異常終了処理 * - ***************************************************************** - 9999ABDSOR SECTION. - * - MOVE CNS-ABD999 TO E01ABDCOD. - CALL 'SUB03END' USING E01ABDPAR. - * - 9999ABDSOR-EXT. - EXIT. diff --git a/src/KIN07DAI.cbl b/src/KIN07DAI.cbl deleted file mode 100644 index 9abc59b..0000000 --- a/src/KIN07DAI.cbl +++ /dev/null @@ -1,635 +0,0 @@ - IDENTIFICATION DIVISION. - PROGRAM-ID. KIN07DAI. - ***************************************************************** - * システム名 : 勤怠休暇管理システム * - * プログラムID : KIN07DAI * - * プログラム名 : 日別勤怠計算処理 * - * 作成日 : 2026-06-23 * - * 処理概要 : WORK-DAY-FILE(R01)を主駆動にKIN-LEAVE(R02) * - * とLEAVE-DAILY(R03)を社員番号+日付キーで * - * 照合し、4パターン(EVALUATE)で * - * 日別勤怠記録(DAILY-RECORD)を出力する。 * - * 休暇時間はランチ除外+0.1h切上丸め。 * - * MULTIPLY/SUBTRACTで時間計算。 * - ***************************************************************** - * 更新履歴 * - *---------------------------------------------------------------* - * 更新日付 担当者 更新内容 * - *---------------------------------------------------------------* - * 26-06-23 @@@ 新規作成 * - * * - ***************************************************************** - ENVIRONMENT DIVISION. - CONFIGURATION SECTION. - SOURCE-COMPUTER. IBM-ZSERIES. - OBJECT-COMPUTER. IBM-ZSERIES. - * - INPUT-OUTPUT SECTION. - FILE-CONTROL. - SELECT R01INNFIL ASSIGN TO KIN07R01 - FILE STATUS IS WS-R01-STATUS. - SELECT R02INNFIL ASSIGN TO KIN07R02 - FILE STATUS IS WS-R02-STATUS. - SELECT R03INNFIL ASSIGN TO KIN07R03 - FILE STATUS IS WS-R03-STATUS. - SELECT W01OUTFIL ASSIGN TO KIN07W01 - FILE STATUS IS WS-W01-STATUS. - * - DATA DIVISION. - FILE SECTION. - * - ***************************************************************** - * ##R01## WORK-DAY-FILE * - ***************************************************************** - FD R01INNFIL - LABEL RECORD IS STANDARD - BLOCK CONTAINS 0 - RECORDING MODE IS F. - 01 R01INNREC. - COPY KIN06REC REPLACING ==(A)== BY ==SW==. - * - ***************************************************************** - * ##R02## KIN-LEAVE * - ***************************************************************** - FD R02INNFIL - LABEL RECORD IS STANDARD - BLOCK CONTAINS 0 - RECORDING MODE IS F. - 01 R02INNREC. - COPY KIN03REC REPLACING ==(A)== BY ==SR==. - * - ***************************************************************** - * ##R03## LEAVE-DAILY * - ***************************************************************** - FD R03INNFIL - LABEL RECORD IS STANDARD - BLOCK CONTAINS 0 - RECORDING MODE IS F. - 01 R03INNREC. - COPY KIN02REC REPLACING ==(A)== BY ==SL==. - * - ***************************************************************** - * ##W01## DAILY-RECORD * - ***************************************************************** - FD W01OUTFIL - LABEL RECORD IS STANDARD - BLOCK CONTAINS 0 - RECORDING MODE IS F. - 01 W01OUTREC. - COPY KIN07REC REPLACING ==(A)== BY ==SD==. - * - ***************************************************************** - WORKING-STORAGE SECTION. - * - ***************************************************************** - * コンスタント領域 * - ***************************************************************** - 01 CNSARA. - 03 CNS-PRGIDX PIC X(008) VALUE 'KIN07DAI'. - 03 CNS-MSGSTR PIC 9(003) VALUE 001. - 03 CNS-MSGFIN PIC 9(003) VALUE 002. - 03 CNS-MSGIINKES PIC 9(003) VALUE 006. - 03 CNS-MSGOUTKES PIC 9(003) VALUE 007. - 03 CNS-MSGKEYINF PIC 9(003) VALUE 033. - 03 CNS-KN0002 PIC 9(001) VALUE 2. - 03 CNS-ABD999 PIC 9(003) VALUE 999. - *** 休暇種別定数 - 03 CNS-LEAVE-01 PIC X(002) VALUE '01'. - 03 CNS-LEAVE-02 PIC X(002) VALUE '02'. - 03 CNS-LEAVE-03 PIC X(002) VALUE '03'. - 03 CNS-LEAVE-04 PIC X(002) VALUE '04'. - *** 時刻定数 - 03 CNS-TIME-ZERO PIC 9(004) VALUE 0000. - *** 時間定数(分) - 03 CNS-LUNCH-START-MIN PIC 9(004) VALUE 0720. - 03 CNS-LUNCH-END-MIN PIC 9(004) VALUE 0780. - 03 CNS-DAILY-HOURS PIC 9(004)V9(001) VALUE 8.0. - 03 CNS-MINUTES-PER-HOUR PIC 9(003) VALUE 060. - 03 CNS-RND-MODE-UP PIC 9(004) VALUE 1. - * - ***************************************************************** - * カウンタ領域 * - ***************************************************************** - 01 CUNARA. - 03 CUN-R01INN PIC S9(009) COMP-3 - VALUE ZERO. - 03 CUN-R02INN PIC S9(009) COMP-3 - VALUE ZERO. - 03 CUN-R03INN PIC S9(009) COMP-3 - VALUE ZERO. - 03 CUN-W01OUT PIC S9(009) COMP-3 - VALUE ZERO. - * - ***************************************************************** - * 作業領域 * - ***************************************************************** - 01 WRKARA. - *** ファイルステータス - 03 WS-R01-STATUS PIC X(002). - 03 WS-R02-STATUS PIC X(002). - 03 WS-R03-STATUS PIC X(002). - 03 WS-W01-STATUS PIC X(002). - *** 読込フラグ - 03 WRK-R01EOF PIC X(001). - 88 WRK-R01-EOF VALUE '1'. - 03 WRK-R02EOF PIC X(001). - 88 WRK-R02-EOF VALUE '1'. - 03 WRK-R03EOF PIC X(001). - 88 WRK-R03-EOF VALUE '1'. - *** マッチングキー領域 - 03 WRK-R01KEY. - 05 WRK-R01K-EMP-ID PIC X(008). - 05 WRK-R01K-DATE PIC 9(008). - 03 WRK-R02KEY. - 05 WRK-R02K-EMP-ID PIC X(008). - 05 WRK-R02K-DATE PIC 9(008). - 03 WRK-R03KEY. - 05 WRK-R03K-EMP-ID PIC X(008). - 05 WRK-R03K-DATE PIC 9(008). - *** パターン番号 - 03 PATTERN-NUM PIC 9(001). - 88 PATTERN-A VALUE 1. - 88 PATTERN-B VALUE 2. - 88 PATTERN-C VALUE 3. - 88 PATTERN-D VALUE 4. - *** 出力編集領域 - 03 WRK-TIME-IN PIC 9(004). - 03 WRK-TIME-OUT PIC 9(004). - 03 WRK-ABSENT-H PIC 9(004)V9(001). - *** 休暇時間積算領域 - 03 WRK-ANNUAL-H PIC 9(004)V9(001). - 03 WRK-PERSONAL-H PIC 9(004)V9(001). - 03 WRK-OFFICIAL-H PIC 9(004)V9(001). - 03 WRK-SICK-H PIC 9(004)V9(001). - *** 時間計算領域(MULTIPLY/SUBTRACT使用) - 03 WRK-START-HOUR PIC 9(002). - 03 WRK-START-MIN PIC 9(002). - 03 WRK-END-HOUR PIC 9(002). - 03 WRK-END-MIN PIC 9(002). - 03 WRK-START-MIN-TOTAL PIC 9(004). - 03 WRK-END-MIN-TOTAL PIC 9(004). - 03 WRK-TOTAL-MIN PIC 9(004). - 03 WRK-LUNCH-OVERLAP PIC 9(004). - 03 WRK-LEAVE-HOURS PIC 9(004)V9(001). - * - ***************************************************************** - * サブプログラム連絡領域 * - ***************************************************************** - *** メッセージ編集出力SR用 - COPY ZANMSGAC. - *** ABEND処理SR用 - COPY ZANENDAC. - *** 時刻丸め計算SR用 - COPY ZANTIMAC. - * - PROCEDURE DIVISION. - ***************************************************************** - * サブモジュールNO: (0.0) * - * サブモジュール名: 制御処理 * - * 処理概要 : メインコントロール処理 * - ***************************************************************** - 0000MAJCOLSOR SECTION. - * - *** 初期処理 - PERFORM 1000ITTSOR. - * - *** 主処理 - PERFORM 2000MAJSOR - UNTIL WRK-R01-EOF. - * - *** 終了処理 - PERFORM 3000STPSOR. - * - 0000MAJCOLSOR-EXT. - GOBACK. - ***************************************************************** - * サブモジュールNO: (1.0) * - * サブモジュール名: 初期処理 * - * 処理概要 : 開始メッセージ出力・各種初期化処理 * - ***************************************************************** - 1000ITTSOR SECTION. - * - *** 開始メッセージ出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGSTR TO M00MSGCOD. - PERFORM 4000MSGOUTSOR. - * - *** コンパイル日時出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGKEYINF TO M00MSGCOD. - MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01. - MOVE 'COMPILED' TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - *** ワークエリア初期化 - INITIALIZE WRKARA. - * - *** 入出力ファイルOPEN - OPEN INPUT R01INNFIL - R02INNFIL - R03INNFIL - OUTPUT W01OUTFIL. - * - *** OPENチェック - IF WS-R01-STATUS NOT = '00' - MOVE CNS-ABD999 TO E01ABDCOD - CALL 'SUB03END' USING E01ABDPAR - END-IF. - IF WS-R02-STATUS NOT = '00' - MOVE CNS-ABD999 TO E01ABDCOD - CALL 'SUB03END' USING E01ABDPAR - END-IF. - IF WS-R03-STATUS NOT = '00' - MOVE CNS-ABD999 TO E01ABDCOD - CALL 'SUB03END' USING E01ABDPAR - END-IF. - IF WS-W01-STATUS NOT = '00' - MOVE CNS-ABD999 TO E01ABDCOD - CALL 'SUB03END' USING E01ABDPAR - END-IF. - * - *** R01/R02/R03初回読込 - PERFORM 1100R01INNSOR. - PERFORM 1200R02INNSOR. - PERFORM 1300R03INNSOR. - * - 1000ITTSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(1.1) * - * サブモジュール名:R01読込処理 * - * 処理概要 : WORK-DAY-FILE読込・EOF判定 * - ***************************************************************** - 1100R01INNSOR SECTION. - * - READ R01INNFIL - AT END - MOVE '1' TO WRK-R01EOF - NOT AT END - ADD 1 TO CUN-R01INN - END-READ. - * - 1100R01INNSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(1.2) * - * サブモジュール名:R02読込処理 * - * 処理概要 : KIN-LEAVE読込・EOF判定 * - ***************************************************************** - 1200R02INNSOR SECTION. - * - READ R02INNFIL - AT END - MOVE '1' TO WRK-R02EOF - NOT AT END - ADD 1 TO CUN-R02INN - END-READ. - * - 1200R02INNSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(1.3) * - * サブモジュール名:R03読込処理 * - * 処理概要 : LEAVE-DAILY読込・EOF判定 * - ***************************************************************** - 1300R03INNSOR SECTION. - * - READ R03INNFIL - AT END - MOVE '1' TO WRK-R03EOF - NOT AT END - ADD 1 TO CUN-R03INN - END-READ. - * - 1300R03INNSOR-EXT. - EXIT. - ***************************************************************** - * サブプログラムNO:(2.0) * - * サブプログラム名:主処理 * - * 処理概要 : R01駆動でR02/R03照合、4パターン分岐 * - ***************************************************************** - 2000MAJSOR SECTION. - * - *** R01キー設定 - MOVE SWEMP-ID TO WRK-R01K-EMP-ID. - MOVE SWDATE TO WRK-R01K-DATE. - * - *** パターン・積算領域初期化 - MOVE 4 TO PATTERN-NUM. - MOVE ZERO TO WRK-TIME-IN - WRK-TIME-OUT - WRK-ANNUAL-H - WRK-PERSONAL-H - WRK-OFFICIAL-H - WRK-SICK-H - WRK-ABSENT-H. - * - *** R02: 追越レコードをスキップ - PERFORM UNTIL WRK-R02-EOF - MOVE SREMP-ID TO WRK-R02K-EMP-ID - MOVE SRWORK-DATE TO WRK-R02K-DATE - IF WRK-R02KEY >= WRK-R01KEY - EXIT PERFORM - END-IF - PERFORM 1200R02INNSOR - END-PERFORM. - * - *** R02マッチ判定 - IF NOT WRK-R02-EOF - AND WRK-R01KEY = WRK-R02KEY - MOVE SRSTR-TIME TO WRK-TIME-IN - MOVE SREND-TIME TO WRK-TIME-OUT - MOVE 2 TO PATTERN-NUM - PERFORM 1200R02INNSOR - END-IF. - * - *** R03: 追越レコードをスキップ - PERFORM UNTIL WRK-R03-EOF - MOVE SLEMP-ID TO WRK-R03K-EMP-ID - MOVE SLDATE TO WRK-R03K-DATE - IF WRK-R03KEY >= WRK-R01KEY - EXIT PERFORM - END-IF - PERFORM 1300R03INNSOR - END-PERFORM. - * - *** R03マッチループ(0〜N件の全休暇を処理) - IF NOT WRK-R03-EOF - AND WRK-R01KEY = WRK-R03KEY - PERFORM UNTIL WRK-R03-EOF - OR WRK-R01KEY NOT = WRK-R03KEY - PERFORM 5000CALCLVSOR - EVALUATE SLLEAVE-TYPE - WHEN CNS-LEAVE-01 - ADD WRK-LEAVE-HOURS TO WRK-ANNUAL-H - WHEN CNS-LEAVE-02 - ADD WRK-LEAVE-HOURS TO WRK-PERSONAL-H - WHEN CNS-LEAVE-03 - ADD WRK-LEAVE-HOURS TO WRK-OFFICIAL-H - WHEN CNS-LEAVE-04 - ADD WRK-LEAVE-HOURS TO WRK-SICK-H - WHEN OTHER - CONTINUE - END-EVALUATE - PERFORM 1300R03INNSOR - IF NOT WRK-R03-EOF - MOVE SLEMP-ID TO WRK-R03K-EMP-ID - MOVE SLDATE TO WRK-R03K-DATE - END-IF - END-PERFORM - IF PATTERN-NUM = 2 - MOVE 1 TO PATTERN-NUM - ELSE - MOVE 3 TO PATTERN-NUM - END-IF - END-IF. - * - *** EVALUATE 4パターン分岐 - EVALUATE TRUE - WHEN PATTERN-A - PERFORM 6100PATTERNASOR - WHEN PATTERN-B - PERFORM 6200PATTERNSOR - WHEN PATTERN-C - PERFORM 6300PATTERNSOR - WHEN PATTERN-D - PERFORM 6400PATTERNSOR - END-EVALUATE. - * - 2000MAJSOR-EXT. - EXIT. - ***************************************************************** - * サブプログラムNO:(5.0) * - * サブプログラム名:休暇時間計算 * - * 処理概要 : R03レコードの開始/終了時刻から * - * ランチ除外+MULTIPLY/SUBTRACT計算し、 * - * SUB05TIM(0.1h切上)で丸める * - ***************************************************************** - 5000CALCLVSOR SECTION. - * - *** 開始時刻を時と分に分解 - DIVIDE SLSTART-TIME BY 100 - GIVING WRK-START-HOUR - REMAINDER WRK-START-MIN. - *** 終了時刻を時と分に分解 - DIVIDE SLEND-TIME BY 100 - GIVING WRK-END-HOUR - REMAINDER WRK-END-MIN. - * - *** MULTIPLY: 時→分変換 - MULTIPLY WRK-START-HOUR BY CNS-MINUTES-PER-HOUR - GIVING WRK-START-MIN-TOTAL. - ADD WRK-START-MIN TO WRK-START-MIN-TOTAL. - * - MULTIPLY WRK-END-HOUR BY CNS-MINUTES-PER-HOUR - GIVING WRK-END-MIN-TOTAL. - ADD WRK-END-MIN TO WRK-END-MIN-TOTAL. - * - *** 総分数算出 - COMPUTE WRK-TOTAL-MIN = - WRK-END-MIN-TOTAL - WRK-START-MIN-TOTAL. - * - *** ランチ除外判定 (12:00-13:00 = 720-780分) - MOVE ZERO TO WRK-LUNCH-OVERLAP. - IF WRK-END-MIN-TOTAL > CNS-LUNCH-START-MIN - AND WRK-START-MIN-TOTAL < CNS-LUNCH-END-MIN - COMPUTE WRK-LUNCH-OVERLAP = - FUNCTION MIN(WRK-END-MIN-TOTAL, - CNS-LUNCH-END-MIN) - - FUNCTION MAX(WRK-START-MIN-TOTAL, - CNS-LUNCH-START-MIN) - END-IF. - * - *** SUBTRACT: ランチ時間除外 - SUBTRACT WRK-LUNCH-OVERLAP - FROM WRK-TOTAL-MIN. - * - *** 時間(小数)に変換 - COMPUTE WRK-LEAVE-HOURS = WRK-TOTAL-MIN - / CNS-MINUTES-PER-HOUR. - * - *** SUB05TIM呼出(0.1h切上) - MOVE WRK-LEAVE-HOURS TO T01TIMHRS. - MOVE CNS-RND-MODE-UP TO T01TIMRRC. - CALL 'SUB05TIM' USING T01TIMPAR. - * - *** 丸め結果を退避 - MOVE T01TIMOUT TO WRK-LEAVE-HOURS. - * - 5000CALCLVSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(6.1) * - * サブモジュール名:パターンA(打刻+休暇)出力 * - * 処理概要 : 打刻情報+R03休暇時間を出力 * - ***************************************************************** - 6100PATTERNASOR SECTION. - * - PERFORM 7000W01OUTSOR. - * - *** 次R01読込(R02/R03は処理済み) - PERFORM 1100R01INNSOR. - * - 6100PATTERNASOR-EXT. - EXIT. - ***************************************************************** - * サブプログラムNO:(6.2) * - * サブプログラム名:パターンB(打刻のみ)出力 * - * 処理概要 : 打刻情報のみ出力(休暇=0) * - ***************************************************************** - 6200PATTERNSOR SECTION. - * - *** 休暇/欠勤はゼロのまま - PERFORM 7000W01OUTSOR. - * - *** 次R01/R02読込 - PERFORM 1100R01INNSOR. - * - 6200PATTERNSOR-EXT. - EXIT. - ***************************************************************** - * サブプログラムNO:(6.3) * - * サブプログラム名:パターンC(休暇のみ)出力 * - * 処理概要 : 打刻なし、R03休暇時間を出力(8h上限) * - ***************************************************************** - 6300PATTERNSOR SECTION. - * - *** 打刻なし - MOVE CNS-TIME-ZERO TO WRK-TIME-IN - WRK-TIME-OUT. - * - *** 休暇時間上限チェック(所定労働時間8h) - IF WRK-ANNUAL-H > CNS-DAILY-HOURS - MOVE CNS-DAILY-HOURS TO WRK-ANNUAL-H - END-IF. - IF WRK-PERSONAL-H > CNS-DAILY-HOURS - MOVE CNS-DAILY-HOURS TO WRK-PERSONAL-H - END-IF. - IF WRK-OFFICIAL-H > CNS-DAILY-HOURS - MOVE CNS-DAILY-HOURS TO WRK-OFFICIAL-H - END-IF. - IF WRK-SICK-H > CNS-DAILY-HOURS - MOVE CNS-DAILY-HOURS TO WRK-SICK-H - END-IF. - * - PERFORM 7000W01OUTSOR. - * - *** 次R01/R03読込 - PERFORM 1100R01INNSOR. - * - 6300PATTERNSOR-EXT. - EXIT. - ***************************************************************** - * サブプログラムNO:(6.4) * - * サブプログラム名:パターンD(欠勤)出力 * - * 処理概要 : 打刻なし、休暇なし、未申請欠勤=8.0h * - ***************************************************************** - 6400PATTERNSOR SECTION. - * - *** 打刻なし - MOVE CNS-TIME-ZERO TO WRK-TIME-IN - WRK-TIME-OUT. - *** 未申請欠勤=8.0h - MOVE CNS-DAILY-HOURS TO WRK-ABSENT-H. - * - PERFORM 7000W01OUTSOR. - * - *** 次R01読込(R02/R03は次R01次第) - PERFORM 1100R01INNSOR. - * - 6400PATTERNSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(7.0) * - * サブモジュール名:DAILY-RECORD出力 * - * 処理概要 : W01(DAILY-RECORD)に編集出力 * - ***************************************************************** - 7000W01OUTSOR SECTION. - * - MOVE SWEMP-ID TO SDEMP-ID. - MOVE SWDATE TO SDDATE. - MOVE WRK-TIME-IN TO SDTIME-IN. - MOVE WRK-TIME-OUT TO SDTIME-OUT. - MOVE WRK-ANNUAL-H TO SDANNUAL-H. - MOVE WRK-PERSONAL-H TO SDPERSONAL-H. - MOVE WRK-OFFICIAL-H TO SDOFFICIAL-H. - MOVE WRK-SICK-H TO SDSICK-H. - MOVE WRK-ABSENT-H TO SDABSENT-H. - * - WRITE W01OUTREC. - ADD 1 TO CUN-W01OUT. - * - 7000W01OUTSOR-EXT. - EXIT. - ***************************************************************** - * サブモジュールNO:(3.0) * - * サブモジュール名:終了処理 * - * 処理概要 : ファイルクローズ・件数と終了メッセージ出力 * - ***************************************************************** - 3000STPSOR SECTION. - * - *** 入出力ファイルCLOSE - CLOSE R01INNFIL - R02INNFIL - R03INNFIL - W01OUTFIL. - * - *** 入出力ファイル件数出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGIINKES TO M00MSGCOD. - MOVE 'KIN07R01' TO M00UMKDATS22-01. - MOVE CUN-R01INN TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - INITIALIZE M00MHOPAR. - MOVE CNS-MSGIINKES TO M00MSGCOD. - MOVE 'KIN07R02' TO M00UMKDATS22-01. - MOVE CUN-R02INN TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - INITIALIZE M00MHOPAR. - MOVE CNS-MSGIINKES TO M00MSGCOD. - MOVE 'KIN07R03' TO M00UMKDATS22-01. - MOVE CUN-R03INN TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - INITIALIZE M00MHOPAR. - MOVE CNS-MSGOUTKES TO M00MSGCOD. - MOVE 'KIN07W01' TO M00UMKDATS22-01. - MOVE CUN-W01OUT TO M00UMKDATS22-02. - PERFORM 4000MSGOUTSOR. - * - * - *** 終了メッセージ出力 - INITIALIZE M00MHOPAR. - MOVE CNS-MSGFIN TO M00MSGCOD. - PERFORM 4000MSGOUTSOR. - * - 3000STPSOR-EXT. - EXIT. - ***************************************************************** - * サブプログラムNO:(4.0) * - * サブプログラム名:メッセージ編集出力処理 * - * 処理概要 : メッセージ編集出力サブPGM呼出 * - ***************************************************************** - 4000MSGOUTSOR SECTION. - * - MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1). - MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1). - MOVE CNS-PRGIDX TO M00UMKDATS22-05. - CALL 'SUB02MSG' USING M00MHOPAR. - * - 4000MSGOUTSOR-EXT. - EXIT. - ***************************************************************** - * サブプログラムNO:(9.9) * - * サブプログラム名:ABEND処理 * - * 処理概要 : ABENDサブPGM呼出 * - ***************************************************************** - 9999ABDSOR SECTION. - * - MOVE CNS-ABD999 TO E01ABDCOD. - CALL 'SUB03END' USING E01ABDPAR. - * - 9999ABDSOR-EXT. - EXIT.