サブシステム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:
+62
-56
@@ -50,53 +50,59 @@
|
||||
|
||||
| 段落名 | 機能 |
|
||||
|:-------|:-----|
|
||||
| JIN09RPT-OPEN | ファイルOPEN + ワーク初期化 |
|
||||
| JIN09RPT-LOAD-MST | 評価基準マスタ(R02)全件LOAD → 内部表構築 |
|
||||
| JIN09RPT-READ-EVAL | 評価明細(R01)1件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 | 評価基準マスタ(R02)CLOSE |
|
||||
| 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行の集計レコードWRITE(DIVIDE平均点含む) |
|
||||
| 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 を INITIALIZE(1500TBLINITSOR)
|
||||
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. マスタLOAD(JIN09RPT-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. マスタLOAD(1100R02INNSOR / 1200MSTLDASOR)
|
||||
2-1. JIN09R02 から SKILL-MST を 1 件 READ(1100R02INNSOR)
|
||||
2-2. 1200MSTLDASOR で内部表 WS-SKILL-TABLE(WS-TBL-ENTRY) に設定
|
||||
2-3. AT END → 1250R02CLOSOR(JIN09R02 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-TABLE(OCCURS 20)
|
||||
#### WS-SKILL-TABLE(OCCURS 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-CODE(SKILL-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 | 予約語 | 平均点算出 |
|
||||
|
||||
Reference in New Issue
Block a user