JIN09RPT 社員別スキル集計レポート処理を新規追加(SAME句削除版)。未カバー予約語6語(CANCEL/I-O-CONTROL/NEXT SENTENCE/EJECT/SKIP2/FALSE)をカバーし、カバレッジ×41→34に改善。全26テストPASS
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,13 @@
|
|||||||
|
*
|
||||||
|
* 社員別スキル集計結果レコード 120B JIN09RPT出力
|
||||||
|
*
|
||||||
|
03 (A)SUM-EMP-ID PIC X(008).
|
||||||
|
03 (A)SUM-EMP-NAME PIC X(040).
|
||||||
|
03 (A)SUM-SKILL-CODE PIC X(004).
|
||||||
|
03 (A)SUM-SKILL-NAME PIC X(020).
|
||||||
|
03 (A)SUM-LEVEL-NAME PIC X(002).
|
||||||
|
03 (A)SUM-EVAL-CNT PIC 9(003).
|
||||||
|
03 (A)SUM-SCORE-TOTAL PIC 9(005).
|
||||||
|
03 (A)SUM-SCORE-AVG PIC 9(003)V9(002).
|
||||||
|
03 (A)SUM-EVAL-CNT-TOTAL PIC 9(003).
|
||||||
|
03 (A)SUM-FILLER PIC X(030).
|
||||||
@@ -0,0 +1,664 @@
|
|||||||
|
IDENTIFICATION DIVISION.
|
||||||
|
PROGRAM-ID. JIN09RPT.
|
||||||
|
*****************************************************************
|
||||||
|
* システム名 : 人事情報管理システム *
|
||||||
|
* プログラムID : JIN09RPT *
|
||||||
|
* プログラム名 : 社員別スキル集計レポート処理 *
|
||||||
|
* 作成日 : 2026-08-01 *
|
||||||
|
* 処理概要 : SKILL-EVAL(M件, EMP-ID昇順)を社員 *
|
||||||
|
* キーブレイクで集計し、社員別スキル *
|
||||||
|
* 集計結果(SKILL-SUM)を出力する *
|
||||||
|
* 予約語カバー : CANCEL / I-O-CONTROL / NEXT SENTENCE / *
|
||||||
|
* EJECT / SKIP2 / FALSE *
|
||||||
|
*****************************************************************
|
||||||
|
* 更新履歴 *
|
||||||
|
*---------------------------------------------------------------*
|
||||||
|
* 更新日付 担当者 更新内容 *
|
||||||
|
*---------------------------------------------------------------*
|
||||||
|
* 2026-08-01 @@@ 新規作成 *
|
||||||
|
* *
|
||||||
|
*****************************************************************
|
||||||
|
ENVIRONMENT DIVISION.
|
||||||
|
CONFIGURATION SECTION.
|
||||||
|
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||||
|
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||||
|
*
|
||||||
|
INPUT-OUTPUT SECTION.
|
||||||
|
FILE-CONTROL.
|
||||||
|
SELECT R01INNFIL ASSIGN TO EXTERNAL JIN09R01
|
||||||
|
ORGANIZATION IS SEQUENTIAL
|
||||||
|
ACCESS MODE IS SEQUENTIAL
|
||||||
|
PADDING CHARACTER IS WS-PAD-CHAR
|
||||||
|
FILE STATUS IS WS-FILE-STATUS.
|
||||||
|
SELECT R02INNFIL ASSIGN TO EXTERNAL JIN09R02
|
||||||
|
ORGANIZATION IS SEQUENTIAL
|
||||||
|
ACCESS MODE IS SEQUENTIAL
|
||||||
|
PADDING CHARACTER IS WS-PAD-CHAR
|
||||||
|
FILE STATUS IS WS-FILE-STATUS.
|
||||||
|
SELECT W01OUTFIL ASSIGN TO EXTERNAL JIN09W01
|
||||||
|
ORGANIZATION IS SEQUENTIAL
|
||||||
|
ACCESS MODE IS SEQUENTIAL.
|
||||||
|
SELECT W02OUTFIL ASSIGN TO EXTERNAL JIN09W02
|
||||||
|
ORGANIZATION IS SEQUENTIAL
|
||||||
|
ACCESS MODE IS SEQUENTIAL.
|
||||||
|
*
|
||||||
|
I-O-CONTROL.
|
||||||
|
*
|
||||||
|
DATA DIVISION.
|
||||||
|
FILE SECTION.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* R01: SKILL-EVAL スキル評価明細 (EMP-ID昇順) *
|
||||||
|
*****************************************************************
|
||||||
|
FD R01INNFIL
|
||||||
|
LABEL RECORD IS STANDARD
|
||||||
|
BLOCK CONTAINS 0
|
||||||
|
RECORDING MODE IS F.
|
||||||
|
01 R01INNREC.
|
||||||
|
COPY SKILL-EVAL-REC REPLACING ==(A)== BY ==R01==.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* R02: SKILL-MST スキル評価基準マスタ *
|
||||||
|
*****************************************************************
|
||||||
|
FD R02INNFIL
|
||||||
|
LABEL RECORD IS STANDARD
|
||||||
|
BLOCK CONTAINS 0
|
||||||
|
RECORDING MODE IS F.
|
||||||
|
01 R02INNREC.
|
||||||
|
COPY SKILL-MST-REC REPLACING ==(A)== BY ==R02==.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* W01: SKILL-SUM 社員別スキル集計結果 *
|
||||||
|
*****************************************************************
|
||||||
|
FD W01OUTFIL
|
||||||
|
LABEL RECORD IS STANDARD
|
||||||
|
BLOCK CONTAINS 0
|
||||||
|
RECORDING MODE IS F.
|
||||||
|
01 W01OUTREC.
|
||||||
|
COPY JIN09REC REPLACING ==(A)== BY ==W01==.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* W02: VALID-ERROR エラーレコード *
|
||||||
|
*****************************************************************
|
||||||
|
FD W02OUTFIL
|
||||||
|
LABEL RECORD IS STANDARD
|
||||||
|
BLOCK CONTAINS 0
|
||||||
|
RECORDING MODE IS F.
|
||||||
|
01 W02OUTREC.
|
||||||
|
COPY VALID-ERROR-REC.
|
||||||
|
*
|
||||||
|
WORKING-STORAGE SECTION.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* コンスタント領域 *
|
||||||
|
*****************************************************************
|
||||||
|
01 CNSARA.
|
||||||
|
03 CNS-PRGIDX PIC X(008) VALUE 'JIN09RPT'.
|
||||||
|
03 CNS-MSGSTR PIC 9(003) VALUE 001.
|
||||||
|
03 CNS-MSGFIN PIC 9(003) VALUE 002.
|
||||||
|
03 CNS-MSGSUBEEK PIC 9(003) VALUE 005.
|
||||||
|
03 CNS-MSGIINKES PIC 9(003) VALUE 006.
|
||||||
|
03 CNS-MSGOUTKES PIC 9(003) VALUE 007.
|
||||||
|
03 CNS-MSGKEYINF PIC 9(003) VALUE 033.
|
||||||
|
03 CNS-KN0002 PIC 9(001) VALUE 2.
|
||||||
|
03 CNS-ABD999 PIC 9(003) VALUE 999.
|
||||||
|
03 CNS-TBL-MAX PIC 9(003) VALUE 20.
|
||||||
|
03 CNS-SCORE-S PIC 9(003) VALUE 90.
|
||||||
|
03 CNS-SCORE-A PIC 9(003) VALUE 80.
|
||||||
|
03 CNS-SCORE-B PIC 9(003) VALUE 50.
|
||||||
|
03 CNS-SCORE-C PIC 9(003) VALUE 1.
|
||||||
|
03 CNS-LVLS PIC X(002) VALUE 'S'.
|
||||||
|
03 CNS-LVLA PIC X(002) VALUE 'A'.
|
||||||
|
03 CNS-LVLB PIC X(002) VALUE 'B'.
|
||||||
|
03 CNS-LVLC PIC X(002) VALUE 'C'.
|
||||||
|
03 CNS-LVLX PIC X(002) VALUE 'X'.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* カウンタ領域 *
|
||||||
|
*****************************************************************
|
||||||
|
01 CUNARA.
|
||||||
|
03 CUN-R01INN PIC S9(009) COMP-3
|
||||||
|
VALUE ZERO.
|
||||||
|
03 CUN-R02INN PIC S9(009) COMP-3
|
||||||
|
VALUE ZERO.
|
||||||
|
03 CUN-W01OUT PIC S9(009) COMP-3
|
||||||
|
VALUE ZERO.
|
||||||
|
03 CUN-W02OUT PIC S9(009) COMP-3
|
||||||
|
VALUE ZERO.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* 作業領域 *
|
||||||
|
*****************************************************************
|
||||||
|
01 WRKARA.
|
||||||
|
*** 運用日付
|
||||||
|
03 WRK-U06 PIC 9(008).
|
||||||
|
*** 読込フラグ
|
||||||
|
03 WRK-R01EOF PIC X(001).
|
||||||
|
88 WRK-R01EOF-Y VALUE '1'.
|
||||||
|
03 WRK-R02EOF PIC X(001).
|
||||||
|
88 WRK-R02EOF-Y VALUE '1'.
|
||||||
|
*** 社員キーブレイク用
|
||||||
|
03 WRK-PREV-EMP-ID PIC X(008).
|
||||||
|
03 WRK-FIRST-FLG PIC X(001).
|
||||||
|
88 WRK-FIRST-FLG-Y VALUE 'Y' FALSE 'N'.
|
||||||
|
*** レベル判定結果
|
||||||
|
03 WRK-LEVEL PIC X(002).
|
||||||
|
*** 社員別明細総数
|
||||||
|
03 WRK-EMP-EVAL-CNT PIC 9(003).
|
||||||
|
*** 内部表走査用
|
||||||
|
03 WRK-IDX PIC 9(004) BINARY.
|
||||||
|
*** 平均点算出用
|
||||||
|
03 WRK-AVG-TEMP PIC 9(006)V9(002).
|
||||||
|
03 WRK-REM PIC 9(003).
|
||||||
|
*** SELECT用パディング文字・ファイルステータス
|
||||||
|
03 WS-PAD-CHAR PIC X(001) VALUE SPACE.
|
||||||
|
03 WS-FILE-STATUS PIC X(002).
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* 内部表: スキル別評価集計用(MSTデータは全社員共通で保持) *
|
||||||
|
*****************************************************************
|
||||||
|
01 WS-SKILL-TABLE.
|
||||||
|
03 WS-TBL-ENTRY OCCURS 1 TO 20
|
||||||
|
DEPENDING ON WS-TBL-MAX-IDX
|
||||||
|
ASCENDING KEY IS TBL-SKILL-CODE
|
||||||
|
INDEXED BY WS-TBL-IDX.
|
||||||
|
05 TBL-SKILL-CODE PIC X(004).
|
||||||
|
05 TBL-SKILL-NAME PIC X(020).
|
||||||
|
05 TBL-LEVEL-NAME PIC X(002).
|
||||||
|
05 TBL-EVAL-CNT PIC 9(003) BINARY.
|
||||||
|
05 TBL-SCORE-SUM PIC 9(005) BINARY.
|
||||||
|
05 TBL-EMP-ID PIC X(008).
|
||||||
|
05 TBL-EMP-NAME PIC X(040).
|
||||||
|
01 WS-TBL-MAX-IDX PIC 9(004) BINARY.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* サブプログラム連絡領域 *
|
||||||
|
*****************************************************************
|
||||||
|
*** 運用日付取得
|
||||||
|
COPY JINDATAC.
|
||||||
|
*** メッセージ編集出力SR用
|
||||||
|
COPY JINMSGAC.
|
||||||
|
*** ABEND処理SR用
|
||||||
|
COPY JINENDAC.
|
||||||
|
*
|
||||||
|
PROCEDURE DIVISION.
|
||||||
|
EJECT
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO: (0.0) *
|
||||||
|
* サブモジュール名: 制御処理 *
|
||||||
|
* 処理概要 : メインコントロール処理 *
|
||||||
|
*****************************************************************
|
||||||
|
0000MAJCOLSOR SECTION.
|
||||||
|
*
|
||||||
|
*** 初期処理
|
||||||
|
PERFORM 1000ITTSOR.
|
||||||
|
*
|
||||||
|
*** マスタLOAD処理
|
||||||
|
PERFORM 1200MSTLDASOR
|
||||||
|
UNTIL WRK-R02EOF-Y.
|
||||||
|
*
|
||||||
|
*** マスタLOAD完了後、R02をCLOSE(SAME RECORD AREA確保領域の解放)
|
||||||
|
PERFORM 1250R02CLOSOR.
|
||||||
|
*
|
||||||
|
*** 評価明細集計処理
|
||||||
|
PERFORM 2000MAJSOR
|
||||||
|
UNTIL WRK-R01EOF-Y.
|
||||||
|
*
|
||||||
|
*** 終了処理
|
||||||
|
PERFORM 4000STPSOR.
|
||||||
|
*
|
||||||
|
0000MAJCOLSOR-EXT.
|
||||||
|
GOBACK.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO: (1.0) *
|
||||||
|
* サブモジュール名: 初期処理 *
|
||||||
|
* 処理概要 : 開始メッセージ出力・各種初期化処理 *
|
||||||
|
*****************************************************************
|
||||||
|
1000ITTSOR SECTION.
|
||||||
|
*
|
||||||
|
*** プログラム開始表示
|
||||||
|
DISPLAY 'JIN09RPT START' UPON CONSOLE.
|
||||||
|
*
|
||||||
|
*** 開始メッセージ出力
|
||||||
|
INITIALIZE M00MHOPAR.
|
||||||
|
MOVE CNS-MSGSTR TO M00MSGCOD.
|
||||||
|
PERFORM 6000MSGOUTSOR.
|
||||||
|
*
|
||||||
|
*** コンパイル日時出力
|
||||||
|
INITIALIZE M00MHOPAR.
|
||||||
|
MOVE CNS-MSGKEYINF TO M00MSGCOD.
|
||||||
|
MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01.
|
||||||
|
MOVE 'COMPILED' TO M00UMKDATS22-02.
|
||||||
|
PERFORM 6000MSGOUTSOR.
|
||||||
|
*
|
||||||
|
*** ワークエリア初期化
|
||||||
|
INITIALIZE WRKARA
|
||||||
|
CUNARA.
|
||||||
|
*
|
||||||
|
*** 内部表初期化(全要素クリア)
|
||||||
|
PERFORM 1500TBLINITSOR.
|
||||||
|
*
|
||||||
|
*** 運用日付取得
|
||||||
|
INITIALIZE D01UBSPAR.
|
||||||
|
CALL 'SUB01DAT' USING D01UBSPAR
|
||||||
|
ON EXCEPTION
|
||||||
|
DISPLAY 'SUB01DAT CALL ERROR'
|
||||||
|
MOVE 999 TO D01FKICOD
|
||||||
|
NOT ON EXCEPTION
|
||||||
|
CONTINUE
|
||||||
|
END-CALL.
|
||||||
|
IF D01FKICOD = ZERO
|
||||||
|
MOVE D01UBSUDATE TO WRK-U06
|
||||||
|
ELSE
|
||||||
|
INITIALIZE M00MHOPAR
|
||||||
|
MOVE CNS-MSGSUBEEK TO M00MSGCOD
|
||||||
|
MOVE 'SUB01DAT' TO M00UMKDATS22-01
|
||||||
|
MOVE D01FKICOD TO M00UMKDATS22-02
|
||||||
|
PERFORM 6000MSGOUTSOR
|
||||||
|
PERFORM 9999ABDSOR
|
||||||
|
END-IF.
|
||||||
|
*
|
||||||
|
*** 入出力ファイルOPEN
|
||||||
|
OPEN INPUT R01INNFIL
|
||||||
|
R02INNFIL
|
||||||
|
OUTPUT W01OUTFIL
|
||||||
|
W02OUTFIL.
|
||||||
|
*
|
||||||
|
*** 初回フラグ設定
|
||||||
|
MOVE 'Y' TO WRK-FIRST-FLG.
|
||||||
|
*
|
||||||
|
*** R02初回読込
|
||||||
|
PERFORM 1100R02INNSOR.
|
||||||
|
*
|
||||||
|
*** R01初回読込
|
||||||
|
PERFORM 1300R01INNSOR.
|
||||||
|
*
|
||||||
|
1000ITTSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(1.1) *
|
||||||
|
* サブモジュール名: R02読込処理 *
|
||||||
|
* 処理概要 : 評価基準マスタ読込・EOF判定 *
|
||||||
|
*****************************************************************
|
||||||
|
1100R02INNSOR SECTION.
|
||||||
|
*
|
||||||
|
READ R02INNFIL
|
||||||
|
AT END
|
||||||
|
MOVE '1' TO WRK-R02EOF
|
||||||
|
NOT AT END
|
||||||
|
ADD 1 TO CUN-R02INN
|
||||||
|
END-READ.
|
||||||
|
*
|
||||||
|
1100R02INNSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(1.2) *
|
||||||
|
* サブモジュール名: マスタLOAD処理 *
|
||||||
|
* 処理概要 : R02全件を内部表にLOAD *
|
||||||
|
*****************************************************************
|
||||||
|
1200MSTLDASOR SECTION.
|
||||||
|
*
|
||||||
|
*** 内部表エントリ追加
|
||||||
|
ADD 1 TO WS-TBL-MAX-IDX
|
||||||
|
END-ADD.
|
||||||
|
*
|
||||||
|
MOVE R02MST-SKILL-CODE
|
||||||
|
TO TBL-SKILL-CODE(WS-TBL-MAX-IDX).
|
||||||
|
MOVE R02MST-LEVEL-NAME
|
||||||
|
TO TBL-SKILL-NAME(WS-TBL-MAX-IDX).
|
||||||
|
MOVE SPACE
|
||||||
|
TO TBL-LEVEL-NAME(WS-TBL-MAX-IDX).
|
||||||
|
MOVE ZERO
|
||||||
|
TO TBL-EVAL-CNT(WS-TBL-MAX-IDX).
|
||||||
|
MOVE ZERO
|
||||||
|
TO TBL-SCORE-SUM(WS-TBL-MAX-IDX).
|
||||||
|
MOVE SPACE
|
||||||
|
TO TBL-EMP-ID(WS-TBL-MAX-IDX).
|
||||||
|
MOVE SPACE
|
||||||
|
TO TBL-EMP-NAME(WS-TBL-MAX-IDX).
|
||||||
|
*
|
||||||
|
*** 次のR02読込
|
||||||
|
PERFORM 1100R02INNSOR.
|
||||||
|
*
|
||||||
|
1200MSTLDASOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(1.25) *
|
||||||
|
* サブモジュール名: R02クローズ処理 *
|
||||||
|
* 処理概要 : マスタLOAD完了後にR02をCLOSEする *
|
||||||
|
*****************************************************************
|
||||||
|
1250R02CLOSOR SECTION.
|
||||||
|
*
|
||||||
|
CLOSE R02INNFIL.
|
||||||
|
*
|
||||||
|
1250R02CLOSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(1.3) *
|
||||||
|
* サブモジュール名: R01読込処理 *
|
||||||
|
* 処理概要 : 評価明細読込・EOF判定 *
|
||||||
|
*****************************************************************
|
||||||
|
1300R01INNSOR SECTION.
|
||||||
|
*
|
||||||
|
READ R01INNFIL
|
||||||
|
AT END
|
||||||
|
MOVE '1' TO WRK-R01EOF
|
||||||
|
NOT AT END
|
||||||
|
ADD 1 TO CUN-R01INN
|
||||||
|
END-READ.
|
||||||
|
*
|
||||||
|
1300R01INNSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(1.5) *
|
||||||
|
* サブモジュール名: 内部表初期化処理 *
|
||||||
|
* 処理概要 : 内部表全要素(20件)を初期化 *
|
||||||
|
*****************************************************************
|
||||||
|
1500TBLINITSOR SECTION.
|
||||||
|
*
|
||||||
|
PERFORM VARYING WRK-IDX
|
||||||
|
FROM 1 BY 1
|
||||||
|
UNTIL WRK-IDX > CNS-TBL-MAX
|
||||||
|
MOVE SPACE TO TBL-SKILL-CODE(WRK-IDX)
|
||||||
|
TBL-SKILL-NAME(WRK-IDX)
|
||||||
|
TBL-LEVEL-NAME(WRK-IDX)
|
||||||
|
TBL-EMP-ID(WRK-IDX)
|
||||||
|
TBL-EMP-NAME(WRK-IDX)
|
||||||
|
MOVE ZERO TO TBL-EVAL-CNT(WRK-IDX)
|
||||||
|
TBL-SCORE-SUM(WRK-IDX)
|
||||||
|
END-PERFORM.
|
||||||
|
MOVE ZERO TO WS-TBL-MAX-IDX.
|
||||||
|
MOVE ZERO TO WRK-EMP-EVAL-CNT.
|
||||||
|
*
|
||||||
|
1500TBLINITSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(1.6) *
|
||||||
|
* サブモジュール名: 集計項目リセット処理 *
|
||||||
|
* 処理概要 : 社員キーブレイク時にMST定義を保持したまま *
|
||||||
|
* 集計値のみリセット *
|
||||||
|
*****************************************************************
|
||||||
|
1600TBLRSTSOR SECTION.
|
||||||
|
*
|
||||||
|
PERFORM VARYING WRK-IDX
|
||||||
|
FROM 1 BY 1
|
||||||
|
UNTIL WRK-IDX > WS-TBL-MAX-IDX
|
||||||
|
MOVE ZERO TO TBL-EVAL-CNT(WRK-IDX)
|
||||||
|
TBL-SCORE-SUM(WRK-IDX)
|
||||||
|
MOVE SPACE TO TBL-LEVEL-NAME(WRK-IDX)
|
||||||
|
TBL-EMP-ID(WRK-IDX)
|
||||||
|
TBL-EMP-NAME(WRK-IDX)
|
||||||
|
END-PERFORM.
|
||||||
|
MOVE ZERO TO WRK-EMP-EVAL-CNT.
|
||||||
|
*
|
||||||
|
1600TBLRSTSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(2.0) *
|
||||||
|
* サブモジュール名: 主処理 *
|
||||||
|
* 処理概要 : 社員キーブレイク判定 + 明細集計 *
|
||||||
|
*****************************************************************
|
||||||
|
2000MAJSOR SECTION.
|
||||||
|
*
|
||||||
|
*** 社員キーブレイク判定(初回 / EMP-ID不一致)
|
||||||
|
IF WRK-FIRST-FLG-Y
|
||||||
|
MOVE R01EMP-ID TO WRK-PREV-EMP-ID
|
||||||
|
SET WRK-FIRST-FLG-Y TO FALSE
|
||||||
|
ELSE
|
||||||
|
IF R01EMP-ID
|
||||||
|
NOT = WRK-PREV-EMP-ID
|
||||||
|
PERFORM 3000OUTPUSOR
|
||||||
|
MOVE R01EMP-ID TO WRK-PREV-EMP-ID
|
||||||
|
ELSE
|
||||||
|
CONTINUE
|
||||||
|
END-IF
|
||||||
|
END-IF.
|
||||||
|
*
|
||||||
|
*** 明細集計処理
|
||||||
|
PERFORM 2100AGGRGASOR.
|
||||||
|
*
|
||||||
|
*** 次のR01読込
|
||||||
|
PERFORM 1300R01INNSOR.
|
||||||
|
*
|
||||||
|
2000MAJSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(2.1) *
|
||||||
|
* サブモジュール名: 明細集計処理 *
|
||||||
|
* 処理概要 : レベル判定 → SEARCH ALL → 内部表UPDATE *
|
||||||
|
*****************************************************************
|
||||||
|
2100AGGRGASOR SECTION.
|
||||||
|
*
|
||||||
|
*** レベル判定(NESTED IF 3段 + 複合条件 AND/OR)
|
||||||
|
PERFORM 2200JUDGESOR.
|
||||||
|
*
|
||||||
|
*** SEARCH ALL で該当スキル特定
|
||||||
|
SET WS-TBL-IDX TO 1.
|
||||||
|
SEARCH ALL WS-TBL-ENTRY
|
||||||
|
AT END
|
||||||
|
PERFORM 2400WRTERRSOR
|
||||||
|
WHEN TBL-SKILL-CODE(WS-TBL-IDX)
|
||||||
|
= R01SKILL-CODE
|
||||||
|
PERFORM 2300UPDTTLSOR
|
||||||
|
END-SEARCH.
|
||||||
|
*
|
||||||
|
2100AGGRGASOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(2.2) *
|
||||||
|
* サブモジュール名: レベル判定処理 *
|
||||||
|
* 処理概要 : スコアを S/A/B/C に判定(NESTED IF) *
|
||||||
|
*****************************************************************
|
||||||
|
2200JUDGESOR SECTION.
|
||||||
|
*
|
||||||
|
IF R01SCORE >= CNS-SCORE-A
|
||||||
|
AND R01SCORE <= 999
|
||||||
|
IF R01SCORE >= CNS-SCORE-S
|
||||||
|
OR R01SCORE = 100
|
||||||
|
MOVE CNS-LVLS TO WRK-LEVEL
|
||||||
|
ELSE
|
||||||
|
MOVE CNS-LVLA TO WRK-LEVEL
|
||||||
|
END-IF
|
||||||
|
ELSE
|
||||||
|
IF R01SCORE >= CNS-SCORE-B
|
||||||
|
AND R01SCORE <= 79
|
||||||
|
MOVE CNS-LVLB TO WRK-LEVEL
|
||||||
|
ELSE
|
||||||
|
IF R01SCORE >= CNS-SCORE-C
|
||||||
|
AND R01SCORE <= 49
|
||||||
|
MOVE CNS-LVLC TO WRK-LEVEL
|
||||||
|
ELSE
|
||||||
|
MOVE CNS-LVLX TO WRK-LEVEL
|
||||||
|
NEXT SENTENCE
|
||||||
|
END-IF
|
||||||
|
END-IF
|
||||||
|
END-IF.
|
||||||
|
*
|
||||||
|
2200JUDGESOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(2.3) *
|
||||||
|
* サブモジュール名: 内部表UPDATE *
|
||||||
|
* 処理概要 : 該当エントリの件数・合計点を加算 *
|
||||||
|
*****************************************************************
|
||||||
|
2300UPDTTLSOR SECTION.
|
||||||
|
*
|
||||||
|
*** 件数加算
|
||||||
|
ADD 1 TO TBL-EVAL-CNT(WS-TBL-IDX)
|
||||||
|
END-ADD.
|
||||||
|
*** 合計点加算
|
||||||
|
ADD R01SCORE TO TBL-SCORE-SUM(WS-TBL-IDX)
|
||||||
|
END-ADD.
|
||||||
|
*** 社員ID・氏名・レベル設定
|
||||||
|
MOVE R01EMP-ID TO TBL-EMP-ID(WS-TBL-IDX).
|
||||||
|
MOVE R01EMP-NAME TO TBL-EMP-NAME(WS-TBL-IDX).
|
||||||
|
MOVE WRK-LEVEL TO TBL-LEVEL-NAME(WS-TBL-IDX).
|
||||||
|
*** 社員別明細総数加算
|
||||||
|
ADD 1 TO WRK-EMP-EVAL-CNT.
|
||||||
|
*
|
||||||
|
2300UPDTTLSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(2.4) *
|
||||||
|
* サブモジュール名: エラーWRITE *
|
||||||
|
* 処理概要 : W02へエラーレコード出力 *
|
||||||
|
*****************************************************************
|
||||||
|
2400WRTERRSOR SECTION.
|
||||||
|
*
|
||||||
|
ADD 1 TO CUN-W02OUT.
|
||||||
|
INITIALIZE W02OUTREC.
|
||||||
|
MOVE CNS-PRGIDX TO ERR-PROGRAMID.
|
||||||
|
MOVE R01EMP-ID TO ERR-EMP-ID.
|
||||||
|
MOVE 'LVL1' TO ERR-CODE.
|
||||||
|
STRING 'SKILL CODE NOT FOUND: '
|
||||||
|
R01SKILL-CODE
|
||||||
|
DELIMITED BY SIZE
|
||||||
|
INTO ERR-DETAIL
|
||||||
|
END-STRING.
|
||||||
|
WRITE W02OUTREC.
|
||||||
|
*
|
||||||
|
2400WRTERRSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(3.0) *
|
||||||
|
* サブモジュール名: 社員グループ出力処理 *
|
||||||
|
* 処理概要 : 内部表を走査し平均点を算出して出力 *
|
||||||
|
*****************************************************************
|
||||||
|
3000OUTPUSOR SECTION.
|
||||||
|
*
|
||||||
|
*** 内部表を昇順走査(PERFORM VARYING 多重ループ)
|
||||||
|
PERFORM VARYING WRK-IDX
|
||||||
|
FROM 1 BY 1
|
||||||
|
UNTIL WRK-IDX > WS-TBL-MAX-IDX
|
||||||
|
IF TBL-EVAL-CNT(WRK-IDX) > ZERO
|
||||||
|
PERFORM 3100WRITEAGSOR
|
||||||
|
END-IF
|
||||||
|
END-PERFORM.
|
||||||
|
*
|
||||||
|
*** 次の社員グループに備えて集計項目をリセット
|
||||||
|
PERFORM 1600TBLRSTSOR.
|
||||||
|
*
|
||||||
|
3000OUTPUSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(3.1) *
|
||||||
|
* サブモジュール名: 集計結果1件WRITE *
|
||||||
|
* 処理概要 : 平均点算出→編集→W01出力 *
|
||||||
|
*****************************************************************
|
||||||
|
3100WRITEAGSOR SECTION.
|
||||||
|
*
|
||||||
|
*** 平均点算出
|
||||||
|
IF TBL-EVAL-CNT(WRK-IDX) > ZERO
|
||||||
|
DIVIDE TBL-SCORE-SUM(WRK-IDX)
|
||||||
|
BY TBL-EVAL-CNT(WRK-IDX)
|
||||||
|
GIVING WRK-AVG-TEMP
|
||||||
|
REMAINDER WRK-REM
|
||||||
|
END-DIVIDE
|
||||||
|
ELSE
|
||||||
|
MOVE ZERO TO WRK-AVG-TEMP
|
||||||
|
END-IF.
|
||||||
|
*
|
||||||
|
*** W01レコード編集
|
||||||
|
INITIALIZE W01OUTREC.
|
||||||
|
MOVE TBL-EMP-ID(WRK-IDX)
|
||||||
|
TO W01SUM-EMP-ID.
|
||||||
|
MOVE TBL-EMP-NAME(WRK-IDX)
|
||||||
|
TO W01SUM-EMP-NAME.
|
||||||
|
MOVE TBL-SKILL-CODE(WRK-IDX)
|
||||||
|
TO W01SUM-SKILL-CODE.
|
||||||
|
MOVE TBL-SKILL-NAME(WRK-IDX)
|
||||||
|
TO W01SUM-SKILL-NAME.
|
||||||
|
MOVE TBL-LEVEL-NAME(WRK-IDX)
|
||||||
|
TO W01SUM-LEVEL-NAME.
|
||||||
|
MOVE TBL-EVAL-CNT(WRK-IDX)
|
||||||
|
TO W01SUM-EVAL-CNT.
|
||||||
|
MOVE TBL-SCORE-SUM(WRK-IDX)
|
||||||
|
TO W01SUM-SCORE-TOTAL.
|
||||||
|
MOVE WRK-AVG-TEMP
|
||||||
|
TO W01SUM-SCORE-AVG.
|
||||||
|
MOVE WRK-EMP-EVAL-CNT
|
||||||
|
TO W01SUM-EVAL-CNT-TOTAL.
|
||||||
|
*
|
||||||
|
WRITE W01OUTREC.
|
||||||
|
ADD 1 TO CUN-W01OUT.
|
||||||
|
*
|
||||||
|
3100WRITEAGSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(4.0) *
|
||||||
|
* サブモジュール名: 終了処理 *
|
||||||
|
* 処理概要 : 最終社員出力 + 件数出力 + 終了メッセージ *
|
||||||
|
*****************************************************************
|
||||||
|
4000STPSOR SECTION.
|
||||||
|
*
|
||||||
|
*** 最終社員グループの出力
|
||||||
|
IF WRK-EMP-EVAL-CNT > ZERO
|
||||||
|
PERFORM 3000OUTPUSOR
|
||||||
|
END-IF.
|
||||||
|
*
|
||||||
|
*** 入出力ファイル件数出力
|
||||||
|
INITIALIZE M00MHOPAR.
|
||||||
|
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||||
|
MOVE 'JIN09R01' TO M00UMKDATS22-01.
|
||||||
|
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||||
|
PERFORM 6000MSGOUTSOR.
|
||||||
|
*
|
||||||
|
INITIALIZE M00MHOPAR.
|
||||||
|
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||||
|
MOVE 'JIN09R02' TO M00UMKDATS22-01.
|
||||||
|
MOVE CUN-R02INN TO M00UMKDATS22-02.
|
||||||
|
PERFORM 6000MSGOUTSOR.
|
||||||
|
*
|
||||||
|
INITIALIZE M00MHOPAR.
|
||||||
|
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||||
|
MOVE 'JIN09W01' TO M00UMKDATS22-01.
|
||||||
|
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||||
|
PERFORM 6000MSGOUTSOR.
|
||||||
|
*
|
||||||
|
INITIALIZE M00MHOPAR.
|
||||||
|
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||||
|
MOVE 'JIN09W02' TO M00UMKDATS22-01.
|
||||||
|
MOVE CUN-W02OUT TO M00UMKDATS22-02.
|
||||||
|
PERFORM 6000MSGOUTSOR.
|
||||||
|
*
|
||||||
|
*** 出力ファイルCLOSE
|
||||||
|
CLOSE R01INNFIL
|
||||||
|
W01OUTFIL
|
||||||
|
W02OUTFIL.
|
||||||
|
*
|
||||||
|
*** サブプログラム解放(CANCEL 予約語カバー)
|
||||||
|
CANCEL 'SUB02MSG'.
|
||||||
|
*
|
||||||
|
*** 終了メッセージ出力
|
||||||
|
INITIALIZE M00MHOPAR.
|
||||||
|
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||||
|
PERFORM 6000MSGOUTSOR.
|
||||||
|
*
|
||||||
|
4000STPSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(6.0) *
|
||||||
|
* サブモジュール名: メッセージ編集出力処理 *
|
||||||
|
* 処理概要 : メッセージ編集出力サブPGM呼出 *
|
||||||
|
*****************************************************************
|
||||||
|
6000MSGOUTSOR SECTION.
|
||||||
|
*
|
||||||
|
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
|
||||||
|
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
|
||||||
|
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
|
||||||
|
CALL 'SUB02MSG' USING M00MHOPAR.
|
||||||
|
*
|
||||||
|
6000MSGOUTSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(9.9) *
|
||||||
|
* サブモジュール名: ABEND処理 *
|
||||||
|
* 処理概要 : ABENDサブPGM呼出 *
|
||||||
|
*****************************************************************
|
||||||
|
9999ABDSOR SECTION.
|
||||||
|
*
|
||||||
|
MOVE CNS-ABD999 TO E01ABDCOD.
|
||||||
|
CALL 'SUB03END' USING E01ABDPAR.
|
||||||
|
*
|
||||||
|
9999ABDSOR-EXT.
|
||||||
|
EXIT.
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
# JIN09RPT 使用資源一覧
|
||||||
|
|
||||||
|
## プログラム概要
|
||||||
|
- **プログラムID**: JIN09RPT
|
||||||
|
- **プログラム名**: 社員別スキル集計レポート処理
|
||||||
|
- **処理概要**: SKILL-EVAL(M件, EMP-ID昇順)を社員キーブレイクで集計し、社員別スキル集計結果(SKILL-SUM)を出力する
|
||||||
|
|
||||||
|
## 使用ファイル
|
||||||
|
|
||||||
|
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||||
|
|------|---------------|------|-------------|-----------|--------|
|
||||||
|
| JIN09R01 | SKILL-EVAL | 順編成 | F (固定長) | 200B | SKILL-EVAL-REC |
|
||||||
|
| JIN09R02 | SKILL-MST | 順編成 | F (固定長) | 80B | SKILL-MST-REC |
|
||||||
|
| JIN09W01 | SKILL-SUM | 順編成 | F (固定長) | 120B | JIN09REC |
|
||||||
|
| JIN09W02 | VALID-ERROR | 順編成 | F (固定長) | 80B | VALID-ERROR-REC |
|
||||||
|
|
||||||
|
## 使用COPY句
|
||||||
|
|
||||||
|
| COPY句 | 用途 | 使用箇所 |
|
||||||
|
|--------|------|---------|
|
||||||
|
| SKILL-EVAL-REC | スキル評価明細レコード定義(R01入力) | FILE SECTION |
|
||||||
|
| SKILL-MST-REC | 評価基準マスタレコード定義(R02入力) | FILE SECTION |
|
||||||
|
| JIN09REC | 社員別スキル集計結果レコード定義(W01出力) | FILE SECTION |
|
||||||
|
| VALID-ERROR-REC | エラーレコード定義(W02出力) | FILE SECTION |
|
||||||
|
| JINDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
|
||||||
|
| JINMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||||
|
| JINENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||||
|
|
||||||
|
## 使用サブプログラム
|
||||||
|
|
||||||
|
| サブPGM | 役割 | CALL箇所 |
|
||||||
|
|---------|------|---------|
|
||||||
|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
|
||||||
|
| SUB02MSG | メッセージ編集出力 | 6000MSGOUTSOR |
|
||||||
|
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||||
|
|
||||||
|
※ SUB02MSG は終了処理(4000STPSOR)で CANCEL 'SUB02MSG' により解放する
|
||||||
|
|
||||||
|
## 使用DB2テーブル
|
||||||
|
|
||||||
|
なし(DB操作なし)
|
||||||
|
|
||||||
|
## 予約語カバー
|
||||||
|
|
||||||
|
| 予約語 | 使用箇所 |
|
||||||
|
|--------|---------|
|
||||||
|
| CANCEL | 4000STPSOR で CANCEL 'SUB02MSG' |
|
||||||
|
| I-O-CONTROL | ENVIRONMENT DIVISION の I-O-CONTROL 段落 |
|
||||||
|
| NEXT | 2200JUDGESOR の NEXT SENTENCE |
|
||||||
|
| SENTENCE | 2200JUDGESOR の NEXT SENTENCE |
|
||||||
|
| EJECT | PROCEDURE DIVISION 先頭のソース行 EJECT |
|
||||||
|
| SKIP2 | 段落境界のソース行 SKIP2 |
|
||||||
|
| FALSE | 2000MAJSOR の SET WRK-FIRST-FLG-Y TO FALSE |
|
||||||
|
|
||||||
|
## 処理フロー
|
||||||
|
1. 初期処理(開始メッセージ→運用日付取得→OPEN)
|
||||||
|
2. マスタLOAD(R02全件→内部表構築→R02 CLOSE)
|
||||||
|
3. 評価明細READループ(R01)
|
||||||
|
4. 社員キーブレイク判定(WRK-FIRST-FLG / WRK-PREV-EMP-ID)
|
||||||
|
5. レベル判定(NESTED IF 3段 + 複合条件 AND/OR)
|
||||||
|
6. SEARCH ALLで該当スキル特定→内部表UPDATE(件数・合計点)
|
||||||
|
7. 社員グループ出力(内部表走査→平均点DIVIDE→W01 WRITE)
|
||||||
|
8. 終了処理(CLOSE→件数出力→CANCEL→終了メッセージ)
|
||||||
@@ -2,32 +2,45 @@
|
|||||||
|
|
||||||
## システム概要
|
## システム概要
|
||||||
|
|
||||||
本サブシステムは、従業員の基本情報(氏名カナ/漢字)のフォーマット検証と、
|
本サブシステムは、従業員の基本情報(氏名カナ/漢字)のフォーマット検証、
|
||||||
スキル評価データの集計・分析を行う。
|
スキル評価データの集計・分析、社員台帳印刷、および
|
||||||
これにより、サブシステムA〜Dで未カバーのプログラムタイプ
|
人事異動データによるDB更新を行う。
|
||||||
No.19(M:N→N件)および No.27(半角20桁/4桁チェック)を追加し、
|
既存プログラム(JIN01KNS/JIN02SKL/JIN03RAN)に加え、
|
||||||
PICTURE記号 N/BINARY/ZZZZ9 および11個の COBOL 予約語を
|
JIN04PRT(社員台帳印刷)と JIN05UPD(人事異動DB更新)を新規追加し、
|
||||||
新たにカバーする。
|
未カバーのCOBOL予約語を計16語カバーする。
|
||||||
|
さらに JIN06SRT(社員データ並替)・JIN07SUB(社員情報取得サブPGM)・
|
||||||
|
JIN08TST(JIN07SUB呼出テスト)を追加し、
|
||||||
|
SORT/RELEASE/EXIT PROGRAM/ADDRESS/OMITTED/PERFORM TIMES をカバーする。
|
||||||
|
最後に JIN09RPT(社員別スキル集計レポート)を追加し、
|
||||||
|
CANCEL/I-O-CONTROL/NEXT SENTENCE/EJECT/SKIP2/FALSE の6語をカバーし、
|
||||||
|
PERFORM(複合条件)・SET(条件名 SET)を昇格させる。
|
||||||
|
(当初は SAME RECORD AREA もカバー予定だったが、GnuCOBOL 3.2 でレコード長の
|
||||||
|
異なるファイル間の共有領域が最小レコード長に固定される制約が判明したため、
|
||||||
|
SAME は断念した。)
|
||||||
|
|
||||||
### サブシステム情報
|
### サブシステム情報
|
||||||
|
|
||||||
| 項目 | 内容 |
|
| 項目 | 内容 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| サブシステムID | JIN(人事→JINji) |
|
| サブシステムID | JIN(人事→JINji) |
|
||||||
| COBOLプログラム数 | 2 |
|
| COBOLプログラム数 | 9(主7・サブ1・テスト1) |
|
||||||
| JCL数 | 2 |
|
| JCL数 | 7 |
|
||||||
| DB | なし(ファイル連携のみ) |
|
| DB | JIN05UPD のみ DB2 使用(EMPLOYEE マスタ) |
|
||||||
|
|
||||||
### サブシステム内ファイル
|
### サブシステム内ファイル
|
||||||
|
|
||||||
| # | ファイル名 | 編成 | RECM | サイズ | 用途 | 区分 |
|
| # | ファイル名 | 編成 | RECM | サイズ | 用途 | 区分 |
|
||||||
|---|-----------|------|------|-------|------|------|
|
|:---|-----------|------|------|-------|------|------|
|
||||||
| 1 | EMP-IMPORT | SEQUENTIAL | FB | 200 | 人事取込データ(外部システムよりCSV→EBCDIC変換済) | 新規 |
|
| 1 | EMP-IMPORT | SEQUENTIAL | FB | 200 | 人事取込データ(外部システムよりCSV→EBCDIC変換済) | 新規 |
|
||||||
| 2 | EMP-VALID | SEQUENTIAL | FB | 200 | チェック通過正常データ | 新規 |
|
| 2 | EMP-VALID | SEQUENTIAL | FB | 200 | チェック通過正常データ | 新規 |
|
||||||
| 3 | VALID-ERROR | SEQUENTIAL | FB | 80 | バリデーションエラーレコード(PROGRAMID・EMP-ID・ERR-CODE・詳細) | 新規 |
|
| 3 | VALID-ERROR | SEQUENTIAL | FB | 80 | バリデーションエラーレコード(PROGRAMID・EMP-ID・ERR-CODE・詳細) | 新規 |
|
||||||
| 4 | SKILL-EVAL | SEQUENTIAL | FB | 200 | スキル評価明細データ | 新規 |
|
| 4 | SKILL-EVAL | SEQUENTIAL | FB | 200 | スキル評価明細データ | 新規 |
|
||||||
| 5 | SKILL-MST | SEQUENTIAL | FB | 80 | スキル評価基準マスタ | 新規 |
|
| 5 | SKILL-MST | SEQUENTIAL | FB | 80 | スキル評価基準マスタ | 新規 |
|
||||||
| 6 | SKILL-AGG | SEQUENTIAL | FB | 200 | スキル別評価集計結果 | 新規 |
|
| 6 | SKILL-AGG | SEQUENTIAL | FB | 200 | スキル別評価集計結果 | 新規 |
|
||||||
|
| 7 | JIN-LEDGER | SEQUENTIAL | FB | 132 | 社員台帳印刷ファイル(WRITE ADVANCING + LINAGE制御)。JIN04PRT出力 | 新規 |
|
||||||
|
| 8 | HR-TRANS | SEQUENTIAL | FB | 200 | 人事異動トランザクション。JIN05UPD入力 | 新規 |
|
||||||
|
| 9 | SORTED-EMP | SEQUENTIAL | FB | 200 | 社員データ並替済ファイル(EMP-ID昇順)。JIN06SRT出力 | 新規 |
|
||||||
|
| 10 | SKILL-SUM | SEQUENTIAL | FB | 120 | 社員別スキル集計結果レポート。JIN09RPT出力 | 新規 |
|
||||||
|
|
||||||
### システム定数
|
### システム定数
|
||||||
|
|
||||||
@@ -37,12 +50,21 @@ PICTURE記号 N/BINARY/ZZZZ9 および11個の COBOL 予約語を
|
|||||||
| SUBCODE-LEN | 4 | 補助コード桁数 |
|
| SUBCODE-LEN | 4 | 補助コード桁数 |
|
||||||
| SKILL-LEVEL-MAX | 10 | スキルレベルの最大値 |
|
| SKILL-LEVEL-MAX | 10 | スキルレベルの最大値 |
|
||||||
| EVAL-SCORE-MAX | 999 | 評価点数の最大値 |
|
| EVAL-SCORE-MAX | 999 | 評価点数の最大値 |
|
||||||
|
| PAGE-LINES | 66 | 台帳印刷1ページ行数(LINAGE) |
|
||||||
|
| FOOT-LINE | 60 | 台帳印刷フッティング開始行 |
|
||||||
|
| TOP-MARGIN | 2 | 台帳印刷上部余白 |
|
||||||
|
| BOTTOM-MARGIN | 4 | 台帳印刷下部余白 |
|
||||||
|
| MAX-TRANS | 500 | JIN05UPD 最大処理件数(PERFORM UNTIL の上限ガード) |
|
||||||
|
| MAX-SORT-REC | 999 | JIN06SRT 最大SORT件数(PERFORM TIMES の上限ガード) |
|
||||||
|
| SKILL-LIST-MAX | 20 | JIN09RPT 内部表(スキル別集計)最大要素数 |
|
||||||
|
| SUM-LINES-MAX | 100 | JIN09RPT 1社員あたり最大出力行数 |
|
||||||
|
|
||||||
### 共通関数利用方針
|
### 共通関数利用方針
|
||||||
|
|
||||||
既存のサブプログラム(SUB01DAT〜SUB05TIM)は本サブシステムでも利用する。
|
既存のサブプログラム(SUB01DAT〜SUB05TIM)は本サブシステムでも利用する。
|
||||||
連絡領域のCOPY書式は `JINDATAC`・`JINMSGAC`・`JINENDAC` を新規作成する
|
連絡領域のCOPY書式は `JINDATAC`・`JINMSGAC`・`JINENDAC` を全プログラムで共用する。
|
||||||
(チェック用サブプログラム SUB04CHK は使用しない)。
|
JIN05UPD は DB2(EMPLOYEE マスタ)へアクセスするため、EXEC SQL を使用する。
|
||||||
|
DBアクセス用の COPY 書式として `DB-COMMON` を WORKING-STORAGE に取り込む。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -72,6 +94,71 @@ PICTURE記号 N/BINARY/ZZZZ9 および11個の COBOL 予約語を
|
|||||||
│ エラー件数表示に ZZZZ9 編集
|
│ エラー件数表示に ZZZZ9 編集
|
||||||
├── → SKILL-AGG(200B スキル別評価集計結果)
|
├── → SKILL-AGG(200B スキル別評価集計結果)
|
||||||
└── 異常 → VALID-ERROR(80B エラーレコード)
|
└── 異常 → VALID-ERROR(80B エラーレコード)
|
||||||
|
│
|
||||||
|
╞══ JINJ030 ═══════════════════════════════════╡
|
||||||
|
│ JIN03RAN(スキル評価ランキング出力) PGMパターン: 36
|
||||||
|
│ SKILL-AGG(集計結果)を読込、平均点降順にランク付け
|
||||||
|
│ OCCURS DESCENDING KEY で内部表定義、SET UP BY/DOWN BY で走査
|
||||||
|
│ MOVE CORRESPONDING でWS→W01転記
|
||||||
|
│ COMP-4 バイナリカウンタ使用
|
||||||
|
├── → RANK-OUT(200B ランキング出力ファイル)
|
||||||
|
│
|
||||||
|
╞══ JINJ040 ═══════════════════════════════════╡
|
||||||
|
│ JIN04PRT(社員台帳印刷) PGMパターン: 編集出力
|
||||||
|
│ EMP-VALID(200B チェック済社員データ)を読込み、台帳形式で印刷出力
|
||||||
|
│ ACCEPT FROM DATE / FROM TIME で印刷日時取得
|
||||||
|
│ LINAGE 制御(66行/ページ)でページ管理
|
||||||
|
│ PAGE-COUNTER 特殊レジスタでページ番号出力
|
||||||
|
│ DISPLAY UPON CONSOLE で開始/終了メッセージ
|
||||||
|
│ WRITE AFTER ADVANCING PAGE / AT END-OF-PAGE で改ページ制御
|
||||||
|
│ CLOSE WITH LOCK で出力ファイル保護
|
||||||
|
│ STRING ON OVERFLOW で安全な文字列編集
|
||||||
|
│ エラー時 STOP literal で終了
|
||||||
|
├── → JIN-LEDGER(133B 台帳印刷ファイル)
|
||||||
|
│
|
||||||
|
╞══ JINJ050 ═══════════════════════════════════╡
|
||||||
|
│ JIN05UPD(人事異動DB更新) PGMパターン: DB更新
|
||||||
|
│ HR-TRANS(200B 人事異動)を読込み、DB2 の EMPLOYEE マスタを更新
|
||||||
|
│ CALL ON EXCEPTION でサブプログラム呼出エラー捕捉
|
||||||
|
│ SET TO FALSE で状態フラグ制御
|
||||||
|
│ INITIALIZE REPLACING で特定項目のみ初期化
|
||||||
|
│ PERFORM UNTIL WS-EOF OR WS-COUNT > 500 でループ(TIMES相当)
|
||||||
|
│ 88-level VALUE 'A' 'B' 'C'(複数値)でトランザクション種別判定
|
||||||
|
│ EVALUATE WHEN THRU で範囲条件分岐
|
||||||
|
│ CALL BY CONTENT で値渡し呼出
|
||||||
|
│ EXIT PARAGRAPH で段落終了
|
||||||
|
├── DB2 → EMPLOYEE マスタ更新
|
||||||
|
└── 異常 → VALID-ERROR(80B エラーレコード)
|
||||||
|
│
|
||||||
|
╞══ JINJ060 ═══════════════════════════════════╡
|
||||||
|
│ JIN06SRT(社員データ並替) PGMパターン: 34(SORT)
|
||||||
|
│ EMP-VALID(200B)を INPUT PROCEDURE で読込
|
||||||
|
│ PERFORM TIMES で最大件数制限(MAX-SORT-REC)
|
||||||
|
│ RELEASE で SORT ファイルへ送出
|
||||||
|
│ SORT ... ON ASCENDING KEY EMP-ID
|
||||||
|
│ OUTPUT PROCEDURE で RETURN 受取 → SORTED-EMP へ書出
|
||||||
|
├── → SORTED-EMP(200B 並替済社員データ)
|
||||||
|
│
|
||||||
|
╞══ JINJ070 ═══════════════════════════════════╡
|
||||||
|
│ JIN07SUB(社員情報取得サブPGM) PGMパターン: 25(サブPGM)
|
||||||
|
│ LINKAGE SECTION で検索条件(EMP-ID)と取得項目(JIN01REC 既存項目)を受取
|
||||||
|
│ EMP-VALID を順次検索し一致レコードの項目を返却
|
||||||
|
│ IS OMITTED 判定で OMITTED 引数対応(ADDRESS OF は MOVE ADDRESS OF で別途カバー)
|
||||||
|
│ 終了は EXIT PROGRAM(GOBACK 不使用)
|
||||||
|
└── JIN08TST から CALL(2回:全引数 / KANJI-NAME OMITTED)
|
||||||
|
│
|
||||||
|
╞══ JINJ090 ═══════════════════════════════════╡
|
||||||
|
│ JIN09RPT(社員別スキル集計レポート) PGMパターン: 32(1:N+キーブレイク)
|
||||||
|
│ SKILL-EVAL(M件)を EMP-ID 昇順で読み込み、社員キーブレイク集計
|
||||||
|
│ I-O-CONTROL 段落(予約語カバー)を記載
|
||||||
|
│ NESTED IF(3〜4段)でスコア→S/A/B/C レベル判定(複合条件 AND/OR)
|
||||||
|
│ PERFORM VARYING の多重ループ(社員×明細×内部表20要素)
|
||||||
|
│ NEXT SENTENCE で文言継続制御、SET 条件名 TO FALSE で状態リセット
|
||||||
|
│ 集計完了後、社員別に SKILL-SUM(120B)へ出力
|
||||||
|
│ CANCEL 'SUB02MSG' でメッセージサブPGMを解放
|
||||||
|
│ EJECT / SKIP2 でソースページ・行制御
|
||||||
|
├── → SKILL-SUM(120B 社員別スキル集計結果)
|
||||||
|
└── 異常 → VALID-ERROR(80B エラーレコード)
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -107,6 +194,98 @@ PICTURE記号 N/BINARY/ZZZZ9 および11個の COBOL 予約語を
|
|||||||
//JIN02W02 DD DSN=VALID-ERROR.DAT,DISP=(NEW,PASS)
|
//JIN02W02 DD DSN=VALID-ERROR.DAT,DISP=(NEW,PASS)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### JINJ030 — スキル評価ランキング出力
|
||||||
|
|
||||||
|
```jcl
|
||||||
|
//JINJ030 JOB (ACCT),'スキル評価ランキング',CLASS=A
|
||||||
|
//*
|
||||||
|
//*=====================================================================
|
||||||
|
//* STEP010: ランキング出力(Type 36)
|
||||||
|
//*=====================================================================
|
||||||
|
//STEP010 EXEC PGM=JIN03RAN
|
||||||
|
//JIN03R01 DD DSN=SKILL-AGG.DAT,DISP=SHR
|
||||||
|
//JIN03W01 DD DSN=RANK-OUT.DAT,DISP=(NEW,CATLG)
|
||||||
|
```
|
||||||
|
|
||||||
|
### JINJ040 — 社員台帳印刷
|
||||||
|
|
||||||
|
```jcl
|
||||||
|
//JINJ040 JOB (ACCT),'社員台帳印刷',CLASS=A
|
||||||
|
//*
|
||||||
|
//*=====================================================================
|
||||||
|
//* STEP010: 台帳印刷(編集出力)
|
||||||
|
//*=====================================================================
|
||||||
|
//STEP010 EXEC PGM=JIN04PRT
|
||||||
|
//JIN04R01 DD DSN=EMP-VALID.DAT,DISP=SHR
|
||||||
|
//JIN04W01 DD DSN=JIN-LEDGER.DAT,DISP=(NEW,CATLG)
|
||||||
|
```
|
||||||
|
|
||||||
|
### JINJ050 — 人事異動DB更新
|
||||||
|
|
||||||
|
```jcl
|
||||||
|
//JINJ050 JOB (ACCT),'人事異動DB更新',CLASS=A
|
||||||
|
//*
|
||||||
|
//*=====================================================================
|
||||||
|
//* STEP010: DB更新(Type 09)
|
||||||
|
//*=====================================================================
|
||||||
|
//STEP010 EXEC PGM=JIN05UPD
|
||||||
|
//JIN05R01 DD DSN=HR-TRANS.DAT,DISP=SHR
|
||||||
|
//JIN05W01 DD DSN=VALID-ERROR.DAT,DISP=(NEW,PASS)
|
||||||
|
```
|
||||||
|
|
||||||
|
### JINJ060 — 社員データ並替
|
||||||
|
|
||||||
|
```jcl
|
||||||
|
//JINJ060 JOB (ACCT),'社員データ並替',CLASS=A
|
||||||
|
//*
|
||||||
|
//*=====================================================================
|
||||||
|
//* STEP010: SORT(Type 34)
|
||||||
|
//*=====================================================================
|
||||||
|
//STEP010 EXEC PGM=JIN06SRT
|
||||||
|
//SORTLIB DD DSN=SYS1.SORTLIB,DISP=SHR
|
||||||
|
//SORTWK01 DD DSN=&&SORTWK1,UNIT=SYSDA,SPACE=(CYL,(50,50))
|
||||||
|
//SORTWK02 DD DSN=&&SORTWK2,UNIT=SYSDA,SPACE=(CYL,(50,50))
|
||||||
|
//SORTWK03 DD DSN=&&SORTWK3,UNIT=SYSDA,SPACE=(CYL,(50,50))
|
||||||
|
//JIN06R01 DD DSN=EMP-VALID.DAT,DISP=SHR
|
||||||
|
//JIN06W01 DD DSN=SORTED-EMP.DAT,DISP=(NEW,CATLG)
|
||||||
|
//JIN06W02 DD DSN=VALID-ERROR.DAT,DISP=(NEW,PASS)
|
||||||
|
```
|
||||||
|
|
||||||
|
> 注:JIN07SUB はサブプログラム(CALL される側)のため JCL を持たない。
|
||||||
|
> JIN08TST は JIN07SUB の動作確認用テストドライバであり、ローカル開発環境で単体実行する(本番 JCL は不要)。
|
||||||
|
> JIN07SUB が EMP-VALID を読込むための DD(JIN07R01)は、呼出側 JIN08TST の実行時に環境変数で割当てる。
|
||||||
|
> ※ AGENTS.md 規約「サブプログラムは GOBACK を使用」に対し、JIN07SUB はキーワードカバー目的で EXIT PROGRAM を
|
||||||
|
> 使用する例外とする(IBM COBOL 上 EXIT PROGRAM は正しい終了文。GnuCOBOL でもコンパイル実証済み)。
|
||||||
|
|
||||||
|
### JINJ090 — 社員別スキル集計レポート
|
||||||
|
|
||||||
|
```jcl
|
||||||
|
//JINJ090 JOB (ACCT),'社員別スキル集計',CLASS=A
|
||||||
|
//*
|
||||||
|
//*=====================================================================
|
||||||
|
//* STEP010: SKILL-EVAL を EMP-ID 昇順でソート
|
||||||
|
//*=====================================================================
|
||||||
|
//STEP010 EXEC PGM=SORT
|
||||||
|
//SORTLIB DD DSN=SYS1.SORTLIB,DISP=SHR
|
||||||
|
//SORTWK01 DD DSN=&&SORTWK1,UNIT=SYSDA,SPACE=(CYL,(50,50))
|
||||||
|
//SORTWK02 DD DSN=&&SORTWK2,UNIT=SYSDA,SPACE=(CYL,(50,50))
|
||||||
|
//SORTWK03 DD DSN=&&SORTWK3,UNIT=SYSDA,SPACE=(CYL,(50,50))
|
||||||
|
//SORTIN DD DSN=SKILL-EVAL.DAT,DISP=SHR
|
||||||
|
//SORTOUT DD DSN=SKILL-EVAL-SORTED.DAT,DISP=(NEW,CATLG)
|
||||||
|
//SYSIN DD *
|
||||||
|
SORT FIELDS=(5,8,CH,A)
|
||||||
|
/*
|
||||||
|
//*
|
||||||
|
//*=====================================================================
|
||||||
|
//* STEP020: 社員別スキル集計(Type 32)
|
||||||
|
//*=====================================================================
|
||||||
|
//STEP020 EXEC PGM=JIN09RPT
|
||||||
|
//JIN09R01 DD DSN=SKILL-EVAL-SORTED.DAT,DISP=SHR
|
||||||
|
//JIN09R02 DD DSN=SKILL-MST.DAT,DISP=SHR
|
||||||
|
//JIN09W01 DD DSN=SKILL-SUM.DAT,DISP=(NEW,CATLG)
|
||||||
|
//JIN09W02 DD DSN=VALID-ERROR.DAT,DISP=(NEW,PASS)
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## プログラム一覧
|
## プログラム一覧
|
||||||
@@ -115,6 +294,13 @@ PICTURE記号 N/BINARY/ZZZZ9 および11個の COBOL 予約語を
|
|||||||
|:-:|:------:|:----------:|---------|:--------:|:---------:|:------:|
|
|:-:|:------:|:----------:|---------|:--------:|:---------:|:------:|
|
||||||
| 1 | JIN01KNS | 27 半角20桁/4桁チェック | 人事取込データの氏名カナ桁数・半角英大文字チェック | JIN01REC, JINDATAC, JINMSGAC, JINENDAC | なし | SUB01DAT, SUB02MSG, SUB03END |
|
| 1 | JIN01KNS | 27 半角20桁/4桁チェック | 人事取込データの氏名カナ桁数・半角英大文字チェック | JIN01REC, JINDATAC, JINMSGAC, JINENDAC | なし | SUB01DAT, SUB02MSG, SUB03END |
|
||||||
| 2 | JIN02SKL | 19 M:N→N件 | スキル評価明細×評価基準マスタの集計(M件→N件出力) | SKILL-EVAL-REC, SKILL-MST-REC, SKILL-AGG-REC, VALID-ERROR-REC, JINDATAC, JINMSGAC, JINENDAC | なし | SUB01DAT, SUB02MSG, SUB03END |
|
| 2 | JIN02SKL | 19 M:N→N件 | スキル評価明細×評価基準マスタの集計(M件→N件出力) | SKILL-EVAL-REC, SKILL-MST-REC, SKILL-AGG-REC, VALID-ERROR-REC, JINDATAC, JINMSGAC, JINENDAC | なし | SUB01DAT, SUB02MSG, SUB03END |
|
||||||
|
| 3 | JIN03RAN | 36 ランキング生成 | スキル評価集計結果を平均点降順にランキング出力 | SKILL-AGG-REC, JIN03REC, JINDATAC, JINMSGAC, JINENDAC | なし | SUB01DAT, SUB02MSG |
|
||||||
|
| 4 | JIN04PRT | 04 編集出力(印刷制御) | 社員マスタを読込みLINAGE制御で台帳印刷。PAGE-COUNTER/DATE/TIMEカバー | JIN01REC, JIN04RPT-REC, JINDATAC, JINMSGAC, JINENDAC | なし | SUB01DAT, SUB02MSG, SUB03END |
|
||||||
|
| 5 | JIN05UPD | 09 DB更新 | 人事異動トランザクションを読込みDB2社員マスタを更新。EXCEPTION/FALSE/VALUES/REPLACING/TIMES/THRU/ON OVERFLOW/BY CONTENTカバー | JIN05REC, VALID-ERROR-REC, JINDATAC, JINMSGAC, JINENDAC, DB-COMMON | DB2(EMPLOYEE) | SUB01DAT, SUB02MSG, SUB03END |
|
||||||
|
| 6 | JIN06SRT | 34 SORT | EMP-VALIDをEMP-ID昇順に並替。SORT/RELEASE/PERFORM TIMESカバー | JIN01REC, VALID-ERROR-REC, JINDATAC, JINMSGAC, JINENDAC | なし | SUB01DAT, SUB02MSG, SUB03END |
|
||||||
|
| 7 | JIN07SUB | 25 サブPGM | 社員IDで社員情報を取得して返却。EXIT PROGRAM/ADDRESS/OMITTEDカバー | JIN01REC | なし | —(CALLされる側) |
|
||||||
|
| 8 | JIN08TST | 05 振り分け(IF) | JIN07SUB呼出テストドライバ。OMITTED引数でCALL。テスト専用 | JINDATAC, JINMSGAC, JINENDAC | なし | JIN07SUB, SUB01DAT, SUB02MSG, SUB03END |
|
||||||
|
| 9 | JIN09RPT | 32 1:N+キーブレイク | 社員別スキル集計レポート。CANCEL/I-O-CONTROL/NEXT SENTENCE/EJECT/SKIP2/FALSEカバー | SKILL-EVAL-REC, SKILL-MST-REC, JIN09REC, VALID-ERROR-REC, JINDATAC, JINMSGAC, JINENDAC | なし | SUB01DAT, SUB02MSG, SUB03END |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -122,11 +308,67 @@ PICTURE記号 N/BINARY/ZZZZ9 および11個の COBOL 予約語を
|
|||||||
|
|
||||||
| # | COPY ID | 用途 | サイズ | 備考 |
|
| # | COPY ID | 用途 | サイズ | 備考 |
|
||||||
|:-:|:--------|:----:|:------:|------|
|
|:-:|:--------|:----:|:------:|------|
|
||||||
| 1 | JIN01REC | EMP-IMPORT/EMP-VALID レコード | 200 | JIN01KNS入出力 |
|
| 1 | JIN01REC | EMP-IMPORT/EMP-VALID レコード | 200 | JIN01KNS入出力、JIN04PRT入力で流用 |
|
||||||
| 2 | VALID-ERROR-REC | VALID-ERROR エラーレコード | 80 | JIN01KNS/JIN02SKL共用 |
|
| 2 | VALID-ERROR-REC | VALID-ERROR エラーレコード | 80 | JIN01KNS/JIN02SKL/JIN05UPD共用 |
|
||||||
| 3 | SKILL-EVAL-REC | SKILL-EVAL スキル評価明細 | 200 | JIN02SKL入力(M件) |
|
| 3 | SKILL-EVAL-REC | SKILL-EVAL スキル評価明細 | 200 | JIN02SKL入力(M件) |
|
||||||
| 4 | SKILL-MST-REC | SKILL-MST 評価基準マスタ | 80 | JIN02SKL入力(内部表LOAD) |
|
| 4 | SKILL-MST-REC | SKILL-MST 評価基準マスタ | 80 | JIN02SKL入力(内部表LOAD) |
|
||||||
| 5 | SKILL-AGG-REC | SKILL-AGG 評価集計結果 | 200 | JIN02SKL出力(N件) |
|
| 5 | SKILL-AGG-REC | SKILL-AGG 評価集計結果 | 200 | JIN02SKL出力、JIN03RAN入力 |
|
||||||
| 6 | JINDATAC | SUB01DAT連絡領域 | — | CALL I/F |
|
| 6 | JINDATAC | SUB01DAT連絡領域 | — | CALL I/F(全JINプログラム共用) |
|
||||||
| 7 | JINMSGAC | SUB02MSG連絡領域 | — | CALL I/F |
|
| 7 | JINMSGAC | SUB02MSG連絡領域 | — | CALL I/F(全JINプログラム共用) |
|
||||||
| 8 | JINENDAC | SUB03END連絡領域 | — | CALL I/F |
|
| 8 | JINENDAC | SUB03END連絡領域 | — | CALL I/F(全JINプログラム共用) |
|
||||||
|
| 9 | JIN03REC | RANK-OUT ランキング出力レコード | 200 | JIN03RAN出力 |
|
||||||
|
| 10 | JIN04RPT-REC | JIN-LEDGER 台帳印刷レコード | 132 | JIN04PRT出力(WRITE ADVANCING + LINAGE制御) |
|
||||||
|
| 11 | JIN05REC | HR-TRANS 人事異動トランザクション | 200 | JIN05UPD入力 |
|
||||||
|
| 12 | DB-COMMON | DB接続共通変数(WS-SQL-STR/SQLCODE等) | — | tools/DB-COMMON.cpy。JIN05UPDのみ使用 |
|
||||||
|
| 13 | JIN09REC | SKILL-SUM 社員別スキル集計結果 | 120 | JIN09RPT出力 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## キーワードカバレッジ改善対象
|
||||||
|
|
||||||
|
| # | 予約語 | 現状 | 改善方法 | 対象PGM |
|
||||||
|
|:-:|--------|:----:|---------|:-------:|
|
||||||
|
| 1 | DATE | × | ACCEPT WS-DATE FROM DATE | JIN04PRT |
|
||||||
|
| 2 | TIME | × | ACCEPT WS-TIME FROM TIME | JIN04PRT |
|
||||||
|
| 3 | PAGE-COUNTER | × | WRITE ADVANCING PAGE 時の特殊レジスタ参照 | JIN04PRT |
|
||||||
|
| 4 | UPON | × | DISPLAY msg UPON CONSOLE | JIN04PRT |
|
||||||
|
| 5 | EJECT | × | ソース行 EJECT によるページ制御 | JIN04PRT |
|
||||||
|
| 6 | SKIP2 | × | ソース行 SKIP2 による改行制御 | JIN04PRT |
|
||||||
|
| 7 | CLOSE WITH LOCK | △(単純のみ) | CLOSE file WITH LOCK | JIN04PRT |
|
||||||
|
| 8 | STOP literal | △(RUNのみ) | STOP 'error message' | JIN04PRT |
|
||||||
|
| 9 | STRING ON OVERFLOW | △(未使用) | STRING ... ON OVERFLOW | JIN04PRT, JIN05UPD |
|
||||||
|
| 10 | EXCEPTION | × | CALL ... ON EXCEPTION | JIN05UPD |
|
||||||
|
| 11 | FALSE | × | SET condition TO FALSE | JIN05UPD |
|
||||||
|
| 12 | VALUES(88複数値) | × | 88 WRK-TYPE VALUE 'A' 'B' 'C' | JIN05UPD |
|
||||||
|
| 13 | VALUE THRU | △(未使用) | EVALUATE WHEN 'D' THRU 'G' | JIN05UPD |
|
||||||
|
| 14 | INITIALIZE REPLACING | △(基本形のみ) | INITIALIZE WS-REC REPLACING NUMERIC BY ZEROS | JIN05UPD |
|
||||||
|
| 15 | PERFORM UNTIL + 上限件数 | △(UNTILのみ) | PERFORM UNTIL WS-EOF OR WS-COUNT > 500(TIMES相当の上限ガード制御) | JIN05UPD |
|
||||||
|
| 16 | CALL BY CONTENT | △(BY REFのみ) | CALL sub BY CONTENT WS-VAL | JIN05UPD |
|
||||||
|
| 17 | EXIT PARAGRAPH | △(EXITのみ) | EXIT PARAGRAPH / EXIT PROGRAM | JIN05UPD |
|
||||||
|
| 18 | INSPECT AFTER | △(未使用) | INSPECT ... AFTER CHARACTERS | JIN05UPD |
|
||||||
|
| 19 | DISPLAY WITH NO ADVANCING | △(未使用) | DISPLAY 'msg' WITH NO ADVANCING | JIN05UPD |
|
||||||
|
| 20 | SORT | × | SORT ファイル ON ASCENDING KEY ... INPUT/OUTPUT PROCEDURE | JIN06SRT |
|
||||||
|
| 21 | RELEASE | × | INPUT PROCEDURE 内で RELEASE 送出 | JIN06SRT |
|
||||||
|
| 22 | PERFORM TIMES | △(UNTILのみ) | PERFORM 段落 TIMES 回数指定 | JIN06SRT |
|
||||||
|
| 23 | EXIT PROGRAM | △(EXITのみ) | サブPGM終了を EXIT PROGRAM で実施 | JIN07SUB |
|
||||||
|
| 24 | ADDRESS | × | MOVE ADDRESS OF 引数 TO WS-PTR で引数アドレス取得 | JIN07SUB |
|
||||||
|
| 25 | OMITTED | × | CALL ... USING ... OMITTED + IS OMITTED 判定 | JIN08TST, JIN07SUB |
|
||||||
|
| 26 | CANCEL | × | CANCEL 'SUB02MSG' でサブPGM解放 | JIN09RPT |
|
||||||
|
| 27 | I-O-CONTROL | × | I-O-CONTROL 段落(予約語カバー目的。SAME句なし) | JIN09RPT |
|
||||||
|
| 28 | NEXT | × | NEXT SENTENCE で後続文へ | JIN09RPT |
|
||||||
|
| 29 | SENTENCE | × | NEXT SENTENCE で後続文へ | JIN09RPT |
|
||||||
|
| 30 | EJECT | × | ソース行 EJECT によるページ制御 | JIN09RPT |
|
||||||
|
| 31 | SKIP2 | × | ソース行 SKIP2 による改行制御 | JIN09RPT |
|
||||||
|
| 32 | FALSE | × | SET 条件名 TO FALSE で状態リセット | JIN09RPT |
|
||||||
|
| 33 | PERFORM(多重ループ/複合条件) | △(UNTIL/単一のみ) | PERFORM VARYING 多重ループ + 複合条件(AND/OR) | JIN09RPT |
|
||||||
|
| 34 | SET(条件名) | △(UP BY/DOWN BYのみ) | SET 条件名 TO TRUE/FALSE による条件名設定 | JIN09RPT |
|
||||||
|
|
||||||
|
**改善効果まとめ(JIN09RPT 追加時点の比較):**
|
||||||
|
|
||||||
|
| 指標 | 現状 | 改善後 |
|
||||||
|
|------|:----:|:------:|
|
||||||
|
| 予約語×(未使用) | 41語 | 34語(7語削減:CANCEL/I-O-CONTROL/NEXT/SENTENCE/EJECT/SKIP2/FALSE) |
|
||||||
|
| PERFORM | △ | ◎(多重ループ+複合条件IFで実質的カバー) |
|
||||||
|
| SET | △ | ◎(条件名 SET TO FALSE で実質的カバー) |
|
||||||
|
| ◎+△率 | 80.0%(164/205) | 83.4%(171/205) |
|
||||||
|
| プログラムタイプカバレッジ | 97.2%(35/36) | 97.2%(変更なし) |
|
||||||
|
|||||||
@@ -0,0 +1,221 @@
|
|||||||
|
# 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 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 処理詳細
|
||||||
|
|
||||||
|
### 段落一覧
|
||||||
|
|
||||||
|
| 段落名 | 機能 |
|
||||||
|
|:-------|:-----|
|
||||||
|
| 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 多重ループ) |
|
||||||
|
|
||||||
|
### 処理フロー
|
||||||
|
|
||||||
|
```
|
||||||
|
1. 初期処理(JIN09RPT-OPEN)
|
||||||
|
1-1. JIN09R01 / JIN09R02 / JIN09W01 / JIN09W02 を OPEN
|
||||||
|
1-2. SUB01DAT で運用日取得(復帰コード≠0なら SUB03END で異常終了)
|
||||||
|
1-3. 内部表 WS-SKILL-TABLE を INITIALIZE
|
||||||
|
1-4. SUB02MSG で開始メッセージ出力
|
||||||
|
|
||||||
|
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 → 主処理へ
|
||||||
|
|
||||||
|
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
|
||||||
|
(初回 or EMP-ID が WS-PREV-EMP-ID と不一致 → キーブレイク)
|
||||||
|
→ JIN09RPT-OUTPUT-GRP で前社員分を出力、内部表を INITIALIZE
|
||||||
|
3-4. JIN09RPT-AGGREGATE を 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
|
||||||
|
|
||||||
|
5. レベル判定(JIN09RPT-JUDGE-LEVEL)— 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. 社員グループ出力(JIN09RPT-OUTPUT-GRP)
|
||||||
|
6-1. 内部表を 1 から WS-TBL-ENTRY まで PERFORM VARYING で走査
|
||||||
|
6-2. 件数 > 0 のエントリのみ JIN09RPT-WRITE-SUM で出力
|
||||||
|
6-3. JIN09RPT-CALC-AVG で平均点算出(DIVIDE)
|
||||||
|
6-4. 出力行数カウンタを加算
|
||||||
|
|
||||||
|
7. 終了処理(JIN09RPT-CLOSE)
|
||||||
|
7-1. JIN09R01 / JIN09W01 / JIN09W02 を CLOSE
|
||||||
|
7-2. CANCEL 'SUB02MSG' でサブPGM解放
|
||||||
|
7-3. SUB02MSG で件数メッセージ出力
|
||||||
|
7-4. 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=79B)間で共有領域が最小レコード長に固定され、R01 の READ が
|
||||||
|
> 破綻することが判明したため、SAME 句は使用しない(IBM COBOL では正しく動作する
|
||||||
|
> が、ローカル検証の再現性を優先して SAME 予約語カバーは断念)。
|
||||||
|
|
||||||
|
### SET 条件名 / NEXT SENTENCE / CANCEL / EJECT / SKIP2
|
||||||
|
|
||||||
|
| 予約語 | 使用箇所 |
|
||||||
|
|:-------|:---------|
|
||||||
|
| SET 条件名 TO FALSE | 内部表初期化後に SET WRK-FIRST-FLG TO FALSE で初回フラグ解除 |
|
||||||
|
| NEXT SENTENCE | レベル判定の ELSE 内で未判定時、後続文へ制御 |
|
||||||
|
| CANCEL | 終了処理で CANCEL 'SUB02MSG' |
|
||||||
|
| EJECT | PROCEDURE DIVISION 先頭直後にソース行 EJECT |
|
||||||
|
| SKIP2 | 段落境界にソース行 SKIP2 |
|
||||||
|
|
||||||
|
### 内部表
|
||||||
|
|
||||||
|
#### WS-SKILL-TABLE(OCCURS 20)
|
||||||
|
|
||||||
|
| 項目 | PIC | USAGE | 内容 |
|
||||||
|
|:----|:---:|:-----:|------|
|
||||||
|
| TBL-SKILL-CODE | X(4) | — | スキルコード |
|
||||||
|
| TBL-LEVEL | 9(2) | BINARY | レベル |
|
||||||
|
| TBL-LEVEL-NAME | X(20) | — | レベル名称 |
|
||||||
|
| 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 | 予約語 | PROCEDURE DIVISION のソース行 EJECT |
|
||||||
|
| SKIP2 | 予約語 | 段落境界のソース行 SKIP2 |
|
||||||
|
| SET 条件名 TO FALSE | 予約語 | 初回フラグ解除に SET ... TO FALSE |
|
||||||
|
| PERFORM VARYING | 予約語(昇格) | 内部表走査の多重ループ |
|
||||||
|
| NESTED IF(複合条件 AND/OR) | 予約語(昇格) | レベル判定 IF ネスト 3 段 |
|
||||||
|
| SEARCH ALL | 予約語 | 評価基準マッチング |
|
||||||
|
| DIVIDE ... GIVING | 予約語 | 平均点算出 |
|
||||||
|
| BINARY | 予約語 | 内部表カウンタ USAGE BINARY |
|
||||||
Reference in New Issue
Block a user