Files
cobol-tna-system/詳細設計書/詳細設計書_JIN02SKL.md
T

6.7 KiB
Raw Blame History

JIN02SKL 詳細設計書

プログラム概要

項目 内容
プログラムID JIN02SKL(人事→JINji, 02, スキルSukiru別評価集計→SKL)
プログラムタイプ 19M:N→N件マッチング+集計)
機能 スキル評価明細(M件)× 評価基準マスタ(N件)→ スキル別評価集計(N件出力)
CALL方式 メインプログラム(JCLからCALL
DBアクセス なし
使用サブプログラム SUB01DAT(日付), SUB02MSG(メッセージ), SUB03END(アベンド)

ファイル一覧

DD名 ファイル名 編成 RECM サイズ I/O 用途
JIN02R01 SKILL-EVAL SEQUENTIAL FB 200 INPUT スキル評価明細データ(M件)
JIN02R02 SKILL-MST SEQUENTIAL FB 80 INPUT スキル評価基準マスタ(N件→内部表LOAD)
JIN02W01 SKILL-AGG SEQUENTIAL FB 200 OUTPUT スキル別評価集計結果(N件出力)
JIN02W02 VALID-ERROR SEQUENTIAL FB 80 OUTPUT エラーレコード

レコード定義

SKILL-EVAL-RECJIN02R01, 200B

項目 PIC 内容 備考
SKILL-CODE X(4) スキルコード
EMP-ID X(8) 社員番号
EMP-NAME X(40) 社員氏名
EVAL-DATE X(8) 評価日 YYYYMMDD
SCORE 9(3) 評価点数 1-999
PADDING X(137) FILLER

SKILL-MST-RECJIN02R02, 80B

項目 PIC USAGE 内容 備考
MST-SKILL-CODE X(4) スキルコード SEARCH ALL キー
MST-LEVEL 9(2) BINARY レベル BINARY 予約語使用
MST-SCORE-FROM 9(3) 下限点数
MST-SCORE-TO 9(3) 上限点数
MST-LEVEL-NAME X(20) レベル名称
FILLER X(048)

SKILL-AGG-RECJIN02W01, 200B

項目 PIC USAGE 内容 備考
AGG-SKILL-CODE X(4) スキルコード
AGG-LEVEL 9(2) PACKED-DECIMAL レベル PACKED-DECIMAL 予約語使用
AGG-LEVEL-NAME X(20) レベル名称
AGG-EMP-COUNT 9(5) BINARY 人数 BINARY 予約語使用
AGG-COUNT-EDIT ZZZZ9 人数編集表示 ZZZZ9 PICTURE記号
AGG-AVG-SCORE 9(3)V9(2) PACKED-DECIMAL 平均点数
FILLER X(162)

VALID-ERROR-RECJIN02W02, 80B

JIN01KNS と共用。VALID-ERROR-REC.cpy(独立したCOPY書式)を参照。

内部表

WS-SKILL-TABLEOCCURS DEPENDING ON

項目 PIC USAGE 内容
TBL-SKILL-CODE X(4) スキルコード
TBL-LEVEL 9(2) BINARY レベル
TBL-LEVEL-NAME X(20) レベル名称
TBL-EMP-COUNT 9(5) BINARY 件数
TBL-SCORE-SUM 9(8) BINARY 合計点
TBL-MAX-ENTRY 99 BINARY 最大エントリ数(100

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

処理ロジック

初期処理(JIN02SKL-OPEN

  1. JIN02R01 / JIN02R02 / JIN02W01 / JIN02W02 を OPEN
  2. WS-TBL-ENTRY を INITIALIZE(内部表初期化)

マスタ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(不要になったので)

主処理ループ(JIN02SKL-READ-EVAL → JIN02SKL-AGGREGATE → ループ)

  1. JIN02R01 から SKILL-EVAL を1件 READ
  2. AT END → JIN02SKL-OUTPUT へ
  3. JIN02SKL-AGGREGATE を PERFORM

集計処理(JIN02SKL-AGGREGATE

  1. JIN02SKL-SEARCH-LVL を呼出(SEARCH ALL
  2. WHEN 該当 → JIN02SKL-UPDATE-TBL を PERFORM
  3. WHEN NOT 該当 → JIN02SKL-WRITE-ERR を PERFORM

SEARCH ALLJIN02SKL-SEARCH-LVL

  1. SEARCH ALL WS-SKILL-TABLE
  2. AT END → 直接 PERFORM 2100WRTERRSOR(該当するレベルがない)
  3. WHEN TBL-SKILL-CODE(WS-IDX) = SKILL-CODE → 直接 PERFORM 2200UPDTTLSOR

内部表UPDATEJIN02SKL-UPDATE-TBL

  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

降順走査(JIN02SKL-DESCEND

PERFORM VARYING WS-IDX FROM WS-MAX-ENTRY BY -1
        UNTIL WS-IDX = 0
    PERFORM JIN02SKL-WRITE-AGG
END-PERFORM

SUBTRACT 1 FROM WS-IDX END-SUBTRACTEND-SUBTRACT 予約語使用)

平均点算出(JIN02SKL-GET-AVG

DIVIDE TBL-SCORE-SUM(WS-IDX) BY TBL-EMP-COUNT(WS-IDX)
    GIVING WS-AVG-TEMP REMAINDER WS-REM
    END-DIVIDE

(DIVIDE 予約語カバレッジ + END-DIVIDE

エラー出力(JIN02SKL-WRITE-ERR

  1. VALID-ERROR-REC にエラー情報設定
  2. JIN02W02 へ WRITE

終了処理(JIN02SKL-CLOSE

  1. JIN02R01 / JIN02W01 / JIN02W02 を CLOSE
  2. GOBACK

カバレッジ対象キーワード

予約語/記号 区分 使用箇所
USAGE BINARY 予約語(16) MST-LEVEL, TBL-EMP-COUNT 等
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
GREATER 予約語(87) IF WS-COUNT IS GREATER THAN ZERO
IF GREATER THAN 予約語(87) 件数判定
PIC ZZZZ9 PICTURE記号 AGG-COUNT-EDIT
PIC N PICTURE記号 (JIN01RECから継承、未使用でもCOPY参照でカバー)