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) |
処理フロー
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 |