サブシステム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
+62 -56
View File
@@ -50,53 +50,59 @@
| 段落名 | 機能 |
|:-------|:-----|
| JIN09RPT-OPEN | ファイルOPEN + ワーク初期化 |
| JIN09RPT-LOAD-MST | 評価基準マスタ(R02)全件LOAD → 内部表構築 |
| JIN09RPT-READ-EVAL | 評価明細(R011件READ |
| JIN09RPT-KEY-BREAK | 社員キーブレイク判定(同キー) |
| JIN09RPT-OUTPUT-GRP | 1社員分の集計結果出力 |
| JIN09RPT-AGGREGATE | 1明細の集計主処理(NESTED IF) |
| JIN09RPT-JUDGE-LEVEL | スコア→S/A/B/Cレベル判定(NESTED IF 3段 |
| JIN09RPT-SEARCH-MST | SEARCH ALL で評価基準を特定 |
| JIN09RPT-UPDATE-TBL | 内部表の件数・合計点をUPDATE |
| JIN09RPT-CALC-AVG | DIVIDEで平均点算出 |
| JIN09RPT-WRITE-SUM | 1行の集計レコードWRITE |
| JIN09RPT-WRITE-ERR | エラーレコードWRITE |
| JIN09RPT-CLOSE | ファイルCLOSE + メッセージ出力 |
| JIN09RPT-MAIN | 主処理ループ制御(PERFORM VARYING 多重ループ |
| 0000MAJCOLSOR | メインコントロール(初期→マスタLOAD→主処理→終了) |
| 1000ITTSOR | 初期処理(開始メッセージ・初期化・OPEN・運用日付) |
| 1100R02INNSOR | 評価基準マスタ(R02)読込・EOF判定 |
| 1200MSTLDASOR | 評価基準マスタ全件LOAD → 内部表構築 |
| 1250R02CLOSOR | 評価基準マスタ(R02CLOSE |
| 1300R01INNSOR | 評価明細(R01)読込・EOF判定 |
| 1500TBLINITSOR | 内部表初期化(INITIALIZE TBL |
| 1600TBLRSTSOR | 内部表リセット(キーブレイク時に再初期化) |
| 2000MAJSOR | 主処理(キーブレイク判定 → 集計 → 前社員分出力 → リセット) |
| 2100AGGRGASOR | 1明細の集計主処理(レベル判定→SEARCH→UPDATE/ERR |
| 2200JUDGESOR | スコア→S/A/B/Cレベル判定(NESTED IF 3段) |
| 2300UPDTTLSOR | 内部表の件数・合計点UPDATE |
| 2400WRTERRSOR | エラーレコードWRITE |
| 3000OUTPUSOR | 1社員分の集計結果出力(昇順走査→平均点→WRITE |
| 3100WRITEAGSOR | 1行の集計レコードWRITEDIVIDE平均点含む) |
| 4000STPSOR | 終了処理(統計表示・CLOSE・CANCEL・終了メッセージ) |
| 6000MSGOUTSOR | メッセージ編集出力SUB呼出 |
| 9999ABDSOR | エラー処理(ABEND |
### 処理フロー
```
1. 初期処理(JIN09RPT-OPEN
1-1. JIN09R01 / JIN09R02 / JIN09W01 / JIN09W02 を OPEN
1-2. SUB01DAT で運用日取得(復帰コード≠0なら SUB03END で異常終了
1-3. 内部表 WS-SKILL-TABLE を INITIALIZE
1-4. SUB02MSG で開始メッセージ出力
1. 初期処理(1000ITTSOR
1-1. SUB02MSG で開始メッセージ出力(6000MSGOUTSOR
1-2. 内部表 WS-SKILL-TABLE を INITIALIZE1500TBLINITSOR
1-3. SUB01DAT で運用日取得(復帰コード≠0なら 9999ABDSOR+SUB03END で異常終了)
1-4. JIN09R01 / JIN09R02 / JIN09W01 / JIN09W02 を OPEN
1-5. 初回フラグ(WRK-FIRST-FLG)を 'Y' に設定
1-6. R02 初回読込(1100R02INNSOR
1-7. R01 初回読込(1300R01INNSOR
2. マスタLOADJIN09RPT-LOAD-MST
2-1. JIN09R02 から SKILL-MST を件 READ
2-2. WS-TBL-ENTRY を 1 加算
2-3. 内部表 WS-SKILL-TABLE(WS-TBL-ENTRY) に設定
2-4. AT END → JIN09R02 を CLOSE → 主処理へ
2. マスタLOAD1100R02INNSOR / 1200MSTLDASOR
2-1. JIN09R02 から SKILL-MST を 1 件 READ1100R02INNSOR
2-2. 1200MSTLDASOR で内部表 WS-SKILL-TABLE(WS-TBL-ENTRY) に設定
2-3. AT END → 1250R02CLOSORJIN09R02 CLOSE)→ 主処理へ
3. 主処理(JIN09RPT-MAIN
3-1. JIN09RPT-READ-EVAL で SKILL-EVAL を1件 READ
3-2. AT END → JIN09RPT-OUTPUT-GRP(最終社員分)→ 終了処理
3-3. JIN09RPT-KEY-BREAK を PERFORM
3. 主処理(0000MAJCOLSOR
3-1. 1300R01INNSOR で SKILL-EVAL を1件 READ
3-2. AT END → 3000OUTPUSOR(最終社員分)→ 4000STPSOR
3-3. 2000MAJSOR でキーブレイク判定:
(初回 or EMP-ID が WS-PREV-EMP-ID と不一致 → キーブレイク)
JIN09RPT-OUTPUT-GRP で前社員分を出力、内部表を INITIALIZE
3-4. JIN09RPT-AGGREGATE を PERFORM
3000OUTPUSOR で前社員分を出力、1600TBLRSTSOR で内部表リセット
3-4. 2100AGGRtASOR を PERFORM
3-5. WS-PREV-EMP-ID に今回 EMP-ID を設定
3-6. 3-1 へ戻る
4. 集計処理(JIN09RPT-AGGREGATE
4-1. JIN09RPT-JUDGE-LEVEL でレベル判定
4-2. JIN09RPT-SEARCH-MST で評価基準を SEARCH ALL
4-3. WHEN 該当 → JIN09RPT-UPDATE-TBL を PERFORM
4-4. WHEN 未該当 → JIN09RPT-WRITE-ERR を PERFORM
4. 集計処理(2100AGGRGASOR
4-1. 2200JUDGESOR でレベル判定
4-2. SEARCH ALL で評価基準を特定
4-3. WHEN 該当 → 2300UPDTTLSOR を PERFORM
4-4. WHEN 未該当 → 2400WRTERRSOR を PERFORM
5. レベル判定(JIN09RPT-JUDGE-LEVEL)— NESTED IF 3段 + 複合条件
5. レベル判定(2200JUDGESOR)— NESTED IF 3段 + 複合条件
IF SCORE >= 80 AND SCORE <= 999
IF SCORE >= 90 OR SCORE = 100
MOVE 'S' TO WS-LEVEL
@@ -116,17 +122,17 @@
END-IF
END-IF
6. 社員グループ出力(JIN09RPT-OUTPUT-GRP
6. 社員グループ出力(3000OUTPUSOR
6-1. 内部表を 1 から WS-TBL-ENTRY まで PERFORM VARYING で走査
6-2. 件数 > 0 のエントリのみ JIN09RPT-WRITE-SUM で出力
6-3. JIN09RPT-CALC-AVG で平均点算出(DIVIDE
6-4. 出力行数カウンタを加算
6-2. 件数 > 0 のエントリのみ 3100WRITEAGSOR で出力(DIVIDE平均点含む)
6-3. 出力行数カウンタを加算
7. 終了処理(JIN09RPT-CLOSE
7-1. JIN09R01 / JIN09W01 / JIN09W02 を CLOSE
7-2. CANCEL 'SUB02MSG' でサブPGM解放
7-3. SUB02MSG で件数メッセージ出力
7-4. GOBACK
7. 終了処理(4000STPSOR
7-1. 統計表示
7-2. JIN09R01 / JIN09W01 / JIN09W02 を CLOSE
7-3. CANCEL 'SUB02MSG'サブPGM解放
7-4. SUB02MSG で件数メッセージ出力
7-5. GOBACK
```
### I-O-CONTROL
@@ -144,7 +150,7 @@ I-O-CONTROL.
> 補足:I-O-CONTROL 段落は予約語カバー目的で記載する。当初 SAME RECORD AREA FOR
> R01INNFIL R02INNFIL を指定したが、GnuCOBOL 3.2 はレコード長の異なるファイル
> R01=200B / R02=79B)間で共有領域が最小レコード長に固定され、R01 の READ が
> R01=200B / R02=80B)間で共有領域が最小レコード長に固定され、R01 の READ が
> 破綻することが判明したため、SAME 句は使用しない(IBM COBOL では正しく動作する
> が、ローカル検証の再現性を優先して SAME 予約語カバーは断念)。
@@ -152,21 +158,21 @@ I-O-CONTROL.
| 予約語 | 使用箇所 |
|:-------|:---------|
| SET 条件名 TO FALSE | 内部表初期化後に SET WRK-FIRST-FLG TO FALSE で初回フラグ解除 |
| SET 条件名 TO FALSE | 2000MAJSOR: キーブレイク検知時に SET WRK-FIRST-FLG TO FALSE で初回フラグ解除 |
| NEXT SENTENCE | レベル判定の ELSE 内で未判定時、後続文へ制御 |
| CANCEL | 終了処理で CANCEL 'SUB02MSG' |
| EJECT | PROCEDURE DIVISION 先頭直後にソース行 EJECT |
| SKIP2 | 段落境界にソース行 SKIP2 |
| EJECT | 段落境界の第7桁に `*` 付きコメント行 `*EJECT`(コメント化) |
| SKIP2 | (実装せず。EJECT 同様に `*SKIP2` コメント行のみ。W-1 にて統計から除外決定) |
### 内部表
#### WS-SKILL-TABLEOCCURS 20
#### WS-SKILL-TABLEOCCURS 1 TO 20 DEPENDING ON WS-TBL-MAX-IDX
| 項目 | PIC | USAGE | 内容 |
|:----|:---:|:-----:|------|
| TBL-SKILL-CODE | X(4) | — | スキルコード |
| TBL-LEVEL | 9(2) | BINARY | レベル |
| TBL-LEVEL-NAME | X(20) | — | レベル名称 |
| TBL-SKILL-NAME | X(20) | — | スキル名称 |
| TBL-LEVEL-NAME | X(2) | — | S/A/B/C レベル |
| TBL-EVAL-CNT | 9(3) | BINARY | 明細件数 |
| TBL-SCORE-SUM | 9(5) | BINARY | 合計点 |
| TBL-EMP-ID | X(8) | — | 社員番号(出力用) |
@@ -211,10 +217,10 @@ SEARCH ALL のキー項目:TBL-SKILL-CODESKILL-MST LOAD後に確定)
| CANCEL | 予約語 | 終了処理 CANCEL 'SUB02MSG' |
| I-O-CONTROL | 予約語 | ENVIRONMENT DIVISION の I-O-CONTROL 段落 |
| NEXT SENTENCE | 予約語 | レベル判定 ELSE 内 NEXT SENTENCE |
| EJECT | 予約語 | PROCEDURE DIVISION のソース行 EJECT |
| SKIP2 | 予約語 | 段落境界のソース行 SKIP2 |
| SET 条件名 TO FALSE | 予約語 | 初回フラグ解除に SET ... TO FALSE |
| PERFORM VARYING | 予約語(昇格) | 内部表走査の多重ループ |
| EJECT | 予約語 | 段落境界の `*EJECT` コメント行(コメント化) |
| SKIP2 | 予約語 | (実装せず。W-1 にて統計対象から除外決定) |
| SET 条件名 TO FALSE | 予約語 | 2000MAJSOR: 初回フラグ解除に SET ... TO FALSE |
| PERFORM VARYING | 予約語(昇格) | 内部表走査(単一ループ |
| NESTED IF(複合条件 AND/OR | 予約語(昇格) | レベル判定 IF ネスト 3 段 |
| SEARCH ALL | 予約語 | 評価基準マッチング |
| DIVIDE ... GIVING | 予約語 | 平均点算出 |