Subsystem B cleanup: dead code removal, sort-key fix, ZAN04MAT/ZAN05CAL/ZAN06UPD updates, resource lists added

This commit is contained in:
qiuqiuqiu
2026-06-19 12:39:49 +08:00
parent a74a5aaa04
commit 164451dda5
19 changed files with 353 additions and 67 deletions
+2 -1
View File
@@ -11,7 +11,8 @@ production/
├── cpy/ # COPY書式ファイル(レコード定義・連絡領域) ├── cpy/ # COPY書式ファイル(レコード定義・連絡領域)
├── bin/ # 実行ファイル(.exe)+サブプログラムDLL(.dll) ├── bin/ # 実行ファイル(.exe)+サブプログラムDLL(.dll)
├── design/ # サブシステム全体設計書 ├── design/ # サブシステム全体設計書
── 詳細設計書/ # 詳細設計ドキュメント ── 詳細設計書/ # 詳細設計ドキュメント
└── 使用資源一覧/ # 使用資源一覧(COPY・CALL・I/Oファイル・DBテーブル)
``` ```
## サブシステム構成 ## サブシステム構成
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
@@ -427,7 +427,7 @@ OVT-VSORT は既に社員番号+日付+開始時刻でソート済。順次READ
| **入力ファイル** | OVT-NODUP80B/ PUNCH-SORTED80B | | **入力ファイル** | OVT-NODUP80B/ PUNCH-SORTED80B |
| **出力ファイル** | OVT-CHECKED80B/ ERROR-LOGVB | | **出力ファイル** | OVT-CHECKED80B/ ERROR-LOGVB |
| **件数変化** | K件 → 通過P件 + エラー(K-P)件 | | **件数変化** | K件 → 通過P件 + エラー(K-P)件 |
| **使用共通関数** | SUB02MSG(メッセージ), SUB03ENDABEND | | **使用共通関数** | SUB02MSG(メッセージ) |
**機能:** **機能:**
@@ -449,12 +449,7 @@ Aサブシステムと同一の休日定義に従う(HOLIDAY-FILEファイル
##### 休日ファイル初期化手順 ##### 休日ファイル初期化手順
初期処理(1000ITTSOR相当)で以下の手順によりHOLIDAY-TABLEを構築する。 初期処理(1000ITTSOR)でHOLIDAY-FILEを全件READし、WORKING-STORAGEのHOLIDAY-TABLEに格納する。
1. FUNCTION CURRENT-DATE で処理日を取得
2. 処理日の年月から該当月の初日〜末日を算出
3. 各日について曜日判定(土日またはHOLIDAY-FILE該当)を行い、
休日=該当月内の全祝日レコードをWORKING-STORAGEのHOLIDAY-TABLEに格納
``` ```
* 休日データ取得(ファイル読込み) * 休日データ取得(ファイル読込み)
@@ -492,7 +487,7 @@ END-SEARCH
- HOLIDAY-FILE該当 → OVT-TYPE='H' - HOLIDAY-FILE該当 → OVT-TYPE='H'
- 該当なし → OVT-TYPE='W' - 該当なし → OVT-TYPE='W'
**MOVE** で OVT-TYPE を設定。**FUNCTION CURRENT-DATE** で処理日を取得し、曜日計算の補助に使用。 **MOVE** で OVT-TYPE を設定。
全通過レコードは OVT-TYPE を付加して OVT-CHECKED に書出し。 全通過レコードは OVT-TYPE を付加して OVT-CHECKED に書出し。
-3
View File
@@ -106,8 +106,6 @@
05 WRK-PREV-STATUS PIC X(001). 05 WRK-PREV-STATUS PIC X(001).
05 WRK-PREV-OVT-TYPE PIC X(001). 05 WRK-PREV-OVT-TYPE PIC X(001).
05 WRK-PREV-FILLER PIC X(046). 05 WRK-PREV-FILLER PIC X(046).
*** 初回読込フラグ
03 WRK-FIRST-FLG PIC X(001).
* *
***************************************************************** *****************************************************************
* サブプログラム連絡領域 * * サブプログラム連絡領域 *
@@ -160,7 +158,6 @@
* *
*** ワークエリア初期化 *** ワークエリア初期化
INITIALIZE WRKARA. INITIALIZE WRKARA.
MOVE '1' TO WRK-FIRST-FLG.
* *
*** 運用日付取得 *** 運用日付取得
INITIALIZE D01UBSPAR. INITIALIZE D01UBSPAR.
+5 -18
View File
@@ -99,12 +99,12 @@
03 CNS-PRGIDX PIC X(008) VALUE 'ZAN03CHK'. 03 CNS-PRGIDX PIC X(008) VALUE 'ZAN03CHK'.
03 CNS-MSGSTR PIC 9(003) VALUE 001. 03 CNS-MSGSTR PIC 9(003) VALUE 001.
03 CNS-MSGFIN PIC 9(003) VALUE 002. 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-MSGIINKES PIC 9(003) VALUE 006.
03 CNS-MSGOUTKES PIC 9(003) VALUE 007. 03 CNS-MSGOUTKES PIC 9(003) VALUE 007.
03 CNS-MSGKEYINF PIC 9(003) VALUE 033. 03 CNS-MSGKEYINF PIC 9(003) VALUE 033.
03 CNS-KN0002 PIC 9(001) VALUE 2. 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-ERR-CAT03 PIC 9(002) VALUE 03.
03 CNS-OVT-W PIC X(001) VALUE 'W'. 03 CNS-OVT-W PIC X(001) VALUE 'W'.
03 CNS-OVT-H PIC X(001) VALUE 'H'. 03 CNS-OVT-H PIC X(001) VALUE 'H'.
@@ -158,8 +158,7 @@
***************************************************************** *****************************************************************
*** メッセージ編集出力SR用 *** メッセージ編集出力SR用
COPY ZANMSGAC. COPY ZANMSGAC.
*** ABEND処理SR用
COPY ZANENDAC.
* *
PROCEDURE DIVISION. PROCEDURE DIVISION.
***************************************************************** *****************************************************************
@@ -203,8 +202,7 @@
*** ワークエリア初期化 *** ワークエリア初期化
INITIALIZE WRKARA. INITIALIZE WRKARA.
* *
*** 現在日付取得(FUNCTION CURRENT-DATE
MOVE FUNCTION CURRENT-DATE TO WRK-HOLIDAY-CNT.
* *
*** 入出力ファイルOPEN *** 入出力ファイルOPEN
OPEN INPUT R01INNFIL OPEN INPUT R01INNFIL
@@ -465,15 +463,4 @@
* *
4000MSGOUTSOR-EXT. 4000MSGOUTSOR-EXT.
EXIT. EXIT.
*****************************************************************
* サブモジュールNO:(9.9) *
* サブモジュール名: 異常終了処理 *
* 処理概要 : ABEND処理 *
*****************************************************************
9999ABDSOR SECTION.
*
MOVE CNS-ABD999 TO E01ABDCOD.
CALL 'SUB03END' USING E01ABDPAR.
*
9999ABDSOR-EXT.
EXIT.
+9 -13
View File
@@ -119,9 +119,7 @@
***************************************************************** *****************************************************************
* 作業領域 * * 作業領域 *
***************************************************************** *****************************************************************
01 WRKARA. 01 WRKARA.
*** 運用日付
03 WRK-U06 PIC 9(008).
*** マッチングキー *** マッチングキー
03 WRK-R01KEY PIC X(008). 03 WRK-R01KEY PIC X(008).
03 WRK-R02KEY PIC X(008). 03 WRK-R02KEY PIC X(008).
@@ -182,16 +180,14 @@
*** 運用日付取得 *** 運用日付取得
INITIALIZE D01UBSPAR. INITIALIZE D01UBSPAR.
CALL 'SUB01DAT' USING D01UBSPAR. CALL 'SUB01DAT' USING D01UBSPAR.
IF D01FKICOD = ZERO IF D01FKICOD NOT = ZERO
MOVE D01UBSUDATE TO WRK-U06 INITIALIZE M00MHOPAR
ELSE MOVE CNS-MSGSUBEEK TO M00MSGCOD
INITIALIZE M00MHOPAR MOVE 'SUB01DAT' TO M00UMKDATS22-01
MOVE CNS-MSGSUBEEK TO M00MSGCOD MOVE D01FKICOD TO M00UMKDATS22-02
MOVE 'SUB01DAT' TO M00UMKDATS22-01 PERFORM 4000MSGOUTSOR
MOVE D01FKICOD TO M00UMKDATS22-02 PERFORM 9999ABDSOR
PERFORM 4000MSGOUTSOR END-IF.
PERFORM 9999ABDSOR
END-IF.
* *
*** 入出力ファイルOPEN *** 入出力ファイルOPEN
OPEN INPUT R01INNFIL OPEN INPUT R01INNFIL
+1 -5
View File
@@ -82,8 +82,6 @@
01 WRKARA. 01 WRKARA.
*** 処理日付(ACCEPT FROM DATE用) *** 処理日付(ACCEPT FROM DATE用)
03 WRK-DATE-8 PIC 9(008). 03 WRK-DATE-8 PIC 9(008).
*** 運用日付
03 WRK-U06 PIC 9(008).
*** キーブレイク制御 *** キーブレイク制御
03 WRK-R01KEY PIC X(008). 03 WRK-R01KEY PIC X(008).
03 WRK-PREV-APPL-ID PIC X(008). 03 WRK-PREV-APPL-ID PIC X(008).
@@ -181,9 +179,7 @@
*** 運用日付取得 *** 運用日付取得
INITIALIZE D01UBSPAR. INITIALIZE D01UBSPAR.
CALL 'SUB01DAT' USING D01UBSPAR. CALL 'SUB01DAT' USING D01UBSPAR.
IF D01FKICOD = ZERO IF D01FKICOD NOT = ZERO
MOVE D01UBSUDATE TO WRK-U06
ELSE
INITIALIZE M00MHOPAR INITIALIZE M00MHOPAR
MOVE CNS-MSGSUBEEK TO M00MSGCOD MOVE CNS-MSGSUBEEK TO M00MSGCOD
MOVE 'SUB01DAT' TO M00UMKDATS22-01 MOVE 'SUB01DAT' TO M00UMKDATS22-01
@@ -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→件数出力→終了メッセージ)
@@ -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→件数出力→終了メッセージ)
@@ -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 1366
3. メイン処理:R01とR02のキー比較(社員番号+日付)
- R01 < R02 → 打刻データなしエラー(W02出力)
- R01 = R02 → 時間範囲チェック
- 申請時間帯が出勤〜退勤の範囲内 → OVT-TYPE設定(SEARCH ALL休日判定)→ W01出力
- 範囲外 → エラー(W02出力)
- R01 > R02 → R02読み飛ばし
4. 終了処理(CLOSE→件数出力→終了メッセージ)
## 備考
- SUB01DAT不使用:日付取得不要のためFUNCTION CURRENT-DATEも使用しない
- R02FILLER = 56BPUNCH-SORTEDのフォーマット:社員番号8B+日付8B+出勤4B+退勤4B+予備56B
@@ -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→件数出力→終了メッセージ)
@@ -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→件数出力→終了メッセージ)
@@ -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. フェーズ1OVT-SUMMARY処理):
- SQLホスト変数設定(年月抽出・時刻変換・時間→分変換)
- OVT_APPLICATIONSにINSERT
- 成功 → INSERTカウンタ+1
- 重複エラー(SQLCODE≠0) → UPDATESTATUS更新)
- OVT_MONTHLY UPSERT(存在確認SELECT→UPDATE/INSERT
- 50件毎にCOMMIT
3. フェーズ2OVT-DBCLEAN処理):
- OVT_APPLICATIONSから既存データSELECT
- 該当なし(孤立取消) → ERROR-LOG出力+ABEND(999)
- OVT_APPLICATIONSステータス更新('9'=取消)
- OVT_MONTHLY減算(3回リトライ付きUPDATE)
4. 終了処理(最終COMMIT→CLOSE→件数出力→終了メッセージ)
+3 -5
View File
@@ -45,9 +45,9 @@
| NO | 機能 | プログラムID | 使用COPY名 | | NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------| |----|------|-------------|-----------|
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC | | 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:コンパイル日時 PARM1:コンパイル日時
PARM2'COMPILED' PARM2'COMPILED'
1-3.ワークエリアの初期化 1-3.ワークエリアの初期化
1-4.日付取得(FUNCTION CURRENT-DATE 1-4.使用ファイルのオープン
FUNCTION CURRENT-DATEにより現在日付を取得する。
1-5.使用ファイルのオープン
1-6.HOLIDAY-FILEを全件読込しHOLIDAY-TABLEに設定する。(1300HOLIDAYSOR) 1-6.HOLIDAY-FILEを全件読込しHOLIDAY-TABLEに設定する。(1300HOLIDAYSOR)
1-7.R01を読み込む。(1100R01INNSOR)(1回目) 1-7.R01を読み込む。(1100R01INNSOR)(1回目)
1-8.R02を読み込む。(1200R02INNSOR)(1回目) 1-8.R02を読み込む。(1200R02INNSOR)(1回目)
+2 -2
View File
@@ -101,8 +101,8 @@
3.積算処理(2200ACCUMSOR 3.積算処理(2200ACCUMSOR
3-1.現レコードの時刻→分変換 3-1.現レコードの時刻→分変換
DIVIDE WRK-KEY-START BY 100 GIVING WRK-START-HOUR REMAINDER WRK-START-MIN DIVIDE R01START-TIME 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 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-START-TOTAL = WRK-START-HOUR * 60 + WRK-START-MIN
COMPUTE WRK-END-TOTAL = WRK-END-HOUR * 60 + WRK-END-MIN COMPUTE WRK-END-TOTAL = WRK-END-HOUR * 60 + WRK-END-MIN
3-2.差分計算 3-2.差分計算
+14 -10
View File
@@ -141,16 +141,20 @@
UPDATED-AT = CURRENT TIMESTAMP UPDATED-AT = CURRENT TIMESTAMP
WHERE APPL-ID = :WRK-SQL-APPL-ID WHERE APPL-ID = :WRK-SQL-APPL-ID
2-2-4.YEAR-MONTH抽出:APPL-DATE(1:6) 2-2-4.YEAR-MONTH抽出:APPL-DATE(1:6)
2-2-5.OVT-MONTHLYから減算(2210MONTHLYSUBSOR 2-2-5.OVT-MONTHLYから減算(2210MONTHLYSUBSOR
【EXEC SQL UPDATE(減算)+COBOL SUBTRACT検証】 【EXEC SQL UPDATE(減算)+COBOL SUBTRACT検証】
UPDATE OVT-MONTHLY SET UPDATE OVT-MONTHLY SET
OVT-HOURS = OVT-HOURS - :WRK-SQL-OVT-HOURS, OVT-HOURS = OVT-HOURS - :WRK-SQL-OVT-HOURS,
OVT-COUNT = OVT-COUNT - 1, OVT-COUNT = OVT-COUNT - 1,
UPDATED-AT = CURRENT TIMESTAMP UPDATED-AT = CURRENT TIMESTAMP
WHERE EMP-ID = :WRK-SQL-EMP-ID WHERE EMP-ID = :WRK-SQL-EMP-ID
AND YEAR-MONTH = :WRK-SQL-YEAR-MONTH AND YEAR-MONTH = :WRK-SQL-YEAR-MONTH
AND OVT-TYPE = :WRK-SQL-OVT-TYPE AND OVT-TYPE = :WRK-SQL-OVT-TYPE
SQLCODE異常時は9100DBERRSORへ リトライ制御:PERFORM TEST AFTER VARYING(最大3回)
SQLCODE≠0時はROLLBACKしてリトライ
全リトライ消費後もSQLCODE≠0の場合、
ERROR-LOG(カテゴリ=21)に出力し9999ABDSORで異常終了する
9100DBERRSORは通らない)
2-2-6.CUN-COMMITが閾値以上の場合、COMMIT実行(2300COMMITDBX 2-2-6.CUN-COMMITが閾値以上の場合、COMMIT実行(2300COMMITDBX
3.OVT-MONTHLY UPSERT処理(2110MONTHLYUPSOR 3.OVT-MONTHLY UPSERT処理(2110MONTHLYUPSOR