サブシステムEをJIN04PRT〜JIN08TST追加で9本に拡充(全48プログラム)。JIN01-09のIBM COBOL完全版・bin再ビルド版・設計書・使用資源一覧・カバレッジ統計・DDL(schema_jin)・COPY(DB-COMMON/JIN04RPT-REC/JIN05REC)をroot側最新に同期。KYU03AGG/KYU08PRI/SHA02MNC/SHA10S10再テスト済み(全PASS)

This commit is contained in:
qiuqiuqiu
2026-08-05 00:11:07 +08:00
parent 182b161208
commit a918489f93
88 changed files with 2953 additions and 300 deletions
+7 -7
View File
@@ -2,7 +2,7 @@
## システム概要
IBM z/OS + DB2 で動作する COBOL バッチシステム。勤怠休暇管理・残業統計管理・給与計算・社会保険管理の4サブシステムで構成される。
IBM z/OS + DB2 で動作する COBOL バッチシステム。勤怠休暇管理・残業統計管理・給与計算・社会保険管理・人事情報管理の5サブシステムで構成される。
### 本番環境
- OS: IBM z/OS
@@ -23,24 +23,24 @@ IBM z/OS + DB2 で動作する COBOL バッチシステム。勤怠休暇管理
| B: 残業統計管理 | 申請取込・重複チェック・照合・マッチング・集約・DB更新 | ZAN01CHKZAN06UPD6本) | 完了 |
| C: 給与計算 | CSV変換・登録・集約・計算・控除・DB更新・分割・印刷・マージ | KYU01CVTKYU09MRG9本) | 完了 |
| D: 社会保険管理 | ASCII→EBCDIC変換・保険情報統合・料率計算・事業所マッチング・等級判定・控除計算・キーブレイク・SORT編集・25分割・100分割 | SHA01CVTSHA10S1010本) | 完了 |
| E: 人事情報管理 | 社員情報チェック・スキル評価集計・ランキング出力・社員別スキル集計レポート | JIN01KNSJIN09RPT4本) | 完了 |
| E: 人事情報管理 | 社員情報チェック・スキル評価集計・ランキング出力・人事異動DB更新・SORT編集・社員情報マスタ出力・社員別スキル集計レポート | JIN01KNSJIN09RPT9本) | 完了 |
### 共通サブプログラム(5本)
### 共通サブプログラム(6本)
SUB01DAT(日付), SUB02MSG(メッセージ), SUB03ENDABEND, SUB04CHK(バリデーション), SUB05TIM(丸め)
SUB01DAT(日付), SUB02MSG(メッセージ), SUB03ENDABEND, SUB04CHK(バリデーション), SUB05TIM(丸め), JIN07SUB(社員情報マスタ管理)
### プログラム一覧
| プログラムID | サブシステム | 機能 |
|:------------|:-----------:|------|
| JIN01KNSJIN03RAN, JIN09RPT | E | 人事情報管理(4本) |
| JIN01KNSJIN09RPT | E | 人事情報管理(9本) |
| KIN01INPKIN09CSV | A | 勤怠休暇管理(9本) |
| ZAN01CHKZAN06UPD | B | 残業統計管理(6本) |
| KYU01CVTKYU09MRG | C | 給与計算(9本) |
| SHA01CVTSHA10S10 | D | 社会保険管理(10本) |
| SUB01DATSUB05TIM | 共通 | 日付/メッセージ/ABEND/バリデーション/丸め5本) |
| SUB01DATSUB05TIM, JIN07SUB | 共通 | 日付/メッセージ/ABEND/バリデーション/丸め/社員情報マスタ管理(6本) |
**全プログラム数: 43**
**全プログラム数: 48**
## ディレクトリ構成
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+6
View File
@@ -0,0 +1,6 @@
*> DB bridge common variables
*> Include in WORKING-STORAGE SECTION with COPY DB-COMMON.
01 WS-SQL-STR PIC X(2048).
01 WS-SQLCODE PIC S9(9) COMP-5.
01 WS-COL-IDX PIC S9(9) COMP-5.
01 WS-COL-LEN PIC S9(9) COMP-5.
+11
View File
@@ -0,0 +1,11 @@
*
* 社員台帳印刷レコード 132B JIN04PRT出力
* WRITE ADVANCING + LINAGE制御(132桁データのみ、ASA制御文字なし)
*
03 (A)RPT-EMP-ID PIC X(008).
03 (A)RPT-KANA-SEI PIC X(020).
03 (A)RPT-KANA-MEI PIC X(020).
03 (A)RPT-KANJI-NAME PIC X(040).
03 (A)RPT-DEPT-CD PIC X(004).
03 (A)RPT-ENTRY-DATE PIC X(008).
03 (A)FILLER PIC X(032).
+14
View File
@@ -0,0 +1,14 @@
*
* 人事異動トランザクション 200B JIN05UPD入力
*
03 (A)TRAN-TYPE PIC X(001).
03 (A)TRAN-EMP-ID PIC X(008).
03 (A)TRAN-KANA-SEI PIC X(020).
03 (A)TRAN-KANA-MEI PIC X(020).
03 (A)TRAN-KANJI-NAME PIC X(040).
03 (A)TRAN-SUB-CODE PIC X(004).
03 (A)TRAN-BIRTH-DATE PIC X(008).
03 (A)TRAN-DEPT-CODE PIC X(004).
03 (A)TRAN-ENTRY-DATE PIC X(008).
03 (A)TRAN-STATUS PIC X(001).
03 (A)FILLER PIC X(086).
+1 -1
View File
@@ -2,7 +2,7 @@
* スキル評価基準マスタレコード 80B JIN02SKL入力
*
03 (A)MST-SKILL-CODE PIC X(004).
03 (A)MST-LEVEL PIC 9(002) BINARY.
03 (A)MST-LEVEL PIC 9(002).
03 (A)MST-SCORE-FROM PIC 9(003).
03 (A)MST-SCORE-TO PIC 9(003).
03 (A)MST-LEVEL-NAME PIC X(020).
+19
View File
@@ -0,0 +1,19 @@
-- =============================================================================
-- 人事情報管理システム(サブシステムE)DBスキーマ
-- 対象DB2: DB2 for z/OS
-- ローカル開発: SQLite(型宣言はDB2準拠、SQLiteが許容する範囲で記述)
-- =============================================================================
-- 1. EMPLOYEE(社員マスタ)
-- 全社員の基本情報。JIN05UPDが更新、JIN01KNS/JIN04PRTが参照(ファイル連携も併用)。
CREATE TABLE EMPLOYEE (
EMP_ID CHAR(8) NOT NULL PRIMARY KEY,
KANA_SEI CHAR(20) NOT NULL,
KANA_MEI CHAR(20) NOT NULL,
KANJI_NAME CHAR(40) NOT NULL,
SUB_CODE CHAR(4) NOT NULL,
BIRTH_DATE CHAR(8) NOT NULL,
DEPT_CODE CHAR(4) NOT NULL,
ENTRY_DATE CHAR(8) NOT NULL,
STATUS CHAR(1) NOT NULL
);
+5 -5
View File
@@ -6,7 +6,7 @@
* プログラム名 : カナ氏名チェック処理 *
* 作成日 : 2026-07-19 *
* 処理概要 : 人事取込データの氏名カナ(半角20桁以内・ *
* 英大文字)および補助コード桁数をチェックする *
* 英大文字)および補助コード有効値をチェックする *
*****************************************************************
* 更新履歴 *
*---------------------------------------------------------------*
@@ -110,14 +110,14 @@
*** エラーフラグ
03 WRK-ERR-FLG PIC X(001).
88 WRK-ERR-Y VALUE '1'.
*** エラーコード
*** エラーコード
03 WRK-ERR-CODE PIC X(004).
*** カナ長さWORK
*** カナ長さWORK
03 WRK-KANA-LEN PIC 9(002).
*** SELECT用パディング文字・ファイルステータス
*** SELECT用パディング文字・ファイルステータス
03 WS-PAD-CHAR PIC X(001) VALUE SPACE.
03 WS-FILE-STATUS PIC X(002).
*
*
*****************************************************************
* サブプログラム連絡領域 *
*****************************************************************
+7 -8
View File
@@ -97,7 +97,6 @@
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 100.
*
*****************************************************************
* カウンタ領域 *
@@ -123,11 +122,11 @@
88 WRK-R01EOF-Y VALUE '1'.
03 WRK-R02EOF PIC X(001).
88 WRK-R02EOF-Y VALUE '1'.
*** 内部表走査用
*** 内部表走査用
03 WRK-IDX PIC 9(004) BINARY.
03 WRK-AVG-TEMP PIC 9(006)V9(002).
03 WRK-REM PIC 9(003).
*** SELECT用パディング文字・ファイルステータス
*** SELECT用パディング文字・ファイルステータス
03 WS-PAD-CHAR PIC X(001) VALUE SPACE.
03 WS-FILE-STATUS PIC X(002).
@@ -190,11 +189,11 @@
* 処理概要 : 開始メッセージ出力・各種初期化処理 *
*****************************************************************
1000ITTSOR SECTION.
*
*** プログラム開始表示(UPON 予約語カバー)
*
*** プログラム開始表示(UPON 予約語カバー)
DISPLAY 'JIN02SKL START' UPON CONSOLE.
*
*** 開始メッセージ出力
*
*** 開始メッセージ出力
INITIALIZE M00MHOPAR.
MOVE CNS-MSGSTR TO M00MSGCOD.
PERFORM 6000MSGOUTSOR.
@@ -213,7 +212,7 @@
*** 内部表サイズ初期化
MOVE ZERO TO WS-TBL-MAX-IDX.
*
*** 運用日付取得
*** 運用日付取得
INITIALIZE D01UBSPAR.
CALL 'SUB01DAT' USING D01UBSPAR
ON EXCEPTION
+9 -10
View File
@@ -5,8 +5,9 @@
* プログラムID : JIN03RAN *
* プログラム名 : スキル評価ランキング出力処理 *
* 作成日 : 2026-07-19 *
* 処理概要 : SKILL-AGG(集計結果)を読み込み、 *
* 平均点降順でランキング出力 *
* 処理概要 : SKILL-AGG(集計結果)を読み込み、平均点降順で *
* ランキング出力(前提:R01はJCL SORTにより *
* 平均点降順ソート済み) *
*****************************************************************
* 更新履歴 *
*---------------------------------------------------------------*
@@ -127,9 +128,7 @@
*** 運用日付取得
COPY JINDATAC.
*** メッセージ編集出力SR用
COPY JINMSGAC.
*** ABEND処理SR用
COPY JINENDAC.
COPY JINMSGAC.
*
PROCEDURE DIVISION.
*****************************************************************
@@ -203,7 +202,7 @@
2000MAINSOR SECTION.
*
*** ランク番号UP
SET WRK-RANK-NO UP BY 1.
ADD 1 TO WRK-RANK-NO.
*
*** COMP-4 予約語カバー
ADD 1 TO CUN-COMP4.
@@ -247,8 +246,8 @@
WRITE W01OUTREC.
ADD 1 TO CUN-W01OUT.
*
*** UP 予約語カバー
SET WRK-OUT-IDX UP BY 1.
*** ADD 予約語カバー
ADD 1 TO WRK-OUT-IDX.
*
*** 次のR01読込
PERFORM 2100READSOR.
@@ -284,8 +283,8 @@
*** 出力ファイルCLOSE
CLOSE W01OUTFIL.
*
*** DOWN 予約語カバー
SET WRK-IDX DOWN BY 1.
*** SUBTRACT 予約語カバー
SUBTRACT 1 FROM WRK-IDX.
*
*** DESCENDING 予約語カバー: テーブル参照
IF WS-THR(1) = CNS-SCORE-HIGH
+345
View File
@@ -0,0 +1,345 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. JIN04PRT.
*****************************************************************
* システム名 : 人事情報管理システム *
* プログラムID : JIN04PRT *
* プログラム名 : 社員台帳印刷処理 *
* 作成日 : 2026-07-28 *
* 処理概要 : EMP-VALID(チェック済社員データ)を読込み *
* 台帳形式で印刷出力する。 *
* LINAGE制御・PAGE-COUNTER使用 *
*****************************************************************
* 更新履歴 *
*---------------------------------------------------------------*
* 更新日付 担当者 更新内容 *
*---------------------------------------------------------------*
* 2026-07-28 @@@ 新規作成 *
* *
*****************************************************************
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-ZSERIES.
OBJECT-COMPUTER. IBM-ZSERIES.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT R01INNFIL ASSIGN TO EXTERNAL JIN04R01
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
SELECT W01OUTFIL ASSIGN TO EXTERNAL JIN04W01
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
*
DATA DIVISION.
FILE SECTION.
*
*****************************************************************
* R01: EMP-VALID チェック済社員データ *
*****************************************************************
FD R01INNFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 R01INNREC.
COPY JIN01REC REPLACING ==(A)== BY ==R01==.
*
*****************************************************************
* W01: JIN-LEDGER 社員台帳印刷ファイル *
*****************************************************************
FD W01OUTFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F
LINAGE IS 66 LINES
FOOTING AT 60
TOP 2
BOTTOM 4.
01 W01OUTREC.
COPY JIN04RPT-REC REPLACING ==(A)== BY ==W01==.
*
WORKING-STORAGE SECTION.
*
*****************************************************************
* コンスタント領域 *
*****************************************************************
01 CNSARA.
03 CNS-PRGIDX PIC X(008) VALUE 'JIN04PRT'.
*
*****************************************************************
* カウンタ領域 *
*****************************************************************
01 CUNARA.
03 CUN-R01INN PIC S9(009) COMP-3
VALUE ZERO.
03 CUN-W01OUT PIC S9(009) COMP-3
VALUE ZERO.
*
*****************************************************************
* 作業領域 *
*****************************************************************
01 WRKARA.
*** 読込フラグ
03 WRK-R01EOF PIC X(001).
88 WRK-R01EOF-Y VALUE '1'.
*** 日付時刻
03 WRK-DATE PIC 9(008).
03 WRK-DATE-R REDEFINES WRK-DATE.
05 WRK-DATE-YYYY PIC 9(004).
05 WRK-DATE-MM PIC 9(002).
05 WRK-DATE-DD PIC 9(002).
03 WRK-TIME PIC 9(008).
03 WRK-TIME-R REDEFINES WRK-TIME.
05 WRK-TIME-HH PIC 9(002).
05 WRK-TIME-MM PIC 9(002).
05 WRK-TIME-SS PIC 9(002).
05 WRK-TIME-CC PIC 9(002).
03 WRK-DISP-DATE PIC X(010).
03 WRK-DISP-TIME PIC X(008).
*** ページ番号
03 WRK-PAGE-NO PIC 9(004) VALUE ZERO.
*** 文字列編集
03 WRK-PTR PIC 9(003).
03 WRK-OVF-FLG PIC X(001).
88 WRK-OVF-Y VALUE 'Y'.
*
*****************************************************************
* サブプログラム連絡領域 *
*****************************************************************
*** 運用日付取得
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.
*
*EJECT
*****************************************************************
* サブモジュールNO: (1.0) *
* サブモジュール名: 初期処理 *
* 処理概要 : 開始メッセージ出力・各種初期化処理 *
*****************************************************************
1000ITTSOR SECTION.
*
*** プログラム開始表示(UPON 予約語カバー)
DISPLAY 'JIN04PRT START' UPON CONSOLE.
*
*** 開始メッセージ出力
INITIALIZE M00MHOPAR.
MOVE 001 TO M00MSGCOD.
MOVE CNS-PRGIDX TO M00UMKDATS22-01.
CALL 'SUB02MSG' USING M00MHOPAR.
*
*** ワークエリア初期化
INITIALIZE WRKARA
CUNARA.
*
*** システム日付取得(DATE 予約語カバー:ACCEPT FROM DATE
ACCEPT WRK-DATE FROM DATE.
MOVE 1 TO WRK-PTR.
MOVE 'N' TO WRK-OVF-FLG.
STRING WRK-DATE-YYYY '/' WRK-DATE-MM '/'
WRK-DATE-DD
DELIMITED BY SIZE INTO WRK-DISP-DATE
WITH POINTER WRK-PTR
ON OVERFLOW MOVE 'Y' TO WRK-OVF-FLG
END-STRING.
*
*** システム時刻取得(TIME 予約語カバー:ACCEPT FROM TIME
ACCEPT WRK-TIME FROM TIME.
MOVE 1 TO WRK-PTR.
MOVE 'N' TO WRK-OVF-FLG.
STRING WRK-TIME-HH ':' WRK-TIME-MM ':'
WRK-TIME-SS
DELIMITED BY SIZE INTO WRK-DISP-TIME
WITH POINTER WRK-PTR
ON OVERFLOW MOVE 'Y' TO WRK-OVF-FLG
END-STRING.
*
*** 運用日付取得
INITIALIZE D01UBSPAR.
CALL 'SUB01DAT' USING D01UBSPAR.
*
*** 入出力ファイルOPEN
OPEN INPUT R01INNFIL
OUTPUT W01OUTFIL.
*
*** ヘッダー出力(PAGE-COUNTER 特殊レジスタカバー)
PERFORM 3000HEADER.
*
*** R01初回読込
PERFORM 2100READSOR.
*
EXIT.
*
*SKIP2
*****************************************************************
* サブモジュールNO: (2.0) *
* サブモジュール名: 主処理 *
* 処理概要 : R01読込→明細行編集→WRITE *
*****************************************************************
2000MAINSOR SECTION.
*
*** W01レコード初期化
INITIALIZE W01OUTREC.
*
*** 明細行編集(STRING ON OVERFLOW 予約語カバー)
MOVE 1 TO WRK-PTR.
MOVE 'N' TO WRK-OVF-FLG.
STRING R01EMP-ID
R01KANA-SEI
R01KANA-MEI
R01KANJI-NAME
DELIMITED BY SIZE INTO W01OUTREC
WITH POINTER WRK-PTR
ON OVERFLOW MOVE 'Y' TO WRK-OVF-FLG
END-STRING.
*
*** 明細行書出(AT END-OF-PAGE 予約語カバー)
WRITE W01OUTREC
AFTER ADVANCING 1 LINE
AT END-OF-PAGE
PERFORM 3000HEADER
END-WRITE.
*
ADD 1 TO CUN-W01OUT.
ADD 1 TO CUN-R01INN.
*
*** 次のR01読込
PERFORM 2100READSOR.
*
2000MAINSOR-EXT.
EXIT.
*
*EJECT
*****************************************************************
* サブモジュールNO: (2.1) *
* サブモジュール名: R01読込処理 *
* 処理概要 : 社員マスタ読込・EOF判定 *
*****************************************************************
2100READSOR SECTION.
*
READ R01INNFIL
AT END
MOVE '1' TO WRK-R01EOF
NOT AT END
CONTINUE
END-READ.
*
2100READSOR-EXT.
EXIT.
*
*SKIP2
*****************************************************************
* サブモジュールNO: (3.0) *
* サブモジュール名: ヘッダー出力処理 *
* 処理概要 : ページヘッダー出力 *
*****************************************************************
3000HEADER SECTION.
*
*** 改ページ+ページ番号増加
ADD 1 TO WRK-PAGE-NO.
*
*** 改ページ(WRITE AFTER ADVANCING PAGE でPAGE-COUNTER更新)
MOVE SPACES TO W01OUTREC.
WRITE W01OUTREC
AFTER ADVANCING PAGE.
*
*** タイトル行
MOVE SPACES TO W01OUTREC.
MOVE 1 TO WRK-PTR.
MOVE 'N' TO WRK-OVF-FLG.
STRING '*** EMPLOYEE LEDGER ***'
DELIMITED BY SIZE INTO W01OUTREC
ON OVERFLOW MOVE 'Y' TO WRK-OVF-FLG
END-STRING.
WRITE W01OUTREC
AFTER ADVANCING 1 LINE.
*
*** 日付・ページ行
MOVE SPACES TO W01OUTREC.
MOVE 1 TO WRK-PTR.
MOVE 'N' TO WRK-OVF-FLG.
STRING 'DATE: ' WRK-DISP-DATE
' TIME: ' WRK-DISP-TIME
' PAGE: '
DELIMITED BY SIZE INTO W01OUTREC
WITH POINTER WRK-PTR
ON OVERFLOW MOVE 'Y' TO WRK-OVF-FLG
END-STRING.
STRING WRK-PAGE-NO
DELIMITED BY SIZE INTO W01OUTREC
WITH POINTER WRK-PTR
ON OVERFLOW MOVE 'Y' TO WRK-OVF-FLG
END-STRING.
WRITE W01OUTREC
AFTER ADVANCING 2 LINES.
*
3000HEADER-EXT.
EXIT.
*
*SKIP2
*****************************************************************
* サブモジュールNO: (4.0) *
* サブモジュール名: 終了処理 *
* 処理概要 : クローズ処理・終了メッセージ *
*****************************************************************
4000STPSOR SECTION.
*
*** プログラム終了表示(UPON 予約語カバー)
DISPLAY 'JIN04PRT END' UPON CONSOLE.
DISPLAY 'TOTAL RECORDS: ' UPON CONSOLE
WITH NO ADVANCING.
DISPLAY CUN-R01INN UPON CONSOLE.
*
*** R01 CLOSE
CLOSE R01INNFIL.
*
*** 出力ファイルCLOSE WITH LOCKCLOSE WITH LOCK 予約語カバー)
CLOSE W01OUTFIL WITH LOCK.
*
*** 終了メッセージ出力
MOVE 002 TO M00MSGCOD.
MOVE CNS-PRGIDX TO M00UMKDATS22-01.
CALL 'SUB02MSG' USING M00MHOPAR.
*
*** 正常終了
CALL 'SUB03END' USING E01ABDPAR.
*
4000STPSOR-EXT.
EXIT.
*
*SKIP2
*****************************************************************
* サブモジュールNO: (9.0) *
* サブモジュール名: エラー処理 *
* 処理概要 : エラー時のSTOP literal *
*****************************************************************
9000ERRSOR SECTION.
*
*** STOP literal 予約語カバー(△→◎)
DISPLAY 'JIN04PRT ABEND' UPON CONSOLE.
STOP 'JIN04PRT ABNORMAL END'.
*
9000ERRSOR-EXT.
EXIT.
+432
View File
@@ -0,0 +1,432 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. JIN05UPD.
*****************************************************************
* システム名 : 人事情報管理システム *
* プログラムID : JIN05UPD *
* プログラム名 : 人事異動DB更新処理 *
* 作成日 : 2026-07-28 *
* 処理概要 : HR-TRANS(人事異動トランザクション)を読込み *
* DB2 EMPLOYEE マスタを更新する。 *
* 各種未カバー予約語をカバーする実装を含む *
*****************************************************************
* 更新履歴 *
*---------------------------------------------------------------*
* 更新日付 担当者 更新内容 *
*---------------------------------------------------------------*
* 2026-07-28 @@@ 新規作成 *
* *
*****************************************************************
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-ZSERIES.
OBJECT-COMPUTER. IBM-ZSERIES.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT R01INNFIL ASSIGN TO EXTERNAL JIN05R01
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
SELECT W01OUTFIL ASSIGN TO EXTERNAL JIN05W01
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
*
DATA DIVISION.
FILE SECTION.
*
*****************************************************************
* R01: HR-TRANS 人事異動トランザクション *
*****************************************************************
FD R01INNFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 R01INNREC.
COPY JIN05REC REPLACING ==(A)== BY ==R01==.
*
*****************************************************************
* W01: VALID-ERROR エラーレコード *
*****************************************************************
FD W01OUTFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 W01OUTREC.
COPY VALID-ERROR-REC.
*
WORKING-STORAGE SECTION.
*
*****************************************************************
* コンスタント領域 *
*****************************************************************
01 CNSARA.
03 CNS-PRGIDX PIC X(008) VALUE 'JIN05UPD'.
03 CNS-MAX-TRANS PIC 9(003) VALUE 500.
*
*****************************************************************
* カウンタ領域 *
*****************************************************************
01 CUNARA.
03 CUN-R01INN PIC S9(009) COMP-3
VALUE ZERO.
03 CUN-W01OUT PIC S9(009) COMP-3
VALUE ZERO.
03 CUN-DBUPD PIC S9(009) COMP-3
VALUE ZERO.
03 CUN-DBINS PIC S9(009) COMP-3
VALUE ZERO.
*
*****************************************************************
* 作業領域 *
*****************************************************************
01 WRKARA.
*** 読込フラグ
03 WRK-R01EOF PIC X(001).
88 WRK-R01EOF-Y VALUE '1'.
*** 処理件数カウンタ
03 WRK-COUNT PIC 9(003) VALUE ZERO.
*** トランザクション種別
03 WRK-TRAN-TYPE PIC X(001).
88 WRK-TRAN-INSERT VALUE 'A' 'B' 'C'.
88 WRK-TRAN-UPDATE VALUE 'D' THRU 'G'.
88 WRK-TRAN-DELETE VALUE 'Z'.
*** 文字列編集
03 WRK-PTR PIC 9(003).
03 WRK-OVF-FLG PIC X(001).
88 WRK-OVF-Y VALUE 'Y' WHEN SET TO FALSE IS 'N'.
*** SQLCODE表示用
03 WS-SQLCODE-DISP PIC -(9)9.
*
*****************************************************************
* DB2 ホスト変数 *
*****************************************************************
01 HVARA.
03 HV-EMP-ID PIC X(008).
03 HV-KANA-SEI PIC X(020).
03 HV-KANA-MEI PIC X(020).
03 HV-KANJI-NAME PIC X(040).
03 HV-SUB-CODE PIC X(004).
03 HV-BIRTH-DATE PIC X(008).
03 HV-DEPT-CODE PIC X(004).
03 HV-ENTRY-DATE PIC X(008).
03 HV-STATUS PIC X(001).
*
*****************************************************************
* サブプログラム連絡領域 *
*****************************************************************
*** 運用日付取得
COPY JINDATAC.
*** メッセージ編集出力SR用
COPY JINMSGAC.
*** ABEND処理SR用
COPY JINENDAC.
*** DB接続共通変数はconvert-sql.mjsが自動生成
* COPY DB-COMMON は converter 生成変数と重複するため不使用)
*
*
PROCEDURE DIVISION.
*****************************************************************
* サブモジュールNO: (0.0) *
* サブモジュール名: 制御処理 *
* 処理概要 : メインコントロール処理 *
*****************************************************************
0000MAJCOLSOR SECTION.
*
*** 初期処理
PERFORM 1000ITTSOR.
*
*** R01読込→DB更新ループ(PERFORM UNTIL ... OR ... カバー)
PERFORM 2000MAINSOR
UNTIL WRK-R01EOF-Y
OR WRK-COUNT >= CNS-MAX-TRANS.
*
*** 終了処理
PERFORM 4000STPSOR.
*
0000MAJCOLSOR-EXT.
GOBACK.
*
*EJECT
*****************************************************************
* サブモジュールNO: (1.0) *
* サブモジュール名: 初期処理 *
* 処理概要 : 開始メッセージ出力・各種初期化処理 *
*****************************************************************
1000ITTSOR SECTION.
*
*** プログラム開始表示
DISPLAY 'JIN05UPD START' UPON CONSOLE.
*
*** 開始メッセージ出力
INITIALIZE M00MHOPAR.
MOVE 001 TO M00MSGCOD.
MOVE CNS-PRGIDX TO M00UMKDATS22-01.
CALL 'SUB02MSG' USING M00MHOPAR.
*
*** ワークエリア初期化(INITIALIZE REPLACING 予約語カバー)
INITIALIZE WRKARA
REPLACING NUMERIC DATA BY ZEROS
ALPHANUMERIC DATA BY SPACES.
INITIALIZE CUNARA.
*
*** 運用日付取得(CALL ON EXCEPTION 予約語カバー)
INITIALIZE D01UBSPAR.
CALL 'SUB01DAT' USING D01UBSPAR
ON EXCEPTION
DISPLAY 'SUB01DAT CALL ERROR'
UPON CONSOLE
MOVE 99 TO E01ABDCOD
PERFORM 9000ERRSOR
END-CALL.
*
*** DB接続(convert-sql.mjs が br_open に変換)
EXEC SQL
CONNECT TO 'data/JIN.db'
END-EXEC.
*
*** 入出力ファイルOPEN
OPEN INPUT R01INNFIL
OUTPUT W01OUTFIL.
*
*** R01初回読込
PERFORM 2100READSOR.
*
1000ITTSOR-EXT.
EXIT.
*
*SKIP2
*****************************************************************
* サブモジュールNO: (2.0) *
* サブモジュール名: 主処理 *
* 処理概要 : R01読込→DB更新 *
*****************************************************************
2000MAINSOR SECTION.
*
*** 件数カウント
ADD 1 TO WRK-COUNT.
*
*** ホスト変数転記
MOVE R01TRAN-EMP-ID TO HV-EMP-ID.
MOVE R01TRAN-KANA-SEI TO HV-KANA-SEI.
MOVE R01TRAN-KANA-MEI TO HV-KANA-MEI.
MOVE R01TRAN-KANJI-NAME TO HV-KANJI-NAME.
MOVE R01TRAN-SUB-CODE TO HV-SUB-CODE.
MOVE R01TRAN-BIRTH-DATE TO HV-BIRTH-DATE.
MOVE R01TRAN-DEPT-CODE TO HV-DEPT-CODE.
MOVE R01TRAN-ENTRY-DATE TO HV-ENTRY-DATE.
MOVE R01TRAN-STATUS TO HV-STATUS.
*
*** トランザクション種別判定
*** 88-level 複数VALUE 'A' 'B' 'C' + VALUE 'D' THRU 'G' カバー)
MOVE R01TRAN-TYPE TO WRK-TRAN-TYPE.
*
EVALUATE TRUE
WHEN WRK-TRAN-INSERT
PERFORM 3100INSERTSOR
WHEN WRK-TRAN-UPDATE
PERFORM 3200UPDATESOR
WHEN WRK-TRAN-DELETE
PERFORM 3300ERRSOR
WHEN OTHER
PERFORM 3300ERRSOR
END-EVALUATE.
*
*** 次のR01読込
PERFORM 2100READSOR.
*
2000MAINSOR-EXT.
EXIT.
*
*EJECT
*****************************************************************
* サブモジュールNO: (2.1) *
* サブモジュール名: R01読込処理 *
* 処理概要 : HR-TRANS読込・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.
*
*SKIP2
*****************************************************************
* サブモジュールNO: (3.1) *
* サブモジュール名: INSERT処理 *
* 処理概要 : EMPLOYEEテーブルに新規社員追加 *
*****************************************************************
3100INSERTSOR SECTION.
*
EXEC SQL
INSERT INTO EMPLOYEE
(EMP_ID, KANA_SEI, KANA_MEI, KANJI_NAME,
SUB_CODE, BIRTH_DATE, DEPT_CODE,
ENTRY_DATE, STATUS)
VALUES
(:HV-EMP-ID, :HV-KANA-SEI, :HV-KANA-MEI,
:HV-KANJI-NAME, :HV-SUB-CODE, :HV-BIRTH-DATE,
:HV-DEPT-CODE, :HV-ENTRY-DATE, :HV-STATUS)
END-EXEC.
*
IF SQLCODE NOT = 0
PERFORM 3400DBERRSOR
ELSE
ADD 1 TO CUN-DBINS
END-IF.
*
3100INSERTSOR-EXT.
EXIT.
*
*EJECT
*****************************************************************
* サブモジュールNO: (3.2) *
* サブモジュール名: UPDATE処理 *
* 処理概要 : EMPLOYEEテーブルを更新 *
*****************************************************************
3200UPDATESOR SECTION.
*
*** STRING ON OVERFLOW 予約語カバー(安全な文字列編集)
MOVE 1 TO WRK-PTR.
SET WRK-OVF-Y TO FALSE.
STRING 'UPDATING: ' HV-EMP-ID
DELIMITED BY SIZE INTO WS-SQL-STR
WITH POINTER WRK-PTR
ON OVERFLOW MOVE 'Y' TO WRK-OVF-FLG
END-STRING.
*
*** DISPLAY WITH NO ADVANCING 予約語カバー
DISPLAY WS-SQL-STR UPON CONSOLE
WITH NO ADVANCING.
*
EXEC SQL
UPDATE EMPLOYEE SET
KANA_SEI = :HV-KANA-SEI,
KANA_MEI = :HV-KANA-MEI,
KANJI_NAME = :HV-KANJI-NAME,
SUB_CODE = :HV-SUB-CODE,
BIRTH_DATE = :HV-BIRTH-DATE,
DEPT_CODE = :HV-DEPT-CODE,
ENTRY_DATE = :HV-ENTRY-DATE,
STATUS = :HV-STATUS
WHERE EMP_ID = :HV-EMP-ID
END-EXEC.
*
IF SQLCODE NOT = 0
PERFORM 3400DBERRSOR
ELSE
ADD 1 TO CUN-DBUPD
END-IF.
*
3200UPDATESOR-EXT.
EXIT.
*
*SKIP2
*****************************************************************
* サブモジュールNO: (3.3) *
* サブモジュール名: エラーレコード出力 *
* 処理概要 : 不明トランザクション種別→VALID-ERROR *
*****************************************************************
3300ERRSOR SECTION.
*
*** エラーレコード編集
INITIALIZE W01OUTREC.
MOVE CNS-PRGIDX TO ERR-PROGRAMID.
MOVE HV-EMP-ID TO ERR-EMP-ID.
MOVE '0001' TO ERR-CODE.
*** STRING ON OVERFLOW カバー
MOVE 1 TO WRK-PTR.
SET WRK-OVF-Y TO FALSE.
STRING 'INVALID TRAN-TYPE: ' R01TRAN-TYPE
' FOR EMP: ' HV-EMP-ID
DELIMITED BY SIZE INTO ERR-DETAIL
WITH POINTER WRK-PTR
ON OVERFLOW MOVE 'Y' TO WRK-OVF-FLG
END-STRING.
*
WRITE W01OUTREC.
ADD 1 TO CUN-W01OUT.
*
3300ERRSOR-EXT.
EXIT.
*
*SKIP2
*****************************************************************
* サブモジュールNO: (3.4) *
* サブモジュール名: DBエラー処理 *
* 処理概要 : SQLCODE不正時のVALID-ERROR出力 *
*****************************************************************
3400DBERRSOR SECTION.
*
MOVE SQLCODE TO WS-SQLCODE-DISP.
MOVE 1 TO WRK-PTR.
SET WRK-OVF-Y TO FALSE.
STRING 'DB ERROR SQLCODE=' WS-SQLCODE-DISP
' EMP=' HV-EMP-ID
DELIMITED BY SIZE INTO ERR-DETAIL
WITH POINTER WRK-PTR
ON OVERFLOW MOVE 'Y' TO WRK-OVF-FLG
END-STRING.
*
MOVE CNS-PRGIDX TO ERR-PROGRAMID.
MOVE HV-EMP-ID TO ERR-EMP-ID.
MOVE '0002' TO ERR-CODE.
WRITE W01OUTREC.
ADD 1 TO CUN-W01OUT.
*
CALL 'SUB02MSG'
USING BY CONTENT M00MHOPAR.
*
3400DBERRSOR-EXT.
EXIT.
*
*SKIP2
*****************************************************************
* サブモジュールNO: (4.0) *
* サブモジュール名: 終了処理 *
* 処理概要 : クローズ処理・統計表示 *
*****************************************************************
4000STPSOR SECTION.
*
*** 統計表示(DISPLAY UPON カバー)
DISPLAY 'JIN05UPD END' UPON CONSOLE.
DISPLAY 'READ:' CUN-R01INN UPON CONSOLE.
DISPLAY 'INSERT:' CUN-DBINS UPON CONSOLE.
DISPLAY 'UPDATE:' CUN-DBUPD UPON CONSOLE.
DISPLAY 'ERROR:' CUN-W01OUT UPON CONSOLE.
*
*** CLOSE WITH LOCK 予約語カバー
CLOSE R01INNFIL.
CLOSE W01OUTFIL WITH LOCK.
*
*** 終了メッセージ出力
MOVE 002 TO M00MSGCOD.
MOVE CNS-PRGIDX TO M00UMKDATS22-01.
CALL 'SUB02MSG' USING M00MHOPAR.
*
*** 正常終了
CALL 'SUB03END' USING E01ABDPAR.
*
4000STPSOR-EXT.
EXIT.
*
*SKIP2
*****************************************************************
* サブモジュールNO: (9.0) *
* サブモジュール名: エラー終了処理 *
* 処理概要 : ABEND処理 *
*****************************************************************
9000ERRSOR SECTION.
*
*** EXIT PARAGRAPH 予約語カバー
DISPLAY 'JIN05UPD ABEND' UPON CONSOLE.
CALL 'SUB03END' USING E01ABDPAR.
*
EXIT PARAGRAPH.
*
9000ERRSOR-EXT.
EXIT.
+367
View File
@@ -0,0 +1,367 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. JIN06SRT.
*****************************************************************
* システム名 : 人事情報管理システム *
* プログラムID : JIN06SRT *
* プログラム名 : 社員データSORT処理 *
* 作成日 : 2026-08-02 *
* 処理概要 : EMP-VALID(チェック済社員データ)をINPUT *
* PROCEDUREで読込み、EMP-ID昇順にSORTし、 *
* OUTPUT PROCEDUREでRETURNしてSORTED-EMP出力。 *
* RELEASE件数は最大999件で、上限超過分は *
* VALID-ERRORへ出力する。 *
*****************************************************************
* 更新履歴 *
*---------------------------------------------------------------*
* 更新日付 担当者 更新内容 *
*---------------------------------------------------------------*
* 2026-08-02 @@@ 新規作成 *
* *
*****************************************************************
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-ZSERIES.
OBJECT-COMPUTER. IBM-ZSERIES.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT R01INNFIL ASSIGN TO EXTERNAL JIN06R01
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
SELECT W01OUTFIL ASSIGN TO EXTERNAL JIN06W01
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
SELECT W02OUTFIL ASSIGN TO EXTERNAL JIN06W02
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
SELECT SORTWORK ASSIGN TO EXTERNAL SORTWK01.
*
I-O-CONTROL.
SAME SORT AREA FOR SORTWORK.
*
DATA DIVISION.
FILE SECTION.
*
*****************************************************************
* R01: EMP-VALID チェック済社員データ(200B) *
*****************************************************************
FD R01INNFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 R01INNREC.
COPY JIN01REC REPLACING ==(A)== BY ==R01==.
*
*****************************************************************
* SD: SORTWORK200B SORT内部レコード) *
*****************************************************************
SD SORTWORK
RECORD CONTAINS 200.
01 SORTREC.
COPY JIN01REC REPLACING ==(A)== BY ==SR==.
*
*****************************************************************
* W01: SORTED-EMP 並替済社員データ(200B) *
*****************************************************************
FD W01OUTFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 W01OUTREC.
COPY JIN01REC REPLACING ==(A)== BY ==W01==.
*
*****************************************************************
* W02: VALID-ERROR 上限超過エラー(80B *
*****************************************************************
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 'JIN06SRT'.
03 CNS-MAX-SORT-REC PIC 9(003) VALUE 999.
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-ABD100 PIC 9(003) VALUE 100.
*
*****************************************************************
* カウンタ領域 *
*****************************************************************
01 CUNARA.
03 CUN-R01INN PIC S9(009) COMP-3
VALUE ZERO.
03 CUN-SORT-IN 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-R01EOF PIC X(001).
88 WRK-R01EOF-Y VALUE '1'.
*** SORT復帰コード
03 WRK-SORT-STAT PIC 9(002).
*** 処理件数カウンタ(上限チェック用)
03 WRK-SORT-CNT PIC 9(009).
*
*****************************************************************
* サブプログラム連絡領域 *
*****************************************************************
*** 運用日付取得
COPY JINDATAC.
*** メッセージ編集出力SR用
COPY JINMSGAC.
*** ABEND処理SR用
COPY JINENDAC.
*
PROCEDURE DIVISION.
*****************************************************************
* サブモジュールNO: (0.0) *
* サブモジュール名: 制御処理 *
* 処理概要 : メインコントロール処理 *
*****************************************************************
0000MAJCOLSOR SECTION.
*
*** 初期処理
PERFORM 1000ITTSOR.
*
*** SORT処理
PERFORM 2000MAJSOR.
*
*** 終了処理
PERFORM 3000STPSOR.
*
0000MAJCOLSOR-EXT.
GOBACK.
*
*EJECT
*****************************************************************
* サブモジュールNO: (1.0) *
* サブモジュール名: 初期処理 *
* 処理概要 : 開始メッセージ出力・各種初期化処理 *
*****************************************************************
1000ITTSOR SECTION.
*
*** プログラム開始表示
DISPLAY 'JIN06SRT START' UPON CONSOLE.
*
*** 開始メッセージ出力
INITIALIZE M00MHOPAR.
MOVE CNS-MSGSTR TO M00MSGCOD.
MOVE CNS-PRGIDX TO M00UMKDATS22-01.
CALL 'SUB02MSG' USING M00MHOPAR.
*
*** ワークエリア初期化
INITIALIZE WRKARA
CUNARA.
*
*** 運用日付取得
INITIALIZE D01UBSPAR.
CALL 'SUB01DAT' USING D01UBSPAR.
IF D01FKICOD = ZERO
CONTINUE
ELSE
INITIALIZE M00MHOPAR
MOVE CNS-MSGSUBEEK TO M00MSGCOD
MOVE 'SUB01DAT' TO M00UMKDATS22-01
MOVE D01FKICOD TO M00UMKDATS22-02
PERFORM 4000MSGOUTSOR
PERFORM 9000ERRSOR
END-IF.
*
*** 出力ファイルOPEN
OPEN OUTPUT W01OUTFIL
W02OUTFIL.
*
1000ITTSOR-EXT.
EXIT.
*
*EJECT
*****************************************************************
* サブモジュールNO: (2.0) *
* サブモジュール名: 主処理(SORT実行) *
* 処理概要 : SORT文を実行する *
*****************************************************************
2000MAJSOR SECTION.
*
SORT SORTWORK
ON ASCENDING KEY SREMP-ID
INPUT PROCEDURE 2110INPUTSOR
OUTPUT PROCEDURE 2120OUTPUSOR.
*
MOVE RETURN-CODE TO WRK-SORT-STAT.
IF WRK-SORT-STAT NOT = ZERO
INITIALIZE M00MHOPAR
MOVE CNS-MSGSUBEEK TO M00MSGCOD
MOVE 'SORT FAILED' TO M00UMKDATS22-01
MOVE WRK-SORT-STAT TO M00UMKDATS22-02
PERFORM 4000MSGOUTSOR
MOVE CNS-ABD100 TO E01ABDCOD
CALL 'SUB03END' USING E01ABDPAR
END-IF.
*
2000MAJSOR-EXT.
EXIT.
*
*EJECT
*****************************************************************
* サブモジュールNO: (2.1) *
* サブモジュール名: INPUT PROCEDURE *
* 処理概要 : R01読込→RELEASE送出(上限件数ガード) *
*****************************************************************
2110INPUTSOR SECTION.
*
OPEN INPUT R01INNFIL.
*
*** EOF 到達まで読込・RELEASE(上限超過分は VALID-ERROR 出力)
PERFORM UNTIL WRK-R01EOF-Y
PERFORM 2110READSOR
END-PERFORM.
*
CLOSE R01INNFIL.
*
2110INPUTSOR-EXT.
EXIT.
*
*SKIP2
*****************************************************************
* サブモジュールNO: (2.1.1) *
* サブモジュール名: R01読込・RELEASE送出 *
* 処理概要 : 1件読込→SORTレコードへ転記→RELEASE *
*****************************************************************
2110READSOR SECTION.
*
*** EOF到達後は空処理(上限到達時は超過分をエラー出力)
IF WRK-R01EOF-Y
EXIT SECTION
END-IF.
*
READ R01INNFIL
AT END
MOVE '1' TO WRK-R01EOF
NOT AT END
ADD 1 TO CUN-R01INN
ADD 1 TO WRK-SORT-CNT
MOVE R01KANA-SEI TO SRKANA-SEI
MOVE R01KANA-MEI TO SRKANA-MEI
MOVE R01KANJI-NAME TO SRKANJI-NAME
MOVE R01SUB-CODE TO SRSUB-CODE
MOVE R01BIRTH-DATE TO SRBIRTH-DATE
MOVE R01EMP-ID TO SREMP-ID
MOVE R01FILLER TO SRFILLER
IF WRK-SORT-CNT <= CNS-MAX-SORT-REC
RELEASE SORTREC
ADD 1 TO CUN-SORT-IN
ELSE
INITIALIZE W02OUTREC
MOVE CNS-PRGIDX TO ERR-PROGRAMID
MOVE SREMP-ID TO ERR-EMP-ID
MOVE '9999' TO ERR-CODE
MOVE 'SORT LIMIT OVER' TO ERR-DETAIL
WRITE W02OUTREC
ADD 1 TO CUN-W02OUT
END-IF
END-READ.
*
2110READSOR-EXT.
EXIT.
*
*EJECT
*****************************************************************
* サブモジュールNO: (2.2) *
* サブモジュール名: OUTPUT PROCEDURE *
* 処理概要 : RETURN→SORTED-EMP書出 *
*****************************************************************
2120OUTPUSOR SECTION.
*
PERFORM UNTIL 1 = 2
RETURN SORTWORK RECORD
AT END
EXIT PERFORM
NOT AT END
MOVE SRKANA-SEI TO W01KANA-SEI
MOVE SRKANA-MEI TO W01KANA-MEI
MOVE SRKANJI-NAME TO W01KANJI-NAME
MOVE SRSUB-CODE TO W01SUB-CODE
MOVE SRBIRTH-DATE TO W01BIRTH-DATE
MOVE SREMP-ID TO W01EMP-ID
MOVE SRFILLER TO W01FILLER
WRITE W01OUTREC
ADD 1 TO CUN-W01OUT
END-RETURN
END-PERFORM.
*
2120OUTPUSOR-EXT.
EXIT.
*
*EJECT
*****************************************************************
* サブモジュールNO: (3.0) *
* サブモジュール名: 終了処理 *
* 処理概要 : 統計表示・CLOSE・終了メッセージ *
*****************************************************************
3000STPSOR SECTION.
*
*** 統計表示
DISPLAY 'JIN06SRT END' UPON CONSOLE.
DISPLAY 'READ:' CUN-R01INN UPON CONSOLE.
DISPLAY 'SORT:' CUN-SORT-IN UPON CONSOLE.
DISPLAY 'OUT:' CUN-W01OUT UPON CONSOLE.
DISPLAY 'ERROR:' CUN-W02OUT UPON CONSOLE.
*
*** ファイルCLOSE
CLOSE W01OUTFIL
W02OUTFIL.
*
*** 終了メッセージ出力
INITIALIZE M00MHOPAR.
MOVE CNS-MSGFIN TO M00MSGCOD.
MOVE CNS-PRGIDX TO M00UMKDATS22-01.
CALL 'SUB02MSG' USING M00MHOPAR.
*
3000STPSOR-EXT.
EXIT.
*
*EJECT
*****************************************************************
* サブモジュールNO: (4.0) *
* サブモジュール名: メッセージ出力 *
* 処理概要 : SUB02MSG 呼出 *
*****************************************************************
4000MSGOUTSOR SECTION.
*
CALL 'SUB02MSG' USING M00MHOPAR.
*
4000MSGOUTSOR-EXT.
EXIT.
*
*EJECT
*****************************************************************
* サブモジュールNO: (9.0) *
* サブモジュール名: エラー処理 *
* 処理概要 : ABEND処理 *
*****************************************************************
9000ERRSOR SECTION.
*
DISPLAY 'JIN06SRT ABEND' UPON CONSOLE.
MOVE CNS-ABD100 TO E01ABDCOD.
CALL 'SUB03END' USING E01ABDPAR.
*
9000ERRSOR-EXT.
EXIT.
+238
View File
@@ -0,0 +1,238 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. JIN08TST.
*****************************************************************
* システム名 : 人事情報管理システム *
* プログラムID : JIN08TST *
* プログラム名 : JIN07SUB呼出テスト *
* 作成日 : 2026-08-02 *
* 処理概要 : JIN07SUB を 2 回 CALL(全引数 / *
* KANJI-NAME OMITTED)して、一致レコード *
* 取得と OMITTED 引数動作を確認する *
* テストドライバ(テスト専用) *
*****************************************************************
* 更新履歴 *
*---------------------------------------------------------------*
* 更新日付 担当者 更新内容 *
*---------------------------------------------------------------*
* 26-08-02 @@@ 新規作成 *
* *
*****************************************************************
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-ZSERIES.
OBJECT-COMPUTER. IBM-ZSERIES.
*
DATA DIVISION.
*****************************************************************
WORKING-STORAGE SECTION.
*****************************************************************
01 CNSARA.
03 CNS-PRGIDX PIC X(008) VALUE 'JIN08TST'.
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-ABD100 PIC 9(003) VALUE 100.
*
01 WRKARA.
*** JIN07SUB 呼出引数(CALL1
03 WRK-TST-EMP-ID PIC X(008).
03 WRK-TST-KANA-SEI PIC X(020).
03 WRK-TST-KANA-MEI PIC X(020).
03 WRK-TST-KANJI-NAME PIC N(040).
03 WRK-TST-SUB-CODE PIC X(004).
03 WRK-TST-BIRTH-DATE PIC X(008).
03 WRK-TST-EMP-ID-OUT PIC X(008).
03 WRK-TST-FILLER PIC X(060).
03 WRK-TST-RESULT PIC X(002).
*
*****************************************************************
* サブプログラム連絡領域 *
*****************************************************************
*** 運用日付取得
COPY JINDATAC.
*** メッセージ編集出力SR用
COPY JINMSGAC.
*** ABEND処理SR用
COPY JINENDAC.
*
PROCEDURE DIVISION.
*****************************************************************
* サブモジュールNO: (0.0) *
* サブモジュール名: 制御処理 *
* 処理概要 : メインコントロール処理 *
*****************************************************************
0000MAINTST SECTION.
*
*** 初期処理
PERFORM 1000ITTTST.
*
*** テストCALL
PERFORM 2000CALTST.
*
*** 終了処理
PERFORM 3000STPTST.
*
0000MAINTST-EXT.
GOBACK.
*
*EJECT
*****************************************************************
* サブモジュールNO: (1.0) *
* サブモジュール名: 初期処理 *
* 処理概要 : 開始メッセージ出力・各種初期化処理 *
*****************************************************************
1000ITTTST SECTION.
*
*** プログラム開始表示
DISPLAY 'JIN08TST START' UPON CONSOLE.
*
*** 開始メッセージ出力
INITIALIZE M00MHOPAR.
MOVE CNS-MSGSTR TO M00MSGCOD.
MOVE CNS-PRGIDX TO M00UMKDATS22-01.
CALL 'SUB02MSG' USING M00MHOPAR.
*
*** ワークエリア初期化
INITIALIZE WRKARA.
*
*** 運用日付取得
INITIALIZE D01UBSPAR.
CALL 'SUB01DAT' USING D01UBSPAR
ON EXCEPTION
INITIALIZE M00MHOPAR
MOVE CNS-MSGSUBEEK TO M00MSGCOD
MOVE 'SUB01DAT' TO M00UMKDATS22-01
PERFORM 4000MSGOUTTST
PERFORM 9000ERRTST
END-CALL.
IF D01FKICOD = ZERO
CONTINUE
ELSE
INITIALIZE M00MHOPAR
MOVE CNS-MSGSUBEEK TO M00MSGCOD
MOVE 'SUB01DAT' TO M00UMKDATS22-01
MOVE D01FKICOD TO M00UMKDATS22-02
PERFORM 4000MSGOUTTST
PERFORM 9000ERRTST
END-IF.
*
1000ITTTST-EXT.
EXIT.
*
*EJECT
*****************************************************************
* サブモジュールNO: (2.0) *
* サブモジュール名: テストCALL *
* 処理概要 : JIN07SUB を 2 回 CALL(全引数 / OMITTED *
*****************************************************************
2000CALTST SECTION.
*
*** 検索条件設定(EMP00001 を検索)
MOVE 'EMP00001' TO WRK-TST-EMP-ID.
*
*** CALL1: 全引数渡し
INITIALIZE
WRK-TST-KANA-SEI
WRK-TST-KANA-MEI
WRK-TST-KANJI-NAME
WRK-TST-SUB-CODE
WRK-TST-BIRTH-DATE
WRK-TST-EMP-ID-OUT
WRK-TST-FILLER
WRK-TST-RESULT.
CALL 'JIN07SUB' USING WRK-TST-EMP-ID,
WRK-TST-KANA-SEI,
WRK-TST-KANA-MEI,
WRK-TST-KANJI-NAME,
WRK-TST-SUB-CODE,
WRK-TST-BIRTH-DATE,
WRK-TST-EMP-ID-OUT,
WRK-TST-FILLER,
WRK-TST-RESULT.
IF WRK-TST-RESULT = 'OK'
DISPLAY 'CALL1 OK: EMP=' WRK-TST-EMP-ID-OUT
' SUB=' WRK-TST-SUB-CODE
UPON CONSOLE
ELSE
DISPLAY 'CALL1 NG: RESULT=' WRK-TST-RESULT
UPON CONSOLE
END-IF.
*
*** CALL2: KANJI-NAME OMITTED で渡す
INITIALIZE
WRK-TST-KANA-SEI
WRK-TST-KANA-MEI
WRK-TST-KANJI-NAME
WRK-TST-SUB-CODE
WRK-TST-BIRTH-DATE
WRK-TST-EMP-ID-OUT
WRK-TST-FILLER
WRK-TST-RESULT.
CALL 'JIN07SUB' USING WRK-TST-EMP-ID,
WRK-TST-KANA-SEI,
WRK-TST-KANA-MEI,
OMITTED,
WRK-TST-SUB-CODE,
WRK-TST-BIRTH-DATE,
WRK-TST-EMP-ID-OUT,
WRK-TST-FILLER,
WRK-TST-RESULT.
IF WRK-TST-RESULT = 'OK'
DISPLAY 'CALL2 OK: EMP=' WRK-TST-EMP-ID-OUT
' KANA-SEI=' WRK-TST-KANA-SEI
UPON CONSOLE
ELSE
DISPLAY 'CALL2 NG: RESULT=' WRK-TST-RESULT
UPON CONSOLE
END-IF.
*
2000CALTST-EXT.
EXIT.
*
*EJECT
*****************************************************************
* サブモジュールNO: (3.0) *
* サブモジュール名: 終了処理 *
* 処理概要 : 終了メッセージ出力 *
*****************************************************************
3000STPTST SECTION.
*
*** プログラム終了表示
DISPLAY 'JIN08TST END' UPON CONSOLE.
*
*** 終了メッセージ出力
INITIALIZE M00MHOPAR.
MOVE CNS-MSGFIN TO M00MSGCOD.
MOVE CNS-PRGIDX TO M00UMKDATS22-01.
CALL 'SUB02MSG' USING M00MHOPAR.
*
3000STPTST-EXT.
EXIT.
*
*EJECT
*****************************************************************
* サブモジュールNO: (4.0) *
* サブモジュール名: メッセージ出力 *
* 処理概要 : SUB02MSG 呼出 *
*****************************************************************
4000MSGOUTTST SECTION.
*
CALL 'SUB02MSG' USING M00MHOPAR.
*
4000MSGOUTTST-EXT.
EXIT.
*
*EJECT
*****************************************************************
* サブモジュールNO: (9.0) *
* サブモジュール名: エラー処理 *
* 処理概要 : ABEND処理 *
*****************************************************************
9000ERRTST SECTION.
*
DISPLAY 'JIN08TST ABEND' UPON CONSOLE.
MOVE CNS-ABD100 TO E01ABDCOD.
CALL 'SUB03END' USING E01ABDPAR.
*
9000ERRTST-EXT.
EXIT.
+37 -23
View File
@@ -9,7 +9,7 @@
* キーブレイクで集計し、社員別スキル *
* 集計結果(SKILL-SUM)を出力する *
* 予約語カバー : CANCEL / I-O-CONTROL / NEXT SENTENCE / *
* EJECT / SKIP2 / FALSE *
* EJECT / FALSE *
*****************************************************************
* 更新履歴 *
*---------------------------------------------------------------*
@@ -182,7 +182,7 @@
COPY JINENDAC.
*
PROCEDURE DIVISION.
EJECT
*EJECT
*****************************************************************
* サブモジュールNO: (0.0) *
* サブモジュール名: 制御処理 *
@@ -197,7 +197,7 @@
PERFORM 1200MSTLDASOR
UNTIL WRK-R02EOF-Y.
*
*** マスタLOAD完了後、R02をCLOSESAME RECORD AREA確保領域の解放)
*** マスタLOAD完了後、R02をCLOSE
PERFORM 1250R02CLOSOR.
*
*** 評価明細集計処理
@@ -298,28 +298,41 @@
*****************************************************************
1200MSTLDASOR SECTION.
*
*** 表満杯時はエラー退避(M-12オーバーフローガード)
IF WS-TBL-MAX-IDX >= 20
ADD 1 TO CUN-W02OUT
INITIALIZE W02OUTREC
MOVE CNS-PRGIDX TO ERR-PROGRAMID
MOVE SPACE TO ERR-EMP-ID
MOVE 'OVF1' TO ERR-CODE
STRING 'SKILL-LIST OVERFLOW: '
R02MST-SKILL-CODE
DELIMITED BY SIZE
INTO ERR-DETAIL
END-STRING
WRITE W02OUTREC
ELSE
*** 内部表エントリ追加
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).
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)
END-IF.
*
*** 次のR02読込
PERFORM 1100R02INNSOR.
*
PERFORM 1100R02INNSOR.
1200MSTLDASOR-EXT.
EXIT.
*****************************************************************
@@ -526,7 +539,7 @@
*****************************************************************
3000OUTPUSOR SECTION.
*
*** 内部表を昇順走査(PERFORM VARYING 多重ループ)
*** 内部表を昇順走査(PERFORM VARYING 単一ループ)
PERFORM VARYING WRK-IDX
FROM 1 BY 1
UNTIL WRK-IDX > WS-TBL-MAX-IDX
@@ -589,6 +602,7 @@
* サブモジュール名: 終了処理 *
* 処理概要 : 最終社員出力 + 件数出力 + 終了メッセージ *
*****************************************************************
*SKIP2
4000STPSOR SECTION.
*
*** 最終社員グループの出力
+4 -4
View File
@@ -1,4 +1,4 @@
IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
PROGRAM-ID. KYU03AGG.
*****************************************************************
* システム名 : 給与計算システム *
@@ -56,9 +56,9 @@
01 W01OUTREC.
COPY KYU02REC REPLACING ==(A)== BY ==W01==.
*
*****************************************************************
* W02: ERROR-LOG(VB) — 将来拡張用(現時点では出力なし) *
*****************************************************************
*****************************************************************
* W02: ERROR-LOG(VB) — 将来拡張用(現時点では出力なし) *
*****************************************************************
FD W02OUTFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
+6 -6
View File
@@ -1,4 +1,4 @@
IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
PROGRAM-ID. KYU08PRI.
*****************************************************************
* システム名 : 給与計算システム *
@@ -59,9 +59,9 @@
01 W01OUTREC.
COPY KYU05REC REPLACING ==(A)== BY ==W01==.
*
*****************************************************************
* W02: ERROR-LOG(VB) — 将来拡張用(現時点では出力なし) *
*****************************************************************
*****************************************************************
* W02: ERROR-LOG(VB) — 将来拡張用(現時点では出力なし) *
*****************************************************************
FD W02OUTFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
@@ -219,10 +219,10 @@
*****************************************************************
2000MAJSOR SECTION.
*
*** ヘッダ出力(改ページ + ページ番号)
*** ヘッダ出力(改ページ + ページ番号)
ADD 1 TO WRK-PAGE-COUNTER.
MOVE WRK-PAGE-COUNTER TO HL-PAGE-NO.
MOVE PAGE-COUNTER TO WS-DISP-PG.
MOVE WRK-PAGE-COUNTER TO WS-DISP-PG.
WRITE W01OUTREC
FROM HEADER-LINE
BEFORE ADVANCING PAGE.
+11 -12
View File
@@ -1,4 +1,4 @@
IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
PROGRAM-ID. SHA02MNC.
*****************************************************************
* システム名 : 社会保険管理システム *
@@ -89,19 +89,18 @@
03 WRK-EOF PIC X(001).
88 WRK-EOF-Y VALUE '1'.
03 WRK-YEAR-MONTH PIC X(006).
03 WRK-IDX PIC 9(004).
03 WRK-IDX PIC 9(004).
03 WRK-RATE-COUNT PIC 9(003) VALUE ZERO.
03 WRK-RATE-TBL.
03 WS-PAD-CHAR PIC X(001) VALUE SPACE.
03 WS-FILE-STATUS PIC X(002).
05 WRK-RATE-ENTRY OCCURS 100
INDEXED BY WRK-RATE-IDX.
07 WRK-GRADE-CODE PIC X(002).
07 WRK-MONTHLY-FROM PIC 9(009).
07 WRK-MONTHLY-TO PIC 9(009).
07 WRK-HEALTH-RATE PIC 9(001)V9(006).
07 WRK-PENSION-RATE PIC 9(001)V9(006).
05 WRK-RATE-ENTRY OCCURS 100
INDEXED BY WRK-RATE-IDX.
07 WRK-GRADE-CODE PIC X(002).
07 WRK-MONTHLY-FROM PIC 9(009).
07 WRK-MONTHLY-TO PIC 9(009).
07 WRK-HEALTH-RATE PIC 9(001)V9(006).
07 WRK-PENSION-RATE PIC 9(001)V9(006).
03 WS-PAD-CHAR PIC X(001) VALUE SPACE.
03 WS-FILE-STATUS PIC X(002).
*
*****************************************************************
* DB2ホスト変数 *
+2 -2
View File
@@ -1,4 +1,4 @@
IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
PROGRAM-ID. SHA10S10.
*****************************************************************
* システム名 : 社会保険管理システム *
@@ -63,7 +63,7 @@
SELECT W10OUTFIL ASSIGN TO EXTERNAL SHA10W10
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
*** エラー出力用
*** エラー出力用
SELECT W99OUTFIL ASSIGN TO EXTERNAL SHA10W98
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
+126
View File
@@ -0,0 +1,126 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. JIN07SUB.
*****************************************************************
* システム名 : 人事情報管理システム *
* プログラムID : JIN07SUB *
* プログラム名 : 社員情報取得サブ *
* 作成日 : 2026-08-02 *
* 処理概要 : 指定 EMP-ID に一致する EMP-VALID レコードの *
* 項目を返却するサブプログラム *
* 終了は EXIT PROGRAMGOBACK 不使用) *
*****************************************************************
* 更新履歴 *
*---------------------------------------------------------------*
* 更新日付 担当者 更新内容 *
*---------------------------------------------------------------*
* 26-08-02 @@@ 新規作成 *
* *
*****************************************************************
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-ZSERIES.
OBJECT-COMPUTER. IBM-ZSERIES.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT R01INNFIL ASSIGN TO EXTERNAL JIN07R01
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
*
DATA DIVISION.
*****************************************************************
FILE SECTION.
*****************************************************************
* R01: EMP-VALID200B 社員データ) *
*****************************************************************
FD R01INNFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 R01INNREC.
COPY JIN01REC REPLACING ==(A)== BY ==R01==.
*
*****************************************************************
WORKING-STORAGE SECTION.
*****************************************************************
01 WRKARA.
*** 読込フラグ
03 WRK-R01EOF PIC X(001).
88 WRK-R01EOF-Y VALUE '1'.
*** ADDRESS OF 取得用ポインタ
03 WS-PTR USAGE POINTER.
*
*****************************************************************
* リンケージエリア(個別引数方式) *
*****************************************************************
LINKAGE SECTION.
*****************************************************************
01 LK-EMP-ID PIC X(008).
01 LK-KANA-SEI PIC X(020).
01 LK-KANA-MEI PIC X(020).
01 LK-KANJI-NAME PIC N(040).
01 LK-SUB-CODE PIC X(004).
01 LK-BIRTH-DATE PIC X(008).
01 LK-EMP-ID-OUT PIC X(008).
01 LK-FILLER PIC X(060).
01 LK-RESULT PIC X(002).
*
PROCEDURE DIVISION
USING LK-EMP-ID, LK-KANA-SEI, LK-KANA-MEI, LK-KANJI-NAME,
LK-SUB-CODE, LK-BIRTH-DATE, LK-EMP-ID-OUT, LK-FILLER,
LK-RESULT.
*****************************************************************
* サブモジュールNO: (0.0) *
* サブモジュール名: 制御処理 *
* 処理概要 : メインコントロール処理 *
*****************************************************************
0000MAINSOR SECTION.
*
*** ADDRESS OF 予約語カバー(引数アドレス取得)
MOVE ADDRESS OF LK-EMP-ID TO WS-PTR.
*
*** 検索結果初期化(不一致初期値)
MOVE 'NG' TO LK-RESULT.
*
*** 入力ファイルOPEN
OPEN INPUT R01INNFIL.
*
*** 社員検索
PERFORM 1000FNDSOR.
*
*** 入力ファイルCLOSE
CLOSE R01INNFIL.
*
0000MAINSOR-EXT.
EXIT PROGRAM.
*
*EJECT
*****************************************************************
* サブモジュールNO: (1.0) *
* サブモジュール名: 社員検索 *
* 処理概要 : EMP-VALID 順次検索で一致レコード返却 *
*****************************************************************
1000FNDSOR SECTION.
*
PERFORM UNTIL LK-RESULT = 'OK' OR WRK-R01EOF-Y
READ R01INNFIL
AT END
MOVE '1' TO WRK-R01EOF
NOT AT END
IF R01EMP-ID = LK-EMP-ID
MOVE R01KANA-SEI TO LK-KANA-SEI
MOVE R01KANA-MEI TO LK-KANA-MEI
IF LK-KANJI-NAME NOT OMITTED
MOVE R01KANJI-NAME TO LK-KANJI-NAME
END-IF
MOVE R01SUB-CODE TO LK-SUB-CODE
MOVE R01BIRTH-DATE TO LK-BIRTH-DATE
MOVE R01EMP-ID TO LK-EMP-ID-OUT
MOVE R01FILLER TO LK-FILLER
MOVE 'OK' TO LK-RESULT
END-IF
END-READ
END-PERFORM.
*
1000FNDSOR-EXT.
EXIT.
@@ -11,13 +11,14 @@
|------|---------------|------|-------------|-----------|--------|
| JIN01R01 | EMP-IMPORT | 順編成 | F (固定長) | 200B | JIN01REC |
| JIN01W01 | EMP-VALID | 順編成 | F (固定長) | 200B | JIN01REC |
| JIN01W02 | VALID-ERROR | 順編成 | F (固定長) | 80B | VALID-ERROR-RECJIN01REC内) |
| JIN01W02 | VALID-ERROR | 順編成 | F (固定長) | 80B | VALID-ERROR-REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| JIN01REC | レコード定義(R01/W01/W02出力ファイル) | FILE SECTION |
| JIN01REC | レコード定義(R01/W01出力ファイル) | FILE SECTION |
| VALID-ERROR-REC | VALID-ERROR エラーレコード定義(W02出力ファイル) | FILE SECTION |
| JINDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
| JINMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| JINENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
@@ -12,7 +12,7 @@
| JIN02R01 | SKILL-EVAL | 順編成 | F (固定長) | 200B | SKILL-EVAL-REC |
| JIN02R02 | SKILL-MST | 順編成 | F (固定長) | 80B | SKILL-MST-REC |
| JIN02W01 | SKILL-AGG | 順編成 | F (固定長) | 200B | SKILL-AGG-REC |
| JIN02W02 | VALID-ERROR | 順編成 | F (固定長) | 80B | VALID-ERROR-RECJIN01REC内) |
| JIN02W02 | VALID-ERROR | 順編成 | F (固定長) | 80B | VALID-ERROR-REC |
## 使用COPY句
@@ -21,7 +21,7 @@
| SKILL-EVAL-REC | スキル評価明細レコード定義(R01入力) | FILE SECTION |
| SKILL-MST-REC | 評価基準マスタレコード定義(R02入力) | FILE SECTION |
| SKILL-AGG-REC | 評価集計結果レコード定義(W01出力) | FILE SECTION |
| JIN01REC | VALID-ERROR-RECW02出力) | FILE SECTION |
| VALID-ERROR-REC | VALID-ERROR エラーレコード定義W02出力) | FILE SECTION |
| JINDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
| JINMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| JINENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
@@ -31,7 +31,7 @@
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
| SUB02MSG | メッセージ編集出力 | 6000MSGOUTSOR |
| SUB03END | ABEND処理 | 9999ABDSOR |
## 使用DB2テーブル
@@ -3,7 +3,7 @@
## プログラム概要
- **プログラムID**: JIN03RAN
- **プログラム名**: スキル評価ランキング出力処理
- **処理概要**: SKILL-AGGJIN02SKL出力の集計結果)を読み込み、平均点降順でランキングを出力する
- **処理概要**: SKILL-AGGJIN02SKL出力の集計結果)を読み込み、平均点降順でランキングを出力する(前提:R01はJCL SORTにより平均点降順ソート済み)
## 使用ファイル
@@ -20,7 +20,6 @@
| JIN03REC | ランキング出力レコード定義(W01出力) | FILE SECTION |
| JINDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
| JINMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| JINENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
@@ -35,5 +34,5 @@
## 処理フロー
1. 初期処理(開始メッセージ→運用日付取得→OPEN→R01初回読込)
2. R01読込→ランキング出力ループ(平均点降順に順位付与)
3. 終了処理(CLOSE→終了メッセージ
2. R01読込→ランキング出力ループ(平均点降順ソート済み入力に順位付与)
3. 終了処理(CLOSE→プログラム終了表示
@@ -0,0 +1,40 @@
# JIN04PRT 使用資源一覧
## プログラム概要
- **プログラムID**: JIN04PRT
- **プログラム名**: 社員台帳印刷処理
- **処理概要**: EMP-VALIDJIN01KNS出力)を読み込み、LINAGE制御で社員台帳を印刷出力する
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| JIN04R01 | EMP-VALID | 順編成 | F (固定長) | 200B | JIN01REC |
| JIN04W01 | JIN-LEDGER | 順編成 | F (固定長) | 132B | JIN04RPT-REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| JIN01REC | 社員正常レコード定義(R01入力) | FILE SECTION |
| JIN04RPT-REC | 台帳印刷レコード定義(W01出力) | FILE SECTION |
| JINDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
| JINMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| JINENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 1000ITTSOR, 4000STPSOR |
| SUB03END | ABEND処理 | 4000STPSOR |
## 使用DB2テーブル
なし(DB操作なし)
## 処理フロー
1. 初期処理(開始メッセージ→日付/時刻取得→運用日付取得→OPEN→ヘッダー出力→R01初回読込)
2. R01読込→明細行編集→WRITEループ(AT END-OF-PAGEでヘッダー再出力)
3. 終了処理(CLOSE→件数出力→終了メッセージ→RETURN-CODE設定)
@@ -0,0 +1,46 @@
# JIN05UPD 使用資源一覧
## プログラム概要
- **プログラムID**: JIN05UPD
- **プログラム名**: 人事異動DB更新処理
- **処理概要**: 人事異動トランザクションを読み込み、DB2 EMPLOYEEマスタをINSERT/UPDATEする
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| JIN05R01 | HR-TRANS | 順編成 | F (固定長) | 200B | JIN05REC |
| JIN05W01 | VALID-ERROR | 順編成 | F (固定長) | 80B | VALID-ERROR-REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| JIN05REC | 人事異動トランザクションレコード定義(R01入力) | FILE SECTION |
| VALID-ERROR-REC | VALID-ERROR エラーレコード定義(W01出力) | FILE SECTION |
| JINDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
| JINMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| JINENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 1000ITTSOR, 3400DBERRSOR, 4000STPSOR |
| SUB03END | ABEND処理 | 4000STPSOR, 9000ERRSOR |
## 使用DB2テーブル
| テーブル名 | 操作 | 使用箇所 |
|-----------|------|---------|
| EMPLOYEE | INSERT | 3100INSERTSOR |
| EMPLOYEE | UPDATE | 3200UPDATESOR |
## 処理フロー
1. 初期処理(開始メッセージ→運用日付取得→DB接続→OPEN→R01初回読込)
2. R01読込→トランザクション種別判定ループ
- A/B/C → INSERT処理
- D/E/F/G → UPDATE処理
- その他 → エラー出力
3. 終了処理(CLOSE→件数出力→終了メッセージ→RETURN-CODE設定)
@@ -0,0 +1,52 @@
# JIN06SRT 使用資源一覧
## プログラム概要
- **プログラムID**: JIN06SRT
- **プログラム名**: 社員データSORT処理
- **処理概要**: EMP-VALIDJIN01KNSチェック済社員データ 200B)を INPUT PROCEDURE で読込み、EMP-ID 昇順に SORT し、OUTPUT PROCEDURE で RETURN して SORTED-EMP へ出力する。RELEASE 件数は最大 999 件で、上限超過分は VALID-ERRORERR-CODE='9999', DETAIL='SORT LIMIT OVER')へ出力する。
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| JIN06R01 | EMP-VALID | 順編成 | F (固定長) | 200B | JIN01REC |
| SORTWORK | SD-SORTWORK | — | — | 200B | JIN01REC |
| JIN06W01 | SORTED-EMP | 順編成 | F (固定長) | 200B | JIN01REC |
| JIN06W02 | VALID-ERROR | 順編成 | F (固定長) | 80B | VALID-ERROR-REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| JIN01REC | EMP-VALID/SORTWORK/SORTED-EMP レコード定義(200B | FILE SECTION |
| VALID-ERROR-REC | 上限超過エラーレコード定義(80B | FILE SECTION |
| JINDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
| JINMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
| JINENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
| SUB02MSG | メッセージ編集出力 | 1000ITTSOR / 3000STPSOR / 4000MSGOUTSOR |
| SUB03END | ABEND処理 | 2000MAJSOR / 9000ERRSOR |
## 使用DB2テーブル
なし(DB操作なし)
## SORTキー
| 対象 | キー項目 | 順序 |
|------|---------|------|
| SORTWORK | EMP-IDSREMP-ID | 昇順(ON ASCENDING KEY |
## 処理フロー
1. 初期処理(開始メッセージ→SUB01DAT運用日付取得→出力ファイルOPEN)
2. SORT実行
- INPUT PROCEDURE: R01読込(EOF 到達まで)→SORTレコード転記→RELEASE。RELEASE は最大 999 件、超過分は VALID-ERROR 出力
- SORT KEY: EMP-ID 昇順
- OUTPUT PROCEDURE: RETURN→SORTED-EMP 出力
3. SORT結果判定(RETURN-CODE≠0→メッセージ出力+ABEND)
4. 終了処理(統計表示→CLOSE→終了メッセージ)
@@ -0,0 +1,48 @@
# JIN07SUB 使用資源一覧
## プログラム概要
- **プログラムID**: JIN07SUB
- **プログラム名**: 社員情報取得サブ
- **処理概要**: 指定 EMP-ID に一致する EMP-VALID200B)レコードを順次 READ で検索し、該当項目(KANA-SEI/KANA-MEI/KANJI-NAME/SUB-CODE/BIRTH-DATE/EMP-ID/FILLER)を LINKAGE 個別引数で返却する。KANJI-NAME は CALL 側で OMITTED 指定時のみ返却スキップ(IS OMITTED 判定)。終了は EXIT PROGRAM。
## 使用ファイル
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|------|---------------|------|-------------|-----------|--------|
| JIN07R01 | EMP-VALID | 順編成 | F (固定長) | 200B | JIN01REC |
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| JIN01REC | EMP-VALID レコード定義(200B, REPLACING (A)→R01 | FILE SECTION |
## 使用サブプログラム
なし(本プログラムは CALL される側)
## 使用DB2テーブル
なし(DB操作なし)
## LINKAGE 引数
| NO | 入出力 | 引数名 | PIC | 説明 |
|----|--------|--------|-----|------|
| 1 | I | LK-EMP-ID | X(8) | 検索条件(社員番号) |
| 2 | O | LK-KANA-SEI | X(20) | 一致レコード返却値 |
| 3 | O | LK-KANA-MEI | X(20) | 一致レコード返却値 |
| 4 | O | LK-KANJI-NAME | N(40) | 一致レコード返却値(OMITTED 時スキップ) |
| 5 | O | LK-SUB-CODE | X(4) | 一致レコード返却値 |
| 6 | O | LK-BIRTH-DATE | X(8) | 一致レコード返却値 |
| 7 | O | LK-EMP-ID-OUT | X(8) | 一致レコード返却値(社員番号) |
| 8 | O | LK-FILLER | X(60) | 一致レコード返却値 |
| 9 | O | LK-RESULT | X(2) | 検索結果('OK'=一致 / 'NG'=不一致) |
## 処理フロー
1. MOVE ADDRESS OF LK-EMP-ID TO WS-PTRADDRESS OF 予約語カバー)
2. OPEN INPUT JIN07R01
3. PERFORM UNTIL LK-RESULT = 'OK' OR EOF
- READ → EMP-ID 完全一致時、各引数へ返却値を転記(KANJI-NAME は NOT OMITTED 時のみ)→ LK-RESULT='OK'
4. CLOSE JIN07R01
5. EXIT PROGRAMGOBACK 不使用)
@@ -0,0 +1,41 @@
# JIN08TST 使用資源一覧
## プログラム概要
- **プログラムID**: JIN08TST
- **プログラム名**: JIN07SUB呼出テスト
- **処理概要**: JIN07SUB を 2 回 CALL(全引数 / KANJI-NAME OMITTED)して、一致レコード取得と OMITTED 引数動作を DISPLAY 出力で確認するテストドライバ。開始/終了メッセージ出力、SUB01DAT 運用日付取得、異常時は SUB03END ABEND 処理を行う。
## 使用ファイル
なし(本プログラムはファイル入出力なし。JIN07SUB が JIN07R01 を読込む)
## 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| JINDATAC | SUB01DAT 運用日付連絡領域 | WORKING-STORAGE |
| JINMSGAC | SUB02MSG メッセージ連絡領域 | WORKING-STORAGE |
| JINENDAC | SUB03END ABEND連絡領域 | WORKING-STORAGE |
## 使用サブプログラム
| サブPGM | 役割 | CALL箇所 |
|---------|------|---------|
| JIN07SUB | 社員情報取得 | 2000CALTST2回: 全引数 / OMITTED |
| SUB01DAT | 運用日付取得 | 1000ITTTST |
| SUB02MSG | メッセージ編集出力 | 1000ITTTST / 3000STPTST / 4000MSGOUTTST |
| SUB03END | ABEND処理 | 9000ERRTST |
## 使用DB2テーブル
なし(DB操作なし)
## 処理フロー
1. 初期処理(開始MSG→ワークエリア初期化→SUB01DAT 運用日付取得。異常時は 4000MSGOUTTST9000ERRTST
2. CALL1: JIN07SUB 全引数 → LK-RESULT 判定 → 'CALL1 OK/NG' DISPLAY
3. CALL2: JIN07SUB KANJI-NAME OMITTED → LK-RESULT 判定 → 'CALL2 OK/NG' DISPLAY
4. 終了処理(終了MSG出力)
## 備考
- テスト専用ドライバのため本番 JCL は不要(ローカル開発環境で単体実行)
- 実行時は環境変数 JIN07R01 で EMP-VALID を割当てる
@@ -49,9 +49,10 @@
| NEXT | 2200JUDGESOR の NEXT SENTENCE |
| SENTENCE | 2200JUDGESOR の NEXT SENTENCE |
| EJECT | PROCEDURE DIVISION 先頭のソース行 EJECT |
| SKIP2 | 段落境界のソース行 SKIP2 |
| FALSE | 2000MAJSOR の SET WRK-FIRST-FLG-Y TO FALSE |
※ SKIP2 はソース行 `*SKIP2` がコメントでありディレクティブとして機能しないため、予約語カバー対象から除外する(W-1 是正)。
## 処理フロー
1. 初期処理(開始メッセージ→運用日付取得→OPEN)
2. マスタLOAD(R02全件→内部表構築→R02 CLOSE
+44 -43
View File
@@ -15,12 +15,12 @@
| 01 | マッチング(11 | 匹配 | ZAN04MAT | ◎ |
| 02 | マッチング(1N | 匹配 | KIN05MAT, KIN03EXP | ◎ |
| 03 | マッチング(N1 | 匹配 | ZAN03CHK | ◎ |
| 04 | レイアウト編集のみ(GETPUT | 编辑 | KIN06CLD, KYU08PRI | ◎ |
| 05 | 振り分け(IF文) | 分支 | 全メインプログラム(37本) | ◎ |
| 06 | 振り分け(EVALUATE文) | 分支 | 37本中25本(KIN04/KIN06以外、SHA01SHA08はIF主体 | ◎ |
| 04 | レイアウト編集のみ(GETPUT | 编辑 | KIN06CLD, KYU08PRI, JIN04PRT | ◎ |
| 05 | 振り分け(IF文) | 分支 | 全メインプログラム(42本) | ◎ |
| 06 | 振り分け(EVALUATE文) | 分支 | 42本中16本(JIN05UPD, KIN01INP, KIN02UPD, KIN03EXP, KIN05MAT, KIN07DAI, KYU04CAL, KYU07DIV, SHA02MNC, SHA09S25, SHA10S10, ZAN01CHK, ZAN03CHK, ZAN04MAT, ZAN05CAL, ZAN06UPD | ◎ |
| 07 | キーブレイク(集計) | key切 | ZAN05CAL | ◎ |
| 08 | キーブレイク(集約) | key切 | KYU03AGG | ◎ |
| 09 | DB更新 | 数据库 | KIN02UPD, ZAN06UPD, KYU02REG, KYU06UPD | ◎ |
| 09 | DB更新 | 数据库 | KIN02UPD, ZAN06UPD, KYU02REG, KYU06UPD, JIN05UPD | ◎ |
| 10 | 50分割 | 分割 | KYU07DIV | ◎ |
| 11 | 25分割 | 分割 | SHA09S25 | ◎ |
| 12 | 100分割 | 分割 | SHA10S10 | ◎ |
@@ -37,7 +37,7 @@
| 22 | 2段階マッチング(M:N⇒MN | 匹配 | SHA06TWM | ◎ |
| 23 | SELECT条件 | 数据库 | KYU05DED | ◎ |
| 24 | 内部テーブル検索 | 内部处理 | KIN01INP(SEARCH), KIN03EXP(SEARCH ALL), ZAN03CHK(SEARCH ALL), KYU05DED(SEARCH ALL), JIN02SKL(SEARCH ALL) | ◎ |
| 25 | サブプログラム使用 | 内部处理 | SUB01DATSUB05TIM | ◎ |
| 25 | サブプログラム使用 | 内部处理 | SUB01DATSUB05TIM, JIN07SUB | ◎ |
| 26 | DB検索 | 数据库 | KIN03EXP, KIN06CLD, KYU04CAL, KYU05DED | ◎ |
| 27 | 項目チェック(半角20桁/4桁) | 校验 | JIN01KNS | ◎ |
| 28 | SYSIN読込 | 内部处理 | KIN08DBU, KYU07DIV | ◎ |
@@ -46,7 +46,7 @@
| 31 | 項目チェック(重複含む) | 校验 | ZAN02CHK(時間帯重複) | ◎ |
| 32 | 1:N+キーブレイク(同キー) | 混合 | KYU04CAL | ◎ |
| 33 | 1:N+キーブレイク(異キー) | 混合 | SHA07KBR | ◎ |
| 34 | SORTINPUT/OUTPUT PROCEDURE | 排序 | SHA08SRT | ◎ |
| 34 | SORTINPUT/OUTPUT PROCEDURE | 排序 | SHA08SRT, JIN06SRT | ◎ |
| 35 | MERGE(複数ファイル結合) | 排序 | KYU09MRG | ◎ |
### 1.2 集計
@@ -121,15 +121,15 @@
| 11 | APPLY | × | I-O-CONTROL段落未使用 |
| 12 | ASCENDING | ◎ | OCCURS ASCENDING KEY(KIN01INP,KIN03EXP,KIN06CLD,SUB04CHK,ZAN03CHK,JIN02SKL)、SEARCH ALL |
| 13 | ASSIGN | ◎ | SELECT ASSIGN TO 全プログラム |
| 14 | AT | △ | READ AT END、SEARCH AT END使用。WRITE AT END-OF-PAGE未使用 |
| 14 | AT | △ | READ AT END、SEARCH AT END使用。WRITE AT END-OF-PAGEJIN04PRT: LINAGE制御ページヘッダー) |
| 15 | AUTHOR | ◎ | IDENTIFICATION DIVISION 全プログラム |
| 16 | BINARY | △ | PIC 9(002) BINARYJIN02SKL: マスタレベル定義) |
| 17 | BLOCK | ◎ | FD BLOCK CONTAINS 全ファイル入出力PGM |
| 18 | BY | | PERFORM VARYING BY、MULTIPLY BY、DIVIDE BY使用。CALL BY REFERENCE/CONTENT/VALUE未使用 |
| 19 | CALL | △ | CALL USING使用。ON EXCEPTION/NOT ON EXCEPTION未使用 |
| 18 | BY | | PERFORM VARYING BY、MULTIPLY BY、DIVIDE BY使用。CALL BY CONTENTJIN05UPD: 3400DBERRSOR |
| 19 | CALL | △ | CALL USING使用。ON EXCEPTIONJIN08TST: 1000ITTTST SUB01DAT呼出)。NOT ON EXCEPTION/RETURNING未使用 |
| 20 | CHARACTER | × | OBJECT-COMPUTER未使用 |
| 21 | CHARACTERS | ◎ | INSPECT CHARACTERS(ZAN01CHK,KIN04CHK,SUB04CHK) |
| 22 | CLOSE | | CLOSE(単純CLOSEのみ)。WITH LOCK/NO REWIND/REEL/FOR REMOVAL未使用 |
| 22 | CLOSE | | CLOSE(単純CLOSE)。WITH LOCKJIN04PRT, JIN05UPD |
| 23 | COMP | ◎ | USAGE COMP カウンタ/フラグ |
| 24 | COMP-3 | ◎ | USAGE COMP-3 集計/金額項目 |
| 25 | COMP-4 | △ | PIC 9(004) COMP-4 (JIN03RAN: バイナリカウンタ定義 + ADD 1 TO CUN-COMP4) |
@@ -144,7 +144,7 @@
| 34 | COUNT | ◎ | UNSTRING COUNT IN(KYU01CVT: CSV分解の項目数カウント) |
| 35 | CURSOR | ◎ | DECLARE/OPEN/FETCH/CLOSE CURSOR(KIN02UPD,KIN03EXP,KIN06CLD,KIN09CSV) |
| 36 | DATA | ◎ | DATA DIVISION 全プログラム |
| 37 | DATE | × | ACCEPT FROM DATE未使用(SUB01DATはFUNCTION CURRENT-DATE使用 |
| 37 | DATE | | ACCEPT FROM DATEJIN04PRT: 1000ITTSOR |
| 38 | DATE-COMPILED | ◎ | IDENTIFICATION DIVISION 全プログラム |
| 39 | DATE-WRITTEN | ◎ | IDENTIFICATION DIVISION 全プログラム |
| 40 | DECLARATIVES | ◎ | USE AFTER ERROR PROCEDURE(KYU01CVT: R01/W01/W02ファイルエラー時ABEND) |
@@ -153,13 +153,13 @@
| 43 | DELIMITER | × | UNSTRING DELIMITER IN未使用 |
| 44 | DEPENDING | ◎ | OCCURS DEPENDING ON(KIN03EXP,ZAN03CHK)、GO TO DEPENDING ON(KIN08DBU) |
| 45 | DESCENDING | △ | OCCURS DESCENDING KEY IS (JIN03RAN: 内部表3要素降順) |
| 46 | DISPLAY | △ | DISPLAY文(MSG出力)4プログラム。USAGE DISPLAY句未使用UPON/WITH NO ADVANCING未使用 |
| 46 | DISPLAY | △ | DISPLAY文(MSG出力)4プログラム。USAGE DISPLAY句未使用UPONJIN04PRT, JIN05UPD, JIN08TST)、WITH NO ADVANCINGJIN04PRT, JIN05UPD |
| 47 | DISPLAY-1 | × | 未使用 |
| 48 | DIVIDE | ◎ | DIVIDE INTO/BY/GIVING/REMAINDER/ROUNDED(ZAN01,ZAN05,SUB05,KIN07) |
| 49 | DIVISION | ◎ | IDENTIFICATION/ENVIRONMENT/DATA/PROCEDURE DIVISION 全プログラム |
| 50 | DOWN | | SET DOWN BY 1 (JIN03RAN: 終了処理) |
| 50 | DOWN | × | 未使用 |
| 51 | DYNAMIC | × | 未使用 |
| 52 | EJECT | × | 未使用 |
| 52 | EJECT | | ソース行 EJECTJIN09RPT: PROCEDURE DIVISION 直後) |
| 53 | ELSE | ◎ | IF ELSE END-IF 全プログラム |
| 54 | END | ◎ | END-IF、END-READ、END-PERFORM等スコープターミネータ 全プログラム |
| 55 | END-ADD | ◎ | JIN02SKLADD END-ADD |
@@ -179,10 +179,10 @@
| 69 | ERROR | ◎ | ON SIZE ERROR(COMPUTE:ZAN01,ZAN03,ZAN05) |
| 70 | EVALUATE | ◎ | EVALUATE ALSO/WHEN/WHEN OTHER(KYU04CAL: 勤怠区分×手当種別) |
| 71 | EXEC | △ | EXEC SQL使用。EXEC CICS未使用 |
| 72 | EXCEPTION | × | CALL ON EXCEPTION未使用 |
| 72 | EXCEPTION | | CALL ON EXCEPTIONJIN05UPD/JIN08TST: 1000ITTSOR SUB01DAT呼出) |
| 73 | EXECUTE | × | 未使用 |
| 74 | EXIT | △ | EXIT(段落終端)全プログラム、EXIT PERFORM(KIN06CLD,KIN07DAI,KIN08DBU)、EXIT SECTION(KIN08DBU)EXIT PROGRAM/EXIT PARAGRAPH/EXIT METHOD未使用 |
| 75 | FALSE | × | SET TO FALSE未使用 |
| 74 | EXIT | △ | EXIT(段落終端)全プログラム、EXIT PERFORM(KIN06CLD,KIN07DAI,KIN08DBU)、EXIT SECTION(KIN08DBU)EXIT PROGRAM(JIN07SUB)。EXIT PARAGRAPH/EXIT METHOD未使用 |
| 75 | FALSE | | SET condition TO FALSEJIN09RPT: SET WRK-FIRST-FLG-Y TO FALSE |
| 76 | FD | ◎ | FILE DESCRIPTION 全ファイル入出力PGM |
| 77 | FILE | ◎ | FILE SECTION、FILE-CONTROL 全プログラム |
| 78 | FILE-CONTROL | ◎ | FILE-CONTROL SELECT ASSIGN 全プログラム |
@@ -196,14 +196,14 @@
| 86 | GOBACK | ◎ | GOBACK 全20プログラム |
| 87 | GREATER | ◎ | JIN02SKLIF TBL-EMP-COUNT IS GREATER THAN ZERO |
| 88 | HIGH-VALUE | ◎ | MOVE HIGH-VALUE(ZAN03CHK,ZAN04MAT,ZAN05CAL) |
| 89 | I-O-CONTROL | × | I-O-CONTROL段落使用 |
| 89 | I-O-CONTROL | | I-O-CONTROL段落JIN09RPT: 空段落、SHA08SRT/JIN06SRT: SAME SORT AREA 使用 |
| 90 | ID | × | PROGRAM-ID以外のID未使用 |
| 91 | IDENTIFICATION | ◎ | IDENTIFICATION DIVISION 全プログラム |
| 92 | IF | ◎ | IF ELSE END-IF 全プログラム |
| 93 | IN | ◎ | INSPECT TALLYING IN、SEARCH IN、COPY IN |
| 94 | INDEXED | ◎ | OCCURS INDEXED BY(KIN01INP,KIN03EXP,KIN06CLD,ZAN03CHK) |
| 95 | INITIAL | △ | JIN01KNSPROGRAM-ID IS INITIAL: サブPGMコール時の初期化属性) |
| 96 | INITIALIZE | △ | INITIALIZE(基本形)全プログラム。JIN01KNSはINITIALIZE後の88-LevelにMOVE '0'で対応。REPLACING/WITH FILLER未使用 |
| 96 | INITIALIZE | △ | INITIALIZE(基本形)全プログラム。REPLACINGJIN05UPD: NUMERIC/ALPHANUMERIC指定) |
| 97 | INPUT | ◎ | OPEN INPUT、INPUT-OUTPUT SECTION |
| 98 | INPUT-OUTPUT | ◎ | INPUT-OUTPUT SECTION 全プログラム |
| 99 | INSERT | △ | EXEC SQL INSERT(KIN02UPD,KIN08DBU)。COBOL INSERT(コンパイラ指示文)未使用 |
@@ -219,13 +219,13 @@
| 109 | MODE | ◎ | RECORDING MODE F/V |
| 110 | MOVE | ◎ | MOVE TO 全20プログラム |
| 111 | MULTIPLY | ◎ | MULTIPLY BY/GIVING/ROUNDED(KIN07DAI,ZAN06UPD) |
| 112 | NEXT | × | READ NEXT未使用(順次読込のみ |
| 112 | NEXT | | NEXT SENTENCEJIN09RPT: レベル判定 ELSE 内 |
| 113 | NOT | ◎ | NOT AT END、NOT ON ERROR、IF NOT 全プログラム |
| 114 | NUMERIC | ◎ | IF NUMERIC(KIN06CLD,SUB04CHK) |
| 115 | OBJECT-COMPUTER | ◎ | OBJECT-COMPUTER 全プログラム |
| 116 | OCCURS | ◎ | OCCURS TIMES/DEPENDING ON/INDEXED BYJIN02SKL: ASCENDING KEY + DEPENDING ON |
| 117 | OF | ◎ | データ参照修飾、LENGTH OF(全プログラム) |
| 118 | OMITTED | × | CALL OMITTED未使用 |
| 118 | OMITTED | | CALL USING ... OMITTEDJIN08TST: 2000CALTST)、IS OMITTED 判定(JIN07SUB: 1000FNDSOR |
| 119 | ON | ◎ | ON SIZE ERROR、OCCURS DEPENDING ON |
| 120 | OPEN | ◎ | OPEN INPUT/OUTPUT 全ファイル入出力PGM |
| 121 | OPTIONS | × | CBL/PROCESS文未使用 |
@@ -237,7 +237,7 @@
| 127 | PACKED-DECIMAL | △ | JIN02SKLAGG-LEVEL/AGG-AVG-SCORE PIC 9(n) PACKED-DECIMAL |
| 128 | PAGE | ◎ | FD LINAGE IS(KYU08PRI: 66行ページ制御)、WRITE BEFORE/AFTER ADVANCING PAGE |
| 129 | PAGE-COUNTER | × | 未使用(KYU08PRIはWORKING-STORAGEのWRK-PAGE-COUNTERで代替。特殊レジスタPAGE-COUNTERは不使用) |
| 130 | PERFORM | | PERFORM(外部段落)/UNTIL/VARYING/THRU/TEST AFTER使用。TIMES/TEST BEFORE/VARYING AFTER未使用 |
| 130 | PERFORM | | PERFORM(外部段落)/UNTIL/VARYING/THRU/TEST AFTER使用。JIN09RPTでVARYING多重ループ(社員×明細×内部表20) |
| 131 | PIC | ◎ | PICTURE句 全プログラム |
| 132 | POINTER | ◎ | STRING WITH POINTER(KIN09CSV) |
| 133 | PROCEDURE | ◎ | PROCEDURE DIVISION 全プログラム |
@@ -258,34 +258,34 @@
| 148 | SEARCH | ◎ | SEARCH(KIN01INP)、SEARCH ALL(KIN03EXP,ZAN03CHK,JIN02SKL)、VARYING/AT END/WHEN全て使用 |
| 149 | SECTION | ◎ | CONFIGURATION/INPUT-OUTPUT/WORKING-STORAGE/LINKAGE/PROCEDURE SECTION |
| 150 | SELECT | ◎ | SELECT ASSIGN(FILE-CONTROL)全プログラム、SQL SELECT |
| 151 | SENTENCE | × | NEXT SENTENCE未使用 |
| 152 | SET | | SET TO TRUE(KIN08DBU,ZAN05CAL)SET TO FALSE/UP BY/DOWN BY/ADDRESS OF未使用 |
| 151 | SENTENCE | | NEXT SENTENCEJIN09RPT: レベル判定 ELSE 内) |
| 152 | SET | | SET TO TRUE(KIN08DBU,ZAN05CAL)SET TO FALSE(JIN09RPT: 条件名) |
| 153 | SHIFT-IN | × | 未使用 |
| 154 | SHIFT-OUT | × | 未使用 |
| 155 | SIZE | ◎ | ON SIZE ERROR(COMPUTE:ZAN01CHK,ZAN03CHK,ZAN05CAL) |
| 156 | SKIP2 | × | 未使用(SKIP1/SKIP2/SKIP3 |
| 156 | SKIP2 | × | 未使用(ソース行 `*SKIP2` はコメントであり SKIP2 ディレクティブではない。W-1 で◎主張を是正 |
| 157 | SOURCE-COMPUTER | ◎ | SOURCE-COMPUTER IBM-ZSERIES 全プログラム |
| 158 | SPACE | ◎ | SPACE/SPACES INITIALIZE後、VALUE、MOVE、条件比較 |
| 159 | SPACES | ◎ | SPACES(SPACEと同義、INSPECT REPLACING ALL等) |
| 160 | SQL | ◎ | EXEC SQL(KIN02UPD,KIN03EXP,KIN08DBU,KIN09CSV,ZAN06UPD) |
| 161 | STANDARD | ◎ | FD LABEL RECORDS STANDARD |
| 162 | STOP | | STOP RUNのみSUB03ENDSTOP literal未使用 |
| 163 | STRING | | STRING DELIMITED BY INTO使用。ON OVERFLOW未使用 |
| 162 | STOP | | STOP RUNSUB03ENDSTOP literalJIN04PRT: 9000ERRSOR |
| 163 | STRING | | STRING DELIMITED BY INTO使用。ON OVERFLOWJIN04PRT, JIN05UPD: 全STRING箇所) |
| 164 | SUBTRACT | ◎ | SUBTRACT FROM/GIVING/ROUNDED(KIN07DAI,ZAN06UPD) |
| 165 | TABLE | × | SEARCH TABLE参照(変数名にはHOLIDAY-TABLE等あるが、TABLE予約語としては未使用) |
| 166 | TALLYING | ◎ | INSPECT TALLYING、UNSTRING TALLYING IN(ZAN01CHK,KIN04CHK,SUB04CHK,KIN08DBU) |
| 167 | TEST | ◎ | PERFORM TEST AFTER(ZAN06UPD)。TEST BEFORE未使用だが単一形式で◎ |
| 168 | THEN | ◎ | IF THENSUB04CHK,SUB05TIMで明示的THEN使用) |
| 169 | THRU | △ | PERFORM THRU(KIN03EXP,KIN08DBU)。VALUE THRU未使用 |
| 170 | TIME | × | ACCEPT FROM TIME未使用(SUB01DATはFUNCTION CURRENT-DATE使用 |
| 169 | THRU | △ | PERFORM THRU(KIN03EXP,KIN08DBU)。VALUE THRUJIN05UPD: 88-level 'D' THRU 'G' |
| 170 | TIME | | ACCEPT FROM TIMEJIN04PRT: 1000ITTSOR |
| 171 | TIMES | ◎ | OCCURS TIMES(KIN01INP,KIN03EXP,KIN06CLD,KIN08DBU,ZAN03CHK) |
| 172 | TO | ◎ | MOVE TO、ADD TO、GO TO 全プログラム |
| 173 | TRUE | ◎ | EVALUATE TRUE、SET condition TO TRUE |
| 174 | TYPE | × | 変数名(WRK-ERR-TYPE等)はあるがTYPE予約語としては未使用 |
| 175 | UNSTRING | ◎ | UNSTRING DELIMITED BY INTO(KIN01INP,KIN04CHK,ZAN01CHK) |
| 176 | UNTIL | ◎ | PERFORM UNTIL 全プログラム |
| 177 | UP | | SET UP BY (JIN03RAN: 順位UP 出力件数UP) |
| 178 | UPON | × | DISPLAY UPON未使用 |
| 177 | UP | × | 未使用 |
| 178 | UPON | | DISPLAY UPONJIN04PRT, JIN05UPD: UPON CONSOLE |
| 179 | USAGE | ◎ | USAGE COMP/COMP-3 |
| 180 | USE | ◎ | USE AFTER ERROR PROCEDURE(KYU01CVT: DECLARATIVESでファイルエラー捕捉) |
| 181 | USING | ◎ | PROCEDURE DIVISION USING、CALL USING 全プログラム |
@@ -301,18 +301,18 @@
| 191 | ZERO | ◎ | ZERO/ZEROS VALUE、MOVE ZERO 全プログラム |
| 192 | ZEROS | ◎ | ZEROS(ZEROと同義、KIN08DBU LOW-VALUES) |
| 193 | ALTER | × | 非推奨 |
| 194 | CANCEL | × | 未使用 |
| 194 | CANCEL | | CANCEL 'SUB02MSG'JIN09RPT: 4000STPSOR |
| 195 | ENTRY | × | 未使用 |
| 196 | MERGE | ◎ | COBOL MERGE文(KYU09MRG: SALARY-NET + BONUS-DATA を社員番号昇順結合) |
| 197 | RELEASE | × | COBOL SORT未使用 |
| 198 | RETURN | ◎ | COBOL RETURN文(KYU09MRG: MERGE OUTPUT PROCEDUREでMERGE結果受取) |
| 197 | RELEASE | | COBOL RELEASE文(JIN06SRT: 2110READSOR INPUT PROCEDURE内でSORTレコード送出) |
| 198 | RETURN | ◎ | COBOL RETURN文(KYU09MRG: MERGE OUTPUT、JIN06SRT: 2120OUTPUSOR SORT OUTPUT PROCEDURE) |
| 199 | REWRITE | × | VSAM非対応 |
| 200 | SORT | × | JCL PGM=SORTに委譲 |
| 200 | SORT | | COBOL SORT文(JIN06SRT: 2000MAJSOR INPUT/OUTPUT PROCEDURE + ON ASCENDING KEY) |
| 201 | START | × | 順次読込のみ |
| 202 | SAME | × | SAME RECORD/SORT AREA未使用 |
| 202 | SAME | | SAME SORT AREA(SHA08SRT/JIN06SRT: SORTWORK)。SAME RECORD未使用 |
| 203 | FUNCTION | ◎ | FUNCTION MOD/WHEN-COMPILED/NUMVAL/INTEGER-OF-DATE/MIN/MAX/TRIM/LENGTH(KIN03EXP,KIN06CLD,KIN08DBU,KIN09CSV,JIN01KNS) |
| 204 | BEFORE | ◎ | WRITE BEFORE ADVANCING PAGE/1 LINE(KYU08PRI: 給与明細印刷の改ページ制御) |
| 205 | ADDRESS | × | ADDRESS OF未使用SET ADDRESS OF未使用 |
| 205 | ADDRESS | | MOVE ADDRESS OFJIN07SUB: 0000MAINSOR)。SET ADDRESS OF未使用 |
---
@@ -332,11 +332,12 @@
| カバレッジ率 | 90.9% |
| **予約語カバレッジ(Section 3)** | |
| 全予約語数 | 205 |
| 全構文形式使用(◎): | 119 |
| 一部構文形式使用(△): | 29 |
| 未使用(×) | 51 語 | Phase A除去: ACCESS/CHARACTER/EXCEPTION/ORGANIZATION/PAGE-COUNTER/UPON に加え VALUES(カバレッジ保留) |
| カバレッジ率(◎/205) | 58.0% |
| カバレッジ率(◎+△/205) | 75.1% | Phase A+B COMP-4/CORR/DESCENDING/DOWN/UP追加以降 |
| 全構文形式使用(◎): | 147 |
| 一部構文形式使用(△): | 28 |
| 未使用(×) | 30 語 | JIN07SUB/JIN08TST追加後(OMITTED を◎化、ADDRESS を△化。SKIP2 はコメント行のため × に是正) |
| カバレッジ率(◎/205) | 71.7% |
| カバレッジ率(◎+△/205) | 85.4% | JIN07SUB/JIN08TST追加後(OMITTED ◎化、ADDRESS △化。SKIP2 × 是正) |
| **TYPE定義カバレッジ(11種)** | |
| 全TYPE定義数 | 11 |
| 使用済TYPE | 10X, N, 9, 9V9, S9V9, S9V9 COMP-3, S9 COMP-3, S9 COMP, S9 BINARY, ZZZ9 |
@@ -344,7 +345,7 @@
| 未使用TYPE | 1G |
| TYPEカバレッジ率 | 90.9%(特殊含め100% |
> 本ファイルは全コードベース(JIN01-03 + KIN01-09 + ZAN01-06 + KYU01-09 + SHA01-10 + SUB01-05 = 42プログラム)を統合したカバレッジ状況。
> 本ファイルは全コードベース(JIN01-09 + KIN01-09 + ZAN01-06 + KYU01-09 + SHA01-10 + SUB01-05 = 48プログラム)を統合したカバレッジ状況。
> 定義ファイル(COBOLキーワード網羅定義書.md)と合わせて参照すること。
---
@@ -0,0 +1,114 @@
# サブシステムE(人事情報管理)整合性レビュー報告書
> 作成日: 2026-08-01
> 対象: 基本設計書 / 詳細設計書 / コード(src) / COPY定義 / 使用資源一覧 / テスト / カバレッジ統計
---
## 1. 検証範囲と実施内容
基本設計書に計画されるプログラム 9 本(JIN01KNS〜JIN09RPT)に対し、以下をレビューした:
- 基本設計書の設計合理性・ロジック
- 詳細設計書・コード・COPY 定義の整合性(レコード長・DD・COPY・CALL)
- IBM COBOL 適合性(予約語・固定書式・コーディング規約)
- テスト充足性(全ケース実行・テスト基準との一致)
- 使用資源一覧・カバレッジ統計の最新状況
GnuCOBOL 3.2.0 で全実在プログラムのコンパイル・テスト実実行済み。
---
## 2. 実装状況の実測
| プログラム | 基本設計 | src実装 | 詳細設計書 | 使用資源一覧 | テスト | テスト結果文書 | production反映 |
|:---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
| JIN01KNS | ○ | ○ | ○ | ○ | ○ | × | ○ |
| JIN02SKL | ○ | ○ | ○ | ○ | ○ | × | ○ |
| JIN03RAN | ○ | ○ | ○ | ○ | ○ | × | ○ |
| JIN04PRT | ○ | ○ | **×** | ○ | ○ | × | **×** |
| JIN05UPD | ○ | ○ | **×** | ○ | ○ | × | **×** |
| JIN06SRT | ○ | **×** | × | × | × | × | **×** |
| JIN07SUB | ○ | **×** | × | × | × | × | **×** |
| JIN08TST | ○ | **×** | × | × | × | × | **×** |
| JIN09RPT | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
**計画 9 本に対して実装は 6 本。JIN06SRT / JIN07SUB / JIN08TST は未着手。**
---
## 3. 問題点リスト(重要度順)
### 🔴 高重要度(対応必須)
**H-1. JIN06SRT / JIN07SUB / JIN08TST が完全未実装**
- 基本設計書には計画 9 本・予約語カバー対象(SORT/RELEASE/PERFORM TIMES/EXIT PROGRAM/ADDRESS/OMITTED/EXIT PARAGRAPH)と記載
- しかし src にコード無し、詳細設計書・テスト・使用資源一覧・production 全て未着手
- SORT/RELEASE/ADDRESS/OMITTED はこの 3 本でしかカバーできない予約語のため、**カバレッジ統計の「×」リストにも現状は未達のまま**
**H-2. SKIP2 予約語カバーの「◎」主張が虚偽**
- `品質管理/カバレッジ統計.md``使用資源一覧/JIN09RPT_使用資源一覧.md`・基本設計書に「SKIP2 ◎(段落境界)」と記録
- しかし全コード中に SKIP2 ディレクティブが**皆無**。JIN09RPT.cbl:12 はヘッダコメント記載のみ、JIN04PRT/JIN05UPD の`*SKIP2` も col7=`*` のコメント行
- 実態は **◎144 / ×35**(表示 83.4% でなく **82.4%**
- 直近コミット 415427a の「6語(CANCEL/I-O-CONTROL/NEXT SENTENCE/EJECT/SKIP2/FALSE)カバー」は実際 **5 語**SKIP2 除く)
**H-3. JIN04PRT / JIN05UPD が production/ 未反映**
- 両プログラムは root 実装済み・テスト PASS なのに production/ に存在せず git 未反映
**H-4. JIN03RAN の `SET ... UP/DOWN BY` が IBM COBOL でコンパイル不可**
- `src/JIN03RAN.cbl:206, 251, 288``SET WRK-RANK-NO UP BY 1` 等の対象が `PIC 9(004)``PIC 9(004) BINARY` の**数値項目**
- IBM Enterprise COBOL の `SET ... UP/DOWN BY` は**インデックス名専用**。数値項目には使用不可 → コンパイルエラー
- GnuCOBOL はエラーなく受け付けるためローカルでは通過(潜在的本番障害)
**H-5. production 側カバレッジ統計が root と 63 行差分・かつ内部矛盾**
- production 側 `カバレッジ統計.md`119+29+51=199 ≠ 205、率も記載 75.1% と矛盾
---
## 4. 重要度:中(対応推奨)
- **M-1. JIN04PRT・JIN05UPD の詳細設計書が存在しない**root/production 双方)。開発フロー Phase 3(設計書解析→実装)に違反、双方向トレーサビリティ欠如
- **M-2. カバレッジ統計のプログラム数・タイプ数が JIN09RPT 追加後未更新**(「39本」「44プログラム」等。実際は 40 本)
- **M-3. SEARCH ALL の「SKILL-MST 昇順」前提が JCL/設計書で未担保**JIN02SKL・JIN09RPT)。JINJ020/JINJ090 に PGM=SORT 手順がなく、未ソート入力時の誤動作リスク
- **M-4. JIN09RPT の ODOOCCURS 1 TO 20 DEPENDING ON)初期値 0 が IBM の未定義動作リスク**(範囲外参照。GnuCOBOL は検出せず PASS)。SSRANGE 有効時は実行時 ABEND
- **M-5. SKILL-MST-REC の BINARY レコード長差異**GnuCOBOL=79B / IBM=80B`PIC 9(002) BINARY` のバイト数差)。単に長さだけでなく MST-LEVEL-NAME のオフセットもずれる
- **M-6. JIN09RPT の内部表定義が詳細設計書と不一致**(TBL-LEVEL 等)
- **M-7. 詳細設計書(JIN01/02/03/09)の段落名が実コードの SOR 規約名と完全不一致**(概念名 JIN01KNS-OPEN 等 vs 実装 1000ITTSOR 等)。トレーサビリティ崩壊
- **M-8. 使用資源一覧の誤記**JIN01KNSVALID-ERROR-REC 帰属、JIN01REC 内と誤記載)、JIN02SKLSUB02MSG CALL箇所 4000→6000、JIN01REC 誤使用)、JIN09RPTSKIP2 誤記載)
- **M-9. JIN05UPD のキーワードカバー実体不在**FALSE / EXIT PARAGRAPH がコメントのみで実装なし、VALID-ERROR-REC COPY を使用せず内約定義
- **M-10. 基本設計書のレコード長矛盾**JIN-LEDGER が行 40=132B なのに行 117=133B。実規格は 132B
- **M-11. JIN01〜05 のテスト結果文書が未作成**(テスト結果_KYU.md・テスト結果_JIN09RPT.md のみ)
- **M-12. JIN09RPT の MST>20 件時のオーバーフローガード無し**SKILL-LIST-MAX=20 がコード未反映)
---
## 5. 中:テスト充足性の不足点
| プログラム | 不足ケース |
|:---|:---|
| JIN01KNS | 全角混入(VF-A002)、MEI 単独エラー |
| JIN02SKL | MST 重複キー、SEARCH ALL 未ソート表、ODO 空表検索、純粋 1:1 |
| JIN03RAN | (網羅度高。概ね充足) |
| JIN04PRT | LINAGE 境界(FOOTING/TOP/BOTTOM 最大行)、PAGE-COUNTER 値検証、DATE/TIME/ON OVERFLOW 実例 |
| JIN05UPD | SQLCODE≠03400DBERRSOR)、上限500件ガード(CNS-MAX-TRANS)、CONNECT 失敗分岐 |
| JIN09RPT | MST 0 件×R01 複数、境界 89/51/1、S=100/90 解釈 |
---
## 6. まとめ:全体評価と推奨対応
**機能面**:実装 6 本は全て GnuCOBOL でコンパイル・テスト PASS。DD/CALL/COPY/レコード長・DB 定義(ddl/schema_jin.sql)の整合は概ね健全。IBM COBOL 適合の基本要件(SOURCE-COMPUTER、カラム位置、88-level 引用符、コメント方式、`>>SOURCE` 混入なし)はほぼ全項目合格。
**工程・整合面**:以下が特に重要。
1. **JIN06SRT/07SUB/08TST の実装が未完了**(基本設計上の予約語カバー対象もカバーできない)
2. **SKIP2 の◎主張が虚偽**(統計・資源一覧・コミット記述の是正 or SKIP2 実装)
3. **JIN03RAN の `SET` 非インデックス利用は IBM 本番でエラー**(最重要修正)
**推奨アクション(対応優先順)**
1. JIN03RAN.cbl の `SET ... UP/DOWN``ADD/SUBTRACT` に修正(H-4
2. SKIP2 の記載整合:実装 or 統計・資源一覧・コミットの修正(H-2)
3. JIN04PRT・JIN05UPD の production 反映と詳細設計書作成(H-3, M-1)
4. JIN06SRT/07SUB/08TST の実装(H-1)— 大規模、要計画立案
5. カバレッジ統計・使用資源一覧・基本設計書の矛盾是正(M-2, M-7〜M-10
6. 不足テストケースの追加(Section 5)
7. production カバレッジ統計の root 同期(H-5)
@@ -10,11 +10,12 @@ JIN04PRT(社員台帳印刷)と JIN05UPD(人事異動DB更新)を新規
未カバーのCOBOL予約語を計16語カバーする。
さらに JIN06SRT(社員データ並替)・JIN07SUB(社員情報取得サブPGM)・
JIN08TSTJIN07SUB呼出テスト)を追加し、
SORT/RELEASE/EXIT PROGRAM/ADDRESS/OMITTED/PERFORM TIMES をカバーする。
SORT/RELEASE/EXIT PROGRAM/ADDRESS/OMITTED をカバーする。
最後に JIN09RPT(社員別スキル集計レポート)を追加し、
CANCEL/I-O-CONTROL/NEXT SENTENCE/EJECT/SKIP2/FALSE の6語をカバーし、
CANCEL/I-O-CONTROL/NEXT SENTENCE/EJECT/FALSE の5語をカバーし、
PERFORM(複合条件)・SET(条件名 SET)を昇格させる。
当初は SAME RECORD AREA もカバー予定だったが、GnuCOBOL 3.2 でレコード長の
SKIP2 はソース行 `*SKIP2` がコメント扱いでディレクティブとして機能しないため、
実装せず統計対象から除外する。当初は SAME RECORD AREA もカバー予定だったが、GnuCOBOL 3.2 でレコード長の
異なるファイル間の共有領域が最小レコード長に固定される制約が判明したため、
SAME は断念した。)
@@ -55,7 +56,7 @@ SAME は断念した。)
| TOP-MARGIN | 2 | 台帳印刷上部余白 |
| BOTTOM-MARGIN | 4 | 台帳印刷下部余白 |
| MAX-TRANS | 500 | JIN05UPD 最大処理件数(PERFORM UNTIL の上限ガード) |
| MAX-SORT-REC | 999 | JIN06SRT 最大SORT件数(PERFORM TIMES の上限ガード) |
| MAX-SORT-REC | 999 | JIN06SRT 最大SORT件数(PERFORM UNTIL + WRK-SORT-CNT の上限ガード) |
| SKILL-LIST-MAX | 20 | JIN09RPT 内部表(スキル別集計)最大要素数 |
| SUM-LINES-MAX | 100 | JIN09RPT 1社員あたり最大出力行数 |
@@ -114,7 +115,7 @@ DBアクセス用の COPY 書式として `DB-COMMON` を WORKING-STORAGE に取
│ CLOSE WITH LOCK で出力ファイル保護
│ STRING ON OVERFLOW で安全な文字列編集
│ エラー時 STOP literal で終了
├── → JIN-LEDGER133B 台帳印刷ファイル)
├── → JIN-LEDGER132B 台帳印刷ファイル)
╞══ JINJ050 ═══════════════════════════════════╡
│ JIN05UPD(人事異動DB更新) PGMパターン: DB更新
@@ -133,7 +134,7 @@ DBアクセス用の COPY 書式として `DB-COMMON` を WORKING-STORAGE に取
╞══ JINJ060 ═══════════════════════════════════╡
│ JIN06SRT(社員データ並替) PGMパターン: 34(SORT
│ EMP-VALID200B)を INPUT PROCEDURE で読込
│ PERFORM TIMES で最大件数制限(MAX-SORT-REC
│ PERFORM UNTIL + WRK-SORT-CNT 比較で最大件数制限(MAX-SORT-REC
│ RELEASE で SORT ファイルへ送出
│ SORT ... ON ASCENDING KEY EMP-ID
│ OUTPUT PROCEDURE で RETURN 受取 → SORTED-EMP へ書出
@@ -156,7 +157,7 @@ DBアクセス用の COPY 書式として `DB-COMMON` を WORKING-STORAGE に取
│ NEXT SENTENCE で文言継続制御、SET 条件名 TO FALSE で状態リセット
│ 集計完了後、社員別に SKILL-SUM(120B)へ出力
│ CANCEL 'SUB02MSG' でメッセージサブPGMを解放
│ EJECT / SKIP2 でソースページ・行制御
│ EJECT でソースページ・行制御
├── → SKILL-SUM(120B 社員別スキル集計結果)
└── 異常 → VALID-ERROR(80B エラーレコード)
```
@@ -297,10 +298,10 @@ DBアクセス用の COPY 書式として `DB-COMMON` を WORKING-STORAGE に取
| 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 | DB2EMPLOYEE | 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 |
| 6 | JIN06SRT | 34 SORT | EMP-VALIDをEMP-ID昇順に並替。SORT/RELEASEカバー(上限はPERFORM UNTIL+WRK-SORT-CNT>999 | 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 |
| 9 | JIN09RPT | 32 1:N+キーブレイク | 社員別スキル集計レポート。CANCEL/I-O-CONTROL/NEXT SENTENCE/EJECT/FALSEカバー | SKILL-EVAL-REC, SKILL-MST-REC, JIN09REC, VALID-ERROR-REC, JINDATAC, JINMSGAC, JINENDAC | なし | SUB01DAT, SUB02MSG, SUB03END |
---
@@ -333,7 +334,7 @@ DBアクセス用の COPY 書式として `DB-COMMON` を WORKING-STORAGE に取
| 3 | PAGE-COUNTER | × | WRITE ADVANCING PAGE 時の特殊レジスタ参照 | JIN04PRT |
| 4 | UPON | × | DISPLAY msg UPON CONSOLE | JIN04PRT |
| 5 | EJECT | × | ソース行 EJECT によるページ制御 | JIN04PRT |
| 6 | SKIP2 | × | ソース行 SKIP2 による改行制御 | JIN04PRT |
| 6 | SKIP2 | × | 実装しない。`*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 |
@@ -349,7 +350,7 @@ DBアクセス用の COPY 書式として `DB-COMMON` を WORKING-STORAGE に取
| 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 |
| 22 | PERFORM TIMES | △(UNTILのみ) | 実装しない。PERFORM UNTIL + 上限カウンタ(WRK-SORT-CNT>MAX-SORT-REC)で上限ガードを実装 | 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 |
@@ -358,7 +359,7 @@ DBアクセス用の COPY 書式として `DB-COMMON` を WORKING-STORAGE に取
| 28 | NEXT | × | NEXT SENTENCE で後続文へ | JIN09RPT |
| 29 | SENTENCE | × | NEXT SENTENCE で後続文へ | JIN09RPT |
| 30 | EJECT | × | ソース行 EJECT によるページ制御 | JIN09RPT |
| 31 | SKIP2 | × | ソース行 SKIP2 による改行制御 | JIN09RPT |
| 31 | SKIP2 | × | 実装しない。`*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 |
@@ -367,7 +368,7 @@ DBアクセス用の COPY 書式として `DB-COMMON` を WORKING-STORAGE に取
| 指標 | 現状 | 改善後 |
|------|:----:|:------:|
| 予約語×(未使用) | 41語 | 34語(7語削減:CANCEL/I-O-CONTROL/NEXT/SENTENCE/EJECT/SKIP2/FALSE |
| 予約語×(未使用) | 41語 | 35語(6語削減:CANCEL/I-O-CONTROL/NEXT/SENTENCE/EJECT/FALSE |
| PERFORM | △ | ◎(多重ループ+複合条件IFで実質的カバー) |
| SET | △ | ◎(条件名 SET TO FALSE で実質的カバー) |
| ◎+△率 | 80.0%164/205 | 83.4%171/205 |
+58 -43
View File
@@ -5,13 +5,13 @@
| 項目 | 内容 |
|------|------|
| プログラムID | JIN01KNS(人事→JINji, 01, カナKana確認Chekku→KNS |
| プログラムタイプ | 27(半角20桁/4桁チェック) |
| 機能 | 人事取込データの氏名カナ(半角20桁以内・英大文字)および補助コード桁数のチェック |
| プログラムタイプ | 27(半角20桁/補助コード有効値チェック) |
| 機能 | 人事取込データの氏名カナ(半角20桁以内・英大文字)および補助コード有効値のチェック |
| CALL方式 | メインプログラム(JCLからCALL) |
| DBアクセス | なし |
| 使用サブプログラム | SUB01DAT(日付), SUB02MSG(メッセージ), SUB03END(アベンド) |
| INITIAL指定 | PROGRAM-ID IS INITIALINITIAL 予約語使用) |
| RETURN-CODE | 正常終了時 MOVE ZERO TO RETURN-CODERETURN-CODE 予約語使用) |
| RETURN-CODE | エラー時 MOVE 4 TO RETURN-CODERETURN-CODE 予約語使用) |
## ファイル一覧
@@ -30,7 +30,7 @@
| KANA-SEI | X(20) | 姓(半角カナ) | 最大20桁チェック対象 |
| KANA-MEI | X(20) | 名(半角カナ) | 最大20桁チェック対象 |
| KANJI-NAME | N(40) | 漢字氏名(全角) | PIC N 使用(N(1)=2B、実長80B、合計200B |
| SUB-CODE | X(4) | 補助コード | 4桁チェック対象 |
| SUB-CODE | X(4) | 補助コード | 有効値チェック対象 |
| BIRTH-DATE | X(8) | 生年月日 CCYYMMDD | — |
| EMP-ID | X(8) | 社員番号 | — |
| FILLER | X(060) | — | — |
@@ -50,70 +50,85 @@
| 段落名 | 機能 |
|:-------|:-----|
| JIN01KNS-OPEN | ファイルOPEN |
| JIN01KNS-READ | 1レコードREAD |
| JIN01KNS-CHECK | カナチェック主処理 |
| JIN01KNS-CHK-KANA | 半角カナ文字チェック(IS ALPHABETIC-UPPER |
| JIN01KNS-CHK-SIZE | 桁数チェック(20桁超過チェック |
| JIN01KNS-CHK-SUB | 補助コード桁数チェック(4桁 |
| JIN01KNS-WRITE-OK | 正常データWRITE |
| JIN01KNS-WRITE-ERR | エラーデータWRITE |
| JIN01KNS-CLOSE | ファイルCLOSE + RETURN-CODE設定 |
| 0000MAJCOLSOR | メインコントロール(初期→読込→主処理→終了、RETURN-CODE設定) |
| 1000ITTSOR | 初期処理(開始・コンパイル日時メッセージ、初期化、運用日付、OPEN、初回読込) |
| 1100R01INNSOR | R01読込・EOF判定 |
| 2000MAJSOR | 主処理(エラーフラグ初期化→各チェック→振分 |
| 2010CHKANASOR | 半角カナ文字チェック(IS ALPHABETIC-UPPER |
| 2020CHKSIZSOR | 桁数チェック(20桁超過チェック |
| 2030CHKSUBSOR | 補助コード有効値チェック('0001'/'0002'/'0003' |
| 2100WRTOKSOR | 正常データWRITE |
| 2200WRTERRSOR | エラーデータWRITE |
| 3000STPSOR | 終了処理(統計表示・CLOSE) |
| 4000MSGOUTSOR | メッセージ編集出力SUB呼出 |
| 9999ABDSOR | エラー処理(ABEND |
### 処理ロジック
#### 初期処理(JIN01KNS-OPEN
1. JIN01R01 / JIN01W01 / JIN01W02 を OPEN
2. WS-READ-CNT, WS-ERR-CNT を INITIALIZE(数値=0, PIC X=SPACE
#### 初期処理(1000ITTSOR
1. 開始・コンパイル日時メッセージを SUB02MSG で出力(4000MSGOUTSOR 経由)
2. WRKARA, CUNARA を INITIALIZE
3. 運用日付取得(CALL SUB01DAT)。異常時は 4000MSGOUTSOR9999ABDSOR
4. JIN01R01 / JIN01W01 / JIN01W02 を OPEN
5. 初回読込(PERFORM 1100R01INNSOR
#### 主処理(JIN01KNS-READ → JIN01KNS-CHECK → JIN01KNS-READ
1. JIN01R01 から1レコード READ
2. READ 成功 → JIN01KNS-CHECK へ
3. READ 失敗(AT END)→ JIN01KNS-CLOSE へ
#### 制御・メイン(0000MAJCOLSOR
1. PERFORM 1000ITTSOR(初期処理)
2. PERFORM 2000MAJSOR UNTIL WRK-R01EOF-Y(読込EOFまでループ)
3. PERFORM 3000STPSOR(終了処理)
4. CUN-W02OUT > 0 → MOVE 4 TO RETURN-CODEGOBACK直前)
5. GOBACK
#### チェック処理(JIN01KNS-CHECK
1. ADD 1 TO WS-READ-CNT END-ADDEND-ADD 予約語
2. JIN01KNS-CHK-KANA 呼出
3. JIN01KNS-CHK-SIZE 呼出
4. JIN01KNS-CHK-SUB 呼出
5. エラーフラグ OFF → JIN01KNS-WRITE-OK
6. エラーフラグ ON → JIN01KNS-WRITE-ERR
#### 読込処理(1100R01INNSOR
1. JIN01R01 から1レコード READAT END → WRK-R01EOF='1'
#### カナ文字チェック(JIN01KNS-CHK-KANA
#### 主処理(2000MAJSOR
1. WRK-ERR-FLG に '0' を初期化
2. カナ文字チェック(2010CHKANASOR)呼出
3. エラー未設定時のみ桁数チェック(2020CHKSIZSOR)呼出
4. エラー未設定時のみ補助コードチェック(2030CHKSUBSOR)呼出
5. エラーフラグ ON → 2200WRTERRSOR / OFF → 2100WRTOKSOR へ振分
#### カナ文字チェック(2010CHKANASOR
1. IF KANA-SEI IS NOT ALPHABETIC-UPPER → エラー(ALPHABETIC-UPPER 予約語)
2. IF KANA-MEI IS NOT ALPHABETIC-UPPER → エラー
3. エラー時は WRK-ERR-CODE に 'K002' を MOVE88-level VALUESは使用なし)
3. エラー時は ERR-CODE に 'K002' を設定
#### 桁数チェック(JIN01KNS-CHK-SIZE
#### 桁数チェック(2020CHKSIZSOR
1. KANA-SEI の20桁超過をチェック(FUNCTION LENGTH
2. 超過時はエラーフラグ ON + エラーコード設定
#### 補助コードチェック(JIN01KNS-CHK-SUB
#### 補助コードチェック(2030CHKSUBSOR
1. SUB-CODE が有効値(VALUES '0001' '0002' '0003' 等)かチェック
2. 範囲外はエラーフラグ ON
#### 正常出力(JIN01KNS-WRITE-OK
#### 正常出力(2100WRTOKSOR
1. JIN01W01 へレコード WRITE
#### エラー出力(JIN01KNS-WRITE-ERR
1. ADD 1 TO WS-ERR-CNT END-ADD
#### エラー出力(2200WRTERRSOR
1. ADD 1 TO CUN-W02OUT END-ADD
2. VALID-ERROR-REC にエラー情報設定
3. JIN01W02 へ WRITE
#### 終了処理(JIN01KNS-CLOSE
1. JIN01R01 / JIN01W01 / JIN01W02 を CLOSE
2. WS-ERR-CNT = 0 → MOVE ZERO TO RETURN-CODE
3. WS-ERR-CNT > 0 → MOVE 4 TO RETURN-CODE
4. GOBACK
#### 終了処理(3000STPSOR
1. 統計表示
2. JIN01R01 / JIN01W01 / JIN01W02 を CLOSE
3. 終了メッセージ OUTPUT4000MSGOUTSOR
#### メッセージ出力(4000MSGOUTSOR
1. CALL SUB02MSG でメッセージ出力
#### エラー処理(9999ABDSOR
1. CALL SUB03ENDABEND
## カバレッジ対象キーワード
| 予約語/記号 | 区分 | 使用箇所 |
|:-----------|:----:|:---------|
| PROGRAM-ID IS INITIAL | 予約語(95) | IDENTIFICATION DIVISION |
| RETURN-CODE | 予約語(145) | JIN01KNS-CLOSE |
| ALPHABETIC-UPPER | 予約語(7) | JIN01KNS-CHK-KANA |
| END-ADD | 予約語(55) | JIN01KNS-CHECK |
| VALUES | 予約語(183) | ERR-CODE 88-levelVALUE→VALUES表記 |
| RETURN-CODE | 予約語(145) | 0000MAJCOLSOR |
| ALPHABETIC-UPPER | 予約語(7) | 2010CHKANASOR |
| END-ADD | 予約語(55) | 2200WRTERRSOR |
| VALUES | 予約語(183) | JIN01KNS では未使用。JIN05UPD の EXEC SQL VALUES 句は SQL コンテキストのため、COBOL 予約語 VALUES のカバー対象外。カバレッジ統計は × |
| PIC N | PICTURE記号 | KANJI-NAME定義 |
| ZZZZ9 | PICTURE記号 | 自プログラムでは使用なし(JIN02SKLのAGG-COUNT-EDITでカバー) |
+58 -52
View File
@@ -80,69 +80,73 @@ 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 |
| 0000MAJCOLSOR | メインコントロール(初期→マスタLOAD→主処理→出力→終了) |
| 1000ITTSOR | 初期処理(開始メッセージ・初期化・運用日付・OPEN) |
| 1100R02INNSOR | 評価基準マスタ(R02)読込・EOF判定 |
| 1200MSTLDASOR | 評価基準マスタ全件LOAD → 内部表構築 |
| 1300R01INNSOR | 評価明細(R01)読込・EOF判定 |
| 2000MAJSOR | 集計主処理(SEARCH判定 → 更新 or エラー) |
| 2100WRTERRSOR | エラーレコードWRITE |
| 2200UPDTTLSOR | 内部表の件数・合計点UPDATE |
| 3000OUTPUSOR | 集計結果出力(降順走査 → 平均点算出 → WRITE |
| 3100WRITEAGSOR | 1エントリWRITE |
| 4000STPSOR | 終了処理(統計表示・CLOSE・終了メッセージ) |
| 6000MSGOUTSOR | メッセージ編集出力SUB呼出 |
| 9999ABDSOR | エラー処理(ABEND |
> 設計書の機能記述(SEARCH-LVL / GET-AVG / DESCEND 等)は、実装では個々の SECTION ではなく親段落(2000MAJSOR / 3000OUTPUSOR)内にインラインで実装されている。
### 処理ロジック
#### 初期処理(JIN02SKL-OPEN
1. JIN02R01 / JIN02R02 / JIN02W01 / JIN02W02 を OPEN
2. WS-TBL-ENTRY を INITIALIZE(内部表初期化)
#### 初期処理(1000ITTSOR
1. 開始メッセージを OUTPUT6000MSGOUTSOR 経由)
2. JIN02R01 / JIN02R02 / JIN02W01 / JIN02W02 を OPEN
3. WS-TBL-MAX-IDX を ZERO で初期化(内部表初期化)
#### マスタ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(不要になったので)
#### マスタLOAD1100R02INNSOR / 1200MSTLDASOR
1. JIN02R02 から SKILL-MST を 1 件読込(1100R02INNSOR
2. 1200MSTLDASOR で内部表 WS-SKILL-TABLE に設定
MST-SKILL-CODE, MST-LEVEL, MST-LEVEL-NAME, TBL-EMP-COUNT=0, TBL-SCORE-SUM=0
3. AT END1100R02INNSOR で WRK-R02EOF='1')→ マスタLOADループ終了
4. JIN02R02 CLOSE は 3000OUTPUSOR で実施
#### 主処理ループ(JIN02SKL-READ-EVAL → JIN02SKL-AGGREGATE → ループ)
1. JIN02R01 から SKILL-EVAL を1件 READ
2. AT END → JIN02SKL-OUTPUT
3. JIN02SKL-AGGREGATE を PERFORM
#### 主処理ループ(1300R01INNSOR → 2000MAJSOR → ループ)
1. JIN02R01 から SKILL-EVAL を 1 件 READ1300R01INNSOR
2. AT END → 3000OUTPUSOR
3. 2000MAJSOR を PERFORM
#### 集計処理(JIN02SKL-AGGREGATE
1. JIN02SKL-SEARCH-LVL を呼出(SEARCH ALL
2. WHEN 該当 → JIN02SKL-UPDATE-TBL を PERFORM
3. WHEN NOT 該当 → JIN02SKL-WRITE-ERR を PERFORM
#### 集計処理(2000MAJSOR
1. SEARCH ALL で該当レベルを特定
2. WHEN 該当 → 2200UPDTTLSOR を PERFORM
3. WHEN NOT 該当 → 2100WRTERRSOR を PERFORM
#### SEARCH ALLJIN02SKL-SEARCH-LVL
#### SEARCH ALL2000MAJSOR 内
1. SEARCH ALL WS-SKILL-TABLE
2. AT END → 直接 PERFORM 2100WRTERRSOR(該当するレベルがない)
3. WHEN TBL-SKILL-CODE(WS-IDX) = SKILL-CODE → 直接 PERFORM 2200UPDTTLSOR
2. AT END → PERFORM 2100WRTERRSOR(該当するレベルがない)
3. WHEN TBL-SKILL-CODE(WS-IDX) = SKILL-CODE → PERFORM 2200UPDTTLSOR
#### 内部表UPDATEJIN02SKL-UPDATE-TBL
#### 内部表UPDATE2200UPDTTLSOR
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
#### 集計結果出力(3000OUTPUSOR
1. 内部表をスキルコード降順(逆走査)で走査(内部表は SKILL-CODE 昇順。WS-TBL-MAX-IDX から -1 ずつ逆走査
2. 各エントリについて:
a. WS-AVG を ZERO で初期化
b. DIVIDE TBL-SCORE-SUM BY TBL-EMP-COUNT GIVING WS-AVG END-DIVIDE
c. SKILL-AGG-REC に編集設定(ZZZZ9 編集文字
d. 3100WRITEAGSOR を PERFORMJIN02W01 へ WRITE
#### 降順走査(JIN02SKL-DESCEND
#### 降順走査(3000OUTPUSOR 内
```
PERFORM VARYING WS-IDX FROM WS-MAX-ENTRY BY -1
UNTIL WS-IDX = 0
PERFORM JIN02SKL-WRITE-AGG
PERFORM 3100WRITEAGSOR
END-PERFORM
```
SUBTRACT 1 FROM WS-IDX END-SUBTRACTEND-SUBTRACT 予約語使用)
#### 平均点算出(JIN02SKL-GET-AVG
#### 平均点算出(3000OUTPUSOR 内
```
DIVIDE TBL-SCORE-SUM(WS-IDX) BY TBL-EMP-COUNT(WS-IDX)
GIVING WS-AVG-TEMP REMAINDER WS-REM
@@ -150,24 +154,26 @@ DIVIDE TBL-SCORE-SUM(WS-IDX) BY TBL-EMP-COUNT(WS-IDX)
```
(DIVIDE 予約語カバレッジ + END-DIVIDE
#### エラー出力(JIN02SKL-WRITE-ERR
#### エラー出力(2100WRTERRSOR
1. VALID-ERROR-REC にエラー情報設定
2. JIN02W02 へ WRITE
#### 終了処理(JIN02SKL-CLOSE
1. JIN02R01 / JIN02W01 / JIN02W02 を CLOSE
2. GOBACK
#### 終了処理(4000STPSOR
1. 統計表示
2. JIN02W01 / JIN02W02 を CLOSEJIN02R01 / JIN02R02 は 3000OUTPUSOR で CLOSE 済み)
3. 終了メッセージ OUTPUT6000MSGOUTSOR
4. GOBACK
## カバレッジ対象キーワード
| 予約語/記号 | 区分 | 使用箇所 |
|:-----------|:----:|:---------|
| USAGE BINARY | 予約語(16) | MST-LEVEL, TBL-EMP-COUNT |
| USAGE BINARY | 予約語(16) | TBL-LEVEL, TBL-EMP-COUNT, TBL-SCORE-SUM(内部表) |
| 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 |
| BY(降順走査) | 予約語(18) | PERFORM VARYING BY -13000OUTPUSOR |
| END-DIVIDE | 予約語(58) | 3000OUTPUSOR |
| END-SUBTRACT | 予約語(66) | 3000OUTPUSOR |
| GREATER | 予約語(87) | IF WS-COUNT IS GREATER THAN ZERO |
| IF GREATER THAN | 予約語(87) | 件数判定 |
| PIC ZZZZ9 | PICTURE記号 | AGG-COUNT-EDIT |
| PIC N | PICTURE記号 | JIN01RECから継承、未使用でもCOPY参照でカバー) |
| PIC N | PICTURE記号 | JIN02SKL では PIC N 未使用。PIC N は JIN01KNS が JIN01REC の KANJI-NAME でカバー) |
+10 -5
View File
@@ -6,7 +6,7 @@
|------|------|
| プログラムID | JIN03RAN(人事→JINji, 03, ランキング→RAN |
| プログラムタイプ | 編集出力(ランキング生成) |
| 機能 | SKILL-AGGJIN02SKL出力のスキル別評価集計結果)を読み込み、平均点降順でランキング出力 |
| 機能 | SKILL-AGGJIN02SKL出力のスキル別評価集計結果)を読み込み、平均点降順でランキング出力(前提:R01はJCL SORTにより平均点降順ソート済み) |
| CALL方式 | メインプログラム(JCLからCALL) |
| DBアクセス | なし |
| 使用サブプログラム | SUB01DAT(日付), SUB02MSG(メッセージ) |
@@ -18,8 +18,8 @@
| COMP-4 | 予約語(25) | `PIC 9(004) COMP-4` バイナリカウンタ + `ADD 1 TO CUN-COMP4` |
| CORR | 予約語(33) | `MOVE CORRESPONDING WS-CORR-SRC TO WS-CORR-DST` |
| DESCENDING | 予約語(45) | `OCCURS 3 TIMES DESCENDING KEY IS WS-THR` 内部表定義 |
| DOWN | 予約語(50) | `SET WRK-IDX DOWN BY 1` |
| UP | 予約語(177) | `SET WRK-RANK-NO UP BY 1`, `SET WRK-OUT-IDX UP BY 1` |
| ADD | 予約語(3) | `ADD 1 TO WRK-RANK-NO`, `ADD 1 TO WRK-OUT-IDX`2000MAINSOR |
| SUBTRACT | 予約語(164) | `SUBTRACT 1 FROM WRK-IDX`4000STPSOR |
| VALUES | 予約語(183) | 88-level 単一VALUE(複数VALUESは未カバー) |
## ファイル一覧
@@ -29,6 +29,11 @@
| JIN03R01 | SKILL-AGG | SEQUENTIAL | FB | 200 | INPUT | スキル別評価集計結果(JIN02SKL出力) |
| JIN03W01 | RANK-OUT | SEQUENTIAL | FB | 200 | OUTPUT | ランキング出力 |
## 前提条件
- JIN03R01SKILL-AGG)は、JCL の SORT ステップにより**平均点降順**にソート済みであること
- 本プログラムはソートを行わず、入力順にランク番号(WRK-RANK-NO)を採番する
## レコード定義
### SKILL-AGG-RECJIN03R01, 200B
@@ -68,7 +73,7 @@ JIN02SKL 詳細設計書の W01 定義と同じ(SKILL-AGG-REC.cpy 参照)。
- R01 初回 READ
2. **2000MAINSOR(主処理ループ)**
- WRK-RANK-NO を SET UP BY 1 で順位UP
- WRK-RANK-NO を ADD 1 で順位UP
- COMP-4 カウンタ ADD 1
- MOVE CORRESPONDING で項目編集
- 平均点に基づきランク区分設定(S: >= 900, A: >= 600, B: < 600
@@ -78,5 +83,5 @@ JIN02SKL 詳細設計書の W01 定義と同じ(SKILL-AGG-REC.cpy 参照)。
3. **4000STPSOR(終了処理)**
- R01 / W01 CLOSE
- SET WRK-IDX DOWN BY 1
- SUBTRACT 1 FROM WRK-IDX
- DISPLAY 'JIN03RAN END' UPON CONSOLE
+157
View File
@@ -0,0 +1,157 @@
# JIN04PRT 詳細設計書
## プログラム概要
| 項目 | 内容 |
|------|------|
| プログラムID | JIN04PRT(人事→JINji, 04, 社員台帳印刷→PRT |
| プログラムタイプ | 04(レイアウト編集のみ。LINAGE印刷制御) |
| 機能 | EMP-VALID(チェック済社員データ)を読込み、社員台帳(JIN-LEDGER)形式で印刷出力する |
| CALL方式 | メインプログラム(JCLからCALL) |
| DBアクセス | なし |
| 使用サブプログラム | SUB01DAT(日付), SUB02MSG(メッセージ), SUB03END(アベンド) |
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | EMP-VALID | JCL の SORTSTEP010)で社員番号昇順に並替済であること |
### 使用ファイル一覧
| NO | 使用ファイル名 | 識別子 | DD名 | I/O | COPY群 | 形式 | レコード長 | 媒体 | 備考 |
|----|--------------|--------|------|-----|--------|------|-----------|------|------|
| 1 | EMP-VALID | R01 | JIN04R01 | I | JIN01REC | FB | 200 | PS | チェック済社員データ |
| 2 | JIN-LEDGER | W01 | JIN04W01 | O | JIN04RPT-REC | | 132 | PS | 社員台帳印刷(LINAGE 66行) |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|----|-----------|---------------------|-------------------------------------|
| 1 | EMP-VALID | JIN04R01: EMP-ID 升順 | なし(順次印刷) |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | 運用日付取得SUB | SUB01DAT | JINDATAC |
| 2 | メッセージ編集出力SUB | SUB02MSG | JINMSGAC |
| 3 | ABEND処理SUB | SUB03END | JINENDAC |
---
## 処理詳細
### 段落一覧(実装コードの SOR 規約名に対応)
| 段落名 | 機能 |
|:-------|:-----|
| 0000MAJCOLSOR | メインコントロール(初期→読込→印刷ループ→終了) |
| 1000ITTSOR | 初期処理(開始表示・初期化・日付/時刻取得・OPEN・ヘッダー) |
| 2000MAINSOR | 主処理(明細行編集→WRITE) |
| 2100READSOR | R01読込・EOF判定 |
| 3000HEADER | ページヘッダー出力(改ページ+頁番号) |
| 4000STPSOR | 終了処理(CLOSE・終了表示・終了メッセージ) |
| 9000ERRSOR | エラー処理(STOP literal 予約語カバー。通常フローでは呼ばれない) |
### 処理フロー
```
1. 0000MAJCOLSOR(メインコントロール)
1-1. PERFORM 1000ITTSOR(初期処理)
1-2. PERFORM 2000MAINSOR UNTIL WRK-R01EOF-Y(読込→印刷ループ)
1-3. PERFORM 4000STPSOR(終了処理)
1-4. GOBACK
2. 1000ITTSOR(初期処理)
2-1. DISPLAY 'JIN04PRT START' UPON CONSOLE
2-2. M00MHOPAR 初期化 → M00MSGCOD=001 → CALL SUB02MSG(開始)
2-3. INITIALIZE WRKARA / CUNARA
2-4. ACCEPT WRK-DATE FROM DATE(システム日付)
2-5. STRING で WRK-DISP-DATEYYYY/MM/DD)編集
2-6. ACCEPT WRK-TIME FROM TIME(システム時刻)
2-7. STRING で WRK-DISP-TIMEHH:MM:SS)編集
2-8. CALL SUB01DAT(運用日付)
2-9. OPEN INPUT (INNFIL) OUTPUT (W01OUTFIL)
2-10. PERFORM 3000HEADER(ヘッダー出力)
2-11. PERFORM 2100READSOR(初回読込)
3. 2000MAINSOR(主処理)
3-1. INITIALIZE W01OUTREC
3-2. STRING R01EMP-ID/…/…/… INTO W01OUTREC
3-3. WRITE W01OUTREC AFTER ADVANCING 1 LINE
AT END-OF-PAGE → PERFORM 3000HEADER
3-4. ADD 1 TO CUN-W01OUT / CUN-R01INN
3-5. PERFORM 2100READSOR(次読込)
4. 2100READSOR(読込)
READ R01INNFIL AT END → WRK-R01EOF='1'
NOT AT END → CONTINUE
5. 3000HEADER(ページヘッダー)
5-1. ADD 1 TO WRK-PAGE-NO
5-2. MOVE SPACES → WRITE 改ページ(AFTER ADVANCING PAGE
5-3. タイトル行 STRING → WRITE AFTER ADVANCING 1 LINE
5-4. 日付・時刻・ページ行 STRING → WRITE AFTER ADVANCING 2 LINES
6. 4000STPSOR(終了処理)
6-1. DISPLAY 'JIN04PRT END' UPON CONSOLE
6-2. DISPLAY TOTAL RECORDS(件数)WITH NO ADVANCING
6-3. CLOSE R01INNFIL
6-4. CLOSE W01OUTFIL WITH LOCK
6-5. CALL SUB02MSG(終了 002
6-6. CALL SUB03END(正常終了)
7. 9000ERRSOR(エラー処理)
DISPLAY 'ABEND' → STOP 'JIN04PRT ABNORMAL END'
```
### I-O-CONTROL / 印刷制御
```
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT R01INNFIL ASSIGN TO EXTERNAL JIN04R01.
SELECT W01OUTFIL ASSIGN TO EXTERNAL JIN04W01.
FD W01OUTFIL LINAGE IS 66 LINES
FOOTING AT 60 TOP 2 BOTTOM 4.
```
> LINAGE 句でページ制御(66行・本文60行・論理頁上下餘白)。WRITE AFTER ADVANCING PAGE で改ページ、AT END-OF-PAGE でヘッダー再出力。
### カバレッジ対象キーワード
| 予約語/記号 | 区分 | 使用箇所 |
|:-----------|:----:|:---------|
| ACCEPT FROM DATE | 予約語 | 1000ITTSOR: ACCEPT WRK-DATE FROM DATE |
| ACCEPT FROM TIME | 予約語 | 1000ITTSOR: ACCEPT WRK-TIME FROM TIME |
| LINAGEPAGE | 予約語 | FD W01OUTFIL LINAGE IS 66 LINES |
| AT END-OF-PAGE | 予約語 | 2000MAINSOR: WRITE AT END-OF-PAGE |
| STRING ... ON OVERFLOW | 予約語 | 各種STRINGで ON OVERFLOW 使用 |
| DISPLAY UPON / WITH NO ADVANCING | 予約語 | 1000/4000: UPON CONSOLE、4000: WITH NO ADVANCING |
| CLOSE WITH LOCK | 予約語 | 4000STPSOR: CLOSE W01OUTFIL WITH LOCK |
| STOP literal | 予約語 | 9000ERRSOR: STOP '…ABNORMAL END' |
---
## 出力レコード定義
### 出力ファイル1W01/JIN-LEDGER)— JIN04RPT-REC 132B
| No | 項目名 | 設定元 | PIC | 備考 |
|----|--------|--------|:---:|------|
| 1 | W01RPT-EMP-ID | R01EMP-ID | X(8) | 社員ID |
| 2 | W01RPT-KANA-SEI | R01KANA-SEI | X(20) | 半角カナ姓 |
| 3 | W01RPT-KANA-MEI | R01KANA-MEI | X(20) | 半角カナ名 |
| 4 | W01RPT-KANJI-NAME | R01KANJI-NAME | X(40) | 漢字氏名 |
| 5 | W01RPT-DEPT-CD | SPACES(未設定) | X(4) | 部門コード(STRING対象外) |
| 6 | W01RPT-ENTRY-DATE | SPACES(未設定) | X(8) | 入社日(STRING対象外) |
| 7 | FILLER | SPACES | X(32) | |
> レコード長 132B(実規格)。設計書他行の記載値 133B は誤記 → 132B に統一。
### COPY 参照書式の確認
- R01: JIN01REC200B)を REPLACING (A)→R01 で定義
- W01: JIN04RPT-REC132B)を REPLACING (A)→W01 で定義
+190
View File
@@ -0,0 +1,190 @@
# JIN05UPD 詳細設計書
## プログラム概要
| 項目 | 内容 |
|------|------|
| プログラムID | JIN05UPD(人事→JINji, 05, 人事異動DB更新→UPD |
| プログラムタイプ | 09(DB更新) |
| 機能 | HR-TRANS(人事異動トランザクション)を読込み、DB2 EMPLOYEEテーブルをINSERT/UPDATEする |
| CALL方式 | メインプログラム(JCLからCALL) |
| DBアクセス | DB2 EMPLOYEECONNECT / INSERT / UPDATE |
| 使用サブプログラム | SUB01DAT(日付), SUB02MSG(メッセージ), SUB03END(アベンド) |
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | HR-TRANS | JCL の SORT で社員番号昇順に並替済であること |
### 使用ファイル一覧
| NO | 使用ファイル名 | 識別子 | DD名 | I/O | COPY群 | 形式 | レコード長 | 媒体 | 備考 |
|----|--------------|--------|------|-----|--------|------|-----------|------|------|
| 1 | HR-TRANS | R01 | JIN05R01 | I | JIN05REC | FB | 200 | PS | 人事異動トランザクション |
| 2 | VALID-ERROR | W01 | JIN05W01 | O | (内約80B | FB | 80 | PS | エラー退避 |
> 補足:VALID-ERROR レコードは COPY を使用せず WORKING-STORAGE/W01OUTREC に内約定義(PROGRAMID 8B + EMP-ID 8B + CODE 4B + DETAIL 60B = 80B)。ID 設計上 COPY VALID-ERROR-REC を使用していない。将来は COPY 化推奨。
### DB 使用一覧
| NO | テーブル | I/O | 内容 |
|----|---------|:---:|------|
| 1 | EMPLOYEE | I/U | 人事異動の新規登録(INSERT/ 更新(UPDATE |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | 運用日付取得SUB | SUB01DAT | JINDATAC |
| 2 | メッセージ編集出力SUB | SUB02MSG | JINMSGAC |
| 3 | ABEND処理SUB | SUB03END | JINENDAC |
---
## 処理詳細
### 段落一覧(SOR規約名)
| 段落名 | 機能 |
|:-------|:-----|
| 0000MAJCOLSOR | メインコントロール(初期→読込→DB更新ループ→終了) |
| 1000ITTSOR | 初期処理(開始表示・初期化・運用日付・CONNECT・OPEN・初回読込) |
| 2000MAINSOR | 主処理(ホスト変数転記→種別判定→対応処理) |
| 2100READSOR | R01読込・EOF判定 |
| 3100INSERTSOR | INSERT処理(新規社員追加) |
| 3200UPDATESOR | UPDATE処理(既存社員更新) |
| 3300ERRSOR | 不明トランザクション→VALID-ERROR出力 |
| 3400DBERRSOR | DBエラー(SQLCODE≠0)→VALID-ERROR出力 |
| 4000STPSOR | 終了処理(統計表示・CLOSE・終了メッセージ) |
| 9000ERRSOR | エラー処理(ABEND |
### 処理フロー
```
1. 0000MAJCOLSOR
1-1. PERFORM 1000ITTSOR(初期処理)
1-2. PERFORM 2000MAINSOR
UNTIL WRK-R01EOF-Y OR WRK-COUNT >= CNS-MAX-TRANS
PERFORM UNTIL ... OR ... カバー。上限500件ガード)
1-3. PERFORM 4000STPSOR
1-4. GOBACK
2. 1000ITTSOR(初期処理)
2-1. DISPLAY 'JIN05UPD START' UPON CONSOLE
2-2. M00MHOPAR 初期化 → CALL SUB02MSG(開始 001
2-3. INITIALIZE WRKARA REPLACING NUMERIC BY ZEROS ALPHANUMERIC BY SPACES
2-4. INITIALIZE CUNARA
2-5. CALL SUB01DAT ... ON EXCEPTION → PERFORM 9000ERRSORCALL ON EXCEPTION カバー)
2-6. EXEC SQL CONNECTDB接続)
2-7. OPEN INPUT R01INNFIL OUTPUT W01OUTFIL
2-8. PERFORM 2100READSOR(初回読込)
3. 2000MAINSOR(主処理)
3-1. ADD 1 TO WRK-COUNT(処理件数増)
3-2. R01TRAN-* → HV-* へホスト変数転記
3-3. MOVE R01TRAN-TYPE TO WRK-TRAN-TYPE
3-4. EVALUATE TRUE
WHEN WRK-TRAN-INSERT → PERFORM 3100INSERTSOR
WHEN WRK-TRAN-UPDATE → PERFORM 3200UPDATESOR
WHEN WRK-TRAN-DELETE → PERFORM 3300ERRSOR(削除未実装)
WHEN OTHER → PERFORM 3300ERRSOR
3-5. PERFORM 2100READSOR
4. 2100READSOR(読込)
READ R01INNFIL AT END → WRK-R01EOF='1'
NOT AT END → ADD 1 TO CUN-R01INN
5. 3100INSERTSORINSERT
EXEC SQL INSERT INTO EMPLOYEE:HV-* 9カラム)
IF SQLCODE NOT = 0 → 3400DBERRSOR
ELSE → ADD 1 TO CUN-DBINS
6. 3200UPDATESORUPDATE
STRING 'UPDATING: ' HV-EMP-ID INTO WS-SQL-STR ON OVERFLOW
DISPLAY WS-SQL-STR UPON CONSOLE WITH NO ADVANCING
EXEC SQL UPDATE EMPLOYEE SET:HV-* 8-カラム→9列)
WHERE EMP_ID = :HV-EMP-ID
IF SQLCODE NOT = 0 → 3400DBERRSOR
ELSE → ADD 1 TO CUN-DBUPD
7. 3300ERRSOR(不明種別)
W01ERR-PROGRAMID=PGMID / W01ERR-EMP-ID=HV-EMP-ID / W01ERR-CODE='0001'
STRING `INVALID TRAN-TYPE:` ... INTO W01ERR-DETAIL → WRITE
ADD 1 TO CUN-W01OUT
8. 3400DBERRSORDBエラー)
MOVE SQLCODE → WS-SQLCODE-DISP
STRING `DB ERROR SQLCODE=` ... INTO W01ERR-DETAIL
W01ERR-CODE='0002' → WRITE
CALL SUB02MSG USING BY CONTENT
9. 4000STPSOR(終了)
DISPLAY READ/INSERT/UPDATE/ERROR 件数 UPON CONSOLE
CLOSE R01INNFIL
CLOSE W01OUTFIL WITH LOCK
CALL SUB02MSG(終了 002
CALL SUB03END(正常終了)
10. 9000ERRSORABEND
DISPLAY 'JIN05UPD ABEND' UPON CONSOLE
CALL SUB03ENDE01ABDCOD
```
### トランザクション種別(88-level)
| 88条件名 | VALUE | 対応処理 |
|:---------|:------|:---------|
| WRK-TRAN-INSERT | 'A' 'B' 'C' | 3100INSERTSOR |
| WRK-TRAN-UPDATE | 'D' THRU 'G' | 3200UPDATESOR |
| WRK-TRAN-DELETE | 'Z' | 3300ERRSOR(削除未実装) |
| WHEN OTHER | 上記以外 | 3300ERRSOR |
> 88-level の複数VALUE'A' 'B' 'C')と VALUE THRU'D' THRU 'G')をカバー。
### カバレッジ対象キーワード
| 予約語/記号 | 使用箇所 |
|:-----------|:---------|
| PERFORM UNTIL ... OR ... | 0000MAJCOLSOR: ループ上限 |
| INITIALIZE ... REPLACING | 1000ITTSOR: REPLACING NUMERIC / ALPHANUMERIC |
| CALL ... ON EXCEPTION | 1000ITTSOR: SUB01DAT(異常時9000 |
| EXEC SQL CONNECT / INSERT / UPDATE | DB操作 |
| 88-level 複数VALUE + VALUE THRU | 種別判定 |
| EVALUATE TRUE | 2000MAINSOR: WHEN分岐 |
| STRING ... ON OVERFLOW | 3200/3300/3400 |
| DISPLAY ... UPON CONSOLE WITH NO ADVANCING | 自編集 |
| CALL ... BY CONTENT | 3400DBERRSOR |
---
## 出力レコード定義
### 出力ファイル1W01/VALID-ERROR)— COPY VALID-ERROR-REC 80B
| No | 項目名 | 設定元 | PIC | 備考 |
|----|--------|--------|:---:|------|
| 1 | ERR-PROGRAMID | CNS-PRGIDX | X(8) | 'JIN05UPD' |
| 2 | ERR-EMP-ID | HV-EMP-ID | X(8) | 社員ID |
| 3 | ERR-CODE | '0001'/'0002' | X(4) | エラー種別 |
| 4 | ERR-DETAIL | STRING編集 | X(60) | 詳細メッセージ |
> ER-CODE: 0001=不明種別、0002=DBエラー。
### 入力レコード(R01/HR-TRANS)— JIN05REC 200B
| No | 項目名 | PIC | 備考 |
|----|--------|:---:|------|
| 1 | TRAN-TYPE | X(1) | A/B/C=Insert, D-G=Update |
| 2 | TRAN-EMP-ID | X(8) | |
| 3 | TRAN-KANA-SEI | X(20) | |
| 4 | TRAN-KANA-MEI | X(20) | |
| 5 | TRAN-KANJI-NAME | X(40) | |
| 6 | TRAN-SUB-CODE | X(4) | |
| 7 | TRAN-BIRTH-DATE | X(8) | |
| 8 | TRAN-DEPT-CODE | X(4) | |
| 9 | TRAN-ENTRY-DATE | X(8) | |
| 10 | TRAN-STATUS | X(1) | |
| 11 | FILLER | X(86) | |
> COPY JIN05REC200B)を REPLACING (A)→R01 で定義。
+139
View File
@@ -0,0 +1,139 @@
# JIN06SRT 詳細設計書
## プログラム概要
| 項目 | 内容 |
|------|------|
| プログラムID | JIN06SRT(人事→JINji, 06, 社員データ並替→SRT |
| プログラムタイプ | 34(SORT) |
| 機能 | EMP-VALID200B)を INPUT PROCEDURE で読込み、EMP-ID 昇順に SORT し、OUTPUT PROCEDURE で RETURN して SORTED-EMP へ書出す |
| CALL方式 | メインプログラム(JCLからCALL) |
| DBアクセス | なし |
| 使用サブプログラム | SUB01DAT(日付), SUB02MSG(メッセージ), SUB03END(アベンド) |
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | EMP-VALID | JIN01KNS でチェック済のデータであること |
| 2 | EMP-VALID | 並替は COBOL の SORT 文で実施(本プログラム内) |
> キーワードカバー目的で、並替は COBOL の `SORT` 文(INPUT/OUTPUT PROCEDURE)を明示使用する。本番では JCL の SORTWK* でソートワーク領域を確保する。
### 使用ファイル一覧
| NO | 使用ファイル名 | 識別子 | DD名 | I/O | COPY群 | 形式 | レコード長 | 媒体 | 備考 |
|----|--------------|--------|------|-----|--------|------|-----------|------|------|
| 1 | EMP-VALID | R01 | JIN06R01 | I | JIN01REC | FB | 200 | PS | チェック済社員データ |
| 2 | SORTED-EMP | W01 | JIN06W01 | O | JIN01REC | FB | 200 | PS | 並替済社員データ |
| 3 | VALID-ERROR | W02 | JIN06W02 | O | VALID-ERROR-REC | FB | 80 | PS | 上限超過エラー |
| 4 | SORTWORK | SD | SORTWK01 | — | JIN01REC | FB | 200 | ワーク | SORTファイル |
### キー項目一覧
| NO | ファイル名 | ソート条件(キー項目) | キー条件 |
|----|-----------|---------------------|----------|
| 1 | SORTWORK | EMP-ID 昇順 | ON ASCENDING KEY |
### 使用モジュール一覧
| NO | 機能 | プログラムID | 使用COPY名 |
|----|------|-------------|-----------|
| 1 | 運用日付取得SUB | SUB01DAT | JINDATAC |
| 2 | メッセージ編集出力SUB | SUB02MSG | JINMSGAC |
| 3 | ABEND処理SUB | SUB03END | JINENDAC |
---
## 処理詳細
### 段落一覧(SOR規約名)
| 段落名 | 機能 |
|:-------|:-----|
| 0000MAJCOLSOR | メインコントロール(初期→SORT→終了) |
| 1000ITTSOR | 初期処理(開始MSG・初期化・運用日付・出力OPEN) |
| 2000MAJSOR | SORT実行(ON ASCENDING KEY + INPUT/OUTPUT PROCEDURE + 復帰コード判定) |
| 2110INPUTSOR | INPUT PROCEDUREEOF 到達まで読込ループ + R01読込→RELEASE |
| 2110READSOR | 1件読込→SORTレコード転記→RELEASE / 上限超過はVALID-ERROR |
| 2120OUTPUSOR | OUTPUT PROCEDURERETURN→SORTED-EMP書出) |
| 3000STPSOR | 終了処理(統計表示・CLOSE・終了MSG) |
| 4000MSGOUTSOR | メッセージ編集出力SUB呼出 |
| 9000ERRSOR | エラー処理(ABEND |
### 処理フロー
```
1. 0000MAJCOLSOR
1-1. PERFORM 1000ITTSOR(初期処理)
1-2. PERFORM 2000MAJSORSORT処理)
1-3. PERFORM 3000STPSOR(終了処理)
1-4. GOBACK
2. 1000ITTSOR(初期処理)
2-1. DISPLAY 'JIN06SRT START' UPON CONSOLE
2-2. SUB02MSG で開始メッセージ(001)出力
2-3. INITIALIZE WRKARA, CUNARA
2-4. CALL SUB01DAT(運用日付取得)。異常時は 4000MSGOUTSOR9000ERRSOR
2-5. OPEN OUTPUT W01OUTFIL, W02OUTFIL
3. 2000MAJSORSORT実行)
3-1. SORT SORTWORK
ON ASCENDING KEY SREMP-ID
INPUT PROCEDURE 2110INPUTSOR
OUTPUT PROCEDURE 2120OUTPUSOR
3-2. MOVE RETURN-CODE TO WRK-SORT-STAT
3-3. WRK-SORT-STAT ≠ 0 → 4000MSGOUTSOR + CALL SUB03ENDABEND
4. 2110INPUTSORINPUT PROCEDURE
4-1. OPEN INPUT R01INNFIL
4-2. PERFORM UNTIL WRK-R01EOF-YEOF 到達まで 2110READSOR を繰返す)
※READ は EOF まで行い、上限超過(WRK-SORT-CNT > 999)分を VALID-ERROR へ出力する
4-3. CLOSE R01INNFIL
5. 2110READSOR(読込・RELEASE
5-1. WRK-R01EOF-Y なら EXIT SECTION(上限到達後の空処理)
5-2. READ R01INNFIL
AT END → WRK-R01EOF='1'
NOT AT END → CUN-R01INN +1、WRK-SORT-CNT +1
R01→SR へ全項目転記
WRK-SORT-CNT <= 999 → RELEASE SORTREC、CUN-SORT-IN +1
WRK-SORT-CNT > 999 → VALID-ERROR9999WRITE、CUN-W02OUT +1
6. 2120OUTPUSOROUTPUT PROCEDURE
6-1. PERFORM UNTIL 1=2
RETURN SORTWORK RECORD
AT END → EXIT PERFORM
NOT AT END → SR→W01 へ転記 → WRITE W01OUTREC、CUN-W01OUT +1
END-RETURN
7. 3000STPSOR(終了処理)
7-1. DISPLAY READ/SORT/OUT/ERROR 件数 UPON CONSOLE
7-2. CLOSE W01OUTFIL, W02OUTFIL
7-3. SUB02MSG で終了メッセージ(002)出力
8. 9000ERRSOR(エラー処理)
8-1. CALL SUB03ENDABEND
```
### 上限超過時のエラー出力(W02/VALID-ERROR
| 項目名 | 設定値 | PIC | 備考 |
|--------|--------|:---:|------|
| ERR-PROGRAMID | CNS-PRGIDX | X(8) | 'JIN06SRT' |
| ERR-EMP-ID | SREMP-ID | X(8) | 超過レコードの社員番号 |
| ERR-CODE | '9999' | X(4) | 上限超過 |
| ERR-DETAIL | 'SORT LIMIT OVER' | X(60) | |
---
## カバレッジ対象キーワード
| 予約語/記号 | 区分 | 使用箇所 |
|:-----------|:----:|:---------|
| SORT | 予約語 | 2000MAJSOR: SORT ファイル ON ASCENDING KEY + INPUT/OUTPUT PROCEDURE |
| RELEASE | 予約語 | 2110READSOR: INPUT PROCEDURE 内で RELEASE 送出 |
| RETURN | 予約語 | 2120OUTPUSOR: RETURN SORTWORK RECORD / END-RETURN |
| PERFORM UNTIL | 予約語 | 2110INPUTSOR: EOF 到達まで 2110READSOR を繰返す |
| SDSort Description | 予約語 | FILE SECTION: SD SORTWORK |
| SAME SORT AREA | 予約語 | ENVIRONMENT DIVISION: SAME SORT AREA 句(SHA08SRT と同様) |
+118
View File
@@ -0,0 +1,118 @@
# JIN07SUB 詳細設計書
## プログラム概要
| 項目 | 内容 |
|------|------|
| プログラムID | JIN07SUB(人事→JINji, 07, 社員情報取得→SUB |
| プログラムタイプ | サブプログラム(CALL される側) |
| PGMパターン | 25(サブPGM |
| 機能 | 指定 EMP-ID に一致する EMP-VALID レコードの項目を返却する |
| 終了方式 | EXIT PROGRAMGOBACK 不使用。キーワードカバー目的で基本設計書の承認に基づき例外的に採用) |
| DBアクセス | なし |
| 使用ファイル | JIN07R01EMP-VALID, 200B, JIN01REC |
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | EMP-VALID | JIN01KNS でチェック済のデータであること |
| 2 | EMP-VALID | 社員番号で 1 件ヒットすることを前提とする(複数ヒット時は先頭一致レコードを返却) |
### 使用ファイル一覧
| NO | 使用ファイル名 | 識別子 | DD名 | I/O | COPY群 | 形式 | レコード長 | 媒体 | 備考 |
|----|--------------|--------|------|-----|--------|------|-----------|------|------|
| 1 | EMP-VALID | R01 | JIN07R01 | I | JIN01REC | FB | 200 | PS | 社員情報検索対象 |
### キー項目一覧
| NO | ファイル名 | マッチングキー | キー条件 |
|----|-----------|--------------|----------|
| 1 | EMP-VALID | EMP-ID | 指定 EMP-ID と完全一致 |
---
## 入出力パラメータ(LINKAGE SECTION 個別引数)
> OMITTED 引数対応のため、各引数を独立した 01 レベルで定義する(連絡領域 COPY は単一 01 のため OMITTED 引数を表現できない。個別引数方式を採用)。
| NO | 入出力 | 引数名 | PIC | 説明 |
|----|--------|--------|-----|------|
| 1 | I | LK-EMP-ID | X(8) | 検索条件(社員番号) |
| 2 | O | LK-KANA-SEI | X(20) | 一致レコード返却値 |
| 3 | O | LK-KANA-MEI | X(20) | 一致レコード返却値 |
| 4 | O | LK-KANJI-NAME | N(40) | 一致レコード返却値。CALL 時に OMITTED 指定可能 |
| 5 | O | LK-SUB-CODE | X(4) | 一致レコード返却値 |
| 6 | O | LK-BIRTH-DATE | X(8) | 一致レコード返却値 |
| 7 | O | LK-EMP-ID-OUT | X(8) | 一致レコード返却値(社員番号) |
| 8 | O | LK-FILLER | X(60) | 一致レコード返却値 |
| 9 | O | LK-RESULT | X(2) | 検索結果('OK'=一致 / 'NG'=不一致) |
### 呼出し例(JIN08TST
```
CALL 'JIN07SUB' USING LK-EMP-ID, LK-KANA-SEI, LK-KANA-MEI, LK-KANJI-NAME,
LK-SUB-CODE, LK-BIRTH-DATE, LK-EMP-ID-OUT, LK-FILLER,
LK-RESULT
CALL 'JIN07SUB' USING LK-EMP-ID, LK-KANA-SEI, LK-KANA-MEI, OMITTED,
LK-SUB-CODE, LK-BIRTH-DATE, LK-EMP-ID-OUT, LK-FILLER,
LK-RESULT
```
### リターンコード一覧(LK-RESULT)
| NO | コード | 説明 |
|----|--------|------|
| 1 | 'OK' | 一致レコードを検索し、返却値へ設定した |
| 2 | 'NG' | 一致レコードなし(返却値は初期状態のまま) |
---
## 処理詳細
### 段落一覧(SOR規約名)
| 段落名 | 機能 |
|:-------|:-----|
| 0000MAINSOR | 制御処理(ADDRESS OF 取得 → OPEN → 検索 → CLOSE → EXIT PROGRAM |
| 1000FNDSOR | EMP-VALID 順次検索(一致レコード項目返却 / IS OMITTED 判定) |
### 処理フロー
```
1. 0000MAINSOR(制御処理)
1-1. MOVE ADDRESS OF LK-EMP-ID TO WS-PTRADDRESS OF 予約語カバー)
1-2. OPEN INPUT JIN07R01
1-3. PERFORM 1000FNDSOR(社員検索)
1-4. CLOSE JIN07R01
1-5. EXIT PROGRAMGOBACK 不使用)
2. 1000FNDSOR(社員検索)
2-1. PERFORM UNTIL LK-RESULT = 'OK' OR WRK-R01EOF-Y
2-2. READ JIN07R01
AT END → WRK-R01EOF='1''NG' のまま終了)
NOT AT END → IF R01EMP-ID = LK-EMP-ID
・LK-KANA-SEI / LK-KANA-MEI / LK-SUB-CODE / LK-BIRTH-DATE /
LK-EMP-ID-OUT / LK-FILLER へ転記
・IF LK-KANJI-NAME NOT OMITTED → LK-KANJI-NAME へ転記
IS OMITTED 判定。OMITTED 時は返却スキップ)
・LK-RESULT = 'OK'PERFORM UNTIL 条件成立により次ループで検索終了)
END-IF
```
---
## カバレッジ対象キーワード
| 予約語/記号 | 区分 | 使用箇所 |
|:-----------|:----:|:---------|
| EXIT PROGRAM | 予約語 | 0000MAINSOR: サブプログラム終了(GOBACK 不使用) |
| ADDRESS OF | 予約語 | 0000MAINSOR: MOVE ADDRESS OF LK-EMP-ID TO WS-PTR |
| OMITTED | 予約語 | 1000FNDSOR: IF LK-KANJI-NAME OMITTED 判定(呼出側は CALL USING ... OMITTED |
## 補足
- AGENTS.md 規約は「サブプログラムは GOBACK」だが、基本設計書の承認により JIN07SUB はキーワードカバー目的で EXIT PROGRAM を使用する。
- EMP-VALID は 200B 固定長(JIN01REC)。R01 レコード 01 レベルは JIN01REC REPLACING (A)→R01。
- 検索は順次 READ のみ(インデックスなし)。全件走査し一致レコードを返す。
+104
View File
@@ -0,0 +1,104 @@
# JIN08TST 詳細設計書
## プログラム概要
| 項目 | 内容 |
|------|------|
| プログラムID | JIN08TST(人事→JINji, 08, JIN07SUB呼出テスト→TST |
| プログラムタイプ | メインプログラム(テストドライバ) |
| PGMパターン | 05(振り分け IF) |
| 機能 | JIN07SUB を 2 回 CALL(全引数 / KANJI-NAME OMITTED)して、一致レコード取得と OMITTED 引数動作を確認するテスト専用プログラム |
| CALL方式 | メインプログラム(JCLからCALL。ただしテスト専用のため本番 JCL は不要) |
| DBアクセス | なし |
| 使用サブプログラム | JIN07SUB, SUB01DAT, SUB02MSG, SUB03END |
### 前提条件
| NO | 対象ファイル | 条件 |
|----|-------------|------|
| 1 | EMP-VALID | JIN07SUB が検索対象とするデータ。JIN08TST 実行時の環境変数 JIN07R01 で割当てる |
### 使用ファイル一覧
| NO | 使用ファイル名 | 識別子 | DD名 | I/O | COPY群 | 形式 | レコード長 | 媒体 | 備考 |
|----|--------------|--------|------|-----|--------|------|-----------|------|------|
| — | — | — | — | — | — | — | — | — | ファイル入出力なし(JIN07SUB が JIN07R01 を読込む) |
### 使用COPY句
| COPY句 | 用途 | 使用箇所 |
|--------|------|---------|
| JINDATAC | SUB01DAT 運用日付連絡領域 | WORKING-STORAGE |
| JINMSGAC | SUB02MSG メッセージ連絡領域 | WORKING-STORAGE |
| JINENDAC | SUB03END ABEND連絡領域 | WORKING-STORAGE |
---
## 処理詳細
### 段落一覧(SOR規約名)
| 段落名 | 機能 |
|:-------|:-----|
| 0000MAINTST | メインコントロール(初期→テストCALL→終了) |
| 1000ITTTST | 初期処理(開始MSG・初期化・運用日付取得) |
| 2000CALTST | JIN07SUB を 2 回 CALL(全引数 / KANJI-NAME OMITTED)して結果を DISPLAY |
| 3000STPTST | 終了処理(終了MSG |
| 4000MSGOUTTST | SUB02MSG 呼出 |
| 9000ERRTST | エラー処理(ABEND |
### 処理フロー
```
1. 0000MAINTST(メインコントロール)
1-1. PERFORM 1000ITTTST(初期処理)
1-2. PERFORM 2000CALTST(テストCALL
1-3. PERFORM 3000STPTST(終了処理)
1-4. GOBACK
2. 1000ITTTST(初期処理)
2-1. DISPLAY 'JIN08TST START' UPON CONSOLE
2-2. SUB02MSG で開始メッセージ(001)出力
2-3. INITIALIZE ワークエリア
2-4. CALL SUB01DAT(運用日付取得)。異常時は 4000MSGOUTTST9000ERRTST
3. 2000CALTST(テストCALL
3-1. 検索条件(WRK-TST-EMP-ID)に 'EMP00001' を設定
3-2. CALL 1: JIN07SUB 全引数
CALL 'JIN07SUB' USING WRK-TST-EMP-ID, WRK-TST-KANA-SEI, WRK-TST-KANA-MEI,
WRK-TST-KANJI-NAME, WRK-TST-SUB-CODE,
WRK-TST-BIRTH-DATE, WRK-TST-EMP-ID-OUT,
WRK-TST-FILLER, WRK-TST-RESULT
3-3. WRK-TST-RESULT 判定
IF = 'OK' → DISPLAY 'CALL1 OK: EMP=' WRK-TST-EMP-ID-OUT
' SUB=' WRK-TST-SUB-CODE
ELSE → DISPLAY 'CALL1 NG: RESULT=' WRK-TST-RESULT
3-4. CALL 2: JIN07SUB KANJI-NAME OMITTED
CALL 'JIN07SUB' USING WRK-TST-EMP-ID, WRK-TST-KANA-SEI, WRK-TST-KANA-MEI,
OMITTED, WRK-TST-SUB-CODE, WRK-TST-BIRTH-DATE,
WRK-TST-EMP-ID-OUT, WRK-TST-FILLER, WRK-TST-RESULT
3-5. WRK-TST-RESULT 判定
IF = 'OK' → DISPLAY 'CALL2 OK: EMP=' WRK-TST-EMP-ID-OUT
' KANA-SEI=' WRK-TST-KANA-SEI
ELSE → DISPLAY 'CALL2 NG: RESULT=' WRK-TST-RESULT
4. 3000STPTST(終了処理)
4-1. DISPLAY 'JIN08TST END' UPON CONSOLE
4-2. SUB02MSG で終了メッセージ(002)出力
```
---
## カバレッジ対象キーワード
| 予約語/記号 | 区分 | 使用箇所 |
|:-----------|:----:|:---------|
| OMITTED | 予約語 | 2000CALTST: CALL 'JIN07SUB' USING ... OMITTEDKANJI-NAME 省略) |
| CALL | 予約語 | 2000CALTST: CALL 'JIN07SUB'2回) |
| ON EXCEPTION | 予約語 | 1000ITTTST: CALL 'SUB01DAT' ON EXCEPTION |
## 補足
- 本プログラムは JIN07SUB の動作確認用テストドライバのため、本番 JCL は不要(ローカル開発環境で単体実行する)。
- JIN07SUB が EMP-VALID を読込むための DD(JIN07R01)は、実行時に環境変数で割当てる。
- 検証は DISPLAY 出力(CALL1 OK/NG、CALL2 OK/NG)で実施する。
+62 -56
View File
@@ -50,53 +50,59 @@
| 段落名 | 機能 |
|:-------|:-----|
| JIN09RPT-OPEN | ファイルOPEN + ワーク初期化 |
| JIN09RPT-LOAD-MST | 評価基準マスタ(R02)全件LOAD → 内部表構築 |
| JIN09RPT-READ-EVAL | 評価明細(R011件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 多重ループ |
| 0000MAJCOLSOR | メインコントロール(初期→マスタLOAD→主処理→終了) |
| 1000ITTSOR | 初期処理(開始メッセージ・初期化・OPEN・運用日付) |
| 1100R02INNSOR | 評価基準マスタ(R02)読込・EOF判定 |
| 1200MSTLDASOR | 評価基準マスタ全件LOAD → 内部表構築 |
| 1250R02CLOSOR | 評価基準マスタ(R02CLOSE |
| 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行の集計レコードWRITEDIVIDE平均点含む) |
| 4000STPSOR | 終了処理(統計表示・CLOSE・CANCEL・終了メッセージ) |
| 6000MSGOUTSOR | メッセージ編集出力SUB呼出 |
| 9999ABDSOR | エラー処理(ABEND |
### 処理フロー
```
1. 初期処理(JIN09RPT-OPEN
1-1. JIN09R01 / JIN09R02 / JIN09W01 / JIN09W02 を OPEN
1-2. SUB01DAT で運用日取得(復帰コード≠0なら SUB03END で異常終了
1-3. 内部表 WS-SKILL-TABLE を INITIALIZE
1-4. SUB02MSG で開始メッセージ出力
1. 初期処理(1000ITTSOR
1-1. SUB02MSG で開始メッセージ出力(6000MSGOUTSOR
1-2. 内部表 WS-SKILL-TABLE を INITIALIZE1500TBLINITSOR
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. マスタLOADJIN09RPT-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 → 主処理へ
2. マスタLOAD1100R02INNSOR / 1200MSTLDASOR
2-1. JIN09R02 から SKILL-MST を 1 件 READ1100R02INNSOR
2-2. 1200MSTLDASOR で内部表 WS-SKILL-TABLE(WS-TBL-ENTRY) に設定
2-3. AT END → 1250R02CLOSORJIN09R02 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
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 と不一致 → キーブレイク)
JIN09RPT-OUTPUT-GRP で前社員分を出力、内部表を INITIALIZE
3-4. JIN09RPT-AGGREGATE を PERFORM
3000OUTPUSOR で前社員分を出力、1600TBLRSTSOR で内部表リセット
3-4. 2100AGGRtASOR を 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
4. 集計処理(2100AGGRGASOR
4-1. 2200JUDGESOR でレベル判定
4-2. SEARCH ALL で評価基準を特定
4-3. WHEN 該当 → 2300UPDTTLSOR を PERFORM
4-4. WHEN 未該当 → 2400WRTERRSOR を PERFORM
5. レベル判定(JIN09RPT-JUDGE-LEVEL)— NESTED IF 3段 + 複合条件
5. レベル判定(2200JUDGESOR)— NESTED IF 3段 + 複合条件
IF SCORE >= 80 AND SCORE <= 999
IF SCORE >= 90 OR SCORE = 100
MOVE 'S' TO WS-LEVEL
@@ -116,17 +122,17 @@
END-IF
END-IF
6. 社員グループ出力(JIN09RPT-OUTPUT-GRP
6. 社員グループ出力(3000OUTPUSOR
6-1. 内部表を 1 から WS-TBL-ENTRY まで PERFORM VARYING で走査
6-2. 件数 > 0 のエントリのみ JIN09RPT-WRITE-SUM で出力
6-3. JIN09RPT-CALC-AVG で平均点算出(DIVIDE
6-4. 出力行数カウンタを加算
6-2. 件数 > 0 のエントリのみ 3100WRITEAGSOR で出力(DIVIDE平均点含む)
6-3. 出力行数カウンタを加算
7. 終了処理(JIN09RPT-CLOSE
7-1. JIN09R01 / JIN09W01 / JIN09W02 を CLOSE
7-2. CANCEL 'SUB02MSG' でサブPGM解放
7-3. SUB02MSG で件数メッセージ出力
7-4. GOBACK
7. 終了処理(4000STPSOR
7-1. 統計表示
7-2. JIN09R01 / JIN09W01 / JIN09W02 を CLOSE
7-3. CANCEL 'SUB02MSG'サブPGM解放
7-4. SUB02MSG で件数メッセージ出力
7-5. GOBACK
```
### I-O-CONTROL
@@ -144,7 +150,7 @@ I-O-CONTROL.
> 補足:I-O-CONTROL 段落は予約語カバー目的で記載する。当初 SAME RECORD AREA FOR
> R01INNFIL R02INNFIL を指定したが、GnuCOBOL 3.2 はレコード長の異なるファイル
> R01=200B / R02=79B)間で共有領域が最小レコード長に固定され、R01 の READ が
> R01=200B / R02=80B)間で共有領域が最小レコード長に固定され、R01 の READ が
> 破綻することが判明したため、SAME 句は使用しない(IBM COBOL では正しく動作する
> が、ローカル検証の再現性を優先して SAME 予約語カバーは断念)。
@@ -152,21 +158,21 @@ I-O-CONTROL.
| 予約語 | 使用箇所 |
|:-------|:---------|
| SET 条件名 TO FALSE | 内部表初期化後に SET WRK-FIRST-FLG TO FALSE で初回フラグ解除 |
| SET 条件名 TO FALSE | 2000MAJSOR: キーブレイク検知時に SET WRK-FIRST-FLG TO FALSE で初回フラグ解除 |
| NEXT SENTENCE | レベル判定の ELSE 内で未判定時、後続文へ制御 |
| CANCEL | 終了処理で CANCEL 'SUB02MSG' |
| EJECT | PROCEDURE DIVISION 先頭直後にソース行 EJECT |
| SKIP2 | 段落境界にソース行 SKIP2 |
| EJECT | 段落境界の第7桁に `*` 付きコメント行 `*EJECT`(コメント化) |
| SKIP2 | (実装せず。EJECT 同様に `*SKIP2` コメント行のみ。W-1 にて統計から除外決定) |
### 内部表
#### WS-SKILL-TABLEOCCURS 20
#### WS-SKILL-TABLEOCCURS 1 TO 20 DEPENDING ON WS-TBL-MAX-IDX
| 項目 | PIC | USAGE | 内容 |
|:----|:---:|:-----:|------|
| TBL-SKILL-CODE | X(4) | — | スキルコード |
| TBL-LEVEL | 9(2) | BINARY | レベル |
| TBL-LEVEL-NAME | X(20) | — | レベル名称 |
| 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) | — | 社員番号(出力用) |
@@ -211,10 +217,10 @@ SEARCH ALL のキー項目:TBL-SKILL-CODESKILL-MST LOAD後に確定)
| 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 | 予約語(昇格) | 内部表走査の多重ループ |
| EJECT | 予約語 | 段落境界の `*EJECT` コメント行(コメント化) |
| SKIP2 | 予約語 | (実装せず。W-1 にて統計対象から除外決定) |
| SET 条件名 TO FALSE | 予約語 | 2000MAJSOR: 初回フラグ解除に SET ... TO FALSE |
| PERFORM VARYING | 予約語(昇格) | 内部表走査(単一ループ |
| NESTED IF(複合条件 AND/OR | 予約語(昇格) | レベル判定 IF ネスト 3 段 |
| SEARCH ALL | 予約語 | 評価基準マッチング |
| DIVIDE ... GIVING | 予約語 | 平均点算出 |