228 lines
9.7 KiB
Markdown
228 lines
9.7 KiB
Markdown
# JIN09RPT 詳細設計書
|
||
|
||
## プログラム概要
|
||
|
||
| 項目 | 内容 |
|
||
|------|------|
|
||
| プログラムID | JIN09RPT(人事→JINji, 09, 社員別スキル集計レポート→RPT) |
|
||
| プログラムタイプ | 32(1:N+同キーキーブレイク) |
|
||
| 機能 | SKILL-EVAL(M件, EMP-ID昇順)を社員キーブレイクで集計し、社員別スキル集計結果を出力する |
|
||
| CALL方式 | メインプログラム(JCLからCALL) |
|
||
| DBアクセス | なし |
|
||
| 使用サブプログラム | SUB01DAT(日付), SUB02MSG(メッセージ), SUB03END(アベンド) |
|
||
|
||
### 前提条件
|
||
|
||
| NO | 対象ファイル | 条件 |
|
||
|----|-------------|------|
|
||
| 1 | SKILL-EVAL | JCL の SORT(STEP010)で EMP-ID 昇順に並替済であること |
|
||
| 2 | SKILL-MST | SKILL-CODE 昇順に整列済であること |
|
||
|
||
### 使用ファイル一覧
|
||
|
||
| NO | 使用ファイル名 | 識別子 | DD名 | I/O | COPY群 | 形式 | レコード長 | 媒体 | 備考 |
|
||
|----|--------------|--------|------|-----|--------|------|-----------|------|------|
|
||
| 1 | SKILL-EVAL | R01 | JIN09R01 | I | SKILL-EVAL-REC | FB | 200 | PS | EMP-ID昇順 |
|
||
| 2 | SKILL-MST | R02 | JIN09R02 | I | SKILL-MST-REC | FB | 80 | PS | SKILL-CODE昇順 |
|
||
| 3 | SKILL-SUM | W01 | JIN09W01 | O | JIN09REC | FB | 120 | PS | 社員別集計結果 |
|
||
| 4 | VALID-ERROR | W02 | JIN09W02 | O | VALID-ERROR-REC | FB | 80 | PS | エラー退避 |
|
||
|
||
### キー項目一覧
|
||
|
||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||
|----|-----------|---------------------|-------------------------------------|
|
||
| 1 | SKILL-EVAL | EMP-ID昇順 | 同キーキーブレイク(社員ごと) |
|
||
| 2 | SKILL-MST | SKILL-CODE昇順 | 評価基準マッチング(1:N) |
|
||
|
||
### 使用モジュール一覧
|
||
|
||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||
|----|------|-------------|-----------|
|
||
| 1 | 運用日付取得SUB | SUB01DAT | JINDATAC |
|
||
| 2 | メッセージ編集出力SUB | SUB02MSG | JINMSGAC |
|
||
| 3 | ABEND処理SUB | SUB03END | JINENDAC |
|
||
|
||
---
|
||
|
||
## 処理詳細
|
||
|
||
### 段落一覧
|
||
|
||
| 段落名 | 機能 |
|
||
|:-------|:-----|
|
||
| 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. 初期処理(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(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. 主処理(0000MAJCOLSOR)
|
||
3-1. 1300R01INNSOR で SKILL-EVAL を1件 READ
|
||
3-2. AT END → 3000OUTPUSOR(最終社員分)→ 4000STPSOR へ
|
||
3-3. 2000MAJSOR でキーブレイク判定:
|
||
(初回 or EMP-ID が WS-PREV-EMP-ID と不一致 → キーブレイク)
|
||
→ 3000OUTPUSOR で前社員分を出力、1600TBLRSTSOR で内部表リセット
|
||
3-4. 2100AGGRtASOR を PERFORM
|
||
3-5. WS-PREV-EMP-ID に今回 EMP-ID を設定
|
||
3-6. 3-1 へ戻る
|
||
|
||
4. 集計処理(2100AGGRGASOR)
|
||
4-1. 2200JUDGESOR でレベル判定
|
||
4-2. SEARCH ALL で評価基準を特定
|
||
4-3. WHEN 該当 → 2300UPDTTLSOR を PERFORM
|
||
4-4. WHEN 未該当 → 2400WRTERRSOR を PERFORM
|
||
|
||
5. レベル判定(2200JUDGESOR)— NESTED IF 3段 + 複合条件
|
||
IF SCORE >= 80 AND SCORE <= 999
|
||
IF SCORE >= 90 OR SCORE = 100
|
||
MOVE 'S' TO WS-LEVEL
|
||
ELSE
|
||
MOVE 'A' TO WS-LEVEL
|
||
END-IF
|
||
ELSE
|
||
IF SCORE >= 50 AND SCORE <= 79
|
||
MOVE 'B' TO WS-LEVEL
|
||
ELSE
|
||
IF SCORE >= 1 AND SCORE <= 49
|
||
MOVE 'C' TO WS-LEVEL
|
||
ELSE
|
||
MOVE 'X' TO WS-LEVEL
|
||
NEXT SENTENCE
|
||
END-IF
|
||
END-IF
|
||
END-IF
|
||
|
||
6. 社員グループ出力(3000OUTPUSOR)
|
||
6-1. 内部表を 1 から WS-TBL-ENTRY まで PERFORM VARYING で走査
|
||
6-2. 件数 > 0 のエントリのみ 3100WRITEAGSOR で出力(DIVIDE平均点含む)
|
||
6-3. 出力行数カウンタを加算
|
||
|
||
7. 終了処理(4000STPSOR)
|
||
7-1. 統計表示
|
||
7-2. JIN09R01 / JIN09W01 / JIN09W02 を CLOSE
|
||
7-3. CANCEL 'SUB02MSG' でサブPGM解放
|
||
7-4. SUB02MSG で件数メッセージ出力
|
||
7-5. GOBACK
|
||
```
|
||
|
||
### I-O-CONTROL
|
||
|
||
```
|
||
ENVIRONMENT DIVISION.
|
||
INPUT-OUTPUT SECTION.
|
||
FILE-CONTROL.
|
||
SELECT R01INNFIL ASSIGN TO EXTERNAL JIN09R01.
|
||
SELECT R02INNFIL ASSIGN TO EXTERNAL JIN09R02.
|
||
SELECT W01OUTFIL ASSIGN TO EXTERNAL JIN09W01.
|
||
SELECT W02OUTFIL ASSIGN TO EXTERNAL JIN09W02.
|
||
I-O-CONTROL.
|
||
```
|
||
|
||
> 補足:I-O-CONTROL 段落は予約語カバー目的で記載する。当初 SAME RECORD AREA FOR
|
||
> R01INNFIL R02INNFIL を指定したが、GnuCOBOL 3.2 はレコード長の異なるファイル
|
||
> (R01=200B / R02=80B)間で共有領域が最小レコード長に固定され、R01 の READ が
|
||
> 破綻することが判明したため、SAME 句は使用しない(IBM COBOL では正しく動作する
|
||
> が、ローカル検証の再現性を優先して SAME 予約語カバーは断念)。
|
||
|
||
### SET 条件名 / NEXT SENTENCE / CANCEL / EJECT / SKIP2
|
||
|
||
| 予約語 | 使用箇所 |
|
||
|:-------|:---------|
|
||
| SET 条件名 TO FALSE | 2000MAJSOR: キーブレイク検知時に SET WRK-FIRST-FLG TO FALSE で初回フラグ解除 |
|
||
| NEXT SENTENCE | レベル判定の ELSE 内で未判定時、後続文へ制御 |
|
||
| CANCEL | 終了処理で CANCEL 'SUB02MSG' |
|
||
| EJECT | 段落境界の第7桁に `*` 付きコメント行 `*EJECT`(コメント化) |
|
||
| SKIP2 | (実装せず。EJECT 同様に `*SKIP2` コメント行のみ。W-1 にて統計から除外決定) |
|
||
|
||
### 内部表
|
||
|
||
#### WS-SKILL-TABLE(OCCURS 1 TO 20 DEPENDING ON WS-TBL-MAX-IDX)
|
||
|
||
| 項目 | PIC | USAGE | 内容 |
|
||
|:----|:---:|:-----:|------|
|
||
| TBL-SKILL-CODE | X(4) | — | スキルコード |
|
||
| 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) | — | 社員番号(出力用) |
|
||
| TBL-EMP-NAME | X(40) | — | 社員氏名(出力用) |
|
||
|
||
SEARCH ALL のキー項目:TBL-SKILL-CODE(SKILL-MST LOAD後に確定)
|
||
|
||
---
|
||
|
||
## 出力レコード定義
|
||
|
||
### 出力ファイル1(W01/SKILL-SUM)— JIN09REC 120B
|
||
|
||
| No | 項目名 | 設定元 | PIC | 備考 |
|
||
|----|--------|--------|:---:|------|
|
||
| 1 | SUM-EMP-ID | TBL-EMP-ID | X(8) | |
|
||
| 2 | SUM-EMP-NAME | TBL-EMP-NAME | X(40) | |
|
||
| 3 | SUM-SKILL-CODE | TBL-SKILL-CODE | X(4) | |
|
||
| 4 | SUM-SKILL-NAME | MST-LEVEL-NAME | X(20) | スキル名称 |
|
||
| 5 | SUM-LEVEL-NAME | WS-LEVEL | X(2) | S/A/B/C |
|
||
| 6 | SUM-EVAL-CNT | TBL-EVAL-CNT | 9(3) | 明細件数 |
|
||
| 7 | SUM-SCORE-TOTAL | TBL-SCORE-SUM | 9(5) | 合計点 |
|
||
| 8 | SUM-SCORE-AVG | WS-AVG | 9(3)V9(2) | 平均点 |
|
||
| 9 | SUM-EVAL-CNT-TOTAL | WS-EMP-EVAL-CNT | 9(3) | 社員別明細総数 |
|
||
| 10 | SUM-FILLER | SPACE | X(30) | |
|
||
|
||
### 出力ファイル2(W02/VALID-ERROR)— VALID-ERROR-REC 80B
|
||
|
||
| No | 項目名 | 設定元 | PIC | 備考 |
|
||
|----|--------|--------|:---:|------|
|
||
| 1 | ERR-PROGRAMID | 'JIN09RPT' | X(8) | |
|
||
| 2 | ERR-EMP-ID | EMP-ID | X(8) | |
|
||
| 3 | ERR-CODE | 'LVL1' | X(4) | レベル未特定 |
|
||
| 4 | ERR-DETAIL | STRING 編集 | X(60) | SKILL-CODE / SCORE |
|
||
|
||
---
|
||
|
||
## カバレッジ対象キーワード
|
||
|
||
| 予約語/記号 | 区分 | 使用箇所 |
|
||
|:-----------|:----:|:---------|
|
||
| CANCEL | 予約語 | 終了処理 CANCEL 'SUB02MSG' |
|
||
| I-O-CONTROL | 予約語 | ENVIRONMENT DIVISION の I-O-CONTROL 段落 |
|
||
| NEXT SENTENCE | 予約語 | レベル判定 ELSE 内 NEXT SENTENCE |
|
||
| EJECT | 予約語 | 段落境界の `*EJECT` コメント行(コメント化) |
|
||
| SKIP2 | 予約語 | (実装せず。W-1 にて統計対象から除外決定) |
|
||
| SET 条件名 TO FALSE | 予約語 | 2000MAJSOR: 初回フラグ解除に SET ... TO FALSE |
|
||
| PERFORM VARYING | 予約語(昇格) | 内部表走査(単一ループ) |
|
||
| NESTED IF(複合条件 AND/OR) | 予約語(昇格) | レベル判定 IF ネスト 3 段 |
|
||
| SEARCH ALL | 予約語 | 評価基準マッチング |
|
||
| DIVIDE ... GIVING | 予約語 | 平均点算出 |
|
||
| BINARY | 予約語 | 内部表カウンタ USAGE BINARY |
|