サブシステム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
+58 -52
View File
@@ -80,69 +80,73 @@ SEARCH ALL のキー項目:TBL-SKILL-CODE
| 段落名 | 機能 |
|:-------|:-----|
| JIN02SKL-OPEN | ファイルOPEN + 内部表初期化 |
| JIN02SKL-LOAD-MST | 評価基準マスタ(R02)全件LOAD → 内部表構築 |
| JIN02SKL-READ-EVAL | 評価明細(R011件READ |
| JIN02SKL-AGGREGATE | 集計主処理(SEARCH ALL + 件数加算 + 合計加算) |
| JIN02SKL-SEARCH-LVL | SEARCH ALL で該当レベルを特定 |
| JIN02SKL-UPDATE-TBL | 内部表の件数・合計点をUPDATE |
| JIN02SKL-OUTPUT | 内部表を降順走査→平均点算出→WRITE |
| JIN02SKL-GET-AVG | DIVIDEで平均点算出(END-DIVIDE |
| JIN02SKL-DESCEND | PERFORM VARYING 降順走査(DESCENDING |
| JIN02SKL-WRITE-AGG | 1エントリWRITE |
| JIN02SKL-CLOSE | ファイルCLOSE + GOBACK |
| 0000MAJCOLSOR | メインコントロール(初期→マスタLOAD→主処理→出力→終了) |
| 1000ITTSOR | 初期処理(開始メッセージ・初期化・運用日付・OPEN) |
| 1100R02INNSOR | 評価基準マスタ(R02)読込・EOF判定 |
| 1200MSTLDASOR | 評価基準マスタ全件LOAD → 内部表構築 |
| 1300R01INNSOR | 評価明細(R01)読込・EOF判定 |
| 2000MAJSOR | 集計主処理(SEARCH判定 → 更新 or エラー) |
| 2100WRTERRSOR | エラーレコードWRITE |
| 2200UPDTTLSOR | 内部表の件数・合計点UPDATE |
| 3000OUTPUSOR | 集計結果出力(降順走査 → 平均点算出 → WRITE |
| 3100WRITEAGSOR | 1エントリWRITE |
| 4000STPSOR | 終了処理(統計表示・CLOSE・終了メッセージ) |
| 6000MSGOUTSOR | メッセージ編集出力SUB呼出 |
| 9999ABDSOR | エラー処理(ABEND |
> 設計書の機能記述(SEARCH-LVL / GET-AVG / DESCEND 等)は、実装では個々の SECTION ではなく親段落(2000MAJSOR / 3000OUTPUSOR)内にインラインで実装されている。
### 処理ロジック
#### 初期処理(JIN02SKL-OPEN
1. JIN02R01 / JIN02R02 / JIN02W01 / JIN02W02 を OPEN
2. WS-TBL-ENTRY を INITIALIZE(内部表初期化)
#### 初期処理(1000ITTSOR
1. 開始メッセージを OUTPUT6000MSGOUTSOR 経由)
2. JIN02R01 / JIN02R02 / JIN02W01 / JIN02W02 を OPEN
3. WS-TBL-MAX-IDX を ZERO で初期化(内部表初期化)
#### マスタLOADJIN02SKL-LOAD-MST
1. JIN02R02 から SKILL-MST を全件 LOAD
2. ADD 1 TO WS-MAX-ENTRY END-ADD
3. 内部表 WS-SKILL-TABLE に設定MST-SKILL-CODE, MST-LEVEL, MST-LEVEL-NAME, TBL-EMP-COUNT=0, TBL-SCORE-SUM=0
4. AT END → JIN02SKL-READ-EVAL へ
5. JIN02R02 CLOSE(不要になったので)
#### マスタLOAD1100R02INNSOR / 1200MSTLDASOR
1. JIN02R02 から SKILL-MST を 1 件読込(1100R02INNSOR
2. 1200MSTLDASOR で内部表 WS-SKILL-TABLE に設定
MST-SKILL-CODE, MST-LEVEL, MST-LEVEL-NAME, TBL-EMP-COUNT=0, TBL-SCORE-SUM=0
3. AT END1100R02INNSOR で WRK-R02EOF='1')→ マスタLOADループ終了
4. JIN02R02 CLOSE は 3000OUTPUSOR で実施
#### 主処理ループ(JIN02SKL-READ-EVAL → JIN02SKL-AGGREGATE → ループ)
1. JIN02R01 から SKILL-EVAL を1件 READ
2. AT END → JIN02SKL-OUTPUT
3. JIN02SKL-AGGREGATE を PERFORM
#### 主処理ループ(1300R01INNSOR → 2000MAJSOR → ループ)
1. JIN02R01 から SKILL-EVAL を 1 件 READ1300R01INNSOR
2. AT END → 3000OUTPUSOR
3. 2000MAJSOR を PERFORM
#### 集計処理(JIN02SKL-AGGREGATE
1. JIN02SKL-SEARCH-LVL を呼出(SEARCH ALL
2. WHEN 該当 → JIN02SKL-UPDATE-TBL を PERFORM
3. WHEN NOT 該当 → JIN02SKL-WRITE-ERR を PERFORM
#### 集計処理(2000MAJSOR
1. SEARCH ALL で該当レベルを特定
2. WHEN 該当 → 2200UPDTTLSOR を PERFORM
3. WHEN NOT 該当 → 2100WRTERRSOR を PERFORM
#### SEARCH ALLJIN02SKL-SEARCH-LVL
#### SEARCH ALL2000MAJSOR 内
1. SEARCH ALL WS-SKILL-TABLE
2. AT END → 直接 PERFORM 2100WRTERRSOR(該当するレベルがない)
3. WHEN TBL-SKILL-CODE(WS-IDX) = SKILL-CODE → 直接 PERFORM 2200UPDTTLSOR
2. AT END → PERFORM 2100WRTERRSOR(該当するレベルがない)
3. WHEN TBL-SKILL-CODE(WS-IDX) = SKILL-CODE → PERFORM 2200UPDTTLSOR
#### 内部表UPDATEJIN02SKL-UPDATE-TBL
#### 内部表UPDATE2200UPDTTLSOR
1. ADD 1 TO TBL-EMP-COUNT(WS-IDX) END-ADD
2. ADD SCORE TO TBL-SCORE-SUM(WS-IDX) END-ADD
#### 集計結果出力(JIN02SKL-OUTPUT
1. 内部表を件数降順(DESCENDING)で走査
2. JIN02SKL-DESCEND を PERFORM THRU JIN02SKL-WRITE-AGG
3. 各エントリについて:
d. WS-AVG を ZERO で初期化
e. JIN02SKL-GET-AVG を PERFORMDIVIDE TBL-SCORE-SUM BY TBL-EMP-COUNT GIVING WS-AVG END-DIVIDE
f. SKILL-AGG-REC に編集設定(ZZZZ9 編集文字
g. JIN02W01 へ WRITE
#### 集計結果出力(3000OUTPUSOR
1. 内部表をスキルコード降順(逆走査)で走査(内部表は SKILL-CODE 昇順。WS-TBL-MAX-IDX から -1 ずつ逆走査
2. 各エントリについて:
a. WS-AVG を ZERO で初期化
b. DIVIDE TBL-SCORE-SUM BY TBL-EMP-COUNT GIVING WS-AVG END-DIVIDE
c. SKILL-AGG-REC に編集設定(ZZZZ9 編集文字
d. 3100WRITEAGSOR を PERFORMJIN02W01 へ WRITE
#### 降順走査(JIN02SKL-DESCEND
#### 降順走査(3000OUTPUSOR 内
```
PERFORM VARYING WS-IDX FROM WS-MAX-ENTRY BY -1
UNTIL WS-IDX = 0
PERFORM JIN02SKL-WRITE-AGG
PERFORM 3100WRITEAGSOR
END-PERFORM
```
SUBTRACT 1 FROM WS-IDX END-SUBTRACTEND-SUBTRACT 予約語使用)
#### 平均点算出(JIN02SKL-GET-AVG
#### 平均点算出(3000OUTPUSOR 内
```
DIVIDE TBL-SCORE-SUM(WS-IDX) BY TBL-EMP-COUNT(WS-IDX)
GIVING WS-AVG-TEMP REMAINDER WS-REM
@@ -150,24 +154,26 @@ DIVIDE TBL-SCORE-SUM(WS-IDX) BY TBL-EMP-COUNT(WS-IDX)
```
(DIVIDE 予約語カバレッジ + END-DIVIDE
#### エラー出力(JIN02SKL-WRITE-ERR
#### エラー出力(2100WRTERRSOR
1. VALID-ERROR-REC にエラー情報設定
2. JIN02W02 へ WRITE
#### 終了処理(JIN02SKL-CLOSE
1. JIN02R01 / JIN02W01 / JIN02W02 を CLOSE
2. GOBACK
#### 終了処理(4000STPSOR
1. 統計表示
2. JIN02W01 / JIN02W02 を CLOSEJIN02R01 / JIN02R02 は 3000OUTPUSOR で CLOSE 済み)
3. 終了メッセージ OUTPUT6000MSGOUTSOR
4. GOBACK
## カバレッジ対象キーワード
| 予約語/記号 | 区分 | 使用箇所 |
|:-----------|:----:|:---------|
| USAGE BINARY | 予約語(16) | MST-LEVEL, TBL-EMP-COUNT |
| USAGE BINARY | 予約語(16) | TBL-LEVEL, TBL-EMP-COUNT, TBL-SCORE-SUM(内部表) |
| USAGE PACKED-DECIMAL | 予約語(127) | AGG-LEVEL, AGG-AVG-SCORE |
| BY(降順走査) | 予約語(18) | PERFORM VARYING BY -1JIN02SKL-DESCEND相当 |
| END-DIVIDE | 予約語(58) | JIN02SKL-GET-AVG |
| END-SUBTRACT | 予約語(66) | JIN02SKL-DESCEND |
| BY(降順走査) | 予約語(18) | PERFORM VARYING BY -13000OUTPUSOR |
| END-DIVIDE | 予約語(58) | 3000OUTPUSOR |
| END-SUBTRACT | 予約語(66) | 3000OUTPUSOR |
| GREATER | 予約語(87) | IF WS-COUNT IS GREATER THAN ZERO |
| IF GREATER THAN | 予約語(87) | 件数判定 |
| PIC ZZZZ9 | PICTURE記号 | AGG-COUNT-EDIT |
| PIC N | PICTURE記号 | JIN01RECから継承、未使用でもCOPY参照でカバー) |
| PIC N | PICTURE記号 | JIN02SKL では PIC N 未使用。PIC N は JIN01KNS が JIN01REC の KANJI-NAME でカバー) |