サブシステムEをJIN04PRT〜JIN08TST追加で9本に拡充(全48プログラム)。JIN01-09のIBM COBOL完全版・bin再ビルド版・設計書・使用資源一覧・カバレッジ統計・DDL(schema_jin)・COPY(DB-COMMON/JIN04RPT-REC/JIN05REC)をroot側最新に同期。KYU03AGG/KYU08PRI/SHA02MNC/SHA10S10再テスト済み(全PASS)

This commit is contained in:
qiuqiuqiu
2026-08-05 00:11:07 +08:00
parent 182b161208
commit a918489f93
88 changed files with 2953 additions and 300 deletions
+190
View File
@@ -0,0 +1,190 @@
# JIN05UPD 詳細設計書
## プログラム概要
| 項目 | 内容 |
|------|------|
| プログラムID | JIN05UPD(人事→JINji, 05, 人事異動DB更新→UPD |
| プログラムタイプ | 09(DB更新) |
| 機能 | HR-TRANS(人事異動トランザクション)を読込み、DB2 EMPLOYEEテーブルをINSERT/UPDATEする |
| CALL方式 | メインプログラム(JCLからCALL) |
| DBアクセス | DB2 EMPLOYEECONNECT / INSERT / UPDATE |
| 使用サブプログラム | SUB01DAT(日付), SUB02MSG(メッセージ), SUB03END(アベンド) |
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | HR-TRANS | JCL の SORT で社員番号昇順に並替済であること |
### 使用ファイル一覧
| NO | 使用ファイル名 | 識別子 | DD名 | I/O | COPY群 | 形式 | レコード長 | 媒体 | 備考 |
|----|--------------|--------|------|-----|--------|------|-----------|------|------|
| 1 | HR-TRANS | R01 | JIN05R01 | I | JIN05REC | FB | 200 | PS | 人事異動トランザクション |
| 2 | VALID-ERROR | W01 | JIN05W01 | O | (内約80B | FB | 80 | PS | エラー退避 |
> 補足:VALID-ERROR レコードは COPY を使用せず WORKING-STORAGE/W01OUTREC に内約定義(PROGRAMID 8B + EMP-ID 8B + CODE 4B + DETAIL 60B = 80B)。ID 設計上 COPY VALID-ERROR-REC を使用していない。将来は COPY 化推奨。
### DB 使用一覧
| NO | テーブル | I/O | 内容 |
|----|---------|:---:|------|
| 1 | EMPLOYEE | I/U | 人事異動の新規登録(INSERT/ 更新(UPDATE |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | 運用日付取得SUB | SUB01DAT | JINDATAC |
| 2 | メッセージ編集出力SUB | SUB02MSG | JINMSGAC |
| 3 | ABEND処理SUB | SUB03END | JINENDAC |
---
## 処理詳細
### 段落一覧(SOR規約名)
| 段落名 | 機能 |
|:-------|:-----|
| 0000MAJCOLSOR | メインコントロール(初期→読込→DB更新ループ→終了) |
| 1000ITTSOR | 初期処理(開始表示・初期化・運用日付・CONNECT・OPEN・初回読込) |
| 2000MAINSOR | 主処理(ホスト変数転記→種別判定→対応処理) |
| 2100READSOR | R01読込・EOF判定 |
| 3100INSERTSOR | INSERT処理(新規社員追加) |
| 3200UPDATESOR | UPDATE処理(既存社員更新) |
| 3300ERRSOR | 不明トランザクション→VALID-ERROR出力 |
| 3400DBERRSOR | DBエラー(SQLCODE≠0)→VALID-ERROR出力 |
| 4000STPSOR | 終了処理(統計表示・CLOSE・終了メッセージ) |
| 9000ERRSOR | エラー処理(ABEND |
### 処理フロー
```
1. 0000MAJCOLSOR
1-1. PERFORM 1000ITTSOR(初期処理)
1-2. PERFORM 2000MAINSOR
UNTIL WRK-R01EOF-Y OR WRK-COUNT >= CNS-MAX-TRANS
PERFORM UNTIL ... OR ... カバー。上限500件ガード)
1-3. PERFORM 4000STPSOR
1-4. GOBACK
2. 1000ITTSOR(初期処理)
2-1. DISPLAY 'JIN05UPD START' UPON CONSOLE
2-2. M00MHOPAR 初期化 → CALL SUB02MSG(開始 001
2-3. INITIALIZE WRKARA REPLACING NUMERIC BY ZEROS ALPHANUMERIC BY SPACES
2-4. INITIALIZE CUNARA
2-5. CALL SUB01DAT ... ON EXCEPTION → PERFORM 9000ERRSORCALL ON EXCEPTION カバー)
2-6. EXEC SQL CONNECTDB接続)
2-7. OPEN INPUT R01INNFIL OUTPUT W01OUTFIL
2-8. PERFORM 2100READSOR(初回読込)
3. 2000MAINSOR(主処理)
3-1. ADD 1 TO WRK-COUNT(処理件数増)
3-2. R01TRAN-* → HV-* へホスト変数転記
3-3. MOVE R01TRAN-TYPE TO WRK-TRAN-TYPE
3-4. EVALUATE TRUE
WHEN WRK-TRAN-INSERT → PERFORM 3100INSERTSOR
WHEN WRK-TRAN-UPDATE → PERFORM 3200UPDATESOR
WHEN WRK-TRAN-DELETE → PERFORM 3300ERRSOR(削除未実装)
WHEN OTHER → PERFORM 3300ERRSOR
3-5. PERFORM 2100READSOR
4. 2100READSOR(読込)
READ R01INNFIL AT END → WRK-R01EOF='1'
NOT AT END → ADD 1 TO CUN-R01INN
5. 3100INSERTSORINSERT
EXEC SQL INSERT INTO EMPLOYEE:HV-* 9カラム)
IF SQLCODE NOT = 0 → 3400DBERRSOR
ELSE → ADD 1 TO CUN-DBINS
6. 3200UPDATESORUPDATE
STRING 'UPDATING: ' HV-EMP-ID INTO WS-SQL-STR ON OVERFLOW
DISPLAY WS-SQL-STR UPON CONSOLE WITH NO ADVANCING
EXEC SQL UPDATE EMPLOYEE SET:HV-* 8-カラム→9列)
WHERE EMP_ID = :HV-EMP-ID
IF SQLCODE NOT = 0 → 3400DBERRSOR
ELSE → ADD 1 TO CUN-DBUPD
7. 3300ERRSOR(不明種別)
W01ERR-PROGRAMID=PGMID / W01ERR-EMP-ID=HV-EMP-ID / W01ERR-CODE='0001'
STRING `INVALID TRAN-TYPE:` ... INTO W01ERR-DETAIL → WRITE
ADD 1 TO CUN-W01OUT
8. 3400DBERRSORDBエラー)
MOVE SQLCODE → WS-SQLCODE-DISP
STRING `DB ERROR SQLCODE=` ... INTO W01ERR-DETAIL
W01ERR-CODE='0002' → WRITE
CALL SUB02MSG USING BY CONTENT
9. 4000STPSOR(終了)
DISPLAY READ/INSERT/UPDATE/ERROR 件数 UPON CONSOLE
CLOSE R01INNFIL
CLOSE W01OUTFIL WITH LOCK
CALL SUB02MSG(終了 002
CALL SUB03END(正常終了)
10. 9000ERRSORABEND
DISPLAY 'JIN05UPD ABEND' UPON CONSOLE
CALL SUB03ENDE01ABDCOD
```
### トランザクション種別(88-level)
| 88条件名 | VALUE | 対応処理 |
|:---------|:------|:---------|
| WRK-TRAN-INSERT | 'A' 'B' 'C' | 3100INSERTSOR |
| WRK-TRAN-UPDATE | 'D' THRU 'G' | 3200UPDATESOR |
| WRK-TRAN-DELETE | 'Z' | 3300ERRSOR(削除未実装) |
| WHEN OTHER | 上記以外 | 3300ERRSOR |
> 88-level の複数VALUE'A' 'B' 'C')と VALUE THRU'D' THRU 'G')をカバー。
### カバレッジ対象キーワード
| 予約語/記号 | 使用箇所 |
|:-----------|:---------|
| PERFORM UNTIL ... OR ... | 0000MAJCOLSOR: ループ上限 |
| INITIALIZE ... REPLACING | 1000ITTSOR: REPLACING NUMERIC / ALPHANUMERIC |
| CALL ... ON EXCEPTION | 1000ITTSOR: SUB01DAT(異常時9000 |
| EXEC SQL CONNECT / INSERT / UPDATE | DB操作 |
| 88-level 複数VALUE + VALUE THRU | 種別判定 |
| EVALUATE TRUE | 2000MAINSOR: WHEN分岐 |
| STRING ... ON OVERFLOW | 3200/3300/3400 |
| DISPLAY ... UPON CONSOLE WITH NO ADVANCING | 自編集 |
| CALL ... BY CONTENT | 3400DBERRSOR |
---
## 出力レコード定義
### 出力ファイル1W01/VALID-ERROR)— COPY VALID-ERROR-REC 80B
| No | 項目名 | 設定元 | PIC | 備考 |
|----|--------|--------|:---:|------|
| 1 | ERR-PROGRAMID | CNS-PRGIDX | X(8) | 'JIN05UPD' |
| 2 | ERR-EMP-ID | HV-EMP-ID | X(8) | 社員ID |
| 3 | ERR-CODE | '0001'/'0002' | X(4) | エラー種別 |
| 4 | ERR-DETAIL | STRING編集 | X(60) | 詳細メッセージ |
> ER-CODE: 0001=不明種別、0002=DBエラー。
### 入力レコード(R01/HR-TRANS)— JIN05REC 200B
| No | 項目名 | PIC | 備考 |
|----|--------|:---:|------|
| 1 | TRAN-TYPE | X(1) | A/B/C=Insert, D-G=Update |
| 2 | TRAN-EMP-ID | X(8) | |
| 3 | TRAN-KANA-SEI | X(20) | |
| 4 | TRAN-KANA-MEI | X(20) | |
| 5 | TRAN-KANJI-NAME | X(40) | |
| 6 | TRAN-SUB-CODE | X(4) | |
| 7 | TRAN-BIRTH-DATE | X(8) | |
| 8 | TRAN-DEPT-CODE | X(4) | |
| 9 | TRAN-ENTRY-DATE | X(8) | |
| 10 | TRAN-STATUS | X(1) | |
| 11 | FILLER | X(86) | |
> COPY JIN05REC200B)を REPLACING (A)→R01 で定義。