サブシステム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:
+58
-43
@@ -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 INITIAL(INITIAL 予約語使用) |
|
||||
| RETURN-CODE | 正常終了時 MOVE ZERO TO RETURN-CODE(RETURN-CODE 予約語使用) |
|
||||
| RETURN-CODE | エラー時 MOVE 4 TO RETURN-CODE(RETURN-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)。異常時は 4000MSGOUTSOR+9999ABDSOR
|
||||
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-CODE(GOBACK直前)
|
||||
5. GOBACK
|
||||
|
||||
#### チェック処理(JIN01KNS-CHECK)
|
||||
1. ADD 1 TO WS-READ-CNT END-ADD(END-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レコード READ(AT 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' を MOVE(88-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. 終了メッセージ OUTPUT(4000MSGOUTSOR)
|
||||
|
||||
#### メッセージ出力(4000MSGOUTSOR)
|
||||
1. CALL SUB02MSG でメッセージ出力
|
||||
|
||||
#### エラー処理(9999ABDSOR)
|
||||
1. CALL SUB03END(ABEND)
|
||||
|
||||
## カバレッジ対象キーワード
|
||||
|
||||
| 予約語/記号 | 区分 | 使用箇所 |
|
||||
|:-----------|:----:|:---------|
|
||||
| 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-level(VALUE→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
@@ -80,69 +80,73 @@ SEARCH ALL のキー項目:TBL-SKILL-CODE
|
||||
|
||||
| 段落名 | 機能 |
|
||||
|:-------|:-----|
|
||||
| JIN02SKL-OPEN | ファイルOPEN + 内部表初期化 |
|
||||
| JIN02SKL-LOAD-MST | 評価基準マスタ(R02)全件LOAD → 内部表構築 |
|
||||
| JIN02SKL-READ-EVAL | 評価明細(R01)1件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. 開始メッセージを OUTPUT(6000MSGOUTSOR 経由)
|
||||
2. JIN02R01 / JIN02R02 / JIN02W01 / JIN02W02 を OPEN
|
||||
3. WS-TBL-MAX-IDX を ZERO で初期化(内部表初期化)
|
||||
|
||||
#### マスタLOAD(JIN02SKL-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(不要になったので)
|
||||
#### マスタLOAD(1100R02INNSOR / 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 END(1100R02INNSOR で 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 件 READ(1300R01INNSOR)
|
||||
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 ALL(JIN02SKL-SEARCH-LVL)
|
||||
#### SEARCH ALL(2000MAJSOR 内)
|
||||
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
|
||||
|
||||
#### 内部表UPDATE(JIN02SKL-UPDATE-TBL)
|
||||
#### 内部表UPDATE(2200UPDTTLSOR)
|
||||
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 を PERFORM(DIVIDE 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 を PERFORM(JIN02W01 へ 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-SUBTRACT(END-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 を CLOSE(JIN02R01 / JIN02R02 は 3000OUTPUSOR で CLOSE 済み)
|
||||
3. 終了メッセージ OUTPUT(6000MSGOUTSOR)
|
||||
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 -1(JIN02SKL-DESCEND相当) |
|
||||
| END-DIVIDE | 予約語(58) | JIN02SKL-GET-AVG |
|
||||
| END-SUBTRACT | 予約語(66) | JIN02SKL-DESCEND |
|
||||
| BY(降順走査) | 予約語(18) | PERFORM VARYING BY -1(3000OUTPUSOR) |
|
||||
| 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
@@ -6,7 +6,7 @@
|
||||
|------|------|
|
||||
| プログラムID | JIN03RAN(人事→JINji, 03, ランキング→RAN) |
|
||||
| プログラムタイプ | 編集出力(ランキング生成) |
|
||||
| 機能 | SKILL-AGG(JIN02SKL出力のスキル別評価集計結果)を読み込み、平均点降順でランキング出力 |
|
||||
| 機能 | SKILL-AGG(JIN02SKL出力のスキル別評価集計結果)を読み込み、平均点降順でランキング出力(前提: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 | ランキング出力 |
|
||||
|
||||
## 前提条件
|
||||
|
||||
- JIN03R01(SKILL-AGG)は、JCL の SORT ステップにより**平均点降順**にソート済みであること
|
||||
- 本プログラムはソートを行わず、入力順にランク番号(WRK-RANK-NO)を採番する
|
||||
|
||||
## レコード定義
|
||||
|
||||
### SKILL-AGG-REC(JIN03R01, 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
|
||||
|
||||
@@ -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 の SORT(STEP010)で社員番号昇順に並替済であること |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| 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-DATE(YYYY/MM/DD)編集
|
||||
2-6. ACCEPT WRK-TIME FROM TIME(システム時刻)
|
||||
2-7. STRING で WRK-DISP-TIME(HH: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 |
|
||||
| LINAGE(PAGE) | 予約語 | 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' |
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/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: JIN01REC(200B)を REPLACING (A)→R01 で定義
|
||||
- W01: JIN04RPT-REC(132B)を REPLACING (A)→W01 で定義
|
||||
@@ -0,0 +1,190 @@
|
||||
# JIN05UPD 詳細設計書
|
||||
|
||||
## プログラム概要
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| プログラムID | JIN05UPD(人事→JINji, 05, 人事異動DB更新→UPD) |
|
||||
| プログラムタイプ | 09(DB更新) |
|
||||
| 機能 | HR-TRANS(人事異動トランザクション)を読込み、DB2 EMPLOYEEテーブルをINSERT/UPDATEする |
|
||||
| CALL方式 | メインプログラム(JCLからCALL) |
|
||||
| DBアクセス | DB2 EMPLOYEE(CONNECT / 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 9000ERRSOR(CALL ON EXCEPTION カバー)
|
||||
2-6. EXEC SQL CONNECT(DB接続)
|
||||
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. 3100INSERTSOR(INSERT)
|
||||
EXEC SQL INSERT INTO EMPLOYEE(:HV-* 9カラム)
|
||||
IF SQLCODE NOT = 0 → 3400DBERRSOR
|
||||
ELSE → ADD 1 TO CUN-DBINS
|
||||
|
||||
6. 3200UPDATESOR(UPDATE)
|
||||
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. 3400DBERRSOR(DBエラー)
|
||||
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. 9000ERRSOR(ABEND)
|
||||
DISPLAY 'JIN05UPD ABEND' UPON CONSOLE
|
||||
CALL SUB03END(E01ABDCOD)
|
||||
```
|
||||
|
||||
### トランザクション種別(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 |
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/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 JIN05REC(200B)を REPLACING (A)→R01 で定義。
|
||||
@@ -0,0 +1,139 @@
|
||||
# JIN06SRT 詳細設計書
|
||||
|
||||
## プログラム概要
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| プログラムID | JIN06SRT(人事→JINji, 06, 社員データ並替→SRT) |
|
||||
| プログラムタイプ | 34(SORT) |
|
||||
| 機能 | EMP-VALID(200B)を 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 PROCEDURE(EOF 到達まで読込ループ + R01読込→RELEASE) |
|
||||
| 2110READSOR | 1件読込→SORTレコード転記→RELEASE / 上限超過はVALID-ERROR |
|
||||
| 2120OUTPUSOR | OUTPUT PROCEDURE(RETURN→SORTED-EMP書出) |
|
||||
| 3000STPSOR | 終了処理(統計表示・CLOSE・終了MSG) |
|
||||
| 4000MSGOUTSOR | メッセージ編集出力SUB呼出 |
|
||||
| 9000ERRSOR | エラー処理(ABEND) |
|
||||
|
||||
### 処理フロー
|
||||
|
||||
```
|
||||
1. 0000MAJCOLSOR
|
||||
1-1. PERFORM 1000ITTSOR(初期処理)
|
||||
1-2. PERFORM 2000MAJSOR(SORT処理)
|
||||
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(運用日付取得)。異常時は 4000MSGOUTSOR+9000ERRSOR
|
||||
2-5. OPEN OUTPUT W01OUTFIL, W02OUTFIL
|
||||
|
||||
3. 2000MAJSOR(SORT実行)
|
||||
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 SUB03END(ABEND)
|
||||
|
||||
4. 2110INPUTSOR(INPUT PROCEDURE)
|
||||
4-1. OPEN INPUT R01INNFIL
|
||||
4-2. PERFORM UNTIL WRK-R01EOF-Y(EOF 到達まで 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-ERROR(9999)WRITE、CUN-W02OUT +1
|
||||
|
||||
6. 2120OUTPUSOR(OUTPUT 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 SUB03END(ABEND)
|
||||
```
|
||||
|
||||
### 上限超過時のエラー出力(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 を繰返す |
|
||||
| SD(Sort Description) | 予約語 | FILE SECTION: SD SORTWORK |
|
||||
| SAME SORT AREA | 予約語 | ENVIRONMENT DIVISION: SAME SORT AREA 句(SHA08SRT と同様) |
|
||||
@@ -0,0 +1,118 @@
|
||||
# JIN07SUB 詳細設計書
|
||||
|
||||
## プログラム概要
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| プログラムID | JIN07SUB(人事→JINji, 07, 社員情報取得→SUB) |
|
||||
| プログラムタイプ | サブプログラム(CALL される側) |
|
||||
| PGMパターン | 25(サブPGM) |
|
||||
| 機能 | 指定 EMP-ID に一致する EMP-VALID レコードの項目を返却する |
|
||||
| 終了方式 | EXIT PROGRAM(GOBACK 不使用。キーワードカバー目的で基本設計書の承認に基づき例外的に採用) |
|
||||
| DBアクセス | なし |
|
||||
| 使用ファイル | JIN07R01(EMP-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-PTR(ADDRESS OF 予約語カバー)
|
||||
1-2. OPEN INPUT JIN07R01
|
||||
1-3. PERFORM 1000FNDSOR(社員検索)
|
||||
1-4. CLOSE JIN07R01
|
||||
1-5. EXIT PROGRAM(GOBACK 不使用)
|
||||
|
||||
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 のみ(インデックスなし)。全件走査し一致レコードを返す。
|
||||
@@ -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(運用日付取得)。異常時は 4000MSGOUTTST+9000ERRTST
|
||||
|
||||
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 ... OMITTED(KANJI-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
@@ -50,53 +50,59 @@
|
||||
|
||||
| 段落名 | 機能 |
|
||||
|:-------|:-----|
|
||||
| JIN09RPT-OPEN | ファイルOPEN + ワーク初期化 |
|
||||
| JIN09RPT-LOAD-MST | 評価基準マスタ(R02)全件LOAD → 内部表構築 |
|
||||
| JIN09RPT-READ-EVAL | 評価明細(R01)1件READ |
|
||||
| JIN09RPT-KEY-BREAK | 社員キーブレイク判定(同キー) |
|
||||
| JIN09RPT-OUTPUT-GRP | 1社員分の集計結果出力 |
|
||||
| JIN09RPT-AGGREGATE | 1明細の集計主処理(NESTED IF) |
|
||||
| JIN09RPT-JUDGE-LEVEL | スコア→S/A/B/Cレベル判定(NESTED IF 3段) |
|
||||
| JIN09RPT-SEARCH-MST | SEARCH ALL で評価基準を特定 |
|
||||
| JIN09RPT-UPDATE-TBL | 内部表の件数・合計点をUPDATE |
|
||||
| JIN09RPT-CALC-AVG | DIVIDEで平均点算出 |
|
||||
| JIN09RPT-WRITE-SUM | 1行の集計レコードWRITE |
|
||||
| JIN09RPT-WRITE-ERR | エラーレコードWRITE |
|
||||
| JIN09RPT-CLOSE | ファイルCLOSE + メッセージ出力 |
|
||||
| JIN09RPT-MAIN | 主処理ループ制御(PERFORM VARYING 多重ループ) |
|
||||
| 0000MAJCOLSOR | メインコントロール(初期→マスタLOAD→主処理→終了) |
|
||||
| 1000ITTSOR | 初期処理(開始メッセージ・初期化・OPEN・運用日付) |
|
||||
| 1100R02INNSOR | 評価基準マスタ(R02)読込・EOF判定 |
|
||||
| 1200MSTLDASOR | 評価基準マスタ全件LOAD → 内部表構築 |
|
||||
| 1250R02CLOSOR | 評価基準マスタ(R02)CLOSE |
|
||||
| 1300R01INNSOR | 評価明細(R01)読込・EOF判定 |
|
||||
| 1500TBLINITSOR | 内部表初期化(INITIALIZE TBL) |
|
||||
| 1600TBLRSTSOR | 内部表リセット(キーブレイク時に再初期化) |
|
||||
| 2000MAJSOR | 主処理(キーブレイク判定 → 集計 → 前社員分出力 → リセット) |
|
||||
| 2100AGGRGASOR | 1明細の集計主処理(レベル判定→SEARCH→UPDATE/ERR) |
|
||||
| 2200JUDGESOR | スコア→S/A/B/Cレベル判定(NESTED IF 3段) |
|
||||
| 2300UPDTTLSOR | 内部表の件数・合計点UPDATE |
|
||||
| 2400WRTERRSOR | エラーレコードWRITE |
|
||||
| 3000OUTPUSOR | 1社員分の集計結果出力(昇順走査→平均点→WRITE) |
|
||||
| 3100WRITEAGSOR | 1行の集計レコードWRITE(DIVIDE平均点含む) |
|
||||
| 4000STPSOR | 終了処理(統計表示・CLOSE・CANCEL・終了メッセージ) |
|
||||
| 6000MSGOUTSOR | メッセージ編集出力SUB呼出 |
|
||||
| 9999ABDSOR | エラー処理(ABEND) |
|
||||
|
||||
### 処理フロー
|
||||
|
||||
```
|
||||
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 を INITIALIZE(1500TBLINITSOR)
|
||||
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. マスタLOAD(JIN09RPT-LOAD-MST)
|
||||
2-1. JIN09R02 から SKILL-MST を全件 READ
|
||||
2-2. WS-TBL-ENTRY を 1 加算
|
||||
2-3. 内部表 WS-SKILL-TABLE(WS-TBL-ENTRY) に設定
|
||||
2-4. AT END → JIN09R02 を CLOSE → 主処理へ
|
||||
2. マスタLOAD(1100R02INNSOR / 1200MSTLDASOR)
|
||||
2-1. JIN09R02 から SKILL-MST を 1 件 READ(1100R02INNSOR)
|
||||
2-2. 1200MSTLDASOR で内部表 WS-SKILL-TABLE(WS-TBL-ENTRY) に設定
|
||||
2-3. AT END → 1250R02CLOSOR(JIN09R02 CLOSE)→ 主処理へ
|
||||
|
||||
3. 主処理(JIN09RPT-MAIN)
|
||||
3-1. JIN09RPT-READ-EVAL で SKILL-EVAL を1件 READ
|
||||
3-2. AT END → JIN09RPT-OUTPUT-GRP(最終社員分)→ 終了処理へ
|
||||
3-3. JIN09RPT-KEY-BREAK を PERFORM
|
||||
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-TABLE(OCCURS 20)
|
||||
#### WS-SKILL-TABLE(OCCURS 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-CODE(SKILL-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 | 予約語 | 平均点算出 |
|
||||
|
||||
Reference in New Issue
Block a user