diff --git a/README.md b/README.md index a45e27f..6907a5c 100644 --- a/README.md +++ b/README.md @@ -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更新 | ZAN01CHK~ZAN06UPD(6本) | 完了 | | C: 給与計算 | CSV変換・登録・集約・計算・控除・DB更新・分割・印刷・マージ | KYU01CVT~KYU09MRG(9本) | 完了 | | D: 社会保険管理 | ASCII→EBCDIC変換・保険情報統合・料率計算・事業所マッチング・等級判定・控除計算・キーブレイク・SORT編集・25分割・100分割 | SHA01CVT~SHA10S10(10本) | 完了 | -| E: 人事情報管理 | 社員情報チェック・スキル評価集計・ランキング出力・社員別スキル集計レポート | JIN01KNS~JIN09RPT(4本) | 完了 | +| E: 人事情報管理 | 社員情報チェック・スキル評価集計・ランキング出力・人事異動DB更新・SORT編集・社員情報マスタ出力・社員別スキル集計レポート | JIN01KNS~JIN09RPT(9本) | 完了 | -### 共通サブプログラム(5本) +### 共通サブプログラム(6本) -SUB01DAT(日付), SUB02MSG(メッセージ), SUB03END(ABEND), SUB04CHK(バリデーション), SUB05TIM(丸め) +SUB01DAT(日付), SUB02MSG(メッセージ), SUB03END(ABEND), SUB04CHK(バリデーション), SUB05TIM(丸め), JIN07SUB(社員情報マスタ管理) ### プログラム一覧 | プログラムID | サブシステム | 機能 | |:------------|:-----------:|------| -| JIN01KNS~JIN03RAN, JIN09RPT | E | 人事情報管理(4本) | +| JIN01KNS~JIN09RPT | E | 人事情報管理(9本) | | KIN01INP~KIN09CSV | A | 勤怠休暇管理(9本) | | ZAN01CHK~ZAN06UPD | B | 残業統計管理(6本) | | KYU01CVT~KYU09MRG | C | 給与計算(9本) | | SHA01CVT~SHA10S10 | D | 社会保険管理(10本) | -| SUB01DAT~SUB05TIM | 共通 | 日付/メッセージ/ABEND/バリデーション/丸め(5本) | +| SUB01DAT~SUB05TIM, JIN07SUB | 共通 | 日付/メッセージ/ABEND/バリデーション/丸め/社員情報マスタ管理(6本) | -**全プログラム数: 43本** +**全プログラム数: 48本** ## ディレクトリ構成 diff --git a/bin/JIN01KNS.exe b/bin/JIN01KNS.exe index 779465a..bd15d40 100644 Binary files a/bin/JIN01KNS.exe and b/bin/JIN01KNS.exe differ diff --git a/bin/JIN02SKL.exe b/bin/JIN02SKL.exe index 50c8bcd..fc7a1c8 100644 Binary files a/bin/JIN02SKL.exe and b/bin/JIN02SKL.exe differ diff --git a/bin/JIN03RAN.exe b/bin/JIN03RAN.exe index c4f67ae..2e99f74 100644 Binary files a/bin/JIN03RAN.exe and b/bin/JIN03RAN.exe differ diff --git a/bin/JIN04PRT.exe b/bin/JIN04PRT.exe new file mode 100644 index 0000000..4728824 Binary files /dev/null and b/bin/JIN04PRT.exe differ diff --git a/bin/JIN05UPD.exe b/bin/JIN05UPD.exe new file mode 100644 index 0000000..20f235c Binary files /dev/null and b/bin/JIN05UPD.exe differ diff --git a/bin/JIN06SRT.exe b/bin/JIN06SRT.exe new file mode 100644 index 0000000..117b072 Binary files /dev/null and b/bin/JIN06SRT.exe differ diff --git a/bin/JIN07SUB.dll b/bin/JIN07SUB.dll new file mode 100644 index 0000000..f10c726 Binary files /dev/null and b/bin/JIN07SUB.dll differ diff --git a/bin/JIN08TST.exe b/bin/JIN08TST.exe new file mode 100644 index 0000000..78a8a19 Binary files /dev/null and b/bin/JIN08TST.exe differ diff --git a/bin/JIN09RPT.exe b/bin/JIN09RPT.exe index 0b8cd97..b6d877b 100644 Binary files a/bin/JIN09RPT.exe and b/bin/JIN09RPT.exe differ diff --git a/bin/KIN01INP.exe b/bin/KIN01INP.exe index 6fda3aa..9bc096d 100644 Binary files a/bin/KIN01INP.exe and b/bin/KIN01INP.exe differ diff --git a/bin/KIN02UPD.exe b/bin/KIN02UPD.exe index f31d023..15fda2b 100644 Binary files a/bin/KIN02UPD.exe and b/bin/KIN02UPD.exe differ diff --git a/bin/KIN03EXP.exe b/bin/KIN03EXP.exe index 70931bc..562072d 100644 Binary files a/bin/KIN03EXP.exe and b/bin/KIN03EXP.exe differ diff --git a/bin/KIN04CHK.exe b/bin/KIN04CHK.exe index 90f8287..53fea2c 100644 Binary files a/bin/KIN04CHK.exe and b/bin/KIN04CHK.exe differ diff --git a/bin/KIN05MAT.exe b/bin/KIN05MAT.exe index bd59ac5..f06b0ba 100644 Binary files a/bin/KIN05MAT.exe and b/bin/KIN05MAT.exe differ diff --git a/bin/KIN06CLD.exe b/bin/KIN06CLD.exe index f9e7c90..1dd4c77 100644 Binary files a/bin/KIN06CLD.exe and b/bin/KIN06CLD.exe differ diff --git a/bin/KIN07DAI.exe b/bin/KIN07DAI.exe index 0c3abcc..28f03c1 100644 Binary files a/bin/KIN07DAI.exe and b/bin/KIN07DAI.exe differ diff --git a/bin/KIN08DBU.exe b/bin/KIN08DBU.exe index 2e0e088..82db66e 100644 Binary files a/bin/KIN08DBU.exe and b/bin/KIN08DBU.exe differ diff --git a/bin/KIN09CSV.exe b/bin/KIN09CSV.exe index 73693c0..8fb18e5 100644 Binary files a/bin/KIN09CSV.exe and b/bin/KIN09CSV.exe differ diff --git a/bin/KYU01CVT.exe b/bin/KYU01CVT.exe index dd7b6a1..28990ef 100644 Binary files a/bin/KYU01CVT.exe and b/bin/KYU01CVT.exe differ diff --git a/bin/KYU02REG.exe b/bin/KYU02REG.exe index 75ff394..7ab38f4 100644 Binary files a/bin/KYU02REG.exe and b/bin/KYU02REG.exe differ diff --git a/bin/KYU03AGG.exe b/bin/KYU03AGG.exe index 46d3b9e..a505091 100644 Binary files a/bin/KYU03AGG.exe and b/bin/KYU03AGG.exe differ diff --git a/bin/KYU04CAL.exe b/bin/KYU04CAL.exe index 0105d93..1bdcb8f 100644 Binary files a/bin/KYU04CAL.exe and b/bin/KYU04CAL.exe differ diff --git a/bin/KYU05DED.exe b/bin/KYU05DED.exe index 163247b..3d8ea78 100644 Binary files a/bin/KYU05DED.exe and b/bin/KYU05DED.exe differ diff --git a/bin/KYU06UPD.exe b/bin/KYU06UPD.exe index 60fb3a7..bfe91e4 100644 Binary files a/bin/KYU06UPD.exe and b/bin/KYU06UPD.exe differ diff --git a/bin/KYU07DIV.exe b/bin/KYU07DIV.exe index 7b00856..d44cc22 100644 Binary files a/bin/KYU07DIV.exe and b/bin/KYU07DIV.exe differ diff --git a/bin/KYU08PRI.exe b/bin/KYU08PRI.exe index b5f4256..58694ba 100644 Binary files a/bin/KYU08PRI.exe and b/bin/KYU08PRI.exe differ diff --git a/bin/KYU09MRG.exe b/bin/KYU09MRG.exe index 9dcdb35..3a365d8 100644 Binary files a/bin/KYU09MRG.exe and b/bin/KYU09MRG.exe differ diff --git a/bin/SHA01CVT.exe b/bin/SHA01CVT.exe index cb9151b..683b92a 100644 Binary files a/bin/SHA01CVT.exe and b/bin/SHA01CVT.exe differ diff --git a/bin/SHA02MNC.exe b/bin/SHA02MNC.exe index 848b943..9089212 100644 Binary files a/bin/SHA02MNC.exe and b/bin/SHA02MNC.exe differ diff --git a/bin/SHA03MNP.exe b/bin/SHA03MNP.exe index 334c07b..408c450 100644 Binary files a/bin/SHA03MNP.exe and b/bin/SHA03MNP.exe differ diff --git a/bin/SHA04TWO.exe b/bin/SHA04TWO.exe index 882a50a..eeadf74 100644 Binary files a/bin/SHA04TWO.exe and b/bin/SHA04TWO.exe differ diff --git a/bin/SHA05TWN.exe b/bin/SHA05TWN.exe index 66b5bda..1410289 100644 Binary files a/bin/SHA05TWN.exe and b/bin/SHA05TWN.exe differ diff --git a/bin/SHA06TWM.exe b/bin/SHA06TWM.exe index 19b5909..d689a3d 100644 Binary files a/bin/SHA06TWM.exe and b/bin/SHA06TWM.exe differ diff --git a/bin/SHA07KBR.exe b/bin/SHA07KBR.exe index 8440f40..d6fcbdb 100644 Binary files a/bin/SHA07KBR.exe and b/bin/SHA07KBR.exe differ diff --git a/bin/SHA08SRT.exe b/bin/SHA08SRT.exe index eb9046a..c676e46 100644 Binary files a/bin/SHA08SRT.exe and b/bin/SHA08SRT.exe differ diff --git a/bin/SHA09S25.exe b/bin/SHA09S25.exe index 1281f67..697c59a 100644 Binary files a/bin/SHA09S25.exe and b/bin/SHA09S25.exe differ diff --git a/bin/SHA10S10.exe b/bin/SHA10S10.exe index c28be54..ff5f049 100644 Binary files a/bin/SHA10S10.exe and b/bin/SHA10S10.exe differ diff --git a/bin/SUB01DAT.dll b/bin/SUB01DAT.dll index 059bd8f..4599c46 100644 Binary files a/bin/SUB01DAT.dll and b/bin/SUB01DAT.dll differ diff --git a/bin/SUB02MSG.dll b/bin/SUB02MSG.dll index 3e12e90..995c50e 100644 Binary files a/bin/SUB02MSG.dll and b/bin/SUB02MSG.dll differ diff --git a/bin/SUB03END.dll b/bin/SUB03END.dll index b15f4a4..cabdb63 100644 Binary files a/bin/SUB03END.dll and b/bin/SUB03END.dll differ diff --git a/bin/SUB04CHK.dll b/bin/SUB04CHK.dll index 2943938..3575c8d 100644 Binary files a/bin/SUB04CHK.dll and b/bin/SUB04CHK.dll differ diff --git a/bin/SUB05TIM.dll b/bin/SUB05TIM.dll index 42500f6..5245df0 100644 Binary files a/bin/SUB05TIM.dll and b/bin/SUB05TIM.dll differ diff --git a/bin/ZAN01CHK.exe b/bin/ZAN01CHK.exe index 6c747a5..07ca2db 100644 Binary files a/bin/ZAN01CHK.exe and b/bin/ZAN01CHK.exe differ diff --git a/bin/ZAN02CHK.exe b/bin/ZAN02CHK.exe index 92f9309..13a1253 100644 Binary files a/bin/ZAN02CHK.exe and b/bin/ZAN02CHK.exe differ diff --git a/bin/ZAN03CHK.exe b/bin/ZAN03CHK.exe index bbaffd7..82c52f0 100644 Binary files a/bin/ZAN03CHK.exe and b/bin/ZAN03CHK.exe differ diff --git a/bin/ZAN04MAT.exe b/bin/ZAN04MAT.exe index 93ddb4b..4def4e1 100644 Binary files a/bin/ZAN04MAT.exe and b/bin/ZAN04MAT.exe differ diff --git a/bin/ZAN05CAL.exe b/bin/ZAN05CAL.exe index 0851c69..e04295e 100644 Binary files a/bin/ZAN05CAL.exe and b/bin/ZAN05CAL.exe differ diff --git a/bin/ZAN06UPD.exe b/bin/ZAN06UPD.exe index c3e5eb2..070e6ee 100644 Binary files a/bin/ZAN06UPD.exe and b/bin/ZAN06UPD.exe differ diff --git a/cpy/DB-COMMON.cpy b/cpy/DB-COMMON.cpy new file mode 100644 index 0000000..fe3f13f --- /dev/null +++ b/cpy/DB-COMMON.cpy @@ -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. diff --git a/cpy/JIN04RPT-REC.cpy b/cpy/JIN04RPT-REC.cpy new file mode 100644 index 0000000..88b24b2 --- /dev/null +++ b/cpy/JIN04RPT-REC.cpy @@ -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). diff --git a/cpy/JIN05REC.cpy b/cpy/JIN05REC.cpy new file mode 100644 index 0000000..da8af25 --- /dev/null +++ b/cpy/JIN05REC.cpy @@ -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). diff --git a/cpy/SKILL-MST-REC.cpy b/cpy/SKILL-MST-REC.cpy index 80536b8..b3b7a56 100644 --- a/cpy/SKILL-MST-REC.cpy +++ b/cpy/SKILL-MST-REC.cpy @@ -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). diff --git a/ddl/schema_jin.sql b/ddl/schema_jin.sql new file mode 100644 index 0000000..d8e8b4e --- /dev/null +++ b/ddl/schema_jin.sql @@ -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 +); \ No newline at end of file diff --git a/src/JIN01KNS.cbl b/src/JIN01KNS.cbl index a0ae620..28738fe 100644 --- a/src/JIN01KNS.cbl +++ b/src/JIN01KNS.cbl @@ -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). - * + * ***************************************************************** * サブプログラム連絡領域 * ***************************************************************** diff --git a/src/JIN02SKL.cbl b/src/JIN02SKL.cbl index 0bb1796..c1ee8c5 100644 --- a/src/JIN02SKL.cbl +++ b/src/JIN02SKL.cbl @@ -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 diff --git a/src/JIN03RAN.cbl b/src/JIN03RAN.cbl index d191789..6fbe1c8 100644 --- a/src/JIN03RAN.cbl +++ b/src/JIN03RAN.cbl @@ -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 diff --git a/src/JIN04PRT.cbl b/src/JIN04PRT.cbl new file mode 100644 index 0000000..567db15 --- /dev/null +++ b/src/JIN04PRT.cbl @@ -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 LOCK(CLOSE 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. diff --git a/src/JIN05UPD.cbl b/src/JIN05UPD.cbl new file mode 100644 index 0000000..4835225 --- /dev/null +++ b/src/JIN05UPD.cbl @@ -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. diff --git a/src/JIN06SRT.cbl b/src/JIN06SRT.cbl new file mode 100644 index 0000000..8f70e8f --- /dev/null +++ b/src/JIN06SRT.cbl @@ -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: SORTWORK(200B 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. diff --git a/src/JIN08TST.cbl b/src/JIN08TST.cbl new file mode 100644 index 0000000..d4aacc8 --- /dev/null +++ b/src/JIN08TST.cbl @@ -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. diff --git a/src/JIN09RPT.cbl b/src/JIN09RPT.cbl index 0ca3dae..008c455 100644 --- a/src/JIN09RPT.cbl +++ b/src/JIN09RPT.cbl @@ -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をCLOSE(SAME 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. * *** 最終社員グループの出力 diff --git a/src/KYU03AGG.cbl b/src/KYU03AGG.cbl index d802025..5673e1a 100644 --- a/src/KYU03AGG.cbl +++ b/src/KYU03AGG.cbl @@ -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 diff --git a/src/KYU08PRI.cbl b/src/KYU08PRI.cbl index 8bc78ad..d305521 100644 --- a/src/KYU08PRI.cbl +++ b/src/KYU08PRI.cbl @@ -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. diff --git a/src/SHA02MNC.cbl b/src/SHA02MNC.cbl index 2b95c7f..096f911 100644 --- a/src/SHA02MNC.cbl +++ b/src/SHA02MNC.cbl @@ -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ホスト変数 * diff --git a/src/SHA10S10.cbl b/src/SHA10S10.cbl index 6f03ded..9b4ca44 100644 --- a/src/SHA10S10.cbl +++ b/src/SHA10S10.cbl @@ -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. diff --git a/sub/JIN07SUB.cbl b/sub/JIN07SUB.cbl new file mode 100644 index 0000000..c50db22 --- /dev/null +++ b/sub/JIN07SUB.cbl @@ -0,0 +1,126 @@ + IDENTIFICATION DIVISION. + PROGRAM-ID. JIN07SUB. + ***************************************************************** + * システム名 : 人事情報管理システム * + * プログラムID : JIN07SUB * + * プログラム名 : 社員情報取得サブ * + * 作成日 : 2026-08-02 * + * 処理概要 : 指定 EMP-ID に一致する EMP-VALID レコードの * + * 項目を返却するサブプログラム * + * 終了は EXIT PROGRAM(GOBACK 不使用) * + ***************************************************************** + * 更新履歴 * + *---------------------------------------------------------------* + * 更新日付 担当者 更新内容 * + *---------------------------------------------------------------* + * 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-VALID(200B 社員データ) * + ***************************************************************** + 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. diff --git a/使用資源一覧/JIN01KNS_使用資源一覧.md b/使用資源一覧/JIN01KNS_使用資源一覧.md index 86eadcd..4ed875c 100644 --- a/使用資源一覧/JIN01KNS_使用資源一覧.md +++ b/使用資源一覧/JIN01KNS_使用資源一覧.md @@ -11,13 +11,14 @@ |------|---------------|------|-------------|-----------|--------| | JIN01R01 | EMP-IMPORT | 順編成 | F (固定長) | 200B | JIN01REC | | JIN01W01 | EMP-VALID | 順編成 | F (固定長) | 200B | JIN01REC | -| JIN01W02 | VALID-ERROR | 順編成 | F (固定長) | 80B | VALID-ERROR-REC(JIN01REC内) | +| 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 | diff --git a/使用資源一覧/JIN02SKL_使用資源一覧.md b/使用資源一覧/JIN02SKL_使用資源一覧.md index 7c2c549..1504d10 100644 --- a/使用資源一覧/JIN02SKL_使用資源一覧.md +++ b/使用資源一覧/JIN02SKL_使用資源一覧.md @@ -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-REC(JIN01REC内) | +| 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-REC(W02出力) | 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テーブル diff --git a/使用資源一覧/JIN03RAN_使用資源一覧.md b/使用資源一覧/JIN03RAN_使用資源一覧.md index ace0368..5446fde 100644 --- a/使用資源一覧/JIN03RAN_使用資源一覧.md +++ b/使用資源一覧/JIN03RAN_使用資源一覧.md @@ -3,7 +3,7 @@ ## プログラム概要 - **プログラムID**: JIN03RAN - **プログラム名**: スキル評価ランキング出力処理 -- **処理概要**: SKILL-AGG(JIN02SKL出力の集計結果)を読み込み、平均点降順でランキングを出力する +- **処理概要**: SKILL-AGG(JIN02SKL出力の集計結果)を読み込み、平均点降順でランキングを出力する(前提: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→プログラム終了表示) diff --git a/使用資源一覧/JIN04PRT_使用資源一覧.md b/使用資源一覧/JIN04PRT_使用資源一覧.md new file mode 100644 index 0000000..4c083b6 --- /dev/null +++ b/使用資源一覧/JIN04PRT_使用資源一覧.md @@ -0,0 +1,40 @@ +# JIN04PRT 使用資源一覧 + +## プログラム概要 +- **プログラムID**: JIN04PRT +- **プログラム名**: 社員台帳印刷処理 +- **処理概要**: EMP-VALID(JIN01KNS出力)を読み込み、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設定) diff --git a/使用資源一覧/JIN05UPD_使用資源一覧.md b/使用資源一覧/JIN05UPD_使用資源一覧.md new file mode 100644 index 0000000..2c458db --- /dev/null +++ b/使用資源一覧/JIN05UPD_使用資源一覧.md @@ -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設定) diff --git a/使用資源一覧/JIN06SRT_使用資源一覧.md b/使用資源一覧/JIN06SRT_使用資源一覧.md new file mode 100644 index 0000000..a6dff1b --- /dev/null +++ b/使用資源一覧/JIN06SRT_使用資源一覧.md @@ -0,0 +1,52 @@ +# JIN06SRT 使用資源一覧 + +## プログラム概要 +- **プログラムID**: JIN06SRT +- **プログラム名**: 社員データSORT処理 +- **処理概要**: EMP-VALID(JIN01KNSチェック済社員データ 200B)を INPUT PROCEDURE で読込み、EMP-ID 昇順に SORT し、OUTPUT PROCEDURE で RETURN して SORTED-EMP へ出力する。RELEASE 件数は最大 999 件で、上限超過分は VALID-ERROR(ERR-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-ID(SREMP-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→終了メッセージ) diff --git a/使用資源一覧/JIN07SUB_使用資源一覧.md b/使用資源一覧/JIN07SUB_使用資源一覧.md new file mode 100644 index 0000000..4cb9bfb --- /dev/null +++ b/使用資源一覧/JIN07SUB_使用資源一覧.md @@ -0,0 +1,48 @@ +# JIN07SUB 使用資源一覧 + +## プログラム概要 +- **プログラムID**: JIN07SUB +- **プログラム名**: 社員情報取得サブ +- **処理概要**: 指定 EMP-ID に一致する EMP-VALID(200B)レコードを順次 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-PTR(ADDRESS 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 PROGRAM(GOBACK 不使用) diff --git a/使用資源一覧/JIN08TST_使用資源一覧.md b/使用資源一覧/JIN08TST_使用資源一覧.md new file mode 100644 index 0000000..8dd50ec --- /dev/null +++ b/使用資源一覧/JIN08TST_使用資源一覧.md @@ -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 | 社員情報取得 | 2000CALTST(2回: 全引数 / OMITTED) | +| SUB01DAT | 運用日付取得 | 1000ITTTST | +| SUB02MSG | メッセージ編集出力 | 1000ITTTST / 3000STPTST / 4000MSGOUTTST | +| SUB03END | ABEND処理 | 9000ERRTST | + +## 使用DB2テーブル + +なし(DB操作なし) + +## 処理フロー +1. 初期処理(開始MSG→ワークエリア初期化→SUB01DAT 運用日付取得。異常時は 4000MSGOUTTST+9000ERRTST) +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 を割当てる diff --git a/使用資源一覧/JIN09RPT_使用資源一覧.md b/使用資源一覧/JIN09RPT_使用資源一覧.md index 80f60cd..07d635e 100644 --- a/使用資源一覧/JIN09RPT_使用資源一覧.md +++ b/使用資源一覧/JIN09RPT_使用資源一覧.md @@ -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) diff --git a/品質管理/カバレッジ統計.md b/品質管理/カバレッジ統計.md index 18546b0..c4ebf19 100644 --- a/品質管理/カバレッジ統計.md +++ b/品質管理/カバレッジ統計.md @@ -15,12 +15,12 @@ | 01 | マッチング(1:1) | 匹配 | ZAN04MAT | ◎ | | 02 | マッチング(1:N) | 匹配 | KIN05MAT, KIN03EXP | ◎ | | 03 | マッチング(N:1) | 匹配 | ZAN03CHK | ◎ | -| 04 | レイアウト編集のみ(GETPUT) | 编辑 | KIN06CLD, KYU08PRI | ◎ | -| 05 | 振り分け(IF文) | 分支 | 全メインプログラム(37本) | ◎ | -| 06 | 振り分け(EVALUATE文) | 分支 | 37本中25本(KIN04/KIN06以外、SHA01~SHA08は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⇒M:N) | 匹配 | SHA06TWM | ◎ | | 23 | SELECT条件 | 数据库 | KYU05DED | ◎ | | 24 | 内部テーブル検索 | 内部处理 | KIN01INP(SEARCH), KIN03EXP(SEARCH ALL), ZAN03CHK(SEARCH ALL), KYU05DED(SEARCH ALL), JIN02SKL(SEARCH ALL) | ◎ | -| 25 | サブプログラム使用 | 内部处理 | SUB01DAT~SUB05TIM | ◎ | +| 25 | サブプログラム使用 | 内部处理 | SUB01DAT~SUB05TIM, 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 | SORT(INPUT/OUTPUT PROCEDURE) | 排序 | SHA08SRT | ◎ | +| 34 | SORT(INPUT/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-PAGE(JIN04PRT: LINAGE制御ページヘッダー) | | 15 | AUTHOR | ◎ | IDENTIFICATION DIVISION 全プログラム | | 16 | BINARY | △ | PIC 9(002) BINARY(JIN02SKL: マスタレベル定義) | | 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 CONTENT(JIN05UPD: 3400DBERRSOR) | +| 19 | CALL | △ | CALL USING使用。ON EXCEPTION(JIN08TST: 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 LOCK(JIN04PRT, 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 DATE(JIN04PRT: 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句未使用。UPON(JIN04PRT, JIN05UPD, JIN08TST)、WITH NO ADVANCING(JIN04PRT, 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 | ◎ | ソース行 EJECT(JIN09RPT: PROCEDURE DIVISION 直後) | | 53 | ELSE | ◎ | IF ELSE END-IF 全プログラム | | 54 | END | ◎ | END-IF、END-READ、END-PERFORM等スコープターミネータ 全プログラム | | 55 | END-ADD | ◎ | JIN02SKL(ADD 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 EXCEPTION(JIN05UPD/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 FALSE(JIN09RPT: 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 | ◎ | JIN02SKL(IF 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 | △ | JIN01KNS(PROGRAM-ID IS INITIAL: サブPGMコール時の初期化属性) | -| 96 | INITIALIZE | △ | INITIALIZE(基本形)全プログラム。JIN01KNSはINITIALIZE後の88-LevelにMOVE '0'で対応。REPLACING/WITH FILLER未使用 | +| 96 | INITIALIZE | △ | INITIALIZE(基本形)全プログラム。REPLACING(JIN05UPD: 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 SENTENCE(JIN09RPT: レベル判定 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 BY(JIN02SKL: ASCENDING KEY + DEPENDING ON) | | 117 | OF | ◎ | データ参照修飾、LENGTH OF(全プログラム) | -| 118 | OMITTED | × | CALL OMITTED未使用 | +| 118 | OMITTED | ◎ | CALL USING ... OMITTED(JIN08TST: 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 | △ | JIN02SKL(AGG-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 SENTENCE(JIN09RPT: レベル判定 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のみ(SUB03END)。STOP literal未使用 | -| 163 | STRING | △ | STRING DELIMITED BY INTO使用。ON OVERFLOW未使用 | +| 162 | STOP | ◎ | STOP RUN(SUB03END)、STOP literal(JIN04PRT: 9000ERRSOR) | +| 163 | STRING | ◎ | STRING DELIMITED BY INTO使用。ON OVERFLOW(JIN04PRT, 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 THEN(SUB04CHK,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 THRU(JIN05UPD: 88-level 'D' THRU 'G') | +| 170 | TIME | △ | ACCEPT FROM TIME(JIN04PRT: 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 UPON(JIN04PRT, 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 OF(JIN07SUB: 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 | 10(X, N, 9, 9V9, S9V9, S9V9 COMP-3, S9 COMP-3, S9 COMP, S9 BINARY, ZZZ9) | @@ -344,7 +345,7 @@ | 未使用TYPE | 1(G) | | 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)と合わせて参照すること。 --- diff --git a/品質管理/サブシステムE整合性レビュー報告書.md b/品質管理/サブシステムE整合性レビュー報告書.md new file mode 100644 index 0000000..2843a7f --- /dev/null +++ b/品質管理/サブシステムE整合性レビュー報告書.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 の ODO(OCCURS 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. 使用資源一覧の誤記**:JIN01KNS(VALID-ERROR-REC 帰属、JIN01REC 内と誤記載)、JIN02SKL(SUB02MSG CALL箇所 4000→6000、JIN01REC 誤使用)、JIN09RPT(SKIP2 誤記載) +- **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≠0(3400DBERRSOR)、上限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) \ No newline at end of file diff --git a/基本設計書/05_人事情報管理システム_設計書(サブシステムE).md b/基本設計書/05_人事情報管理システム_設計書(サブシステムE).md index 9f0f36e..9c16005 100644 --- a/基本設計書/05_人事情報管理システム_設計書(サブシステムE).md +++ b/基本設計書/05_人事情報管理システム_設計書(サブシステムE).md @@ -10,11 +10,12 @@ JIN04PRT(社員台帳印刷)と JIN05UPD(人事異動DB更新)を新規 未カバーのCOBOL予約語を計16語カバーする。 さらに JIN06SRT(社員データ並替)・JIN07SUB(社員情報取得サブPGM)・ JIN08TST(JIN07SUB呼出テスト)を追加し、 -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-LEDGER(133B 台帳印刷ファイル) +├── → JIN-LEDGER(132B 台帳印刷ファイル) │ ╞══ JINJ050 ═══════════════════════════════════╡ │ JIN05UPD(人事異動DB更新) PGMパターン: DB更新 @@ -133,7 +134,7 @@ DBアクセス用の COPY 書式として `DB-COMMON` を WORKING-STORAGE に取 ╞══ JINJ060 ═══════════════════════════════════╡ │ JIN06SRT(社員データ並替) PGMパターン: 34(SORT) │ EMP-VALID(200B)を 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 | DB2(EMPLOYEE) | SUB01DAT, SUB02MSG, SUB03END | -| 6 | JIN06SRT | 34 SORT | EMP-VALIDをEMP-ID昇順に並替。SORT/RELEASE/PERFORM TIMESカバー | JIN01REC, VALID-ERROR-REC, JINDATAC, JINMSGAC, JINENDAC | なし | SUB01DAT, SUB02MSG, SUB03END | +| 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) | diff --git a/詳細設計書/詳細設計書_JIN01KNS.md b/詳細設計書/詳細設計書_JIN01KNS.md index 905feba..13171c0 100644 --- a/詳細設計書/詳細設計書_JIN01KNS.md +++ b/詳細設計書/詳細設計書_JIN01KNS.md @@ -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でカバー) | diff --git a/詳細設計書/詳細設計書_JIN02SKL.md b/詳細設計書/詳細設計書_JIN02SKL.md index 52ca0a5..cabfa63 100644 --- a/詳細設計書/詳細設計書_JIN02SKL.md +++ b/詳細設計書/詳細設計書_JIN02SKL.md @@ -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 でカバー) | diff --git a/詳細設計書/詳細設計書_JIN03RAN.md b/詳細設計書/詳細設計書_JIN03RAN.md index dc26bdc..d5f7cd7 100644 --- a/詳細設計書/詳細設計書_JIN03RAN.md +++ b/詳細設計書/詳細設計書_JIN03RAN.md @@ -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 diff --git a/詳細設計書/詳細設計書_JIN04PRT.md b/詳細設計書/詳細設計書_JIN04PRT.md new file mode 100644 index 0000000..c67a6ff --- /dev/null +++ b/詳細設計書/詳細設計書_JIN04PRT.md @@ -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 で定義 \ No newline at end of file diff --git a/詳細設計書/詳細設計書_JIN05UPD.md b/詳細設計書/詳細設計書_JIN05UPD.md new file mode 100644 index 0000000..1be3b74 --- /dev/null +++ b/詳細設計書/詳細設計書_JIN05UPD.md @@ -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 で定義。 \ No newline at end of file diff --git a/詳細設計書/詳細設計書_JIN06SRT.md b/詳細設計書/詳細設計書_JIN06SRT.md new file mode 100644 index 0000000..dfa9b74 --- /dev/null +++ b/詳細設計書/詳細設計書_JIN06SRT.md @@ -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 と同様) | diff --git a/詳細設計書/詳細設計書_JIN07SUB.md b/詳細設計書/詳細設計書_JIN07SUB.md new file mode 100644 index 0000000..dfc531c --- /dev/null +++ b/詳細設計書/詳細設計書_JIN07SUB.md @@ -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 のみ(インデックスなし)。全件走査し一致レコードを返す。 diff --git a/詳細設計書/詳細設計書_JIN08TST.md b/詳細設計書/詳細設計書_JIN08TST.md new file mode 100644 index 0000000..cd1926d --- /dev/null +++ b/詳細設計書/詳細設計書_JIN08TST.md @@ -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)で実施する。 diff --git a/詳細設計書/詳細設計書_JIN09RPT.md b/詳細設計書/詳細設計書_JIN09RPT.md index dd9c9eb..32e4222 100644 --- a/詳細設計書/詳細設計書_JIN09RPT.md +++ b/詳細設計書/詳細設計書_JIN09RPT.md @@ -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 | 予約語 | 平均点算出 |