diff --git a/README.md b/README.md index 3627d6f..917c449 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,8 @@ production/ ├── cpy/ # COPY書式ファイル(レコード定義・連絡領域) ├── bin/ # 実行ファイル(.exe)+サブプログラムDLL(.dll) ├── design/ # サブシステム全体設計書 -└── 詳細設計書/ # 詳細設計ドキュメント +├── 詳細設計書/ # 詳細設計ドキュメント +└── 使用資源一覧/ # 使用資源一覧(COPY・CALL・I/Oファイル・DBテーブル) ``` ## サブシステム構成 diff --git a/bin/ZAN02CHK.exe b/bin/ZAN02CHK.exe index 9e37c47..e5a4180 100644 Binary files a/bin/ZAN02CHK.exe and b/bin/ZAN02CHK.exe differ diff --git a/bin/ZAN03CHK.exe b/bin/ZAN03CHK.exe index 27a7537..b213b52 100644 Binary files a/bin/ZAN03CHK.exe and b/bin/ZAN03CHK.exe differ diff --git a/bin/ZAN04MAT.exe b/bin/ZAN04MAT.exe index a1da98d..4d12394 100644 Binary files a/bin/ZAN04MAT.exe and b/bin/ZAN04MAT.exe differ diff --git a/bin/ZAN05CAL.exe b/bin/ZAN05CAL.exe index ab70b5f..262d585 100644 Binary files a/bin/ZAN05CAL.exe and b/bin/ZAN05CAL.exe differ diff --git a/design/02_残業統計管理システム_設計書(サブシステムB).md b/design/02_残業統計管理システム_設計書(サブシステムB).md index caf332e..299846c 100644 --- a/design/02_残業統計管理システム_設計書(サブシステムB).md +++ b/design/02_残業統計管理システム_設計書(サブシステムB).md @@ -427,7 +427,7 @@ OVT-VSORT は既に社員番号+日付+開始時刻でソート済。順次READ | **入力ファイル** | OVT-NODUP(80B)/ PUNCH-SORTED(80B) | | **出力ファイル** | OVT-CHECKED(80B)/ ERROR-LOG(VB) | | **件数変化** | K件 → 通過P件 + エラー(K-P)件 | -| **使用共通関数** | SUB02MSG(メッセージ), SUB03END(ABEND) | +| **使用共通関数** | SUB02MSG(メッセージ) | **機能:** @@ -449,12 +449,7 @@ Aサブシステムと同一の休日定義に従う(HOLIDAY-FILEファイル ##### 休日ファイル初期化手順 -初期処理(1000ITTSOR相当)で以下の手順によりHOLIDAY-TABLEを構築する。 - -1. FUNCTION CURRENT-DATE で処理日を取得 -2. 処理日の年月から該当月の初日〜末日を算出 -3. 各日について曜日判定(土日またはHOLIDAY-FILE該当)を行い、 - 休日=該当月内の全祝日レコードをWORKING-STORAGEのHOLIDAY-TABLEに格納 +初期処理(1000ITTSOR)でHOLIDAY-FILEを全件READし、WORKING-STORAGEのHOLIDAY-TABLEに格納する。 ``` * 休日データ取得(ファイル読込み) @@ -492,7 +487,7 @@ END-SEARCH - HOLIDAY-FILE該当 → OVT-TYPE='H' - 該当なし → OVT-TYPE='W' -**MOVE** で OVT-TYPE を設定。**FUNCTION CURRENT-DATE** で処理日を取得し、曜日計算の補助に使用。 +**MOVE** で OVT-TYPE を設定。 全通過レコードは OVT-TYPE を付加して OVT-CHECKED に書出し。 diff --git a/src/ZAN02CHK.cbl b/src/ZAN02CHK.cbl index 6487d11..ac853aa 100644 --- a/src/ZAN02CHK.cbl +++ b/src/ZAN02CHK.cbl @@ -106,8 +106,6 @@ 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). * ***************************************************************** * サブプログラム連絡領域 * @@ -160,7 +158,6 @@ * *** ワークエリア初期化 INITIALIZE WRKARA. - MOVE '1' TO WRK-FIRST-FLG. * *** 運用日付取得 INITIALIZE D01UBSPAR. @@ -360,4 +357,4 @@ CALL 'SUB03END' USING E01ABDPAR. * 9999ABDSOR-EXT. - EXIT. + EXIT. \ No newline at end of file diff --git a/src/ZAN03CHK.cbl b/src/ZAN03CHK.cbl index 0982e1d..ed61835 100644 --- a/src/ZAN03CHK.cbl +++ b/src/ZAN03CHK.cbl @@ -99,12 +99,12 @@ 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'. @@ -158,8 +158,7 @@ ***************************************************************** *** メッセージ編集出力SR用 COPY ZANMSGAC. - *** ABEND処理SR用 - COPY ZANENDAC. + * PROCEDURE DIVISION. ***************************************************************** @@ -203,8 +202,7 @@ *** ワークエリア初期化 INITIALIZE WRKARA. * - *** 現在日付取得(FUNCTION CURRENT-DATE) - MOVE FUNCTION CURRENT-DATE TO WRK-HOLIDAY-CNT. + * *** 入出力ファイルOPEN OPEN INPUT R01INNFIL @@ -465,15 +463,4 @@ * 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/ZAN04MAT.cbl b/src/ZAN04MAT.cbl index 3914358..836b10f 100644 --- a/src/ZAN04MAT.cbl +++ b/src/ZAN04MAT.cbl @@ -119,9 +119,7 @@ ***************************************************************** * 作業領域 * ***************************************************************** - 01 WRKARA. - *** 運用日付 - 03 WRK-U06 PIC 9(008). + 01 WRKARA. *** マッチングキー 03 WRK-R01KEY PIC X(008). 03 WRK-R02KEY PIC X(008). @@ -182,16 +180,14 @@ *** 運用日付取得 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. + IF D01FKICOD NOT = ZERO + 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 diff --git a/src/ZAN05CAL.cbl b/src/ZAN05CAL.cbl index 5d4aa1a..94d3038 100644 --- a/src/ZAN05CAL.cbl +++ b/src/ZAN05CAL.cbl @@ -82,8 +82,6 @@ 01 WRKARA. *** 処理日付(ACCEPT FROM DATE用) 03 WRK-DATE-8 PIC 9(008). - *** 運用日付 - 03 WRK-U06 PIC 9(008). *** キーブレイク制御 03 WRK-R01KEY PIC X(008). 03 WRK-PREV-APPL-ID PIC X(008). @@ -181,9 +179,7 @@ *** 運用日付取得 INITIALIZE D01UBSPAR. CALL 'SUB01DAT' USING D01UBSPAR. - IF D01FKICOD = ZERO - MOVE D01UBSUDATE TO WRK-U06 - ELSE + IF D01FKICOD NOT = ZERO INITIALIZE M00MHOPAR MOVE CNS-MSGSUBEEK TO M00MSGCOD MOVE 'SUB01DAT' TO M00UMKDATS22-01 @@ -397,4 +393,4 @@ CALL 'SUB03END' USING E01ABDPAR. * 9999ABDSOR-EXT. - EXIT. \ No newline at end of file + EXIT. diff --git a/使用資源一覧/ZAN01CHK_使用資源一覧.md b/使用資源一覧/ZAN01CHK_使用資源一覧.md new file mode 100644 index 0000000..c7f5e45 --- /dev/null +++ b/使用資源一覧/ZAN01CHK_使用資源一覧.md @@ -0,0 +1,48 @@ +# ZAN01CHK 使用資源一覧 + +## プログラム概要 +- **プログラムID**: ZAN01CHK +- **プログラム名**: 残業申請振分処理 +- **処理概要**: CSV形式の残業申請ファイルを読み込み、ステータスによって適切に振り分ける。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| ZAN01R01 | 入力CSV | 順編成 | F (固定長) | 80B | なし(自前定義) | +| ZAN01W01 | OVT-APPLY | 順編成 | F (固定長) | 80B | ZAN01REC | +| ZAN01W02 | OVT-CANCEL | 順編成 | F (固定長) | 80B | ZAN01REC | +| ZAN01W03 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| ZAN01REC | レコード定義(W01/W02出力ファイル) | FILE SECTION | +| ZAN05REC | エラーログレコード定義(W03出力ファイル) | FILE SECTION | +| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | +| ZANCHKAC | 項目チェックサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | +| SUB04CHK | 日付妥当性チェック | 2020VALIDATESOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→運用日付取得→OPEN→初回読込) +2. CSV分解(UNSTRING) +3. ステータス判定 + - ステータス'0'/'1'(有効)→ 項目チェック(SUB04CHK)→ W01出力 + - ステータス'9'(取消)→ W02出力 + - その他(エラー)→ W03出力 +4. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/ZAN02CHK_使用資源一覧.md b/使用資源一覧/ZAN02CHK_使用資源一覧.md new file mode 100644 index 0000000..0cd1b7f --- /dev/null +++ b/使用資源一覧/ZAN02CHK_使用資源一覧.md @@ -0,0 +1,45 @@ +# ZAN02CHK 使用資源一覧 + +## プログラム概要 +- **プログラムID**: ZAN02CHK +- **プログラム名**: 時間帯重複チェック処理 +- **処理概要**: OVT-APPLYファイルの同一社員・同一日付内の開始時刻と終了時刻の重複をチェックする。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| ZAN02R01 | OVT-APPLY | 順編成 | F (固定長) | 80B | ZAN01REC | +| ZAN02W01 | OVT-NODUP | 順編成 | F (固定長) | 80B | ZAN01REC | +| ZAN02W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| ZAN01REC | レコード定義(R01入力/W01出力) | FILE SECTION | +| ZAN05REC | エラーログレコード定義(W02出力) | FILE SECTION | +| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→運用日付取得→OPEN→初回読込) +2. 1件目をそのままW01出力+前レコード保持 +3. メイン処理:キー比較 + - 同一社員+同一日付 かつ 前終了時刻>現開始時刻 → 重複エラー(W02出力) + - 同一社員+同一日付 かつ 重複なし → W01出力+前レコード更新 + - キーブレイク → 前レコード更新+W01出力 +4. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/ZAN03CHK_使用資源一覧.md b/使用資源一覧/ZAN03CHK_使用資源一覧.md new file mode 100644 index 0000000..d4b6461 --- /dev/null +++ b/使用資源一覧/ZAN03CHK_使用資源一覧.md @@ -0,0 +1,49 @@ +# ZAN03CHK 使用資源一覧 + +## プログラム概要 +- **プログラムID**: ZAN03CHK +- **プログラム名**: 打刻時間照合処理 +- **処理概要**: OVT-NODUPとPUNCH-SORTEDを突合し申請時間帯の照合を行う。申請時間帯が出勤〜退勤の範囲内かを確認する。申請日が休日かを判定しOVT-TYPEを付加する。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| ZAN03R01 | OVT-NODUP | 順編成 | F (固定長) | 80B | ZAN01REC | +| ZAN03R02 | PUNCH-SORTED | 順編成 | F (固定長) | 80B | なし(自前定義:20B+56B) | +| ZAN03R03 | HOLIDAY | 順編成 | F (固定長) | 80B | なし(自前定義:9B+71B) | +| ZAN03W01 | OVT-CHECKED | 順編成 | F (固定長) | 80B | ZAN01REC | +| ZAN03W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| ZAN01REC | レコード定義(R01入力/W01出力) | FILE SECTION | +| ZAN05REC | エラーログレコード定義(W02出力) | FILE SECTION | +| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→OPEN) +2. 休日ファイル(R03)全件読込→HOLIDAY-TABLE設定(OCCURS 1~366) +3. メイン処理:R01とR02のキー比較(社員番号+日付) + - R01 < R02 → 打刻データなしエラー(W02出力) + - R01 = R02 → 時間範囲チェック + - 申請時間帯が出勤〜退勤の範囲内 → OVT-TYPE設定(SEARCH ALL休日判定)→ W01出力 + - 範囲外 → エラー(W02出力) + - R01 > R02 → R02読み飛ばし +4. 終了処理(CLOSE→件数出力→終了メッセージ) + +## 備考 +- SUB01DAT不使用:日付取得不要のためFUNCTION CURRENT-DATEも使用しない +- R02FILLER = 56B(PUNCH-SORTEDのフォーマット:社員番号8B+日付8B+出勤4B+退勤4B+予備56B) \ No newline at end of file diff --git a/使用資源一覧/ZAN04MAT_使用資源一覧.md b/使用資源一覧/ZAN04MAT_使用資源一覧.md new file mode 100644 index 0000000..93c8f6d --- /dev/null +++ b/使用資源一覧/ZAN04MAT_使用資源一覧.md @@ -0,0 +1,48 @@ +# ZAN04MAT 使用資源一覧 + +## プログラム概要 +- **プログラムID**: ZAN04MAT +- **プログラム名**: 取消マッチング処理 +- **処理概要**: OVT-SORTED(有効申請)とOVT-CSORT(取消申請)を申請番号で1:1マッチングし、結果を振り分ける。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| ZAN04R01 | OVT-SORTED | 順編成 | F (固定長) | 80B | ZAN01REC | +| ZAN04R02 | OVT-CSORT | 順編成 | F (固定長) | 80B | ZAN01REC | +| ZAN04W01 | OVT-MATCHED | 順編成 | F (固定長) | 80B | ZAN02REC | +| ZAN04W02 | OVT-DBCLEAN | 順編成 | F (固定長) | 80B | ZAN04REC | +| ZAN04W03 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| ZAN01REC | レコード定義(R01/R02入力ファイル) | FILE SECTION | +| ZAN02REC | OVT-MATCHEDレコード定義(W01出力) | FILE SECTION | +| ZAN04REC | OVT-DBCLEANレコード定義(W02出力) | FILE SECTION | +| ZAN05REC | エラーログレコード定義(W03出力) | FILE SECTION | +| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→運用日付取得→OPEN→R01/R02初回読込) +2. メイン処理:マッチング(申請番号APPL-IDで1:1突合) + - R01キー = R02キー(マッチ) → 取消済み申請をERROR-LOG(W03)に出力 + - R01キー < R02キー(R01のみ) → 有効申請をOVT-MATCHED(W01)に出力(STRING編集でPROC-SEQ=01付加) + - R01キー > R02キー(R02のみ) → 取消申請をOVT-DBCLEAN(W02)に出力 +3. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/ZAN05CAL_使用資源一覧.md b/使用資源一覧/ZAN05CAL_使用資源一覧.md new file mode 100644 index 0000000..1f00509 --- /dev/null +++ b/使用資源一覧/ZAN05CAL_使用資源一覧.md @@ -0,0 +1,50 @@ +# ZAN05CAL 使用資源一覧 + +## プログラム概要 +- **プログラムID**: ZAN05CAL +- **プログラム名**: 残業時間集計処理 +- **処理概要**: OVT-SORTED2(申請番号+処理番号昇順)をキーブレイク集計し、同一APPL-ID内の全明細の加班時間を積算してOVT-SUMMARYに1レコード出力。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| ZAN05R01 | OVT-SORTED2 | 順編成 | F (固定長) | 80B | ZAN02REC | +| ZAN05W01 | OVT-SUMMARY | 順編成 | F (固定長) | 80B | ZAN03REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| ZAN02REC | OVT-MATCHEDレコード定義(R01入力) | FILE SECTION | +| ZAN03REC | OVT-SUMMARYレコード定義(W01出力) | FILE SECTION | +| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | +| ZANTIMAC | 時刻丸めサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | +| SUB05TIM | 時刻丸め(0.1h単位切捨) | 2100OUTSOR | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始メッセージ→ACCEPT FROM DATE→運用日付取得→OPEN→初回読込) +2. キーブレイク集計ループ + - キー変わり(APPL-ID) → 前グループ集計出力+累積リセット+新グループ開始 + - 同一グループ → 現レコード時間差分をWRK-ACCUM-MINに積算+最新レコード上書き保持 + - EOF → 最終グループを出力 +3. 集計出力処理(2100OUTSOR) + - DIVIDE REMAINDERで時→分変換 + - COMPUTE ROUNDED ON SIZE ERROR + - SUB05TIM呼出(0.1h単位切捨て丸め) + - OVT-SUMMARY出力(グループ先頭START・最新END・積算OVT-HOURS) +4. 終了処理(CLOSE→件数出力→終了メッセージ) diff --git a/使用資源一覧/ZAN06UPD_使用資源一覧.md b/使用資源一覧/ZAN06UPD_使用資源一覧.md new file mode 100644 index 0000000..00fe3c5 --- /dev/null +++ b/使用資源一覧/ZAN06UPD_使用資源一覧.md @@ -0,0 +1,72 @@ +# ZAN06UPD 使用資源一覧 + +## プログラム概要 +- **プログラムID**: ZAN06UPD +- **プログラム名**: 残業統計DB更新処理 +- **処理概要**: OVT-SUMMARYの各レコードをDBにINSERT/UPSERTし、OVT-DBCLEANの各レコードについて該当申請を取消状態に更新する。DB2テーブル操作を含む全サブシステムB唯一のDB更新プログラム。 + +## 使用ファイル + +| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | +|------|---------------|------|-------------|-----------|--------| +| ZAN06R01 | OVT-SUMMARY | 順編成 | F (固定長) | 80B | ZAN03REC | +| ZAN06R02 | OVT-DBCLEAN | 順編成 | F (固定長) | 80B | ZAN04REC | +| ZAN06W01 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC | + +## 使用COPY句 + +| COPY句 | 用途 | 使用箇所 | +|--------|------|---------| +| ZAN03REC | OVT-SUMMARYレコード定義(R01入力) | FILE SECTION | +| ZAN04REC | OVT-DBCLEANレコード定義(R02入力) | FILE SECTION | +| ZAN05REC | エラーログレコード定義(W01出力) | FILE SECTION | +| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE | +| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE | +| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE | + +## 使用サブプログラム + +| サブPGM | 役割 | CALL箇所 | +|---------|------|---------| +| SUB01DAT | 運用日付取得 | 1000ITTSOR | +| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR | +| SUB03END | ABEND処理 | 9999ABDSOR | + +## 使用DB2テーブル + +| テーブル名 | 操作種別 | 説明 | +|------------|---------|------| +| OVT_APPLICATIONS | INSERT / UPDATE | 申請データ登録・更新(取消) | +| OVT_MONTHLY | SELECT / INSERT / UPDATE | 月次集計テーブル(加算・減算) | + +## 実行SQL一覧 + +| SQL種別 | 内容 | 該当箇所 | +|---------|------|---------| +| CONNECT TO | DB接続(data\OVERTIME.DB) | 1000ITTSOR | +| INSERT INTO ... OVT_APPLICATIONS | 申請データ新規登録 | 2100SUMMARYSOR | +| UPDATE ... OVT_APPLICATIONS | 重複時更新(STATUS) | 2100SUMMARYSOR | +| SELECT ... OVT_MONTHLY | 月次集計存在確認 | 2110MONTHLYUPSOR | +| UPDATE ... OVT_MONTHLY (+加算) | 月次集計加算 | 2110MONTHLYUPSOR | +| INSERT INTO ... OVT_MONTHLY | 月次集計新規作成 | 2110MONTHLYUPSOR | +| SELECT ... OVT_APPLICATIONS | 取消データ取得 | 2200DBCLEANSOR | +| UPDATE ... OVT_APPLICATIONS (取消) | 申請ステータス取消 | 2200DBCLEANSOR | +| UPDATE ... OVT_MONTHLY (-減算) | 月次集計減算(リトライ3回) | 2210MONTHLYSUBSOR | +| COMMIT WORK | 50件毎/最終コミット | 2300COMMITDBX | +| ROLLBACK WORK | DBエラー時ロールバック | 9100DBERRSOR | + +## 処理フロー +1. 初期処理(開始メッセージ→運用日付取得→OPEN→DB CONNECT→R01/R02初回読込) +2. フェーズ1(OVT-SUMMARY処理): + - SQLホスト変数設定(年月抽出・時刻変換・時間→分変換) + - OVT_APPLICATIONSにINSERT + - 成功 → INSERTカウンタ+1 + - 重複エラー(SQLCODE≠0) → UPDATE(STATUS更新) + - OVT_MONTHLY UPSERT(存在確認SELECT→UPDATE/INSERT) + - 50件毎にCOMMIT +3. フェーズ2(OVT-DBCLEAN処理): + - OVT_APPLICATIONSから既存データSELECT + - 該当なし(孤立取消) → ERROR-LOG出力+ABEND(999) + - OVT_APPLICATIONSステータス更新('9'=取消) + - OVT_MONTHLY減算(3回リトライ付きUPDATE) +4. 終了処理(最終COMMIT→CLOSE→件数出力→終了メッセージ) diff --git a/詳細設計書/詳細設計書_ZAN03CHK.md b/詳細設計書/詳細設計書_ZAN03CHK.md index a86d1a2..5394433 100644 --- a/詳細設計書/詳細設計書_ZAN03CHK.md +++ b/詳細設計書/詳細設計書_ZAN03CHK.md @@ -45,9 +45,9 @@ | NO | 機能 | プログラムID | 使用COPY名 | |----|------|-------------|-----------| | 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC | -| 2 | ABEND処理SUB | SUB03END | ZANENDAC | +| 2 | ABEND処理SUB | SUB03END | ZANENDAC |※ コード上では未使用(PERFORM元なし)| -※ ZAN03CHKはFUNCTION CURRENT-DATEを使用し、SUB01DATは使用しない。 +※ ZAN03CHKはSUB01DATを使用しない。日付取得は不要のためFUNCTION CURRENT-DATEも使用しない。 --- @@ -64,9 +64,7 @@ PARM1:コンパイル日時 PARM2:'COMPILED' 1-3.ワークエリアの初期化 - 1-4.日付取得(FUNCTION CURRENT-DATE) - FUNCTION CURRENT-DATEにより現在日付を取得する。 - 1-5.使用ファイルのオープン + 1-4.使用ファイルのオープン 1-6.HOLIDAY-FILEを全件読込しHOLIDAY-TABLEに設定する。(1300HOLIDAYSOR) 1-7.R01を読み込む。(1100R01INNSOR)(1回目) 1-8.R02を読み込む。(1200R02INNSOR)(1回目) diff --git a/詳細設計書/詳細設計書_ZAN05CAL.md b/詳細設計書/詳細設計書_ZAN05CAL.md index 20b7efe..a604f9c 100644 --- a/詳細設計書/詳細設計書_ZAN05CAL.md +++ b/詳細設計書/詳細設計書_ZAN05CAL.md @@ -101,8 +101,8 @@ 3.積算処理(2200ACCUMSOR) 3-1.現レコードの時刻→分変換 - DIVIDE WRK-KEY-START BY 100 GIVING WRK-START-HOUR REMAINDER WRK-START-MIN - DIVIDE WRK-KEY-END BY 100 GIVING WRK-END-HOUR REMAINDER WRK-END-MIN + DIVIDE R01START-TIME BY 100 GIVING WRK-START-HOUR REMAINDER WRK-START-MIN + DIVIDE R01END-TIME BY 100 GIVING WRK-END-HOUR REMAINDER WRK-END-MIN COMPUTE WRK-START-TOTAL = WRK-START-HOUR * 60 + WRK-START-MIN COMPUTE WRK-END-TOTAL = WRK-END-HOUR * 60 + WRK-END-MIN 3-2.差分計算 diff --git a/詳細設計書/詳細設計書_ZAN06UPD.md b/詳細設計書/詳細設計書_ZAN06UPD.md index 133755f..21f98e5 100644 --- a/詳細設計書/詳細設計書_ZAN06UPD.md +++ b/詳細設計書/詳細設計書_ZAN06UPD.md @@ -141,16 +141,20 @@ UPDATED-AT = CURRENT TIMESTAMP WHERE APPL-ID = :WRK-SQL-APPL-ID 2-2-4.YEAR-MONTH抽出:APPL-DATE(1:6) - 2-2-5.OVT-MONTHLYから減算(2210MONTHLYSUBSOR) - 【EXEC SQL UPDATE(減算)+COBOL SUBTRACT検証】 - UPDATE OVT-MONTHLY SET - OVT-HOURS = OVT-HOURS - :WRK-SQL-OVT-HOURS, - OVT-COUNT = OVT-COUNT - 1, - UPDATED-AT = CURRENT TIMESTAMP - WHERE EMP-ID = :WRK-SQL-EMP-ID - AND YEAR-MONTH = :WRK-SQL-YEAR-MONTH - AND OVT-TYPE = :WRK-SQL-OVT-TYPE - SQLCODE異常時は9100DBERRSORへ + 2-2-5.OVT-MONTHLYから減算(2210MONTHLYSUBSOR) + 【EXEC SQL UPDATE(減算)+COBOL SUBTRACT検証】 + UPDATE OVT-MONTHLY SET + OVT-HOURS = OVT-HOURS - :WRK-SQL-OVT-HOURS, + OVT-COUNT = OVT-COUNT - 1, + UPDATED-AT = CURRENT TIMESTAMP + WHERE EMP-ID = :WRK-SQL-EMP-ID + AND YEAR-MONTH = :WRK-SQL-YEAR-MONTH + AND OVT-TYPE = :WRK-SQL-OVT-TYPE + リトライ制御:PERFORM TEST AFTER VARYING(最大3回) + SQLCODE≠0時はROLLBACKしてリトライ + 全リトライ消費後もSQLCODE≠0の場合、 + ERROR-LOG(カテゴリ=21)に出力し9999ABDSORで異常終了する + (9100DBERRSORは通らない) 2-2-6.CUN-COMMITが閾値以上の場合、COMMIT実行(2300COMMITDBX) 3.OVT-MONTHLY UPSERT処理(2110MONTHLYUPSOR)