commit 9813dd77725bf3749f544a126148a33865a0d8ca Author: qiuqiuqiu Date: Mon Jun 15 08:12:54 2026 +0800 Initial import: 子系统B 前三本程序 production 资源 diff --git a/cpy/ZAN01REC.cpy b/cpy/ZAN01REC.cpy new file mode 100644 index 0000000..18e3282 --- /dev/null +++ b/cpy/ZAN01REC.cpy @@ -0,0 +1,11 @@ + * + * 加班申請レコード 80B + * + 03 (A)APPL-ID PIC X(008). + 03 (A)EMP-ID PIC 9(008). + 03 (A)APPL-DATE PIC 9(008). + 03 (A)START-TIME PIC 9(004). + 03 (A)END-TIME PIC 9(004). + 03 (A)STATUS PIC X(001). + 03 (A)OVT-TYPE PIC X(001). + 03 (A)FILLER PIC X(046). diff --git a/cpy/ZAN02REC.cpy b/cpy/ZAN02REC.cpy new file mode 100644 index 0000000..7cca953 --- /dev/null +++ b/cpy/ZAN02REC.cpy @@ -0,0 +1,12 @@ + * + * マッチング結果レコード 80B + * + 03 (A)APPL-ID PIC X(008). + 03 (A)EMP-ID PIC 9(008). + 03 (A)APPL-DATE PIC 9(008). + 03 (A)START-TIME PIC 9(004). + 03 (A)END-TIME PIC 9(004). + 03 (A)STATUS PIC X(001). + 03 (A)OVT-TYPE PIC X(001). + 03 (A)PROC-SEQ PIC 9(002). + 03 (A)FILLER PIC X(044). diff --git a/cpy/ZAN03REC.cpy b/cpy/ZAN03REC.cpy new file mode 100644 index 0000000..4febbd4 --- /dev/null +++ b/cpy/ZAN03REC.cpy @@ -0,0 +1,11 @@ + * + * 集約結果レコード 80B + * + 03 (A)APPL-ID PIC X(008). + 03 (A)EMP-ID PIC 9(008). + 03 (A)APPL-DATE PIC 9(008). + 03 (A)START-TIME PIC 9(004). + 03 (A)END-TIME PIC 9(004). + 03 (A)OVT-HOURS PIC 9(004)V9(001). + 03 (A)OVT-TYPE PIC X(001). + 03 (A)FILLER PIC X(042). diff --git a/cpy/ZAN04REC.cpy b/cpy/ZAN04REC.cpy new file mode 100644 index 0000000..f466156 --- /dev/null +++ b/cpy/ZAN04REC.cpy @@ -0,0 +1,5 @@ + * + * DBCLEAN対象レコード 80B + * + 03 (A)APPL-ID PIC X(008). + 03 (A)FILLER PIC X(072). diff --git a/cpy/ZAN05REC.cpy b/cpy/ZAN05REC.cpy new file mode 100644 index 0000000..807cd1a --- /dev/null +++ b/cpy/ZAN05REC.cpy @@ -0,0 +1,5 @@ + * + * エラーログレコード VB可変長 + * + 03 (A)ERR-CATEGORY PIC 9(002). + 03 (A)ERR-DETAIL PIC X(198). diff --git a/cpy/ZANCHKAC.cpy b/cpy/ZANCHKAC.cpy new file mode 100644 index 0000000..cfea712 --- /dev/null +++ b/cpy/ZANCHKAC.cpy @@ -0,0 +1,5 @@ + * SUB04CHK 項目チェック用連絡領域 + 01 C01CHKPAR. + 03 C01CHKTYP PIC X(008). + 03 C01CHKDAT PIC X(080). + 03 C01CHKRRC PIC 9(004). diff --git a/cpy/ZANDATAC.cpy b/cpy/ZANDATAC.cpy new file mode 100644 index 0000000..5ab2681 --- /dev/null +++ b/cpy/ZANDATAC.cpy @@ -0,0 +1,4 @@ + * SUB01DAT 運用日付取得用連絡領域 + 01 D01UBSPAR. + 03 D01FKICOD PIC S9(004) COMP. + 03 D01UBSUDATE PIC 9(008). diff --git a/cpy/ZANENDAC.cpy b/cpy/ZANENDAC.cpy new file mode 100644 index 0000000..a8031fd --- /dev/null +++ b/cpy/ZANENDAC.cpy @@ -0,0 +1,3 @@ + * SUB03END ABEND処理用連絡領域 + 01 E01ABDPAR. + 03 E01ABDCOD PIC 9(003). diff --git a/cpy/ZANMSGAC.cpy b/cpy/ZANMSGAC.cpy new file mode 100644 index 0000000..9f5ac0d --- /dev/null +++ b/cpy/ZANMSGAC.cpy @@ -0,0 +1,13 @@ + * SUB02MSG メッセージ出力用連絡領域 + 01 M00MHOPAR. + 03 M00MSGCOD PIC 9(003). + 03 M00UMKDATS22-01 PIC X(030). + 03 M00UMKDATS22-02 PIC X(030). + 03 M00UMKDATS22-03 PIC X(030). + 03 M00UMKDATS22-04 PIC X(030). + 03 M00UMKDATS22-05 PIC X(030). + 03 M00UMKDATS22-06 PIC X(030). + 03 M00UMKDATS22-07 PIC X(030). + 03 M00UMKDATS22-08 PIC X(030). + 03 M00UMKDATS22-09 PIC X(030). + 03 M00UMKDATS22-10 PIC X(030). diff --git a/cpy/ZANTIMAC.cpy b/cpy/ZANTIMAC.cpy new file mode 100644 index 0000000..b5341a4 --- /dev/null +++ b/cpy/ZANTIMAC.cpy @@ -0,0 +1,5 @@ + * SUB05TIM 時刻丸め用連絡領域 + 01 T01TIMPAR. + 03 T01TIMHRS PIC 9(004)V9(001). + 03 T01TIMOUT PIC 9(004)V9(001). + 03 T01TIMRRC PIC 9(004). diff --git a/src/ZAN01CHK.cbl b/src/ZAN01CHK.cbl new file mode 100644 index 0000000..91b1b4c --- /dev/null +++ b/src/ZAN01CHK.cbl @@ -0,0 +1,483 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. ZAN01CHK. + ***************************************************************** + * システム名 : 残業統計管理システム * + * プログラムID : ZAN01CHK * + * プログラム名 : 残業申請振分処理 * + * 作成日 : 2026-06-14 * + * 処理概要 : CSV形式の残業申請ファイルを読み込み、 * + * ステータスによって適切に振り分ける。 * + * * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 26-06-14 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO ZAN01R01. + SELECT W01OUTFIL ASSIGN TO ZAN01W01. + SELECT W02OUTFIL ASSIGN TO ZAN01W02. + SELECT W03OUTFIL ASSIGN TO ZAN01W03. + * + 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 ZAN01REC REPLACING ==(A)== BY ==W01==. + * + ***************************************************************** + * ##W02## * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W02OUTREC. + COPY ZAN01REC REPLACING ==(A)== BY ==W02==. + * + ***************************************************************** + * ##W03## * + ***************************************************************** + FD W03OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W03OUTREC. + COPY ZAN05REC REPLACING ==(A)== BY ==W03==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'ZAN01CHK'. + 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 CNS-STAT-0 PIC X(001) VALUE '0'. + 01 CNS-STAT-1 PIC X(001) VALUE '1'. + 01 CNS-STAT-9 PIC X(001) VALUE '9'. + 01 CNS-TIME-1830 PIC 9(004) VALUE 1830. + 01 CNS-DIFF-30 PIC 9(004) VALUE 30. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 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. + 03 CUN-W03OUT PIC S9(009) COMP-3 + VALUE ZERO. + * + ***************************************************************** + * 作業領域 * + ***************************************************************** + 01 WRKARA. + *** 運用日付 + 03 WRK-U06 PIC 9(008). + *** 読込フラグ + 03 WRK-R01EOF PIC X(001). + *** CSV分解用 + 03 WRK-COMMA-CNT PIC 9(002) COMP. + 03 WRK-CSV-APPL-ID PIC X(008). + 03 WRK-CSV-EMP-ID PIC X(008). + 03 WRK-CSV-APPL-DATE PIC X(008). + 03 WRK-CSV-START-TIME PIC X(004). + 03 WRK-CSV-END-TIME PIC X(004). + 03 WRK-CSV-STATUS PIC X(001). + 03 WRK-CSV-OVT-TYPE PIC X(001). + 03 WRK-CSV-FILLER PIC X(046). + *** 時間計算用 + 03 WRK-START-NUM PIC 9(004). + 03 WRK-END-NUM PIC 9(004). + 03 WRK-DIFF-HH PIC 9(002). + 03 WRK-DIFF-MM PIC 9(002). + 03 WRK-DIFF-MIN 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. + * + *** 運用日付取得 + 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 + W03OUTFIL. + * + *** #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. + * + *** ステータス判定 + EVALUATE TRUE + WHEN WRK-CSV-STATUS = CNS-STAT-0 + OR WRK-CSV-STATUS = CNS-STAT-1 + *** 有効申請処理 + PERFORM 2020VALIDATESOR + WHEN WRK-CSV-STATUS = CNS-STAT-9 + *** 取消申請処理 + PERFORM 2030CANCELSOR + WHEN OTHER + *** エラー処理 + PERFORM 2040ERRORSOR + END-EVALUATE. + * + *** 次のレコード読込 + PERFORM 1100R01INNSOR. + * + 2000MAJSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.1) * + * サブモジュール名: CSV分解処理 * + * 処理概要 : UNSTRINGでCSVを分解する * + ***************************************************************** + 2010CSVSOR SECTION. + * + INITIALIZE WRK-CSV-APPL-ID + WRK-CSV-EMP-ID + WRK-CSV-APPL-DATE + WRK-CSV-START-TIME + WRK-CSV-END-TIME + WRK-CSV-STATUS + WRK-CSV-OVT-TYPE + WRK-CSV-FILLER. + UNSTRING R01INNREC + DELIMITED BY ',' + INTO WRK-CSV-APPL-ID + WRK-CSV-EMP-ID + WRK-CSV-APPL-DATE + WRK-CSV-START-TIME + WRK-CSV-END-TIME + WRK-CSV-STATUS + WRK-CSV-OVT-TYPE + WRK-CSV-FILLER + TALLYING IN WRK-COMMA-CNT + END-UNSTRING. + * + 2010CSVSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.2) * + * サブモジュール名: 有効申請処理 * + * 処理概要 : 項目チェックしW01出力またはW03出力 * + ***************************************************************** + 2020VALIDATESOR SECTION. + * + *** W01/W03レコード初期化 + INITIALIZE W01OUTREC + W03OUTREC. + * + *** SUB04CHKで日付チェック + INITIALIZE C01CHKPAR. + MOVE WRK-CSV-APPL-DATE TO C01CHKDAT. + MOVE 'DATE' TO C01CHKTYP. + CALL 'SUB04CHK' USING C01CHKPAR. + IF C01CHKRRC NOT = ZERO + MOVE '01' TO W03ERR-CATEGORY + STRING 'DATE ERROR:' + WRK-CSV-EMP-ID + DELIMITED BY SIZE + INTO W03ERR-DETAIL + WRITE W03OUTREC + ADD 1 TO CUN-W03OUT + GO TO 2020VALIDATESOR-EXT + END-IF. + * + *** 開始時刻チェック(1830以降) + MOVE WRK-CSV-START-TIME TO WRK-START-NUM. + IF WRK-START-NUM < CNS-TIME-1830 + MOVE '01' TO W03ERR-CATEGORY + STRING 'START TIME < 1830' + DELIMITED BY SIZE + INTO W03ERR-DETAIL + WRITE W03OUTREC + ADD 1 TO CUN-W03OUT + GO TO 2020VALIDATESOR-EXT + END-IF. + * + *** 開始時刻 < 終了時刻チェック + MOVE WRK-CSV-END-TIME TO WRK-END-NUM. + IF WRK-START-NUM >= WRK-END-NUM + MOVE '01' TO W03ERR-CATEGORY + STRING 'START >= END' + DELIMITED BY SIZE + INTO W03ERR-DETAIL + WRITE W03OUTREC + ADD 1 TO CUN-W03OUT + GO TO 2020VALIDATESOR-EXT + END-IF. + * + *** 時間差30分以上チェック + DIVIDE WRK-START-NUM BY 100 + GIVING WRK-DIFF-HH + REMAINDER WRK-DIFF-MM. + COMPUTE WRK-DIFF-MIN = + WRK-DIFF-MM. + DIVIDE WRK-END-NUM BY 100 + GIVING WRK-START-NUM + REMAINDER WRK-END-NUM. + COMPUTE WRK-DIFF-MIN = + (WRK-START-NUM - WRK-DIFF-HH) * 60 + + (WRK-END-NUM - WRK-DIFF-MM). + IF WRK-DIFF-MIN < CNS-DIFF-30 + MOVE '01' TO W03ERR-CATEGORY + STRING 'DIFF < 30MIN' + DELIMITED BY SIZE + INTO W03ERR-DETAIL + WRITE W03OUTREC + ADD 1 TO CUN-W03OUT + GO TO 2020VALIDATESOR-EXT + END-IF. + * + *** W01出力 + MOVE WRK-CSV-APPL-ID TO W01APPL-ID. + MOVE WRK-CSV-EMP-ID TO W01EMP-ID. + MOVE WRK-CSV-APPL-DATE TO W01APPL-DATE. + MOVE WRK-CSV-START-TIME TO W01START-TIME. + MOVE WRK-CSV-END-TIME TO W01END-TIME. + MOVE WRK-CSV-STATUS TO W01STATUS. + MOVE WRK-CSV-OVT-TYPE TO W01OVT-TYPE. + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + 2020VALIDATESOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.3) * + * サブモジュール名: 取消申請処理 * + * 処理概要 : 取消レコードをW02出力する * + ***************************************************************** + 2030CANCELSOR SECTION. + * + *** W02レコード初期化 + INITIALIZE W02OUTREC. + MOVE WRK-CSV-APPL-ID TO W02APPL-ID. + MOVE WRK-CSV-EMP-ID TO W02EMP-ID. + MOVE WRK-CSV-APPL-DATE TO W02APPL-DATE. + MOVE WRK-CSV-START-TIME TO W02START-TIME. + MOVE WRK-CSV-END-TIME TO W02END-TIME. + MOVE WRK-CSV-STATUS TO W02STATUS. + MOVE WRK-CSV-OVT-TYPE TO W02OVT-TYPE. + WRITE W02OUTREC. + ADD 1 TO CUN-W02OUT. + * + 2030CANCELSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.4) * + * サブモジュール名: エラー処理 * + * 処理概要 : 不明ステータスをW03出力する * + ***************************************************************** + 2040ERRORSOR SECTION. + * + *** W03レコード初期化 + INITIALIZE W03OUTREC. + MOVE '01' TO W03ERR-CATEGORY. + STRING 'INVALID STATUS:' + WRK-CSV-STATUS + DELIMITED BY SIZE + INTO W03ERR-DETAIL. + WRITE W03OUTREC. + ADD 1 TO CUN-W03OUT. + * + 2040ERRORSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(3.0) * + * サブモジュール名: 終了処理 * + * 処理概要 : ファイルクローズ・件数と終了メッセージ出力 * + ***************************************************************** + 3000STPSOR SECTION. + * + *** 入出力ファイルCLOSE + CLOSE R01INNFIL + W01OUTFIL + W02OUTFIL + W03OUTFIL. + * + *** 入出力ファイル件数出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'ZAN01R01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'ZAN01W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'ZAN01W02' TO M00UMKDATS22-01. + MOVE CUN-W02OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'ZAN01W03' TO M00UMKDATS22-01. + MOVE CUN-W03OUT 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/ZAN02CHK.cbl b/src/ZAN02CHK.cbl new file mode 100644 index 0000000..6487d11 --- /dev/null +++ b/src/ZAN02CHK.cbl @@ -0,0 +1,363 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. ZAN02CHK. + ***************************************************************** + * システム名 : 残業統計管理システム * + * プログラムID : ZAN02CHK * + * プログラム名 : 時間帯重複チェック処理 * + * 作成日 : 2026-06-14 * + * 処理概要 : OVT-VSORTファイルの同一社員・同一日付内の * + * 開始時刻と終了時刻の重複をチェックする。 * + * * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 26-06-14 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO ZAN02R01. + SELECT W01OUTFIL ASSIGN TO ZAN02W01. + SELECT W02OUTFIL ASSIGN TO ZAN02W02. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * ##R01## * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC. + COPY ZAN01REC REPLACING ==(A)== BY ==R01==. + * + ***************************************************************** + * ##W01## * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY ZAN01REC REPLACING ==(A)== BY ==W01==. + * + ***************************************************************** + * ##W02## * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W02OUTREC. + COPY ZAN05REC REPLACING ==(A)== BY ==W02==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'ZAN02CHK'. + 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 CNS-ERR-CAT02 PIC 9(002) VALUE 02. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 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 WRK-U06 PIC 9(008). + *** 読込フラグ + 03 WRK-R01EOF PIC X(001). + *** 前レコード保持 + 03 WRK-PREV-REC. + 05 WRK-PREV-APPL-ID PIC X(008). + 05 WRK-PREV-EMP-ID PIC 9(008). + 05 WRK-PREV-APPL-DATE PIC 9(008). + 05 WRK-PREV-START-TIME PIC 9(004). + 05 WRK-PREV-END-TIME PIC 9(004). + 05 WRK-PREV-STATUS PIC X(001). + 05 WRK-PREV-OVT-TYPE PIC X(001). + 05 WRK-PREV-FILLER PIC X(046). + *** 初回読込フラグ + 03 WRK-FIRST-FLG PIC X(001). + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + *** 運用日付取得 + 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. + MOVE '1' TO WRK-FIRST-FLG. + * + *** 運用日付取得 + 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. + * + *** #R01#を読み込み + PERFORM 1100R01INNSOR. + * + *** 1件目W01出力(前レコード初期化) + IF WRK-R01EOF NOT = '1' + MOVE R01INNREC TO WRK-PREV-REC + MOVE R01INNREC TO W01OUTREC + WRITE W01OUTREC + ADD 1 TO CUN-W01OUT + PERFORM 1100R01INNSOR + END-IF. + * + 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) * + * サブモジュール名: 主処理 * + * 処理概要 : 時間帯重複チェック処理 * + ***************************************************************** + 2000MAJSOR SECTION. + * + IF WRK-R01EOF NOT = '1' + *** 重複チェック + PERFORM 2010CHECKDUPSOR + *** 次のレコード読込 + PERFORM 1100R01INNSOR + END-IF. + * + 2000MAJSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.1) * + * サブモジュール名: 重複チェック処理 * + * 処理概要 : 前レコードとの重複判定 * + ***************************************************************** + 2010CHECKDUPSOR SECTION. + * + *** 同一社員番号かつ同一日付の判定 + IF WRK-PREV-EMP-ID = R01EMP-ID + AND WRK-PREV-APPL-DATE = R01APPL-DATE + *** 前終了時刻 > 現開始時刻 → 重複 + IF WRK-PREV-END-TIME > R01START-TIME + PERFORM 2011OVERLAPERRSOR + ELSE + PERFORM 2012NORMALOUTSOR + END-IF + ELSE + *** キーブレイク + PERFORM 2013KEYBRSOR + END-IF. + * + 2010CHECKDUPSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.1-1) * + * サブモジュール名: 重複エラー処理 * + * 処理概要 : エラーログW02出力 * + ***************************************************************** + 2011OVERLAPERRSOR SECTION. + * + INITIALIZE W02OUTREC. + MOVE CNS-ERR-CAT02 TO W02ERR-CATEGORY. + STRING 'OVERLAP: ' + WRK-PREV-EMP-ID ',' + WRK-PREV-APPL-DATE + DELIMITED BY SIZE + INTO W02ERR-DETAIL. + WRITE W02OUTREC. + ADD 1 TO CUN-W02OUT. + * + 2011OVERLAPERRSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.1-2) * + * サブモジュール名: 通常出力処理 * + * 処理概要 : W01ファイル出力 * + ***************************************************************** + 2012NORMALOUTSOR SECTION. + * + MOVE R01INNREC TO W01OUTREC. + WRITE W01OUTREC. + ADD 1 TO CUN-W01OUT. + * + *** 前レコード更新 + MOVE R01INNREC TO WRK-PREV-REC. + * + 2012NORMALOUTSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.1-3) * + * サブモジュール名: キーブレイク処理 * + * 処理概要 : 前レコード更新 * + ***************************************************************** + 2013KEYBRSOR SECTION. + * + MOVE R01INNREC TO WRK-PREV-REC. + PERFORM 2012NORMALOUTSOR. + * + 2013KEYBRSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(3.0) * + * サブモジュール名: 終了処理 * + * 処理概要 : ファイルクローズ・件数と終了メッセージ出力 * + ***************************************************************** + 3000STPSOR SECTION. + * + *** 入出力ファイルCLOSE + CLOSE R01INNFIL + W01OUTFIL + W02OUTFIL. + * + *** 入出力ファイル件数出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'ZAN02R01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'ZAN02W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'ZAN02W02' 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/ZAN03CHK.cbl b/src/ZAN03CHK.cbl new file mode 100644 index 0000000..0600f2f --- /dev/null +++ b/src/ZAN03CHK.cbl @@ -0,0 +1,478 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. ZAN03CHK. + ***************************************************************** + * システム名 : 残業統計管理システム * + * プログラムID : ZAN03CHK * + * プログラム名 : 打刻時間照合処理 * + * 作成日 : 2026-06-14 * + * 処理概要 : OVT-NODUPとPUNCH-SORTEDを突合し申請時間帯の * + * 照合を行う。 * + * 申請時間帯が出勤〜退勤の範囲内かを確認する。* + * 申請日が休日かを判定しOVT-TYPEを付加する。 * + * * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 26-06-14 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + INPUT-OUTPUT SECTION. + FILE-CONTROL. + SELECT R01INNFIL ASSIGN TO ZAN03R01. + SELECT R02INNFIL ASSIGN TO ZAN03R02. + SELECT R03INNFIL ASSIGN TO ZAN03R03. + SELECT W01OUTFIL ASSIGN TO ZAN03W01. + SELECT W02OUTFIL ASSIGN TO ZAN03W02. + * + DATA DIVISION. + FILE SECTION. + * + ***************************************************************** + * ##R01## * + ***************************************************************** + FD R01INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R01INNREC. + COPY ZAN01REC REPLACING ==(A)== BY ==R01==. + * + ***************************************************************** + * ##R02## * + ***************************************************************** + FD R02INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R02INNREC. + 03 R02EMP-ID PIC 9(008). + 03 R02DATE PIC 9(008). + 03 R02TIME-IN PIC 9(004). + 03 R02TIME-OUT PIC 9(004). + 03 R02FILLER PIC X(060). + * + ***************************************************************** + * ##R03## * + ***************************************************************** + FD R03INNFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 R03INNREC. + 03 R03HOLIDAY-DATE PIC 9(008). + 03 R03HOLIDAY-FLG PIC X(001). + 03 R03FILLER PIC X(071). + * + ***************************************************************** + * ##W01## * + ***************************************************************** + FD W01OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS F. + 01 W01OUTREC. + COPY ZAN01REC REPLACING ==(A)== BY ==W01==. + * + ***************************************************************** + * ##W02## * + ***************************************************************** + FD W02OUTFIL + LABEL RECORD IS STANDARD + BLOCK CONTAINS 0 + RECORDING MODE IS V. + 01 W02OUTREC. + COPY ZAN05REC REPLACING ==(A)== BY ==W02==. + * + WORKING-STORAGE SECTION. + * + ***************************************************************** + * コンスタント領域 * + ***************************************************************** + 01 CNSARA. + 03 CNS-PRGIDX PIC X(008) VALUE 'ZAN03CHK'. + 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-CAT03 PIC 9(002) VALUE 03. + 03 CNS-OVT-W PIC X(001) VALUE 'W'. + 03 CNS-OVT-H PIC X(001) VALUE 'H'. + * + ***************************************************************** + * カウンタ領域 * + ***************************************************************** + 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. + 03 CUN-W02OUT PIC S9(009) COMP-3 + VALUE ZERO. + * + ***************************************************************** + * 作業領域 * + ***************************************************************** + 01 WRKARA. + *** 読込フラグ(R01) + 03 WRK-R01EOF PIC X(001). + *** 読込フラグ(R02) + 03 WRK-R02EOF PIC X(001). + *** 読込フラグ(R03) + 03 WRK-R03EOF PIC X(001). + *** R01キー + 03 WRK-R01KEY. + 05 WRK-R01KEY001 PIC 9(008). + 05 WRK-R01KEY002 PIC 9(008). + *** R02キー + 03 WRK-R02KEY. + 05 WRK-R02KEY001 PIC 9(008). + 05 WRK-R02KEY002 PIC 9(008). + *** OVT-TYPE設定用 + 03 WRK-OVT-TYPE-SET PIC X(001). + *** 休日テーブル + 03 WRK-HOLIDAY-CNT PIC 9(004) COMP. + 03 WRK-HOLIDAY-TABLE OCCURS 366 TIMES + DEPENDING ON WRK-HOLIDAY-CNT + ASCENDING KEY IS WRK-HD-DATE + INDEXED BY WRK-HD-IDX. + 05 WRK-HD-DATE PIC 9(008). + 05 WRK-HD-FLG PIC X(001). + * + ***************************************************************** + * サブプログラム連絡領域 * + ***************************************************************** + *** メッセージ編集出力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. + * + *** 現在日付取得(FUNCTION CURRENT-DATE) + MOVE FUNCTION CURRENT-DATE TO WRK-HOLIDAY-CNT. + * + *** 入出力ファイルOPEN + OPEN INPUT R01INNFIL + R02INNFIL + R03INNFIL + OUTPUT W01OUTFIL + W02OUTFIL. + * + *** 休日ファイル読込 + PERFORM 1300HOLIDAYSOR. + * + *** #R01#を読み込み + PERFORM 1100R01INNSOR. + * + *** #R02#を読み込み + PERFORM 1200R02INNSOR. + * + 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 + MOVE R01EMP-ID TO WRK-R01KEY001 + MOVE R01APPL-DATE TO WRK-R01KEY002 + END-READ. + * + 1100R01INNSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(1.2) * + * サブモジュール名:##R02##読込処理 * + * 処理概要 : レコード読込・EOF判定処理 * + ***************************************************************** + 1200R02INNSOR SECTION. + * + READ R02INNFIL + AT END + MOVE '1' TO WRK-R02EOF + NOT AT END + ADD 1 TO CUN-R02INN + MOVE R02EMP-ID TO WRK-R02KEY001 + MOVE R02DATE TO WRK-R02KEY002 + END-READ. + * + 1200R02INNSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(1.3) * + * サブモジュール名:##R03##読込処理 * + * 処理概要 : 休日ファイル読込・HOLIDAY-TABLE設定 * + ***************************************************************** + 1300HOLIDAYSOR SECTION. + * + INITIALIZE WRK-HOLIDAY-CNT. + * + PERFORM UNTIL WRK-R03EOF = '1' + READ R03INNFIL + AT END + MOVE '1' TO WRK-R03EOF + NOT AT END + ADD 1 TO WRK-HOLIDAY-CNT + ADD 1 TO CUN-R03INN + MOVE R03HOLIDAY-DATE TO + WRK-HD-DATE(WRK-HOLIDAY-CNT) + MOVE R03HOLIDAY-FLG TO + WRK-HD-FLG(WRK-HOLIDAY-CNT) + END-READ + END-PERFORM. + * + 1300HOLIDAYSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.0) * + * サブモジュール名: 主処理 * + * 処理概要 : R01とR02のキー比較・時間範囲チェック * + ***************************************************************** + 2000MAJSOR SECTION. + * + *** R01とR02のキー比較 + EVALUATE TRUE + WHEN WRK-R01KEY < WRK-R02KEY + *** R01キー < R02キー(打刻データなし) + PERFORM 2010NOMATCHSOR + WHEN WRK-R01KEY = WRK-R02KEY + *** R01キー = R02キー(マッチ) + PERFORM 2020MATCHSOR + WHEN WRK-R01KEY > WRK-R02KEY + *** R01キー > R02キー(R02スキップ) + PERFORM 1200R02INNSOR + END-EVALUATE. + * + 2000MAJSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.1) * + * サブモジュール名: 不一致処理 * + * 処理概要 : 打刻データなしエラー出力 * + ***************************************************************** + 2010NOMATCHSOR SECTION. + * + *** W02レコード初期化 + INITIALIZE W02OUTREC. + * + *** ERROR-LOGに出力 + MOVE CNS-ERR-CAT03 TO W02ERR-CATEGORY. + STRING R01EMP-ID DELIMITED BY SIZE + '/' DELIMITED BY SIZE + R01APPL-DATE DELIMITED BY SIZE + INTO W02ERR-DETAIL + END-STRING. + WRITE W02OUTREC. + ADD 1 TO CUN-W02OUT. + * + *** #R01#を読み込む + PERFORM 1100R01INNSOR. + * + 2010NOMATCHSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.2) * + * サブモジュール名: 一致処理 * + * 処理概要 : 時間範囲チェック * + ***************************************************************** + 2020MATCHSOR SECTION. + * + *** 時間範囲チェック + IF R01START-TIME >= R02TIME-IN + AND R01END-TIME <= R02TIME-OUT + *** 通過→OVT-TYPE設定+W01出力 + PERFORM 2200SETOVTSOR + WRITE W01OUTREC + ADD 1 TO CUN-W01OUT + ELSE + *** エラー→W02出力 + INITIALIZE W02OUTREC + MOVE CNS-ERR-CAT03 TO W02ERR-CATEGORY + STRING R01EMP-ID DELIMITED BY SIZE + '/' DELIMITED BY SIZE + R01APPL-DATE DELIMITED BY SIZE + '/' DELIMITED BY SIZE + R01START-TIME DELIMITED BY SIZE + '-' DELIMITED BY SIZE + R01END-TIME DELIMITED BY SIZE + INTO W02ERR-DETAIL + END-STRING + WRITE W02OUTREC + ADD 1 TO CUN-W02OUT + END-IF. + * + *** #R01#を読み込む + PERFORM 1100R01INNSOR. + * + 2020MATCHSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(2.3) * + * サブモジュール名: OVT-TYPE設定処理 * + * 処理概要 : 申請日が休日か判定しOVT-TYPEを設定 * + ***************************************************************** + 2200SETOVTSOR SECTION. + * + *** 初期設定(平日) + MOVE CNS-OVT-W TO WRK-OVT-TYPE-SET. + *** 休日判定(SEARCH ALL) + SET WRK-HD-IDX TO 1. + SEARCH ALL WRK-HOLIDAY-TABLE + AT END + CONTINUE + WHEN WRK-HD-DATE(WRK-HD-IDX) = R01APPL-DATE + IF WRK-HD-FLG(WRK-HD-IDX) = '1' + MOVE CNS-OVT-H TO WRK-OVT-TYPE-SET + END-IF + END-SEARCH. + * + *** レコード編集 + MOVE R01INNREC TO W01OUTREC. + MOVE WRK-OVT-TYPE-SET TO W01OVT-TYPE. + * + 2200SETOVTSOR-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO:(3.0) * + * サブモジュール名: 終了処理 * + * 処理概要 : ファイルクローズ・件数出力 * + ***************************************************************** + 3000STPSOR SECTION. + * + *** 入出力ファイルCLOSE + CLOSE R01INNFIL + R02INNFIL + R03INNFIL + W01OUTFIL + W02OUTFIL. + * + *** 入力件数メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'ZAN03R01' TO M00UMKDATS22-01. + MOVE CUN-R01INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** 入力件数メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'ZAN03R02' TO M00UMKDATS22-01. + MOVE CUN-R02INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** 入力件数メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGIINKES TO M00MSGCOD. + MOVE 'ZAN03R03' TO M00UMKDATS22-01. + MOVE CUN-R03INN TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** 出力件数メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'ZAN03W01' TO M00UMKDATS22-01. + MOVE CUN-W01OUT TO M00UMKDATS22-02. + PERFORM 4000MSGOUTSOR. + * + *** 出力件数メッセージ出力 + INITIALIZE M00MHOPAR. + MOVE CNS-MSGOUTKES TO M00MSGCOD. + MOVE 'ZAN03W02' 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) * + * サブモジュール名: メッセージ出力処理 * + * 処理概要 : メッセージ編集・出力 * + ***************************************************************** + 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/sub/SUB01DAT.cbl b/sub/SUB01DAT.cbl new file mode 100644 index 0000000..45322fb --- /dev/null +++ b/sub/SUB01DAT.cbl @@ -0,0 +1,57 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. SUB01DAT. + ***************************************************************** + * システム名 : 残業統計管理システム * + * プログラムID : SUB01DAT * + * プログラム名 : 運用日付取得サブ * + * 作成日 : 2026-06-14 * + * 処理概要 : FUNCTION CURRENT-DATEにより現在日付を取得 * + * しYYYYMMDD形式で返す * + * * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 26-06-14 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + DATA DIVISION. + ***************************************************************** + WORKING-STORAGE SECTION. + ***************************************************************** + 01 WRKARA. + 03 WRK-SYS-DATE PIC X(026). + 03 WRK-DATE-8 PIC 9(008). + * + ***************************************************************** + * リンケージエリア * + ***************************************************************** + LINKAGE SECTION. + * + 01 D01UBSPAR. + 03 D01FKICOD PIC S9(004) COMP. + 03 D01UBSUDATE PIC 9(008). + * + PROCEDURE DIVISION USING D01UBSPAR. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + * 処理概要 : メインコントロール処理 * + ***************************************************************** + 0000MAINSOR SECTION. + * + *** 現在日付を取得する + MOVE FUNCTION CURRENT-DATE TO WRK-SYS-DATE. + *** YYYYMMDD部分を抽出 + MOVE WRK-SYS-DATE(1:8) TO D01UBSUDATE. + *** 正常終了 + MOVE ZERO TO D01FKICOD. + * + 0000MAINSOR-EXT. + GOBACK. diff --git a/sub/SUB02MSG.cbl b/sub/SUB02MSG.cbl new file mode 100644 index 0000000..da735b7 --- /dev/null +++ b/sub/SUB02MSG.cbl @@ -0,0 +1,76 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. SUB02MSG. + ***************************************************************** + * システム名 : 残業統計管理システム * + * プログラムID : SUB02MSG * + * プログラム名 : メッセージ編集出力サブ * + * 作成日 : 2026-06-14 * + * 処理概要 : メッセージ番号とパラメータを編集し * + * 標準出力へ出力する * + * * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 26-06-14 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + DATA DIVISION. + ***************************************************************** + WORKING-STORAGE SECTION. + ***************************************************************** + 01 WRKARA. + 03 WRK-MSG-LINE PIC X(303). + * + ***************************************************************** + * リンケージエリア * + ***************************************************************** + LINKAGE SECTION. + * + 01 M00MHOPAR. + 03 M00MSGCOD PIC 9(003). + 03 M00UMKDATS22-01 PIC X(030). + 03 M00UMKDATS22-02 PIC X(030). + 03 M00UMKDATS22-03 PIC X(030). + 03 M00UMKDATS22-04 PIC X(030). + 03 M00UMKDATS22-05 PIC X(030). + 03 M00UMKDATS22-06 PIC X(030). + 03 M00UMKDATS22-07 PIC X(030). + 03 M00UMKDATS22-08 PIC X(030). + 03 M00UMKDATS22-09 PIC X(030). + 03 M00UMKDATS22-10 PIC X(030). + * + PROCEDURE DIVISION USING M00MHOPAR. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + * 処理概要 : メインコントロール処理 * + ***************************************************************** + 0000MAINSOR SECTION. + * + *** メッセージ行を編集する + STRING 'MSG[' + M00MSGCOD + '] P1=' + M00UMKDATS22-01 + ' P2=' + M00UMKDATS22-02 + ' P3=' + M00UMKDATS22-03 + ' P4=' + M00UMKDATS22-04 + ' P5=' + M00UMKDATS22-05 + INTO WRK-MSG-LINE + END-STRING. + *** 標準出力へ出力 + DISPLAY WRK-MSG-LINE. + * + 0000MAINSOR-EXT. + GOBACK. diff --git a/sub/SUB03END.cbl b/sub/SUB03END.cbl new file mode 100644 index 0000000..3467ca0 --- /dev/null +++ b/sub/SUB03END.cbl @@ -0,0 +1,55 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. SUB03END. + ***************************************************************** + * システム名 : 残業統計管理システム * + * プログラムID : SUB03END * + * プログラム名 : ABEND処理サブ * + * 作成日 : 2026-06-14 * + * 処理概要 : ABENDコードを表示しプログラムを異常終了 * + * させる * + * * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 26-06-14 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + DATA DIVISION. + ***************************************************************** + WORKING-STORAGE SECTION. + ***************************************************************** + 01 WRKARA. + 03 WRK-ABEND-MSG PIC X(020). + * + ***************************************************************** + * リンケージエリア * + ***************************************************************** + LINKAGE SECTION. + * + 01 E01ABDPAR. + 03 E01ABDCOD PIC 9(003). + * + PROCEDURE DIVISION USING E01ABDPAR. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + * 処理概要 : メインコントロール処理 * + ***************************************************************** + 0000MAINSOR SECTION. + * + *** 異常終了メッセージを表示する + MOVE 'ABEND CODE=' TO WRK-ABEND-MSG. + MOVE E01ABDCOD TO WRK-ABEND-MSG(12:3). + DISPLAY WRK-ABEND-MSG. + *** プログラムを異常終了させる + STOP RUN. + * + 0000MAINSOR-EXT. + GOBACK. diff --git a/sub/SUB04CHK.cbl b/sub/SUB04CHK.cbl new file mode 100644 index 0000000..f3b1826 --- /dev/null +++ b/sub/SUB04CHK.cbl @@ -0,0 +1,170 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. SUB04CHK. + ***************************************************************** + * システム名 : 残業統計管理システム * + * プログラムID : SUB04CHK * + * プログラム名 : 項目チェックサブ * + * 作成日 : 2026-06-14 * + * 処理概要 : 指定されたタイプによりデータ項目の妥当性 * + * をチェックする * + * * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 26-06-14 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + DATA DIVISION. + ***************************************************************** + WORKING-STORAGE SECTION. + ***************************************************************** + 01 WRKARA. + 03 WRK-RETURN-CODE PIC 9(004). + 03 WRK-SIGN PIC S9(004). + 03 WRK-NN PIC 9(004). + * + ***************************************************************** + * リンケージエリア * + ***************************************************************** + LINKAGE SECTION. + * + 01 C01CHKPAR. + 03 C01CHKTYP PIC X(008). + 03 C01CHKDAT PIC X(080). + 03 C01CHKRRC PIC 9(004). + * + PROCEDURE DIVISION USING C01CHKPAR. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + * 処理概要 : メインコントロール処理 * + ***************************************************************** + 0000MAINSOR SECTION. + * + *** チェックタイプにより分岐する + EVALUATE C01CHKTYP + *** 日付チェック(YYYYMMDD) + WHEN 'DATE' + PERFORM 1000CHKDATE + *** 時刻チェック(HHMM) + WHEN 'TIME' + PERFORM 2000CHKTIME + *** 数字チェック + WHEN 'NUM' + PERFORM 3000CHKNUM + *** 社員番号チェック(英数字8桁) + WHEN 'EMPID' + PERFORM 4000CHKEMP + WHEN OTHER + MOVE 9999 TO WRK-RETURN-CODE + END-EVALUATE. + * + *** 復帰コードを設定して復帰 + MOVE WRK-RETURN-CODE TO C01CHKRRC. + * + 0000MAINSOR-EXT. + GOBACK. + ***************************************************************** + * サブモジュールNO: (1.0) * + * サブモジュール名: 日付チェック * + * 処理概要 : YYYYMMDD形式の妥当性チェック * + ***************************************************************** + 1000CHKDATE SECTION. + * + *** 月チェック(桁位置5〜6: 01-12) + MOVE FUNCTION NUMVAL( + C01CHKDAT(5:2)) TO WRK-NN. + IF (WRK-NN < 1) OR (WRK-NN > 12) THEN + MOVE 0001 TO WRK-RETURN-CODE + GO TO 1000CHKDATE-EXT + END-IF. + *** 日チェック(桁位置7〜8: 01-31) + MOVE FUNCTION NUMVAL( + C01CHKDAT(7:2)) TO WRK-NN. + IF (WRK-NN < 1) OR (WRK-NN > 31) THEN + MOVE 0001 TO WRK-RETURN-CODE + GO TO 1000CHKDATE-EXT + END-IF. + *** 正常 + MOVE ZERO TO WRK-RETURN-CODE. + * + 1000CHKDATE-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 時刻チェック * + * 処理概要 : HHMM形式の妥当性チェック * + ***************************************************************** + 2000CHKTIME SECTION. + * + *** 時チェック(桁位置1〜2: 00-23) + MOVE FUNCTION NUMVAL( + C01CHKDAT(1:2)) TO WRK-NN. + IF (WRK-NN > 23) THEN + MOVE 0002 TO WRK-RETURN-CODE + GO TO 2000CHKTIME-EXT + END-IF. + *** 分チェック(桁位置3〜4: 00-59) + MOVE FUNCTION NUMVAL( + C01CHKDAT(3:2)) TO WRK-NN. + IF (WRK-NN > 59) THEN + MOVE 0002 TO WRK-RETURN-CODE + GO TO 2000CHKTIME-EXT + END-IF. + *** 正常 + MOVE ZERO TO WRK-RETURN-CODE. + * + 2000CHKTIME-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 数字チェック * + * 処理概要 : 全桁が数字であることをチェック * + ***************************************************************** + 3000CHKNUM SECTION. + * + *** 非数字文字が含まれていないかチェック + INSPECT C01CHKDAT + TALLYING WRK-NN FOR + CHARACTERS BEFORE INITIAL SPACE. + IF WRK-NN > 0 THEN + MOVE 0003 TO WRK-RETURN-CODE + GO TO 3000CHKNUM-EXT + END-IF. + *** 正常 + MOVE ZERO TO WRK-RETURN-CODE. + * + 3000CHKNUM-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO: (4.0) * + * サブモジュール名: 社員番号チェック * + * 処理概要 : 英数字8桁のチェック * + ***************************************************************** + 4000CHKEMP SECTION. + * + *** 桁数チェック(8桁) + IF C01CHKDAT(9:72) NOT = SPACES THEN + MOVE 0004 TO WRK-RETURN-CODE + GO TO 4000CHKEMP-EXT + END-IF. + *** 英数字チェック + INSPECT C01CHKDAT(1:8) + TALLYING WRK-NN FOR + CHARACTERS BEFORE INITIAL SPACE. + IF WRK-NN > 0 THEN + MOVE 0004 TO WRK-RETURN-CODE + GO TO 4000CHKEMP-EXT + END-IF. + *** 正常 + MOVE ZERO TO WRK-RETURN-CODE. + * + 4000CHKEMP-EXT. + EXIT. diff --git a/sub/SUB05TIM.cbl b/sub/SUB05TIM.cbl new file mode 100644 index 0000000..5266721 --- /dev/null +++ b/sub/SUB05TIM.cbl @@ -0,0 +1,153 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. SUB05TIM. + ***************************************************************** + * システム名 : 残業統計管理システム * + * プログラムID : SUB05TIM * + * プログラム名 : 時刻丸め計算サブ * + * 作成日 : 2026-06-14 * + * 処理概要 : 時間値を指定単位で丸め計算する * + * * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 26-06-14 @@@ 新規作成 * + * * + ***************************************************************** + ENVIRONMENT DIVISION. + CONFIGURATION SECTION. + SOURCE-COMPUTER. IBM-ZSERIES. + OBJECT-COMPUTER. IBM-ZSERIES. + * + DATA DIVISION. + ***************************************************************** + WORKING-STORAGE SECTION. + ***************************************************************** + 01 WRKARA. + 03 WRK-MINUTES PIC S9(005). + 03 WRK-HOURS PIC S9(005)V9(001). + 03 WRK-REMAINDER PIC S9(005). + * + ***************************************************************** + * リンケージエリア * + ***************************************************************** + LINKAGE SECTION. + * + 01 T01TIMPAR. + 03 T01TIMHRS PIC 9(004)V9(001). + 03 T01TIMOUT PIC 9(004)V9(001). + 03 T01TIMRRC PIC 9(004). + * + PROCEDURE DIVISION USING T01TIMPAR. + ***************************************************************** + * サブモジュールNO: (0.0) * + * サブモジュール名: 制御処理 * + * 処理概要 : メインコントロール処理 * + ***************************************************************** + 0000MAINSOR SECTION. + * + *** 丸めモードにより分岐する + EVALUATE T01TIMRRC + *** モード0: 0.5時間単位・切上 + WHEN 0 + PERFORM 1000RNDHALF + *** モード1: 0.1時間単位・切上 + WHEN 1 + PERFORM 2000RNDUP + *** モード2: 0.1時間単位・切捨 + WHEN 2 + PERFORM 3000RNDDOWN + *** モード3: 単純四捨五入(0.1h単位) + WHEN 3 + PERFORM 4000RNDNORMAL + WHEN OTHER + *** モード指定なし→そのまま出力 + MOVE T01TIMHRS TO T01TIMOUT + END-EVALUATE. + * + 0000MAINSOR-EXT. + GOBACK. + ***************************************************************** + * サブモジュールNO: (1.0) * + * サブモジュール名: 0.5時間単位・切上 * + * 処理概要 : 30分単位で切り上げる * + ***************************************************************** + 1000RNDHALF SECTION. + * + *** 時間→分変換 + COMPUTE WRK-MINUTES = + T01TIMHRS * 60. + *** 30分単位で切り上げ + DIVIDE WRK-MINUTES BY 30 + GIVING WRK-HOURS + REMAINDER WRK-REMAINDER. + IF WRK-REMAINDER > 0 THEN + COMPUTE WRK-HOURS = + WRK-HOURS + 1 + END-IF. + *** 分→時間変換 + COMPUTE T01TIMOUT = + WRK-HOURS * 0.5. + * + 1000RNDHALF-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO: (2.0) * + * サブモジュール名: 0.1時間単位・切上 * + * 処理概要 : 6分単位で切り上げる * + ***************************************************************** + 2000RNDUP SECTION. + * + *** 時間→分変換 + COMPUTE WRK-MINUTES = + T01TIMHRS * 60. + *** 6分単位で切り上げ + DIVIDE WRK-MINUTES BY 6 + GIVING WRK-HOURS + REMAINDER WRK-REMAINDER. + IF WRK-REMAINDER > 0 THEN + COMPUTE WRK-HOURS = + WRK-HOURS + 1 + END-IF. + *** 分→時間変換 + COMPUTE T01TIMOUT = + WRK-HOURS * 0.1. + * + 2000RNDUP-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO: (3.0) * + * サブモジュール名: 0.1時間単位・切捨 * + * 処理概要 : 6分単位で切り捨てる * + ***************************************************************** + 3000RNDDOWN SECTION. + * + *** 時間→分変換 + COMPUTE WRK-MINUTES = + T01TIMHRS * 60. + *** 6分単位で切り捨て + DIVIDE WRK-MINUTES BY 6 + GIVING WRK-HOURS + REMAINDER WRK-REMAINDER. + *** 分→時間変換 + COMPUTE T01TIMOUT = + WRK-HOURS * 0.1. + * + 3000RNDDOWN-EXT. + EXIT. + ***************************************************************** + * サブモジュールNO: (4.0) * + * サブモジュール名: 単純四捨五入(0.1h単位) * + * 処理概要 : 0.05を加算して切捨 * + ***************************************************************** + 4000RNDNORMAL SECTION. + * + *** 0.05を加算してV9(1)に収める + COMPUTE WRK-HOURS = + T01TIMHRS + 0.05. + *** V9(1)への代入で小数点第2位以下切捨 + MOVE WRK-HOURS TO T01TIMOUT. + * + 4000RNDNORMAL-EXT. + EXIT. diff --git a/詳細設計書/詳細設計書_SUB01DAT.md b/詳細設計書/詳細設計書_SUB01DAT.md new file mode 100644 index 0000000..bedca6f --- /dev/null +++ b/詳細設計書/詳細設計書_SUB01DAT.md @@ -0,0 +1,56 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 残業統計管理システム | +| 2 | プログラムID | SUB01DAT | +| 3 | プログラム名 | 運用日付取得サブ | +| 4 | PGMタイプ | サブ | +| 5 | PGMパターン | - | +| 6 | 機能概要 | 現在日付を取得し、運用日付(YYYYMMDD)として返す | + +### 使用方法 + +``` + CALL 'SUB01DAT' USING D01UBSPAR +``` + +### 入出力パラメータ + +| COPY句 | ZANDATAC | +|------------|----------| + +| NO | 入出力区分 | 名称 | 属性 | 桁数 | 説明 | +|----|-----------|------|------|------|------| +| 1 | O | D01FKICOD | S9(4) COMP | 4 | 復帰コード(0000:正常) | +| 2 | O | D01UBSUDATE | 9(8) | 8 | 運用日付(YYYYMMDD) | + +### リターンコード一覧 + +| NO | コード | 説明 | +|----|--------|------| +| 1 | 0000 | 正常終了 | +| 2 | 0001 | 日付不正(月01〜12/日01〜31範囲外) | + +--- + +## 処理詳細 + +``` +1.制御処理(0000MAINSOR) + 1-1.現在日時を取得する。 + ACCEPT WRK-SYS-DATE-14 FROM DATE YYYYMMDD. + 1-2.年月日を個別に抽出する。 + DIVIDE WRK-SYS-DATE-14 BY 10000 GIVING WRK-YYYY REMAINDER WRK-WK. + DIVIDE WRK-WK BY 100 GIVING WRK-MM REMAINDER WRK-DD. + 1-3.月日チェック + 1-3-1.WRK-MM < 1 OR WRK-MM > 12 + → D01FKICOD = 0001 を設定し、1-6へ。 + 1-3-2.WRK-DD < 1 OR WRK-DD > 31 + → D01FKICOD = 0001 を設定し、1-6へ。 + 1-4.D01UBSUDATEにWRK-SYS-DATE-14を設定する。 + 1-5.D01FKICOD = 0000 を設定する。 + 1-6.復帰(GOBACK)。 +``` diff --git a/詳細設計書/詳細設計書_SUB02MSG.md b/詳細設計書/詳細設計書_SUB02MSG.md new file mode 100644 index 0000000..f362bcb --- /dev/null +++ b/詳細設計書/詳細設計書_SUB02MSG.md @@ -0,0 +1,64 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 残業統計管理システム | +| 2 | プログラムID | SUB02MSG | +| 3 | プログラム名 | メッセージ編集出力サブ | +| 4 | PGMタイプ | サブ | +| 5 | PGMパターン | - | +| 6 | 機能概要 | メッセージ番号とパラメータを編集し、メッセージログファイルへ出力する。 | + +### 使用方法 + +``` + CALL 'SUB02MSG' USING M00MHOPAR +``` + +### 入出力パラメータ + +| COPY句 | ZANMSGAC | +|------------|----------| + +| NO | 入出力区分 | 名称 | 属性 | 桁数 | 説明 | +|----|-----------|------|------|------|------| +| 1 | I | M00MSGCOD | 9(3) | 3 | メッセージ番号 | +| 2 | I | M00UMKDATS22-01 | X(30) | 30 | パラメータ1 | +| 3 | I | M00UMKDATS22-02 | X(30) | 30 | パラメータ2 | +| 4 | I | M00UMKDATS22-03 | X(30) | 30 | パラメータ3 | +| 5 | I | M00UMKDATS22-04 | X(30) | 30 | パラメータ4 | +| 6 | I | M00UMKDATS22-05 | X(30) | 30 | パラメータ5 | +| 7 | I | M00UMKDATS22-06 | X(30) | 30 | パラメータ6 | +| 8 | I | M00UMKDATS22-07 | X(30) | 30 | パラメータ7 | +| 9 | I | M00UMKDATS22-08 | X(30) | 30 | パラメータ8 | +| 10 | I | M00UMKDATS22-09 | X(30) | 30 | パラメータ9 | +| 11 | I | M00UMKDATS22-10 | X(30) | 30 | パラメータ10 | + +### リターンコード一覧 + +| NO | コード | 説明 | +|----|--------|------| +| 1 | 0000 | 正常終了(出力完了) | +| 2 | 0001 | ファイルオープン失敗 | + +--- + +## 処理詳細 + +``` +1.制御処理(0000MAINSOR) + 1-1.メッセージファイル(MSGLOG)のオープン状態を確認する。 + 1-1-1.未オープンの場合 + OPEN EXTEND MSGLOG を実行する。 + 1-1-1-1.オープン失敗の場合 + DISPLAY でエラーメッセージを出力し、1-4へ。 + 1-2.メッセージ行(MSG-LINE)を編集する。 + 1-2-1.現在日時を取得する。 + 1-2-2.TIMESTAMP、M00MSGCOD、M00UMKDATS22-01〜10を MSG-LINE に編集する。 + 1-3.MSGLOGにMSG-LINEを出力する。 + 1-3-1.WRITE失敗の場合 + RETURN-CODEに0001を設定し、1-4へ。 + 1-4.復帰(GOBACK)。 +``` diff --git a/詳細設計書/詳細設計書_SUB03END.md b/詳細設計書/詳細設計書_SUB03END.md new file mode 100644 index 0000000..d3840eb --- /dev/null +++ b/詳細設計書/詳細設計書_SUB03END.md @@ -0,0 +1,45 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 残業統計管理システム | +| 2 | プログラムID | SUB03END | +| 3 | プログラム名 | ABEND処理サブ | +| 4 | PGMタイプ | サブ | +| 5 | PGMパターン | - | +| 6 | 機能概要 | ABENDコードを表示し、異常終了する。 | + +### 使用方法 + +``` + CALL 'SUB03END' USING E01ABDPAR +``` + +### 入出力パラメータ + +| COPY句 | ZANENDAC | +|------------|----------| + +| NO | 入出力区分 | 名称 | 属性 | 桁数 | 説明 | +|----|-----------|------|------|------|------| +| 1 | I | E01ABDCOD | 9(3) | 3 | ABENDコード | + +### リターンコード一覧 + +| NO | コード | 説明 | +|----|--------|------| +| 1 | - | ABENDするため復帰コードなし(STOP RUN実行) | + +--- + +## 処理詳細 + +``` +1.制御処理(0000MAINSOR) + 1-1.ABENDメッセージを表示する。 + DISPLAY 'ABEND CODE=' E01ABDCOD. + 1-2.異常終了する。 + STOP RUN. +``` diff --git a/詳細設計書/詳細設計書_SUB04CHK.md b/詳細設計書/詳細設計書_SUB04CHK.md new file mode 100644 index 0000000..0cdb2a8 --- /dev/null +++ b/詳細設計書/詳細設計書_SUB04CHK.md @@ -0,0 +1,95 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 残業統計管理システム | +| 2 | プログラムID | SUB04CHK | +| 3 | プログラム名 | 項目チェックサブ | +| 4 | PGMタイプ | サブ | +| 5 | PGMパターン | 項目チェック | +| 6 | 機能概要 | チェックタイプに応じてデータ妥当性を検証する。 | + +### 使用方法 + +``` + CALL 'SUB04CHK' USING C01CHKPAR +``` + +### 入出力パラメータ + +| COPY句 | ZANCHKAC | +|------------|----------| + +| NO | 入出力区分 | 名称 | 属性 | 桁数 | 説明 | +|----|-----------|------|------|------|------| +| 1 | I | C01CHKTYP | X(8) | 8 | チェックタイプ(DATE/TIME/NUM) | +| 2 | I | C01CHKDAT | X(80) | 80 | チェック対象データ | +| 3 | O | C01CHKRRC | 9(4) | 4 | 復帰コード(0000:正常,0001:日付不正,0002:時刻不正,0003:数字不正) | + +### リターンコード一覧 + +| NO | コード | 説明 | +|----|--------|------| +| 1 | 0000 | 正常終了(チェックOK) | +| 2 | 0001 | 日付不正(DATE指定時、月01〜12/日01〜31範囲外) | +| 3 | 0002 | 時刻不正(TIME指定時、時00〜23/分00〜59範囲外) | +| 4 | 0003 | 数字不正(NUM指定時、非数字文字を含む) | +| 5 | 0004 | チェックタイプ不明 | + +--- + +## 処理詳細 + +``` +1.制御処理(0000MAINSOR) + 1-1.C01CHKTYPにより分岐する。 + 1-1-1.C01CHKTYP = 'DATE' の場合 + 2000CHKDATEへ。 + 1-1-2.C01CHKTYP = 'TIME' の場合 + 3000CHKTIMEへ。 + 1-1-3.C01CHKTYP = 'NUM' の場合 + 4000CHKNUMへ。 + 1-1-4.その他の場合 + C01CHKRRC = 0004 を設定し、1-2へ。 + 1-2.復帰(GOBACK)。 + +2.日付チェック(2000CHKDATE) + 2-1.C01CHKDATから年月日を抽出する。 + YYYY = C01CHKDAT(1:4) + MM = C01CHKDAT(5:2) + DD = C01CHKDAT(7:2) + 2-2.月チェック(MM) + 2-2-1.MM < 1 OR MM > 12 + → C01CHKRRC = 0001 を設定し、2-5へ。 + 2-3.日チェック(DD) + 2-3-1.DD < 1 OR DD > 31 + → C01CHKRRC = 0001 を設定し、2-5へ。 + 2-4.正常の場合 + C01CHKRRC = 0000 を設定する。 + 2-5.復帰(0000MAINSOR-EXTへ)。 + +3.時刻チェック(3000CHKTIME) + 3-1.C01CHKDATから時分を抽出する。 + HH = C01CHKDAT(1:2) + MM = C01CHKDAT(3:2) + 3-2.時チェック(HH) + 3-2-1.HH < 0 OR HH > 23 + → C01CHKRRC = 0002 を設定し、3-5へ。 + 3-3.分チェック(MM) + 3-3-1.MM < 0 OR MM > 59 + → C01CHKRRC = 0002 を設定し、3-5へ。 + 3-4.正常の場合 + C01CHKRRC = 0000 を設定する。 + 3-5.復帰(0000MAINSOR-EXTへ)。 + +4.数字チェック(4000CHKNUM) + 4-1.C01CHKDATに非数字文字が含まれるかチェックする。 + INSPECT C01CHKDAT TALLYING WRK-NONDIGIT FOR NON-NUMERIC. + 4-2.WRK-NONDIGIT > 0 の場合 + C01CHKRRC = 0003 を設定し、4-4へ。 + 4-3.正常の場合 + C01CHKRRC = 0000 を設定する。 + 4-4.復帰(0000MAINSOR-EXTへ)。 +``` diff --git a/詳細設計書/詳細設計書_SUB05TIM.md b/詳細設計書/詳細設計書_SUB05TIM.md new file mode 100644 index 0000000..426008d --- /dev/null +++ b/詳細設計書/詳細設計書_SUB05TIM.md @@ -0,0 +1,98 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 残業統計管理システム | +| 2 | プログラムID | SUB05TIM | +| 3 | プログラム名 | 時刻丸め計算サブ | +| 4 | PGMタイプ | サブ | +| 5 | PGMパターン | - | +| 6 | 機能概要 | 時間値を指定単位で丸め計算する。 | + +### 使用方法 + +``` + CALL 'SUB05TIM' USING T01TIMPAR +``` + +### 入出力パラメータ + +| COPY句 | ZANTIMAC | +|------------|----------| + +| NO | 入出力区分 | 名称 | 属性 | 桁数 | 説明 | +|----|-----------|------|------|------|------| +| 1 | I | T01TIMHRS | 9(4)V9(1) | 4.1 | 入力時間(HH.h) | +| 2 | O | T01TIMOUT | 9(4)V9(1) | 4.1 | 出力時間(丸め後) | +| 3 | I | T01TIMRRC | 9(4) | 4 | 丸めモード(0:0.5h切上,1:0.1h切上,2:0.1h切捨,3:単純四捨五入) | + +### リターンコード一覧 + +| NO | コード | 説明 | +|----|--------|------| +| 1 | 0000 | 正常終了 | + +--- + +## 処理詳細 + +``` +1.制御処理(0000MAINSOR) + 1-1.T01TIMRRCにより丸めモードを分岐する。 + 1-1-1.T01TIMRRC = 0 の場合(0.5時間単位・切上) + 2000RNDHALFへ。 + 1-1-2.T01TIMRRC = 1 の場合(0.1時間単位・切上) + 3000RNDUP01へ。 + 1-1-3.T01TIMRRC = 2 の場合(0.1時間単位・切捨) + 4000RNDDN01へ。 + 1-1-4.T01TIMRRC = 3 の場合(単純四捨五入・0.1h単位) + 5000RNDNORMへ。 + 1-1-5.その他の場合 + T01TIMOUT = T01TIMHRS をそのまま設定する。 + 1-2.復帰(GOBACK)。 + +2.0.5時間単位・切上(2000RNDHALF) + 2-1.T01TIMHRSを分に変換する。 + WRK-MIN = T01TIMHRS * 60. + 2-2.30分単位で切り上げる。 + WRK-R = FUNCTION MOD(WRK-MIN, 30). + 2-2-1.WRK-R > 0 の場合 + WRK-MIN = ((WRK-MIN / 30) + 1) * 30. + 2-2-2.WRK-R = 0 の場合 + そのまま。 + 2-3.時間に戻す。 + T01TIMOUT = WRK-MIN / 60. + 2-4.復帰(0000MAINSOR-EXTへ)。 + +3.0.1時間単位・切上(3000RNDUP01) + 3-1.T01TIMHRSを分に変換する。 + WRK-MIN = T01TIMHRS * 60. + 3-2.6分単位で切り上げる。 + WRK-R = FUNCTION MOD(WRK-MIN, 6). + 3-2-1.WRK-R > 0 の場合 + WRK-MIN = ((WRK-MIN / 6) + 1) * 6. + 3-2-2.WRK-R = 0 の場合 + そのまま。 + 3-3.時間に戻す。 + T01TIMOUT = WRK-MIN / 60. + 3-4.復帰(0000MAJSOR-EXTへ)。 + +4.0.1時間単位・切捨(4000RNDDN01) + 4-1.T01TIMHRSを分に変換する。 + WRK-MIN = T01TIMHRS * 60. + 4-2.6分単位で切り捨てる。 + WRK-MIN = (WRK-MIN / 6) * 6. + 4-3.時間に戻す。 + T01TIMOUT = WRK-MIN / 60. + 4-4.復帰(0000MAJSOR-EXTへ)。 + +5.単純四捨五入・0.1h単位(5000RNDNORM) + 5-1.T01TIMHRSに0.05を加算する。 + WRK-WK = T01TIMHRS + 0.05. + 5-2.小数点第2位以下を切り捨てる。 + T01TIMOUT = WRK-WK. + *> 9(4)V9(1)へのMOVEにより自動で切捨 + 5-3.復帰(0000MAJSOR-EXTへ)。 +``` diff --git a/詳細設計書/詳細設計書_ZAN01CHK.md b/詳細設計書/詳細設計書_ZAN01CHK.md new file mode 100644 index 0000000..50faf83 --- /dev/null +++ b/詳細設計書/詳細設計書_ZAN01CHK.md @@ -0,0 +1,143 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 残業統計管理システム | +| 2 | プログラムID | ZAN01CHK | +| 3 | プログラム名 | 残業申請振分処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | 振り分け | +| 6 | 機能概要 | CSV形式の残業申請ファイルを読み込み、ステータスによって振り分ける。 | +| 7 | | ステータス0/1:有効申請としてOVT-VALIDに出力 | +| 8 | | ステータス9:取消申請としてOVT-CANCELに出力 | +| 9 | | その他:エラーとしてERROR-LOGに出力 | + +※PGMパターン:マッチング(1:1、1:N、M:N)、レイアウト編集のみ(GETPUT)、項目チェック、振り分け、キーブレイク、キーブレイク(集計、集約)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | OVT-APPLY(CSV) | ソート不要。CSV形式(カンマ区切り) | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | OVT-APPLY | R01 | ZAN01R01 | I | 自前(80B) | F | | 80 | PS | CSV形式 | +| 2 | OVT-VALID | W01 | ZAN01W01 | O | ZAN01REC | FB | | 80 | PS | | +| 3 | OVT-CANCEL | W02 | ZAN01W02 | O | ZAN01REC | FB | | 80 | PS | | +| 4 | ERROR-LOG | W03 | ZAN01W03 | O | ZAN05REC | VB | | 200 | PS | | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | OVT-APPLY | なし | なし | + +### 使用モジュール一覧 + +| NO | 機能 | プログラムID | 使用COPY名 | +|----|------|-------------|-----------| +| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC | +| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC | +| 3 | ABEND処理SUB | SUB03END | ZANENDAC | +| 4 | 項目チェックSUB | SUB04CHK | ZANCHKAC | + +--- + +## 処理詳細 + +``` +1.初期処理(1000ITTSOR) + 1-1.開始メッセージ出力 + 【メッセージ編集】 + メッセージ番号:1(開始メッセージ) + 1-2.コンパイル日時出力 + 【メッセージ編集】 + メッセージ番号:33(コンパイル日時) + PARM1:コンパイル日時 + PARM2:'COMPILED' + 1-3.ワークエリアの初期化 + 1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。 + 復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。 + 【メッセージ編集】 + メッセージ番号:5(サブエラー) + PARM1:'SUB01DAT' + PARM2:復帰コード + 【ABEND処理SUB】 + ABENDコード:999 + 1-5.使用ファイルのオープン + 1-6.R01を読み込む。(1100R01INNSOR)(1回目) + +2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す) + 2-1.CSVの分解 + UNSTRINGでカンマ区切りのCSVを各項目に分解する。(2010CSVSOR) + 2-2.ステータス判定 + 2-2-1.ステータスが0または1の場合 + 項目チェックを実施し、エラーがあればERROR-LOGに出力、なければOVT-VALIDに出力。(2020VALIDATESOR) + 2-2-1-1.日付チェック(SUB04CHK)。エラー→W03出力 + 2-2-1-2.開始時刻>=1830チェック。NG→W03出力 + 2-2-1-3.開始時刻<終了時刻チェック。NG→W03出力 + 2-2-1-4.時間差>=30分チェック。NG→W03出力 + 2-2-1-5.すべて通過→W01出力 + 2-2-2.ステータスが9の場合 + OVT-CANCELにそのまま出力する。(2030CANCELSOR) + 2-2-3.その他の場合 + ERROR-LOGに出力する。(2040ERRORSOR) + 2-3.R01を読み込む。(1100R01INNSOR)(2件目以降) + +3.終了処理(3000STPSOR) + 3-1.入出力ファイルのクローズ + 3-2.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:当該入力ファイルのDD名 + PARM2:当該入力ファイルの件数 + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:当該出力ファイルのDD名 + PARM2:当該出力ファイルの件数 + 3-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/OVT-VALID) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | APPL-ID | CSV同項目を設定 | | +| 2 | EMP-ID | CSV同項目を設定 | | +| 3 | APPL-DATE | CSV同項目を設定 | | +| 4 | START-TIME | CSV同項目を設定 | | +| 5 | END-TIME | CSV同項目を設定 | | +| 6 | STATUS | CSV同項目を設定 | 0または1 | +| 7 | OVT-TYPE | CSV同項目を設定 | | +| 8 | FILLER | CSV同項目を設定 | | + +### 出力ファイル2(W02/OVT-CANCEL) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | APPL-ID | CSV同項目を設定 | | +| 2 | EMP-ID | CSV同項目を設定 | | +| 3 | APPL-DATE | CSV同項目を設定 | | +| 4 | START-TIME | CSV同項目を設定 | | +| 5 | END-TIME | CSV同項目を設定 | | +| 6 | STATUS | CSV同項目を設定 | 9 | +| 7 | OVT-TYPE | CSV同項目を設定 | | +| 8 | FILLER | CSV同項目を設定 | | + +### 出力ファイル3(W03/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 01で固定 | | +| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 | diff --git a/詳細設計書/詳細設計書_ZAN02CHK.md b/詳細設計書/詳細設計書_ZAN02CHK.md new file mode 100644 index 0000000..275ba02 --- /dev/null +++ b/詳細設計書/詳細設計書_ZAN02CHK.md @@ -0,0 +1,122 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 残業統計管理システム | +| 2 | プログラムID | ZAN02CHK | +| 3 | プログラム名 | 時間帯重複チェック処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | 項目チェック | +| 6 | 機能概要 | OVT-VSORTファイルの同一社員・同一日付内の時間帯重複をチェックする。 | +| 7 | | 重複なしのレコードはOVT-NODUPに出力 | +| 8 | | 重複ありのレコードはERROR-LOGに出力 | + +※PGMパターン:マッチング(1:1、1:N、M:N)、レイアウト編集のみ(GETPUT)、項目チェック、振り分け、キーブレイク、キーブレイク(集計、集約)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | OVT-VSORT | 社員番号>日付>開始時刻で昇順ソート済み | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | OVT-VSORT | R01 | ZAN02R01 | I | ZAN01REC | FB | | 80 | PS | | +| 2 | OVT-NODUP | W01 | ZAN02W01 | O | ZAN01REC | FB | | 80 | PS | | +| 3 | ERROR-LOG | W02 | ZAN02W02 | O | ZAN05REC | VB | | 200 | PS | | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | OVT-VSORT | EMP-ID>APPL-DATE>START-TIME(昇順) | EMP-ID>APPL-DATE | + +### 使用モジュール一覧 + +| 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.運用日付取得SUB(SUB01DAT)により運用日を取得する。 + 復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。 + 【メッセージ編集】 + メッセージ番号:5(サブエラー) + PARM1:'SUB01DAT' + PARM2:復帰コード + 【ABEND処理SUB】 + ABENDコード:999 + 1-5.使用ファイルのオープン + 1-6.R01を読み込む。(1100R01INNSOR)(1回目) + 1-7.1件目をW01に出力し、前レコードに保持する。 + +2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す) + 2-1.前レコードとの比較 + 2-1-1.同一社員番号かつ同一日付の場合 + 2-1-1-1.前終了時刻>現開始時刻 → 重複あり(2011OVERLAPERRSOR) + エラーカテゴリ02でERROR-LOGに出力 + 2-1-1-2.前終了時刻<=現開始時刻 → 重複なし(2012NORMALOUTSOR) + W01に出力 + 2-1-2.異なる社員番号または日付の場合(キーブレイク) + キーブレイク処理として前レコードを更新しW01に出力(2013KEYBRSOR) + 2-2.R01を読み込む。(1100R01INNSOR)(2件目以降) + +3.終了処理(3000STPSOR) + 3-1.入出力ファイルのクローズ + 3-2.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:当該入力ファイルのDD名 + PARM2:当該入力ファイルの件数 + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:当該出力ファイルのDD名 + PARM2:当該出力ファイルの件数 + 3-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/OVT-NODUP) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | APPL-ID | R01.同項目を設定 | | +| 2 | EMP-ID | R01.同項目を設定 | | +| 3 | APPL-DATE | R01.同項目を設定 | | +| 4 | START-TIME | R01.同項目を設定 | | +| 5 | END-TIME | R01.同項目を設定 | | +| 6 | STATUS | R01.同項目を設定 | | +| 7 | OVT-TYPE | R01.同項目を設定 | | +| 8 | FILLER | R01.同項目を設定 | | + +### 出力ファイル2(W02/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 02で固定 | 重複エラー | +| 2 | ERR-DETAIL | STRINGで編集 | EMP-IDと日付を編集 | diff --git a/詳細設計書/詳細設計書_ZAN03CHK.md b/詳細設計書/詳細設計書_ZAN03CHK.md new file mode 100644 index 0000000..f87e5f4 --- /dev/null +++ b/詳細設計書/詳細設計書_ZAN03CHK.md @@ -0,0 +1,123 @@ +# 詳細設計書 + +## 基本情報 + +| # | 項目 | 内容 | +|---|------|------| +| 1 | システム名 | 残業統計管理システム | +| 2 | プログラムID | ZAN03CHK | +| 3 | プログラム名 | 打刻時間照合処理 | +| 4 | PGMタイプ | メイン | +| 5 | PGMパターン | 項目チェック | +| 6 | 機能概要 | OVT-NODUPとPUNCH-SORTEDを突合し申請時間帯の照合を行う。 | +| 7 | | 申請時間帯が出勤〜退勤の範囲内かを確認する。 | +| 8 | | 申請日が休日かを判定しOVT-TYPEを付加する。 | + +※PGMパターン:マッチング(1:1、1:N、M:N)、レイアウト編集のみ(GETPUT)、項目チェック、振り分け、キーブレイク、キーブレイク(集計、集約)、DB更新 + +### 前提条件 + +| NO | 対象ファイル | 条件 | +|----|-------------|------| +| 1 | OVT-NODUP | 社員番号>日付で昇順ソート済み | +| 2 | PUNCH-SORTED | 社員番号>日付で昇順ソート済み | + +### 使用ファイル一覧 + +| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 | +|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------| +| 1 | OVT-NODUP | R01 | ZAN03R01 | I | ZAN01REC | FB | | 80 | PS | | +| 2 | PUNCH-SORTED | R02 | ZAN03R02 | I | 自前(80B) | FB | | 80 | PS | | +| 3 | HOLIDAY-FILE | R03 | ZAN03R03 | I | 自前(80B) | FB | | 80 | PS | 休日カレンダー | +| 4 | OVT-CHECKED | W01 | ZAN03W01 | O | ZAN01REC | FB | | 80 | PS | | +| 5 | ERROR-LOG | W02 | ZAN03W02 | O | ZAN05REC | VB | | 200 | PS | | + +### キー項目一覧 + +| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) | +|----|-----------|---------------------|-------------------------------------------| +| 1 | OVT-NODUP | EMP-ID>APPL-DATE(昇順) | EMP-ID>APPL-DATE | +| 2 | PUNCH-SORTED | EMP-ID>DATE(昇順) | EMP-ID>DATE | + +### 使用モジュール一覧 + +| NO | 機能 | プログラムID | 使用COPY名 | +|----|------|-------------|-----------| +| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC | +| 2 | ABEND処理SUB | SUB03END | ZANENDAC | + +※ ZAN03CHKはFUNCTION CURRENT-DATEを使用し、SUB01DATは使用しない。 + +--- + +## 処理詳細 + +``` +1.初期処理(1000ITTSOR) + 1-1.開始メッセージ出力 + 【メッセージ編集】 + メッセージ番号:1(開始メッセージ) + 1-2.コンパイル日時出力 + 【メッセージ編集】 + メッセージ番号:33(コンパイル日時) + PARM1:コンパイル日時 + PARM2:'COMPILED' + 1-3.ワークエリアの初期化 + 1-4.日付取得(FUNCTION CURRENT-DATE) + FUNCTION CURRENT-DATEにより現在日付を取得する。 + 1-5.使用ファイルのオープン + 1-6.HOLIDAY-FILEを全件読込しHOLIDAY-TABLEに設定する。(1300HOLIDAYSOR) + 1-7.R01を読み込む。(1100R01INNSOR)(1回目) + 1-8.R02を読み込む。(1200R02INNSOR)(1回目) + +2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す) + 2-1.R01キーとR02キーを比較 + 2-1-1.R01キー < R02キー(打刻データなし) + ERROR-LOGにエラー出力する(エラーカテゴリ03)。(2010NOMATCHSOR) + 2-1-2.R01キー = R02キー(マッチ) + 時間範囲チェックを実施する。(2020MATCHSOR→2100CHKTIMSOR) + 2-1-2-1.開始時刻>=出勤時刻 かつ 終了時刻<=退勤時刻 → 通過 + OVT-TYPEを設定しW01に出力する。(2200SETOVTSOR) + 2-1-2-2.範囲外 → ERROR-LOGに出力(エラーカテゴリ03) + 2-1-3.R01キー > R02キー(R02スキップ) + R02を1件読み進める。(1200R02INNSOR) + +3.終了処理(3000STPSOR) + 3-1.入出力ファイルのクローズ + 3-2.入出力件数出力メッセージ出力 + 【入力メッセージ編集】 + メッセージ番号:6(入力件数メッセージ) + PARM1:当該入力ファイルのDD名 + PARM2:当該入力ファイルの件数 + 【出力メッセージ編集】 + メッセージ番号:7(出力件数メッセージ) + PARM1:当該出力ファイルのDD名 + PARM2:当該出力ファイルの件数 + 3-3.終了メッセージ出力 + 【メッセージ編集】 + メッセージ番号:2(終了メッセージ) +``` + +--- + +## 出力レコード定義 + +### 出力ファイル1(W01/OVT-CHECKED) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | APPL-ID | R01.同項目を設定 | | +| 2 | EMP-ID | R01.同項目を設定 | | +| 3 | APPL-DATE | R01.同項目を設定 | | +| 4 | START-TIME | R01.同項目を設定 | | +| 5 | END-TIME | R01.同項目を設定 | | +| 6 | STATUS | R01.同項目を設定 | | +| 7 | OVT-TYPE | 2200SETOVTSORで設定 | W:平日/H:休日 | +| 8 | FILLER | R01.同項目を設定 | | + +### 出力ファイル2(W02/ERROR-LOG) + +| No | 項目名 | 設定元 | 備考 | +|----|--------|--------|------| +| 1 | ERR-CATEGORY | 03で固定 | 打刻不突合 | +| 2 | ERR-DETAIL | STRINGで編集 | 社員番号と日付を編集 |