JIN03RAN Phase B: COMP-4/CORR/DESCENDING/DOWN/UP カバレッジ追加

This commit is contained in:
qiuqiuqiu
2026-07-21 08:31:00 +08:00
parent 39b9ec4e50
commit e13fbba5b6
5 changed files with 430 additions and 0 deletions
+299
View File
@@ -0,0 +1,299 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. JIN03RAN.
*****************************************************************
* システム名 : 人事情報管理システム *
* プログラムID : JIN03RAN *
* プログラム名 : スキル評価ランキング出力処理 *
* 作成日 : 2026-07-19 *
* 処理概要 : SKILL-AGG(集計結果)を読み込み、 *
* 平均点降順でランキング出力 *
*****************************************************************
* 更新履歴 *
*---------------------------------------------------------------*
* 更新日付 担当者 更新内容 *
*---------------------------------------------------------------*
* 2026-07-19 @@@ 新規作成 *
* *
*****************************************************************
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-ZSERIES.
OBJECT-COMPUTER. IBM-ZSERIES.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT R01INNFIL ASSIGN TO EXTERNAL JIN03R01
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
PADDING CHARACTER IS WS-PAD-CHAR
FILE STATUS IS WS-FILE-STATUS.
SELECT W01OUTFIL ASSIGN TO EXTERNAL JIN03W01
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
*
DATA DIVISION.
FILE SECTION.
*
*****************************************************************
* R01: SKILL-AGG スキル評価集計結果 *
*****************************************************************
FD R01INNFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 R01INNREC.
COPY SKILL-AGG-REC REPLACING ==(A)== BY ==R01==.
*
*****************************************************************
* W01: RANK-OUT ランキング出力 *
*****************************************************************
FD W01OUTFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 W01OUTREC.
COPY JIN03RAN-REC REPLACING ==(A)== BY ==W01==.
*
WORKING-STORAGE SECTION.
*
*****************************************************************
* コンスタント領域 *
*****************************************************************
01 CNSARA.
03 CNS-PRGIDX PIC X(008) VALUE 'JIN03RAN'.
03 CNS-SCORE-HIGH PIC 9(003) VALUE 900.
03 CNS-SCORE-MID PIC 9(003) VALUE 600.
*
*****************************************************************
* カウンタ領域 *
*****************************************************************
01 CUNARA.
03 CUN-R01INN PIC S9(009) COMP-3
VALUE ZERO.
03 CUN-W01OUT PIC S9(009) COMP-3
VALUE ZERO.
*** COMP-4 予約語カバー用バイナリカウンタ
03 CUN-COMP4 PIC 9(004) COMP-4
VALUE ZERO.
*
*****************************************************************
* 作業領域 *
*****************************************************************
01 WRKARA.
*** 読込フラグ
03 WRK-R01EOF PIC X(001).
88 WRK-R01EOF-Y VALUE '1'.
*** 内部表走査用
03 WRK-IDX PIC 9(004) BINARY.
03 WRK-OUT-IDX PIC 9(004) BINARY.
*** SELECT用パディング文字・ファイルステータス
03 WS-PAD-CHAR PIC X(001) VALUE SPACE.
03 WS-FILE-STATUS PIC X(002).
*
*****************************************************************
* ランキング制御領域 *
*****************************************************************
01 WRK-RANK-NO PIC 9(004) VALUE ZERO.
*
*****************************************************************
* CORR 用領域(MOVE CORRESPONDING 予約語カバー) *
*****************************************************************
01 WS-CORR-SRC.
03 FLD-CODE PIC X(004).
03 FLD-SCORE PIC 9(003)V9(02).
01 WS-CORR-DST.
03 FLD-CODE PIC X(004).
03 FLD-SCORE PIC 9(003)V9(02).
*
*****************************************************************
* VALUES 予約語カバー用 88-Level *
*****************************************************************
01 WS-RANK-VAL PIC X(001).
88 WS-RANK-VAL-S VALUE 'S'.
88 WS-RANK-VAL-A VALUE 'A'.
88 WS-RANK-VAL-B VALUE 'B'.
*
*****************************************************************
* DESCENDING 予約語カバー用 OCCURS 表 *
*****************************************************************
01 WS-RANK-TABLE.
05 WS-RANK-ENTRY OCCURS 3 TIMES DESCENDING KEY IS WS-THR.
10 WS-THR PIC 9(003).
10 WS-CHAR PIC X(001).
*
*****************************************************************
* サブプログラム連絡領域 *
*****************************************************************
*** 運用日付取得
COPY JINDATAC.
*** メッセージ編集出力SR用
COPY JINMSGAC.
*** ABEND処理SR用
COPY JINENDAC.
*
PROCEDURE DIVISION.
*****************************************************************
* サブモジュールNO: (0.0) *
* サブモジュール名: 制御処理 *
* 処理概要 : メインコントロール処理 *
*****************************************************************
0000MAJCOLSOR SECTION.
*
*** 初期処理
PERFORM 1000ITTSOR.
*
*** R01読込→ランキング出力ループ
PERFORM 2000MAINSOR
UNTIL WRK-R01EOF-Y.
*
*** 終了処理
PERFORM 4000STPSOR.
*
0000MAJCOLSOR-EXT.
GOBACK.
*****************************************************************
* サブモジュールNO: (1.0) *
* サブモジュール名: 初期処理 *
* 処理概要 : 開始メッセージ出力・各種初期化処理 *
*****************************************************************
1000ITTSOR SECTION.
*
*** プログラム開始表示(UPON 予約語カバー)
DISPLAY 'JIN03RAN START' UPON CONSOLE.
*
*** 開始メッセージ出力
INITIALIZE M00MHOPAR.
MOVE 001 TO M00MSGCOD.
MOVE CNS-PRGIDX TO M00UMKDATS22-01.
CALL 'SUB02MSG' USING M00MHOPAR.
*
*** ワークエリア初期化
INITIALIZE WRKARA
CUNARA.
*
*** ランク番号初期化
MOVE ZERO TO WRK-RANK-NO.
*
*** 運用日付取得
INITIALIZE D01UBSPAR.
CALL 'SUB01DAT' USING D01UBSPAR.
*
*** 入出力ファイルOPEN
OPEN INPUT R01INNFIL
OUTPUT W01OUTFIL.
*
*** R01初回読込
PERFORM 2100READSOR.
*
*** DESCENDING KEY 用テーブル初期化
MOVE 900 TO WS-THR(1)
MOVE 'S' TO WS-CHAR(1)
MOVE 600 TO WS-THR(2)
MOVE 'A' TO WS-CHAR(2)
MOVE 0 TO WS-THR(3)
MOVE 'B' TO WS-CHAR(3)
*
EXIT.
*
*****************************************************************
* サブモジュールNO: (2.0) *
* サブモジュール名: 主処理 *
* 処理概要 : R01読込→MOVE CORR→WRITE *
*****************************************************************
2000MAINSOR SECTION.
*
*** ランク番号UP
SET WRK-RANK-NO UP BY 1.
*
*** COMP-4 予約語カバー
ADD 1 TO CUN-COMP4.
*
*** CORR 予約語カバー: MOVE CORRESPONDING
MOVE R01AGG-AVG-SCORE TO FLD-SCORE
IN WS-CORR-SRC.
MOVE R01AGG-SKILL-CODE TO FLD-CODE
IN WS-CORR-SRC.
MOVE CORRESPONDING
WS-CORR-SRC
TO WS-CORR-DST.
*
*** W01レコード編集
INITIALIZE W01OUTREC.
MOVE WRK-RANK-NO TO W01RANK-NO.
MOVE FLD-SCORE
IN WS-CORR-DST TO W01SCORE.
MOVE FLD-CODE
IN WS-CORR-DST TO W01SKILL-CODE.
MOVE R01AGG-EMP-COUNT TO W01EMP-COUNT.
MOVE R01AGG-LEVEL-NAME TO W01LEVEL-NAME.
*
*** ランク区分設定
IF R01AGG-AVG-SCORE >= CNS-SCORE-HIGH
MOVE 'S' TO W01RANK-CODE
ELSE
IF R01AGG-AVG-SCORE >= CNS-SCORE-MID
MOVE 'A' TO W01RANK-CODE
ELSE
MOVE 'B' TO W01RANK-CODE
END-IF
END-IF.
*
*** VALUES 予約語カバー: 88-Level 条件参照
MOVE W01RANK-CODE TO WS-RANK-VAL
IF WS-RANK-VAL-S OR WS-RANK-VAL-A OR WS-RANK-VAL-B
CONTINUE
END-IF
*
WRITE W01OUTREC.
ADD 1 TO CUN-W01OUT.
*
*** UP 予約語カバー
SET WRK-OUT-IDX UP BY 1.
*
*** 次のR01読込
PERFORM 2100READSOR.
*
2000MAINSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO: (2.1) *
* サブモジュール名: R01読込処理 *
* 処理概要 : スキル評価集計結果読込・EOF判定 *
*****************************************************************
2100READSOR SECTION.
*
READ R01INNFIL
AT END
MOVE '1' TO WRK-R01EOF
NOT AT END
ADD 1 TO CUN-R01INN
END-READ.
*
2100READSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO: (3.0) *
* サブモジュール名: 終了処理 *
* 処理概要 : クローズ処理 *
*****************************************************************
4000STPSOR SECTION.
*
*** R01 CLOSE
CLOSE R01INNFIL.
*
*** 出力ファイルCLOSE
CLOSE W01OUTFIL.
*
*** DOWN 予約語カバー
SET WRK-IDX DOWN BY 1.
*
*** DESCENDING 予約語カバー: テーブル参照
IF WS-THR(1) = CNS-SCORE-HIGH
CONTINUE
END-IF
*
*** プログラム終了表示
DISPLAY 'JIN03RAN END' UPON CONSOLE.
*
4000STPSOR-EXT.
EXIT.