Add Subsystem C (KYU01-09): all 9 programs, design docs, resource lists, DDL, COPY, coverage stats
KYU programs for payroll calculation: KYU01CVT - CSV conversion KYU02REG - attendance registration KYU03AGG - aggregation KYU04CAL - salary calculation KYU05DED - deduction calculation KYU06UPD - DB update KYU07DIV - division/pay-slip KYU08PRI - print output KYU09MRG - merge output Includes: - Source programs (9 .cbl) - Compiled executables (9 .exe) - Detailed design docs (9 + sign-off) - Basic design doc (subsystem C overview) - Resource lists (9) - DDL schema (schema_kyu.sql) - COPY book (KYU99REC.cpy) - Coverage statistics update - DB definition update (STATUS values) - Overall system design document
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
# 勤怠システム 設計書
|
||||
|
||||
## システム概要
|
||||
|
||||
本システムは三つのサブシステムで構成される。
|
||||
|
||||
| サブシステム | 役割 | COBOLプログラム数 | 設計書 |
|
||||
|---|---|---|---|---|
|
||||
| **A: 勤怠休暇管理** | 休暇申請取込・打刻データ照合・日別勤怠計算・月次統計DB更新・CSV出力 | 7 | 01_勤怠休暇管理システム_設計書(サブシステムA).md |
|
||||
| **B: 残業統計管理** | 加班申請データ取込・振り分け・重複チェック・打刻照合・マッチング・集約・DB更新 | 6 | 02_残業統計管理システム_設計書(サブシステムB).md |
|
||||
| **C: 給与計算** | 欠勤統計取込・給与計算・給与明細出力 | 2 | 03_給与計算システム_設計書(サブシステムC).md |
|
||||
|
||||
## アーキテクチャ
|
||||
|
||||
- 全JCLステップは、前提条件(ソート)をJCLのSORTユーティリティ(`PGM=SORT`)で実行した後、COBOLプログラム(`EXEC PGM=SSSnnFFF`)を実行する。COBOLプログラム内でソートは行わない。
|
||||
- DB: DB2 for LUW。COBOLからは埋め込みSQL(`EXEC SQL`)で直接アクセスする。
|
||||
- COBOL対象: GnuCOBOL 3.x(IBM互換モード、`SOURCE-COMPUTER. IBM-ZSERIES.`)。
|
||||
- 全パラメータは JCL PARM → `ACCEPT FROM COMMAND-LINE` + `UNSTRING` で解析。
|
||||
|
||||
## サブシステム間連携
|
||||
|
||||
| 連携データ | 出力元 | 入力先 | 方式 | 備考 |
|
||||
|---|---|---|---|---|
|
||||
| EDITED-PUNCH(打刻データ) | A-サブシステム KIN03PCK | B-サブシステム ZANJ013 | ファイル連携 | 打刻データ(出勤/退勤時刻) |
|
||||
| OVT-APPLY(加班申請CSV) | 外部システム | B-サブシステム ZANJ010 | ファイル連携 | 加班申請入力CSV |
|
||||
| ABSENCE-SUMMARY(欠勤統計) | A-サブシステム KIN06DBU | C-サブシステム KYUJ001 | ファイル連携 | 月次欠勤集計(A→C) |
|
||||
| SALARY-DETAIL(給与明細) | C-サブシステム KYU01CAL | C-サブシステム KYU02PRI | ファイル連携 | 社内連携(C内) |
|
||||
|
||||
## 共通関数(サブプログラム)
|
||||
|
||||
| サブプログラム | I/Fコピー句 | 用途 |
|
||||
|---|---|---|
|
||||
| SUB01DAT | D01010AC | 運用日付取得 |
|
||||
| SUB02MSG | MSG000AC | メッセージ編集出力 |
|
||||
| SUB03END | MSG000AC | ABEND終了 |
|
||||
| SUB04CHK | SUB04CHK | 項目チェック(日付/時刻/数値) |
|
||||
| SUB05TIM | TIME010AC | 時刻丸め計算(分→時間) |
|
||||
| SUB06DBU | SUB06DBU | DB更新処理(DB2埋め込みSQL) |
|
||||
|
||||
### SUB05TIM I/F(TIME010AC)
|
||||
|
||||
| パラメータ | 入出力 | 説明 |
|
||||
|-----------|--------|------|
|
||||
| TI-MINUTES | I | 入力分数(PIC 9(6)) |
|
||||
| TI-ROUND-TYPE | I | 丸め種別('MIN30'=0.5h単位, 'MIN6'=0.1h単位) |
|
||||
| TI-RESULT-HOURS | O | 丸め結果時間(PIC 9(4)V9(1)) |
|
||||
| TI-RETURN-CODE | O | 0=正常, 1=入力エラー |
|
||||
@@ -0,0 +1,1181 @@
|
||||
# 給与計算システム 設計書(サブシステムC)
|
||||
|
||||
## システム概要
|
||||
|
||||
本サブシステムは、社員マスタ・勤怠集計データ(サブシステムA・Bの出力)を基に給与計算を行い、
|
||||
部門別分割出力・給与明細印刷・支給データ結合を実行する。
|
||||
各COBOLプログラムは1プログラム=1パターンを原則とし、内部処理(Type 24/25/28)との併用のみ許容する。
|
||||
|
||||
### サブシステム情報
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| サブシステムID | KYU(給与→KYUryo) |
|
||||
| COBOLプログラム数 | 9 |
|
||||
| JCL数 | 6 |
|
||||
|
||||
### システム定数
|
||||
|
||||
| 定数 | 値 | 説明 |
|
||||
|------|-----|------|
|
||||
| BASE-HOURS | 160 | 月所定労働時間(20日×8h)(参考値、コード未使用) |
|
||||
| INSURANCE-RATE | 0.12345 | 社会保険料率(12.345%)(参考値、コード未使用) |
|
||||
| TAX-BASIC-DEDUCTION | 50000 | 基礎控除(月額50,000円) |
|
||||
| OVERTIME-RATE | 1.25 | 時間外労働割増率(25%増) |
|
||||
| HOLIDAY-RATE | 1.35 | 休日労働割増率(35%増) |
|
||||
| MIDNIGHT-RATE | 1.50 | 深夜労働割増率(50%増) |
|
||||
|
||||
### サブシステム間連携
|
||||
|
||||
| 連携データ | 出力元 | 入力先 | 方式 | 備考 |
|
||||
|-----------|--------|--------|------|------|
|
||||
| ABSENCE-SUMMARY(欠勤統計) | A-サブシステム KIN08DBU | KYUJ020 | ファイル連携 | 月次欠勤集計(80B / 社員番号昇順) |
|
||||
| OVT-MONTHLY(残業統計) | B-サブシステム ZAN06UPD | KYUJ020 | DB参照(同一DB2インスタンス) | 残業時間(DB2同一インスタンス内別スキーマ) |
|
||||
| EMP-RECORD(社員固定長) | KYU01CVT | KYU02REG | ファイル連携 | CSV変換後(80B) |
|
||||
| ABSENCE-AGGREGATE(欠勤集約) | KYU03AGG | KYU04CAL | ファイル連携 | 社員別集約後(80B) |
|
||||
| SALARY-DETAIL(給与明細) | KYU04CAL | KYU05DED / KYU06UPD | ファイル連携 | 計算後給与(240B) |
|
||||
| SALARY-NET(差引支給) | KYU05DED | KYU06UPD / KYU07DIV / KYU08PRI / KYU09MRG | ファイル連携 | 控除後支給額(200B) |
|
||||
| PAYMENT-DATA(支給データ) | KYU09MRG | 外部銀行システム | ファイル連携 | 振込データ(200B) |
|
||||
|
||||
---
|
||||
|
||||
## ファイル一覧
|
||||
|
||||
| # | ファイル名 | 編成 | RECM | サイズ | 用途 | 区分 |
|
||||
|---|-----------|------|------|-------|------|------|
|
||||
| 1 | ABSENCE-SUMMARY | SEQUENTIAL | FB | 80 | 欠勤統計(Aシステム出力) | A連携 |
|
||||
| 2 | PAY-PARAM | SEQUENTIAL | FB | 80 | 給与パラメータ(単価・控除率) | 新規 |
|
||||
| 3 | EMP-RECORD | SEQUENTIAL | FB | 80 | 社員マスタ固定長(CSV変換後) | 新規 |
|
||||
| 4 | ABSENCE-AGGREGATE | SEQUENTIAL | FB | 80 | 欠勤集約後(社員単位) | 新規 |
|
||||
| 5 | SALARY-DETAIL | SEQUENTIAL | FB | 240 | 給与明細(計算後) | 新規 |
|
||||
| 6 | SALARY-NET | SEQUENTIAL | FB | 200 | 差引支給額(控除後) | 新規 |
|
||||
| 7 | PAYSLIP | SEQUENTIAL | FB | 200 | 給与明細印刷イメージ | 新規 |
|
||||
| 8 | BONUS-DATA | SEQUENTIAL | FB | 200 | 賞与データ | 新規 |
|
||||
| 9 | PAYMENT-DATA | SEQUENTIAL | FB | 200 | 支給データ(銀行振込用) | 新規 |
|
||||
| 10 | DEPT-OUT-01〜50 | SEQUENTIAL | FB | 200 | 部門別分割出力(最大50ファイル) | 新規 |
|
||||
| 11 | ERROR-LOG | SEQUENTIAL | VB | 最大200 | エラーレコード退避 | A・B共用 |
|
||||
|
||||
### DB二重対応
|
||||
|
||||
本サブシステムのDB操作はDB2の埋め込みSQL(`EXEC SQL`)で直接記述する。
|
||||
社員マスタ(EMP-MASTER)と税率テーブル(TAX-TABLE)は同一DB2インスタンス内の別スキーマ(SALARYDB)で管理する。
|
||||
BサブシステムのOVERTIME.DBも同一DB2インスタンスに存在するため、`スキーマ名.テーブル名` でクロススキーマ参照可能。
|
||||
|
||||
### 共通関数利用方針
|
||||
|
||||
既存のサブプログラム(SUB01DAT~SUB05TIM)は本サブシステムでも利用する。
|
||||
新たな共通関数は追加せず、各プログラム内でロジックを完結させる。
|
||||
|
||||
---
|
||||
|
||||
## DB構成(SALARYDB)
|
||||
|
||||
### DB名称:給与計算データベース(SALARYDB)
|
||||
|
||||
#### テーブル1:EMP-MASTER(社員マスタテーブル)
|
||||
|
||||
| カラム | 型 | 内容 |
|
||||
|--------|---|------|
|
||||
| EMP-ID | CHAR(8) | 社員番号(PK) |
|
||||
| EMP-NAME | VARCHAR(40) | 社員名 |
|
||||
| DEPT-CODE | CHAR(2) | 部署コード(01~50) |
|
||||
| REGION-CODE | CHAR(2) | 地域コード(01~25、FYI用) |
|
||||
| CATEGORY-CODE | CHAR(3) | 社員区分コード(001~100、FYI用) |
|
||||
| BASE-SALARY | DECIMAL(9,0) | 基本給 |
|
||||
| HOURLY-RATE | DECIMAL(7,0) | 時給 |
|
||||
| DEPENDENT-COUNT | SMALLINT | 扶養人数 |
|
||||
| STATUS | CHAR(1) | 0=在籍 / 9=退職 |
|
||||
| UPDATED-AT | TIMESTAMP | 更新日時 |
|
||||
|
||||
#### テーブル2:TAX-TABLE(税率テーブル)
|
||||
|
||||
| カラム | 型 | 内容 |
|
||||
|--------|---|------|
|
||||
| TAX-FROM | DECIMAL(9,0) | 課税所得下限(PK) |
|
||||
| TAX-TO | DECIMAL(9,0) | 課税所得上限(PK) |
|
||||
| TAX-RATE | DECIMAL(5,4) | 税率(0.0500=5%) |
|
||||
| DEDUCTION | DECIMAL(9,0) | 控除額 |
|
||||
|
||||
#### テーブル3:INSURANCE-TABLE(社会保険料率テーブル)
|
||||
|
||||
| カラム | 型 | 内容 |
|
||||
|--------|---|------|
|
||||
| INS-INCOME-FROM | DECIMAL(9,0) | 対象所得下限(PK) |
|
||||
| INS-INCOME-TO | DECIMAL(9,0) | 対象所得上限(PK) |
|
||||
| INS-HEALTH-RATE | DECIMAL(7,6) | 健康保険料率 |
|
||||
| INS-PENSION-RATE | DECIMAL(7,6) | 厚生年金保険料率 |
|
||||
| UPDATED-AT | TIMESTAMP | 更新日時 |
|
||||
|
||||
#### テーブル4:SALARY-RESULTS(給与計算結果テーブル)
|
||||
|
||||
| カラム | 型 | 内容 |
|
||||
|--------|---|------|
|
||||
| EMP-ID | CHAR(8) | 社員番号(PK) |
|
||||
| YEAR-MONTH | CHAR(6) | 対象年月 YYYYMM(PK) |
|
||||
| GROSS-PAYMENT | DECIMAL(9,0) | 支給総額 |
|
||||
| INCOME-TAX | DECIMAL(9,0) | 源泉所得税 |
|
||||
| INSURANCE | DECIMAL(9,0) | 社会保険料 |
|
||||
| RESIDENT-TAX | DECIMAL(9,0) | 住民税 |
|
||||
| NET-PAYMENT | DECIMAL(9,0) | 差引支給額 |
|
||||
| UPDATED-AT | TIMESTAMP | 更新日時 |
|
||||
|
||||
---
|
||||
|
||||
## 処理フロー
|
||||
|
||||
```
|
||||
╞══ KYUJ010 ═══════════════════════════════════╡
|
||||
│ KYU01CVT(CSV→FB変換) PGMパターン: 21
|
||||
│ INSPECT CONVERTING(引用符内改行→SPACE)
|
||||
│ UNSTRING COUNT IN(項目数カウント)
|
||||
│ SUB04CHK で数値妥当性チェック(内部処理25)
|
||||
│ コメント行(先頭#)は読み飛ばし
|
||||
├── 正常 → EMP-RECORD(80B 固定長)
|
||||
└── 異常 → ERROR-LOG
|
||||
│
|
||||
│ KYU02REG(DB2登録) PGMパターン: 09
|
||||
│ EXEC SQL INSERT(新規)
|
||||
│ SQLCODE=-803 → EXEC SQL UPDATE(重複更新)
|
||||
├── → DB2 EMP-MASTER
|
||||
└── 異常 → ERROR-LOG
|
||||
│
|
||||
╞══ KYUJ020 ═══════════════════════════════════╡
|
||||
│ STEP020S: JCL SORT(ABSENCE-SUMMARY → 社員番号昇順)
|
||||
│
|
||||
│ KYU03AGG(欠勤集約) PGMパターン: 08
|
||||
│ 同一社員内の複数欠勤レコードを読込 → 集約
|
||||
│ INITIALIZE REPLACING NUMERIC DATA BY ZERO
|
||||
├── → ABSENCE-AGGREGATE(80B 社員単位1件)
|
||||
└── 異常 → ERROR-LOG
|
||||
│
|
||||
│ KYU04CAL(給与計算) PGMパターン: 32
|
||||
│ ABSENCE-AGGREGATE + EMP-MASTER(DB2参照)
|
||||
│ OVT-MONTHLY(DB2 Bサブシステム参照)
|
||||
│ EVALUATE ALSO(勤怠区分×手当種別の複合分岐)
|
||||
│ COMPUTE ROUNDED ON SIZE ERROR
|
||||
├── → SALARY-DETAIL(240B)
|
||||
└── 異常 → ERROR-LOG
|
||||
│
|
||||
╞══ KYUJ030 ═══════════════════════════════════╡
|
||||
│ KYU05DED(控除計算) PGMパターン: 23
|
||||
│ TAX-TABLE → EXEC SQL SELECT ... BETWEEN
|
||||
│ INSURANCE-TABLE → SEARCH ALL(内部表LOAD後)
|
||||
│ 課税所得計算・源泉所得税・社会保険料・住民税を算出
|
||||
├── → SALARY-NET(200B)
|
||||
└── 異常 → ERROR-LOG
|
||||
│
|
||||
│ KYU06UPD(DB2更新) PGMパターン: 09
|
||||
│ EXEC SQL INSERT(新規)
|
||||
│ SQLCODE=-803 → EXEC SQL UPDATE(再計算更新)
|
||||
├── → DB2 SALARY-RESULTS
|
||||
└── 異常 → ERROR-LOG
|
||||
│
|
||||
╞══ KYUJ040 ═══════════════════════════════════╡
|
||||
│ STEP040S: JCL SORT(SALARY-NET → 部署コード昇順)
|
||||
│
|
||||
│ KYU07DIV(部門分割出力) PGMパターン: 10
|
||||
│ SYSIN制御カードで出力対象部署の絞込可能
|
||||
│ EVALUATE DEPT-CODE で該当ファイルへSELECT WRITE
|
||||
│ 部署別ファイルを順次OPEN/CLOSE(常時1 OPEN)
|
||||
│ CLOSE WITH LOCK で出力ファイル確定
|
||||
├── 部署別 → DEPT-OUT-01〜50
|
||||
└── 異常 → ERROR-LOG
|
||||
│
|
||||
╞══ KYUJ050 ═══════════════════════════════════╡
|
||||
│ STEP050S: JCL SORT(SALARY-NET → 社員番号昇順)
|
||||
│
|
||||
│ KYU08PRI(給与明細印刷) PGMパターン: 04
|
||||
│ FD LINAGE IS 66 LINES / TOP 6 / BOTTOM 6 / FOOTING 60
|
||||
│ WRITE BEFORE ADVANCING PAGE(1社員1ページ)
|
||||
│ BLANK WHEN ZERO / JUSTIFIED RIGHT
|
||||
│ AT END-OF-PAGE / PAGE-COUNTER / SET UP BY
|
||||
├── → PAYSLIP(SYSOUT)
|
||||
└── 異常 → ERROR-LOG
|
||||
│
|
||||
╞══ KYUJ060 ═══════════════════════════════════╡
|
||||
│ KYU09MRG(支給データ結合) PGMパターン: 35
|
||||
│ COBOL MERGE文(SALARY-NET + BONUS-DATA)
|
||||
│ ON ASCENDING KEY MERGE-EMP-ID
|
||||
│ OUTPUT PROCEDURE で社員単位に統合
|
||||
│ RETURN ... AT END でMERGE結果受取
|
||||
├── → PAYMENT-DATA(200B)
|
||||
└── 異常 → ERROR-LOG
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## JCL
|
||||
|
||||
### KYUJ010 — 社員マスタ取込(2ステップ)
|
||||
|
||||
```jcl
|
||||
//KYUJ010 JOB (ACCT),'社員マスタ取込',CLASS=A
|
||||
//*
|
||||
//*--- パラメータ定義 ---
|
||||
//SETPARM SET YEARMONTH=202605
|
||||
//* ※PARM値は本番z/OSでJCLから指定。ローカルGnuCOBOLでは環境変数で代替。
|
||||
//*=====================================================================
|
||||
//* STEP010: CSV→FB変換(Type 21)
|
||||
//*=====================================================================
|
||||
//STEP010 EXEC PGM=KYU01CVT,PARM='YEARMONTH=&YEARMONTH'
|
||||
//KYU01R01 DD DSN=EMP-MASTER.CSV,DISP=SHR
|
||||
//KYU01W01 DD DSN=EMP-RECORD.DAT,DISP=(NEW,PASS)
|
||||
//KYU01W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP020: DB2登録(Type 09)
|
||||
//*=====================================================================
|
||||
//STEP020 EXEC PGM=KYU02REG,PARM='YEARMONTH=&YEARMONTH'
|
||||
//KYU02R02 DD DSN=EMP-RECORD.DAT,DISP=(OLD,DELETE)
|
||||
//KYU02W03 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
|
||||
```
|
||||
|
||||
### KYUJ020 — 給与計算(3ステップ)
|
||||
|
||||
```jcl
|
||||
//KYUJ020 JOB (ACCT),'給与計算',CLASS=A
|
||||
//*
|
||||
//*--- パラメータ定義 ---
|
||||
//SETPARM SET YEARMONTH=202605
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP020S: 欠勤統計 SORT(社員番号昇順)
|
||||
//*=====================================================================
|
||||
//STEP020S EXEC PGM=SORT
|
||||
//SORTIN DD DSN=ABSENCE-SUMMARY.DAT,DISP=SHR
|
||||
//SORTOUT DD DSN=KYU02S01.DAT,DISP=(NEW,PASS)
|
||||
//SYSIN DD *
|
||||
SORT FIELDS=(1,8,CH,A),EQUALS
|
||||
/*
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP021: 欠勤集約(Type 08)
|
||||
//*=====================================================================
|
||||
//STEP021 EXEC PGM=KYU03AGG,PARM='YEARMONTH=&YEARMONTH'
|
||||
//KYU03R01 DD DSN=KYU02S01.DAT,DISP=(OLD,DELETE)
|
||||
//KYU03W01 DD DSN=ABSENCE-AGGREGATE.DAT,DISP=(NEW,PASS)
|
||||
//KYU03W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP022: 給与計算(Type 32)
|
||||
//* EMP-MASTER / OVT-MONTHLY はDB2(EXEC SQL)参照のためDD不要
|
||||
//*=====================================================================
|
||||
//STEP022 EXEC PGM=KYU04CAL,PARM='YEARMONTH=&YEARMONTH'
|
||||
//KYU04R02 DD DSN=ABSENCE-AGGREGATE.DAT,DISP=(OLD,DELETE)
|
||||
//KYU04R03 DD DSN=PAY-PARAM.DAT,DISP=SHR
|
||||
//KYU04W03 DD DSN=SALARY-DETAIL.DAT,DISP=(NEW,CATLG,DELETE)
|
||||
//KYU04W04 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
|
||||
```
|
||||
|
||||
### KYUJ030 — 控除計算(2ステップ)
|
||||
|
||||
```jcl
|
||||
//KYUJ030 JOB (ACCT),'控除計算',CLASS=A
|
||||
//*
|
||||
//*--- パラメータ定義 ---
|
||||
//SETPARM SET YEARMONTH=202605
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP030: 控除計算(Type 23)
|
||||
//* TAX-TABLE / INSURANCE-TABLE はDB2(EXEC SQL)参照のためDD不要
|
||||
//*=====================================================================
|
||||
//STEP030 EXEC PGM=KYU05DED,PARM='YEARMONTH=&YEARMONTH'
|
||||
//KYU05R01 DD DSN=SALARY-DETAIL.DAT,DISP=(OLD,DELETE)
|
||||
//KYU05W01 DD DSN=SALARY-NET.DAT,DISP=(NEW,PASS)
|
||||
//KYU05W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP031: DB2 SALARY-RESULTS 更新(Type 09)
|
||||
//*=====================================================================
|
||||
//STEP031 EXEC PGM=KYU06UPD,PARM='YEARMONTH=&YEARMONTH'
|
||||
//KYU06R02 DD DSN=SALARY-NET.DAT,DISP=(OLD,DELETE)
|
||||
//KYU06W03 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
|
||||
```
|
||||
|
||||
### KYUJ040 — 部門別分割出力
|
||||
|
||||
```jcl
|
||||
//KYUJ040 JOB (ACCT),'部門別分割出力',CLASS=A
|
||||
//*
|
||||
//*--- パラメータ定義 ---
|
||||
//SETPARM SET YEARMONTH=202605
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP040S: SALARY-NET SORT(部署コード昇順)
|
||||
//*=====================================================================
|
||||
//STEP040S EXEC PGM=SORT
|
||||
//SORTIN DD DSN=SALARY-NET.DAT,DISP=SHR
|
||||
//SORTOUT DD DSN=KYU04S01.DAT,DISP=(NEW,PASS)
|
||||
//SYSIN DD *
|
||||
SORT FIELDS=(50,2,CH,A),EQUALS
|
||||
/*
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP040: 50分割出力(Type 10)
|
||||
//* SYSINで出力対象部署絞込可
|
||||
//*=====================================================================
|
||||
//STEP040 EXEC PGM=KYU07DIV,PARM='YEARMONTH=&YEARMONTH'
|
||||
//KYU07R01 DD DSN=KYU04S01.DAT,DISP=(OLD,DELETE)
|
||||
//KYU07D01 DD DSN=DEPT-OUT-01.DAT,DISP=(NEW,CATLG,DELETE)
|
||||
// ...(全50部署)
|
||||
//KYU07D50 DD DSN=DEPT-OUT-50.DAT,DISP=(NEW,CATLG,DELETE)
|
||||
//KYU07SYS DD *
|
||||
DEPT=01,02,05,10
|
||||
/*
|
||||
//KYU07W99 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
|
||||
```
|
||||
|
||||
### KYUJ050 — 給与明細印刷
|
||||
|
||||
```jcl
|
||||
//KYUJ050 JOB (ACCT),'給与明細印刷',CLASS=A
|
||||
//*
|
||||
//*--- パラメータ定義 ---
|
||||
//SETPARM SET YEARMONTH=202605
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP050S: 給与データ SORT(社員番号昇順)
|
||||
//*=====================================================================
|
||||
//STEP050S EXEC PGM=SORT
|
||||
//SORTIN DD DSN=SALARY-NET.DAT,DISP=SHR
|
||||
//SORTOUT DD DSN=KYU05S01.DAT,DISP=(NEW,PASS)
|
||||
//SYSIN DD *
|
||||
SORT FIELDS=(1,8,CH,A),EQUALS
|
||||
/*
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP050: 給与明細印刷(Type 04 LINAGEページ制御)
|
||||
//*=====================================================================
|
||||
//STEP050 EXEC PGM=KYU08PRI,PARM='YEARMONTH=&YEARMONTH'
|
||||
//KYU08R01 DD DSN=KYU05S01.DAT,DISP=(OLD,DELETE)
|
||||
//KYU08W01 DD SYSOUT=A
|
||||
//KYU08W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
|
||||
```
|
||||
|
||||
### KYUJ060 — 支給データ結合
|
||||
|
||||
```jcl
|
||||
//KYUJ060 JOB (ACCT),'支給データ結合',CLASS=A
|
||||
//*
|
||||
//*--- パラメータ定義 ---
|
||||
//SETPARM SET YEARMONTH=202605
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP060: MERGE(Type 35 給与 + 賞与)
|
||||
//*=====================================================================
|
||||
//STEP060 EXEC PGM=KYU09MRG,PARM='YEARMONTH=&YEARMONTH'
|
||||
//KYU09M99 DD UNIT=SYSDA,SPACE=(CYL,(10,5))
|
||||
//KYU09M01 DD DSN=SALARY-NET.DAT,DISP=SHR
|
||||
//KYU09M02 DD DSN=BONUS-DATA.DAT,DISP=SHR
|
||||
//KYU09W01 DD DSN=PAYMENT-DATA.DAT,DISP=(NEW,CATLG,DELETE)
|
||||
//KYU09W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
|
||||
```
|
||||
|
||||
### 実行順序
|
||||
|
||||
本サブシステムのJOBは、A・Bサブシステムの出力を入力とする。
|
||||
JCL起動時は以下の順序を保証すること。
|
||||
|
||||
1. Aサブシステム KINJ080(KIN08DBU)→ ABSENCE-SUMMARY生成
|
||||
2. Bサブシステム ZANJ025(ZAN06UPD)→ DB2 OVT-MONTHLY確定
|
||||
3. **KYUJ010**(マスタ取込、任意タイミング。初回のみ必須)
|
||||
4. **KYUJ020** → **KYUJ030** → **KYUJ040**(またはKYUJ050)→ **KYUJ060**(順次実行)
|
||||
5. KYUJ040 と KYUJ050 は SALARY-NET.DAT を `DISP=SHR` で参照するため並行実行可能
|
||||
|
||||
---
|
||||
|
||||
## プログラム詳細
|
||||
|
||||
### KYU01CVT(社員マスタCSV→FB変換処理) — Type 21
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **プログラム名称** | 社員マスタCSV→FB変換処理 |
|
||||
| **PGMパターン** | CSV→FB変換(改行あり)+ 内部処理25(SUB04CHK数値チェック) |
|
||||
| **SORT前処理** | 不要 |
|
||||
| **入力** | EMP-MASTER.CSV(可変長/改行あり) |
|
||||
| **出力** | EMP-RECORD(80B 固定長)/ ERROR-LOG(VB) |
|
||||
| **件数変化** | N件(CSV行)→ 正常M件 + 異常(N-M)件 |
|
||||
| **使用共通関数** | SUB01DAT, SUB02MSG, SUB03END, SUB04CHK |
|
||||
| **該当プログラム分類** | No.21 CSV→FB変換(改行あり) |
|
||||
|
||||
**入力CSV形式:**
|
||||
|
||||
```
|
||||
EMP001,山田 太郎,01,01,001,300000,1800,2,0
|
||||
EMP002,佐藤 花子,02,01,002,280000,1700,1,0
|
||||
```
|
||||
|
||||
- 引用符(`"`)で囲まれた社員名フィールド内に改行を含む場合は複数行読込
|
||||
- コメント行(先頭`#`)は読み飛ばし
|
||||
|
||||
**機能:**
|
||||
|
||||
1. `OPEN INPUT` CSVファイル(VB編成・可変長)
|
||||
2. `READ` で1行取得。AT END まで繰り返し
|
||||
3. 行内の引用符 `"` の出現状態を追跡し、引用符内改行とレコード境界改行を区別:
|
||||
- `WS-IN-QUOTE` フラグが FALSE かつ行内に奇数個の `"` → 引用符内続行モード開始
|
||||
- `WS-IN-QUOTE` が TRUE かつ行内に奇数個の `"` → 引用符内終了
|
||||
- 引用符内継続行は連結用ワーク領域(WS-CSV-ACCUM)に蓄積
|
||||
4. 完全な1レコード分のデータが揃った時点で、`INSPECT CONVERTING X"0D" X"0A" BY SPACE` で引用符内改行をスペース変換
|
||||
5. `UNSTRING DELIMITED BY ',' INTO ... COUNT IN WS-FIELD-COUNT` でCSV分解+項目数カウント
|
||||
6. SUB04CHK で社員番号(8桁)・時給(7桁)の数値妥当性チェック(内部処理25に該当)
|
||||
7. 社員番号空チェック:`INSPECT TALLYING WS-TALLY FOR LEADING SPACES` → 全桁SPACEならエラー
|
||||
8. 正常レコードは EMP-RECORD(80B)に WRITE
|
||||
9. エラー時は ERROR-LOG に書出し
|
||||
|
||||
#### DECLARATIVES(ファイルエラー処理)
|
||||
|
||||
`DECLARATIVES` 宣言部でファイル入出力エラーを捕捉し、共通エラー処理に制御を移す。
|
||||
|
||||
```
|
||||
DECLARATIVES.
|
||||
KYU01CVT-ERR SECTION.
|
||||
USE AFTER ERROR PROCEDURE ON KYU01R01.
|
||||
KYU01CVT-ERR-PROC.
|
||||
PERFORM 9999-ABEND.
|
||||
.
|
||||
KYU01W01-ERR SECTION.
|
||||
USE AFTER ERROR PROCEDURE ON KYU01W01.
|
||||
KYU01W01-ERR-PROC.
|
||||
PERFORM 9999-ABEND.
|
||||
.
|
||||
END DECLARATIVES.
|
||||
```
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| INSPECT CONVERTING | 引用符内改行コード→SPACE変換 |
|
||||
| UNSTRING COUNT IN | CSV分解時の項目数検証 |
|
||||
| IF ALPHABETIC | 社員名の英字判定 |
|
||||
| DECLARATIVES | ファイル入出力エラー処理の宣言部 |
|
||||
| USE AFTER ERROR | ファイルエラー時の共通エラー処理手続き |
|
||||
|
||||
---
|
||||
|
||||
### KYU02REG(社員マスタDB2登録処理) — Type 09
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **プログラム名称** | 社員マスタDB2登録処理 |
|
||||
| **PGMパターン** | DB更新 |
|
||||
| **SORT前処理** | 不要(KYU01CVTの出力を入力) |
|
||||
| **入力** | EMP-RECORD(80B 固定長) |
|
||||
| **出力** | DB2 EMP-MASTER(INSERT/UPSERT)/ ERROR-LOG(VB) |
|
||||
| **件数変化** | N件 → DB2登録N件(全件) |
|
||||
| **使用共通関数** | SUB02MSG, SUB03END |
|
||||
| **該当プログラム分類** | No.09 DB更新 |
|
||||
|
||||
**機能:**
|
||||
|
||||
1. `OPEN INPUT` EMP-RECORD(80B 固定長)
|
||||
2. `READ` で1件取得。AT END まで繰り返し
|
||||
3. `EXEC SQL INSERT INTO EMP-MASTER ...` でDB2登録
|
||||
4. SQLCODE = -803(重複)の場合、`EXEC SQL UPDATE` で更新
|
||||
5. エラー時は ERROR-LOG に書出し
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| EXEC SQL INSERT | 社員マスタ新規登録 |
|
||||
| SQLCODE判定によるUPSERT | 重複時UPDATE |
|
||||
| CLOSE WITH LOCK | 入力ファイルのロッククローズ |
|
||||
|
||||
---
|
||||
|
||||
### KYU03AGG(欠勤集約処理) — Type 08
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **プログラム名称** | 欠勤集約処理 |
|
||||
| **PGMパターン** | キーブレイク(集約) |
|
||||
| **SORT前処理** | JCL SORT(社員番号昇順) |
|
||||
| **入力** | KYU02S01(80B JCL SORT済み欠勤データ) |
|
||||
| **出力** | ABSENCE-AGGREGATE(80B 社員単位)/ ERROR-LOG(VB) |
|
||||
| **件数変化** | M件(欠勤レコード)→ N件(社員数、M≧N) |
|
||||
| **使用共通関数** | SUB02MSG, SUB03END |
|
||||
| **該当プログラム分類** | No.08 キーブレイク(集約) |
|
||||
|
||||
**機能:**
|
||||
|
||||
同一社員内の複数欠勤レコードを集約する。
|
||||
|
||||
```
|
||||
PERFORM UNTIL WS-EOF = '1'
|
||||
READ KYU08R01 INTO WS-ABSENCE-REC
|
||||
AT END SET WS-EOF TO TRUE
|
||||
END-READ
|
||||
IF NOT WS-EOF
|
||||
IF WS-PREV-EMP-ID = WS-EMP-ID
|
||||
ADD 1 TO WS-ABSENT-COUNT
|
||||
ADD WS-ABSENT-HOURS TO WS-TOTAL-ABSENT-HOURS
|
||||
ELSE
|
||||
PERFORM 2000-WRITE-AGGREGATE
|
||||
MOVE WS-EMP-ID TO WS-PREV-EMP-ID
|
||||
INITIALIZE WS-TOTAL-ABSENT-HOURS
|
||||
WS-ABSENT-COUNT
|
||||
REPLACING NUMERIC DATA BY ZERO
|
||||
MOVE 1 TO WS-ABSENT-COUNT
|
||||
MOVE WS-ABSENT-HOURS TO WS-TOTAL-ABSENT-HOURS
|
||||
END-IF
|
||||
END-IF
|
||||
END-PERFORM.
|
||||
PERFORM 2000-WRITE-AGGREGATE.
|
||||
```
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| INITIALIZE REPLACING NUMERIC DATA BY ZERO | 集約カウンタの型別初期化 |
|
||||
| END-ADD | ADD文の明示的スコープターミネータ |
|
||||
|
||||
---
|
||||
|
||||
### KYU04CAL(給与計算処理) — Type 32
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **プログラム名称** | 給与計算処理 |
|
||||
| **PGMパターン** | 1:N+キーブレイク(同キー) |
|
||||
| **SORT前処理** | 不要(KYU03AGGの出力を入力) |
|
||||
| **入力** | ABSENCE-AGGREGATE(80B)/ PAY-PARAM(80B)/ EMP-MASTER(DB2参照)/ OVT-MONTHLY(DB2 Bサブシステム参照) |
|
||||
| **出力** | SALARY-DETAIL(240B)/ ERROR-LOG(VB) |
|
||||
| **件数変化** | N件(社員)→ N件(社員) |
|
||||
| **使用共通関数** | SUB01DAT, SUB02MSG, SUB03END |
|
||||
| **該当プログラム分類** | No.32 1:N+キーブレイク(同キー) |
|
||||
|
||||
**機能:**
|
||||
|
||||
#### Step1:社員単位の給与計算
|
||||
|
||||
ABSENCE-AGGREGATE(社員単位1件)を読込み、DB2 EMP-MASTER・OVT-MONTHLY を補完参照する。
|
||||
|
||||
```
|
||||
PERFORM UNTIL WS-EOF = '1'
|
||||
READ KYU04R02 INTO WS-ABSENCE-AGG
|
||||
AT END SET WS-EOF TO TRUE
|
||||
END-READ
|
||||
IF NOT WS-EOF
|
||||
PERFORM 2100-CALCULATE-SALARY
|
||||
END-IF
|
||||
END-PERFORM.
|
||||
```
|
||||
|
||||
#### Step2:給与計算
|
||||
|
||||
1. **EMP-MASTER(DB2 SELECT)** で基本給・時給・扶養人数を取得
|
||||
2. **OVT-MONTHLY(DB2 SELECT WHERE EMP-ID / YEAR-MONTH)** で残業時間を取得
|
||||
3. 欠勤控除額 = HOURLY-RATE × 欠勤時間合計
|
||||
4. 時間外手当 = HOURLY-RATE × 残業時間 × OVERTIME-RATE(1.25)
|
||||
5. **支給総額 = 基本給 + 各種手当 - 欠勤控除**
|
||||
|
||||
```
|
||||
EXEC SQL
|
||||
SELECT BASE-SALARY, HOURLY-RATE, DEPENDENT-COUNT
|
||||
INTO :WS-BASE-SALARY, :WS-HOURLY-RATE, :WS-DEPENDENT
|
||||
FROM EMP-MASTER
|
||||
WHERE EMP-ID = :WS-EMP-ID
|
||||
END-EXEC.
|
||||
|
||||
IF SQLCODE = 0
|
||||
COMPUTE WS-ABSENT-DEDUCT ROUNDED =
|
||||
WS-HOURLY-RATE * WS-TOTAL-ABSENT-HOURS
|
||||
ON SIZE ERROR
|
||||
MOVE ZERO TO WS-ABSENT-DEDUCT
|
||||
PERFORM 9999ABDSOR
|
||||
END-COMPUTE
|
||||
COMPUTE WS-OVT-AMOUNT ROUNDED =
|
||||
WS-HOURLY-RATE * WS-OVT-HOURS * WS-OVERTIME-RATE
|
||||
ON SIZE ERROR
|
||||
MOVE ZERO TO WS-OVT-AMOUNT
|
||||
PERFORM 9999ABDSOR
|
||||
END-COMPUTE
|
||||
COMPUTE WS-GROSS-PAYMENT =
|
||||
WS-BASE-SALARY + WS-OVT-AMOUNT - WS-ABSENT-DEDUCT
|
||||
END-COMPUTE
|
||||
END-IF.
|
||||
```
|
||||
|
||||
#### Step3:複合条件分岐(EVALUATE ALSO)
|
||||
|
||||
勤怠区分と手当種別の組み合わせで支給額を判定する。
|
||||
|
||||
```
|
||||
EVALUATE WS-ALLOWANCE-TYPE ALSO WS-ATTEND-TYPE
|
||||
WHEN 'OVT' ALSO 'W'
|
||||
COMPUTE WS-AMOUNT ROUNDED =
|
||||
WS-HOURLY-RATE * WS-OVT-HOURS * 1.25
|
||||
WHEN 'OVT' ALSO 'H'
|
||||
COMPUTE WS-AMOUNT ROUNDED =
|
||||
WS-HOURLY-RATE * WS-OVT-HOURS * 1.35
|
||||
WHEN 'LATE' ALSO ANY
|
||||
COMPUTE WS-AMOUNT ROUNDED =
|
||||
WS-HOURLY-RATE * WS-LATE-HOURS * 0.50
|
||||
WHEN OTHER
|
||||
MOVE ZERO TO WS-AMOUNT
|
||||
END-EVALUATE.
|
||||
```
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| EVALUATE ALSO | 勤怠区分×手当種別の複合分岐 |
|
||||
| OCCURS DESCENDING KEY | 手当テーブルの高額順整列 |
|
||||
| COMPUTE ROUNDED ON SIZE ERROR | 給与計算の桁あふれ処理 |
|
||||
| END-ADD / END-DIVIDE / END-SUBTRACT | 明示的スコープターミネータ |
|
||||
|
||||
---
|
||||
|
||||
### KYU05DED(控除計算処理) — Type 23
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **プログラム名称** | 控除計算処理 |
|
||||
| **PGMパターン** | SELECT条件 |
|
||||
| **SORT前処理** | 不要 |
|
||||
| **入力** | SALARY-DETAIL(240B)/ TAX-TABLE(DB2)/ INSURANCE-TABLE(DB2) |
|
||||
| **出力** | SALARY-NET(200B)/ ERROR-LOG(VB) |
|
||||
| **件数変化** | N件 → N件(1対1) |
|
||||
| **使用共通関数** | SUB02MSG, SUB03END |
|
||||
| **該当プログラム分類** | No.23 SELECT条件 |
|
||||
|
||||
**機能:**
|
||||
|
||||
#### Step1:課税所得計算
|
||||
|
||||
```
|
||||
COMPUTE WS-TAXABLE-INCOME =
|
||||
WS-GROSS-PAYMENT - WS-INSURANCE - WS-BASIC-DEDUCTION
|
||||
END-COMPUTE.
|
||||
```
|
||||
|
||||
#### Step2:税率取得(EXEC SQL SELECT ... BETWEEN)
|
||||
|
||||
```
|
||||
EXEC SQL
|
||||
SELECT TAX-RATE, DEDUCTION
|
||||
INTO :WS-TAX-RATE, :WS-DEDUCTION
|
||||
FROM TAX-TABLE
|
||||
WHERE :WS-TAXABLE-INCOME BETWEEN TAX-FROM AND TAX-TO
|
||||
END-EXEC.
|
||||
|
||||
IF SQLCODE = 0
|
||||
COMPUTE WS-INCOME-TAX ROUNDED =
|
||||
WS-TAXABLE-INCOME * WS-TAX-RATE - WS-DEDUCTION
|
||||
END-COMPUTE
|
||||
ELSE
|
||||
MOVE ZERO TO WS-INCOME-TAX
|
||||
END-IF.
|
||||
```
|
||||
|
||||
#### Step3:社会保険料計算(SEARCH ALL)
|
||||
|
||||
保険料率テーブル(WORKING-STORAGE)を事前LOADし、SEARCH ALLで検索する。
|
||||
|
||||
```
|
||||
01 INSURANCE-WORK.
|
||||
05 IW-COUNT PIC 9(4).
|
||||
05 IW-ENTRY OCCURS 1 TO 200 TIMES
|
||||
DEPENDING ON IW-COUNT
|
||||
ASCENDING KEY IS IW-INCOME-FROM
|
||||
INDEXED BY IW-IDX.
|
||||
10 IW-INCOME-FROM PIC 9(9).
|
||||
10 IW-INCOME-TO PIC 9(9).
|
||||
10 IW-HEALTH-RATE PIC V9(6).
|
||||
10 IW-PENSION-RATE PIC V9(6).
|
||||
05 IW-END.
|
||||
```
|
||||
|
||||
- 初期処理で DB2 INSURANCE-TABLE を全件 SELECT → WORKING-STORAGE に LOAD
|
||||
- `SEARCH ALL` で該当所得範囲の保険料率を検索
|
||||
|
||||
```
|
||||
SEARCH ALL IW-ENTRY
|
||||
AT END
|
||||
PERFORM 9999ABDSOR
|
||||
WHEN IW-INCOME-FROM(IW-IDX) <= WS-TAXABLE-INCOME
|
||||
AND WS-TAXABLE-INCOME <= IW-INCOME-TO(IW-IDX)
|
||||
COMPUTE WS-INSURANCE ROUNDED =
|
||||
WS-TAXABLE-INCOME *
|
||||
(IW-HEALTH-RATE(IW-IDX) + IW-PENSION-RATE(IW-IDX))
|
||||
END-COMPUTE
|
||||
END-SEARCH.
|
||||
```
|
||||
|
||||
#### Step4:差引支給額計算
|
||||
|
||||
```
|
||||
COMPUTE WS-NET-PAYMENT =
|
||||
WS-GROSS-PAYMENT - WS-INCOME-TAX
|
||||
- WS-INSURANCE
|
||||
- WS-RESIDENT-TAX
|
||||
END-COMPUTE.
|
||||
```
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| EXEC SQL SELECT ... BETWEEN | 課税所得範囲検索 |
|
||||
| SEARCH ALL(複数WHEN複合条件) | IW-INCOME-FROM~IW-INCOME-TO範囲判定 |
|
||||
| 88-level VALUES複数値 | 保険料率テーブルの境界値判定 |
|
||||
|
||||
---
|
||||
|
||||
### KYU06UPD(給与計算結果DB2更新処理) — Type 09
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **プログラム名称** | 給与計算結果DB2更新処理 |
|
||||
| **PGMパターン** | DB更新 |
|
||||
| **SORT前処理** | 不要(KYU05DEDの出力を入力) |
|
||||
| **入力** | SALARY-NET(200B) |
|
||||
| **出力** | DB2 SALARY-RESULTS(INSERT/UPSERT)/ ERROR-LOG(VB) |
|
||||
| **件数変化** | N件 → DB2登録N件(全件) |
|
||||
| **使用共通関数** | SUB02MSG, SUB03END |
|
||||
| **該当プログラム分類** | No.09 DB更新 |
|
||||
|
||||
**機能:**
|
||||
|
||||
1. `OPEN INPUT` SALARY-NET(200B)
|
||||
2. `READ` で1件取得。AT END まで繰り返し
|
||||
3. `EXEC SQL INSERT INTO SALARY-RESULTS ...` で登録
|
||||
|
||||
```
|
||||
EXEC SQL
|
||||
INSERT INTO SALARY-RESULTS
|
||||
(EMP-ID, YEAR-MONTH, GROSS-PAYMENT,
|
||||
INCOME-TAX, INSURANCE, RESIDENT-TAX,
|
||||
NET-PAYMENT, UPDATED-AT)
|
||||
VALUES
|
||||
(:WS-EMP-ID, :WS-YEAR-MONTH, :WS-GROSS-PAYMENT,
|
||||
:WS-INCOME-TAX, :WS-INSURANCE, :WS-RESIDENT-TAX,
|
||||
:WS-NET-PAYMENT, CURRENT TIMESTAMP)
|
||||
END-EXEC.
|
||||
```
|
||||
|
||||
4. SQLCODE = -803(重複)の場合、`EXEC SQL UPDATE` で更新
|
||||
|
||||
```
|
||||
IF SQLCODE = -803
|
||||
EXEC SQL
|
||||
UPDATE SALARY-RESULTS SET
|
||||
GROSS-PAYMENT = :WS-GROSS-PAYMENT,
|
||||
INCOME-TAX = :WS-INCOME-TAX,
|
||||
INSURANCE = :WS-INSURANCE,
|
||||
RESIDENT-TAX = :WS-RESIDENT-TAX,
|
||||
NET-PAYMENT = :WS-NET-PAYMENT,
|
||||
UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE EMP-ID = :WS-EMP-ID
|
||||
AND YEAR-MONTH = :WS-YEAR-MONTH
|
||||
END-EXEC
|
||||
END-IF.
|
||||
```
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| EXEC SQL INSERT | SALARY-RESULTS新規登録 |
|
||||
| SQLCODE判定によるUPSERT | 再計算時の重複UPDATE |
|
||||
|
||||
---
|
||||
|
||||
### KYU07DIV(部門別分割出力処理) — Type 10
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **プログラム名称** | 部門別分割出力処理 |
|
||||
| **PGMパターン** | 50分割 |
|
||||
| **SORT前処理** | JCL SORT(部署コード昇順) |
|
||||
| **入力** | KYU04S01(200B JCL SORT済み)/ SYSIN(制御カード) |
|
||||
| **出力** | DEPT-OUT-01〜50(各200B) |
|
||||
| **件数変化** | N件 → 各部署合計N件(全社員) |
|
||||
| **使用共通関数** | SUB02MSG, SUB03END |
|
||||
| **該当プログラム分類** | No.10 50分割 |
|
||||
|
||||
**機能:**
|
||||
|
||||
1. `READ SYSIN` で出力対象部署コード一覧を取得(省略時は全50部署)
|
||||
2. JCL SORT済みのため部署コード順に入力。部署コードが変わるたびにファイルを切替
|
||||
3. 部署コード単位でファイルを開閉し、常に1ファイルのみ OPEN 状態を保つ
|
||||
|
||||
```
|
||||
PERFORM UNTIL WS-EOF = '1'
|
||||
READ KYU07R01 INTO WS-SALARY-REC
|
||||
AT END SET WS-EOF TO TRUE
|
||||
END-READ
|
||||
IF NOT WS-EOF AND WS-DEPT-CODE IN 対象部署一覧
|
||||
IF WS-PREV-DEPT > SPACES
|
||||
AND WS-PREV-DEPT NOT = WS-DEPT-CODE
|
||||
PERFORM 3000-CLOSE-FILE
|
||||
END-IF
|
||||
IF WS-DEPT-CODE NOT = WS-PREV-DEPT
|
||||
PERFORM 3100-OPEN-FILE
|
||||
END-IF
|
||||
EVALUATE WS-DEPT-CODE
|
||||
WHEN '01' WRITE DEPT01-REC FROM WS-SALARY-REC
|
||||
WHEN '02' WRITE DEPT02-REC FROM WS-SALARY-REC
|
||||
...
|
||||
WHEN '50' WRITE DEPT50-REC FROM WS-SALARY-REC
|
||||
WHEN OTHER CONTINUE
|
||||
END-EVALUATE
|
||||
MOVE WS-DEPT-CODE TO WS-PREV-DEPT
|
||||
END-IF
|
||||
END-PERFORM.
|
||||
IF WS-PREV-DEPT > SPACES
|
||||
PERFORM 3000-CLOSE-FILE
|
||||
END-IF.
|
||||
```
|
||||
|
||||
4. 全ファイル終了後、最終部署ファイルを `CLOSE WITH LOCK` で確定
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| 50分割(部署別1ファイルずつOPEN/CLOSE切替) | 部署別出力(常時1 OPEN でリソース節約) |
|
||||
| CLOSE WITH LOCK | 出力ファイルのロッククローズ |
|
||||
| READ SYSIN | 制御カードによる出力対象部署指定(内部処理28) |
|
||||
|
||||
---
|
||||
|
||||
### KYU08PRI(給与明細印刷処理) — Type 04
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **プログラム名称** | 給与明細印刷処理 |
|
||||
| **PGMパターン** | レイアウト編集のみ(GETPUT)+ LINAGEページ制御 |
|
||||
| **SORT前処理** | JCL SORT(社員番号昇順) |
|
||||
| **入力** | KYU05S01(200B) |
|
||||
| **出力** | PAYSLIP(SYSOUT A行 200B)/ ERROR-LOG(VB) |
|
||||
| **件数変化** | N件 → 1社員1ページ(Nページ) |
|
||||
| **使用共通関数** | SUB01DAT, SUB02MSG, SUB03END |
|
||||
| **該当プログラム分類** | No.04 レイアウト編集のみ(GETPUT) |
|
||||
|
||||
**機能:**
|
||||
|
||||
#### Step1:LINAGEページ定義
|
||||
|
||||
```
|
||||
FD KYU08W01
|
||||
LABEL RECORDS STANDARD
|
||||
LINAGE IS 66 LINES
|
||||
FOOTING IS 60
|
||||
TOP 6
|
||||
BOTTOM 6.
|
||||
```
|
||||
|
||||
- 1ページ66行、先頭6行(TOP)= ヘッダ領域、最終6行(BOTTOM)= フッタ領域
|
||||
|
||||
#### Step2:明細行編集
|
||||
|
||||
```
|
||||
01 PAYSLIP-HEADER.
|
||||
05 PH-TITLE PIC X(40) VALUE
|
||||
'========== 給与明細書 =========='.
|
||||
05 FILLER PIC X(10) VALUE SPACES.
|
||||
05 PH-PAGE-NO PIC Z(4)9 VALUE ZERO.
|
||||
05 FILLER PIC X(02) VALUE '頁'.
|
||||
|
||||
01 PAYSLIP-DETAIL.
|
||||
05 PD-EMP-ID PIC X(08).
|
||||
05 FILLER PIC X(02) VALUE SPACES.
|
||||
05 PD-EMP-NAME PIC X(20) JUSTIFIED RIGHT.
|
||||
05 FILLER PIC X(02) VALUE SPACES.
|
||||
05 PD-BASIC-SALARY PIC Z(8)9 BLANK WHEN ZERO.
|
||||
05 FILLER PIC X(02) VALUE SPACES.
|
||||
05 PD-NET-PAYMENT PIC Z(8)9 BLANK WHEN ZERO.
|
||||
```
|
||||
|
||||
#### Step3:ページ制御
|
||||
|
||||
```
|
||||
WRITE PAYSLIP-REC FROM PAYSLIP-HEADER
|
||||
BEFORE ADVANCING PAGE.
|
||||
|
||||
PERFORM VARYING WS-LINE FROM 1 BY 1
|
||||
UNTIL WS-LINE > WS-DETAIL-LINES
|
||||
WRITE PAYSLIP-REC FROM PAYSLIP-DETAIL
|
||||
BEFORE ADVANCING 1 LINE
|
||||
AT END-OF-PAGE
|
||||
WRITE PAYSLIP-REC FROM PAYSLIP-FOOTER
|
||||
BEFORE ADVANCING PAGE
|
||||
SET WS-PAGE-END TO TRUE
|
||||
END-WRITE
|
||||
END-PERFORM.
|
||||
```
|
||||
|
||||
- `PAGE-COUNTER` 特殊レジスタで自動ページ番号管理
|
||||
- `SET UP BY` / `SET DOWN BY` で `PAGE-COUNTER` 操作
|
||||
- 社員ごとに `WRITE BEFORE ADVANCING PAGE` で改ページ
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| FD LINAGE IS ... TOP/BOTTOM/FOOTING | 明細ページ制御 |
|
||||
| WRITE BEFORE ADVANCING PAGE | 改ページ制御 |
|
||||
| WRITE BEFORE ADVANCING 1 LINE | 行送り制御 |
|
||||
| WRITE AT END-OF-PAGE | ページ終端検出 |
|
||||
| PAGE-COUNTER | ページ番号自動計数 |
|
||||
| BLANK WHEN ZERO | ゼロ金額非表示 |
|
||||
| JUSTIFIED RIGHT | 右詰め編集 |
|
||||
| SET UP BY / SET DOWN BY | カウンタ増減操作 |
|
||||
|
||||
---
|
||||
|
||||
### KYU09MRG(支給データ結合処理) — Type 35
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **プログラム名称** | 支給データ結合処理 |
|
||||
| **PGMパターン** | MERGE(複数ファイル結合) |
|
||||
| **SORT前処理** | 不要(MERGE文が自ら結合) |
|
||||
| **入力** | SALARY-NET(200B)/ BONUS-DATA(200B) |
|
||||
| **出力** | PAYMENT-DATA(200B)/ ERROR-LOG(VB) |
|
||||
| **件数変化** | N件 + M件 → (N+M)件(社員単位に統合後N件) |
|
||||
| **使用共通関数** | SUB01DAT, SUB02MSG, SUB03END |
|
||||
| **該当プログラム分類** | No.35 MERGE(複数ファイル結合) |
|
||||
|
||||
**機能:**
|
||||
|
||||
#### MERGE文によるファイル結合
|
||||
|
||||
SALARY-NET と BONUS-DATA は共に200B固定長で、社員番号(EMP-ID)が1桁目から8桁で共通。
|
||||
MERGE文で社員番号昇順に結合し、同一社員の給与レコードと賞与レコードを連続取得する。
|
||||
|
||||
```
|
||||
PROCEDURE DIVISION USING KYU-PARM.
|
||||
|
||||
MAIN-MERGE SECTION.
|
||||
MERGE WORK-FILE
|
||||
ON ASCENDING KEY MERGE-EMP-ID
|
||||
USING SALARY-FILE BONUS-FILE
|
||||
OUTPUT PROCEDURE 3000-MERGE-OUTPUT
|
||||
.
|
||||
GOBACK.
|
||||
```
|
||||
|
||||
#### OUTPUT PROCEDURE:社員単位の支給データ生成
|
||||
|
||||
MERGE結果を受け取り、同一社員内で給与(TYPE='S')と賞与(TYPE='B')のレコードを統合する。
|
||||
|
||||
```
|
||||
3000-MERGE-OUTPUT SECTION.
|
||||
PERFORM WITH TEST AFTER
|
||||
UNTIL WS-MERGE-EOF
|
||||
RETURN WORK-FILE INTO WS-MERGE-REC
|
||||
AT END SET WS-MERGE-EOF TO TRUE
|
||||
END-RETURN
|
||||
IF NOT WS-MERGE-EOF
|
||||
MOVE MERGE-EMP-ID OF WS-MERGE-REC
|
||||
TO WS-CURRENT-EMP
|
||||
MOVE ZEROS TO WS-SALARY-AMOUNT
|
||||
WS-BONUS-AMOUNT
|
||||
PERFORM UNTIL WS-CURRENT-EMP
|
||||
NOT = MERGE-EMP-ID OF WS-MERGE-REC
|
||||
IF WS-RECORD-TYPE = 'S'
|
||||
MOVE WS-PAY-AMOUNT TO WS-SALARY-AMOUNT
|
||||
ELSE
|
||||
MOVE WS-PAY-AMOUNT TO WS-BONUS-AMOUNT
|
||||
END-IF
|
||||
RETURN WORK-FILE INTO WS-MERGE-REC
|
||||
AT END
|
||||
MOVE HIGH-VALUES TO MERGE-EMP-ID
|
||||
EXIT PERFORM
|
||||
END-RETURN
|
||||
END-PERFORM
|
||||
ADD WS-SALARY-AMOUNT TO WS-BONUS-AMOUNT
|
||||
GIVING WS-TOTAL-PAYMENT
|
||||
WRITE PAYMENT-REC FROM WS-PAYMENT-DATA
|
||||
END-IF
|
||||
END-PERFORM.
|
||||
```
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| MERGE文(USING複数ファイル) | 給与+賞与の社員番号昇順結合 |
|
||||
| MERGE ... OUTPUT PROCEDURE | MERGE結果の後処理 |
|
||||
| RETURN ... AT END | MERGE結果レコード取得 |
|
||||
| ENTRY | 代替エントリポイント |
|
||||
|
||||
---
|
||||
|
||||
## レコード構成
|
||||
|
||||
### EMP-RECORD(80B) — KYU01CVT出力
|
||||
|
||||
| # | 項目 | 名称 | 開始 | 長さ | 属性 | 備考 |
|
||||
|---|------|------|------|------|------|------|
|
||||
| 1 | 社員番号 | ER-EMP-ID | 1 | 8 | X(8) | |
|
||||
| 2 | 社員名 | ER-EMP-NAME | 9 | 40 | X(40) | |
|
||||
| 3 | 部署コード | ER-DEPT-CODE | 49 | 2 | X(2) | |
|
||||
| 4 | 地域コード | ER-REGION-CODE | 51 | 2 | X(2) | |
|
||||
| 5 | 社員区分コード | ER-CATEGORY-CODE | 53 | 3 | X(3) | |
|
||||
| 6 | 基本給 | ER-BASE-SALARY | 56 | 9 | 9(9) | |
|
||||
| 7 | 時給 | ER-HOURLY-RATE | 65 | 7 | 9(7) | |
|
||||
| 8 | 扶養人数 | ER-DEPENDENT-COUNT | 72 | 2 | 9(2) | |
|
||||
| 9 | ステータス | ER-STATUS | 74 | 1 | X(1) | |
|
||||
| 10 | 予備 | ER-FILLER | 75 | 6 | X(6) | |
|
||||
|
||||
### ABSENCE-AGGREGATE(80B) — KYU03AGG出力
|
||||
|
||||
| # | 項目 | 名称 | 開始 | 長さ | 属性 | 備考 |
|
||||
|---|------|------|------|------|------|------|
|
||||
| 1 | 社員番号 | AA-EMP-ID | 1 | 8 | X(8) | |
|
||||
| 2 | 対象年月 | AA-YEAR-MONTH | 9 | 6 | X(6) | YYYYMM |
|
||||
| 3 | 欠勤時間合計 | AA-TOTAL-ABSENT-HOURS | 15 | 5 | 9(4)V9(1) | |
|
||||
| 4 | 欠勤回数 | AA-ABSENT-COUNT | 20 | 2 | 9(2) | |
|
||||
| 5 | 予備 | AA-FILLER | 22 | 58 | X(58) | |
|
||||
|
||||
### SALARY-DETAIL(240B) — KYU04CAL出力
|
||||
|
||||
| # | 項目 | 名称 | 開始 | 長さ | 属性 | 備考 |
|
||||
|---|------|------|------|------|------|------|
|
||||
| 1 | 社員番号 | SD-EMP-ID | 1 | 8 | X(8) | |
|
||||
| 2 | 社員名 | SD-EMP-NAME | 9 | 40 | X(40) | |
|
||||
| 3 | 部署コード | SD-DEPT-CODE | 49 | 2 | X(2) | |
|
||||
| 4 | 基本給 | SD-BASIC-SALARY | 51 | 9 | 9(9) | |
|
||||
| 5 | 時間外手当 | SD-OVT-AMOUNT | 60 | 9 | 9(9) | |
|
||||
| 6 | 休日手当 | SD-HOLIDAY-AMOUNT | 69 | 9 | 9(9) | |
|
||||
| 7 | 欠勤控除 | SD-ABSENT-DEDUCT | 78 | 9 | 9(9) | |
|
||||
| 8 | 支給総額 | SD-GROSS-PAYMENT | 87 | 9 | 9(9) | |
|
||||
| 9 | 残業時間 | SD-OVT-HOURS | 96 | 5 | 9(4)V9(1) | |
|
||||
| 10 | 欠勤時間 | SD-ABSENT-HOURS | 101 | 5 | 9(4)V9(1) | |
|
||||
| 11 | 勤怠区分 | SD-ATTEND-TYPE | 106 | 1 | X(1) | W=平日残業 / H=休日残業 |
|
||||
| 12 | 手当種別 | SD-ALLOWANCE-TYPE | 107 | 3 | X(3) | OVT=残業 / LATE=遅刻 |
|
||||
| 13 | 予備 | SD-FILLER | 110 | 131 | X(131) | |
|
||||
|
||||
### SALARY-NET(200B) — KYU05DED出力
|
||||
|
||||
| # | 項目 | 名称 | 開始 | 長さ | 属性 | 備考 |
|
||||
|---|------|------|------|------|------|------|
|
||||
| 1 | 社員番号 | SN-EMP-ID | 1 | 8 | X(8) | MERGEキー |
|
||||
| 2 | レコード種別 | SN-REC-TYPE | 9 | 1 | X(1) | S=給与 / B=賞与 |
|
||||
| 3 | 社員名 | SN-EMP-NAME | 10 | 40 | X(40) | |
|
||||
| 4 | 部署コード | SN-DEPT-CODE | 50 | 2 | X(2) | |
|
||||
| 5 | 地域コード | SN-REGION-CODE | 52 | 2 | X(2) | |
|
||||
| 6 | 社員区分コード | SN-CATEGORY-CODE | 54 | 3 | X(3) | |
|
||||
| 7 | 支給総額 | SN-GROSS-PAYMENT | 57 | 9 | 9(9) | |
|
||||
| 8 | 源泉所得税 | SN-INCOME-TAX | 66 | 9 | 9(9) | |
|
||||
| 9 | 社会保険料 | SN-INSURANCE | 75 | 9 | 9(9) | |
|
||||
| 10 | 住民税 | SN-RESIDENT-TAX | 84 | 9 | 9(9) | |
|
||||
| 11 | 差引支給額 | SN-NET-PAYMENT | 93 | 9 | 9(9) | |
|
||||
| 12 | 課税所得 | SN-TAXABLE-INCOME | 102 | 9 | 9(9) | |
|
||||
| 13 | 支給額 | SN-PAY-AMOUNT | 111 | 9 | 9(9) | 汎用(給与/賞与) |
|
||||
| 14 | 予備 | SN-FILLER | 120 | 81 | X(81) | |
|
||||
|
||||
> BONUS-DATA も同一レイアウト(200B)。レコード種別 `SN-REC-TYPE` = 'B'、支給額 `SN-PAY-AMOUNT` に賞与額を格納。
|
||||
|
||||
### DEPT-OUT-01〜50(各200B) — KYU07DIV出力
|
||||
|
||||
SALARY-NET と同一レイアウト(200B)。部署コードに応じて振り分け出力。
|
||||
|
||||
### PAYSLIP(200B) — KYU08PRI出力(印刷イメージ)
|
||||
|
||||
| # | 項目 | 名称 | 開始 | 長さ | 属性 | 備考 |
|
||||
|---|------|------|------|------|------|------|
|
||||
| 1 | 社員番号 | PS-EMP-ID | 1 | 8 | X(8) | |
|
||||
| 2 | FILLER | PS-SP1 | 9 | 2 | X(2) | 空白 |
|
||||
| 3 | 社員名 | PS-EMP-NAME | 11 | 20 | X(20) | JUSTIFIED RIGHT |
|
||||
| 4 | FILLER | PS-SP2 | 31 | 2 | X(2) | 空白 |
|
||||
| 5 | 基本給 | PS-BASIC-SALARY | 33 | 9 | Z(8)9 | BLANK WHEN ZERO |
|
||||
| 6 | FILLER | PS-SP3 | 42 | 2 | X(2) | 空白 |
|
||||
| 7 | 差引支給額 | PS-NET-PAYMENT | 44 | 9 | Z(8)9 | BLANK WHEN ZERO |
|
||||
| 8 | FILLER | PS-SP4 | 53 | 2 | X(2) | 空白 |
|
||||
| 9 | ページヘッダ | PS-PAGE-TITLE | 55 | 40 | X(40) | LINAGE制御用 |
|
||||
| 10 | 予備 | PS-FILLER | 95 | 106 | X(106) | |
|
||||
|
||||
### PAYMENT-DATA(200B) — KYU09MRG出力
|
||||
|
||||
| # | 項目 | 名称 | 開始 | 長さ | 属性 | 備考 |
|
||||
|---|------|------|------|------|------|------|
|
||||
| 1 | 社員番号 | PD-EMP-ID | 1 | 8 | X(8) | |
|
||||
| 2 | 支給区分 | PD-PAY-TYPE | 9 | 1 | X(1) | S=給与 / B=賞与 / T=合計 |
|
||||
| 3 | 支給額 | PD-AMOUNT | 10 | 9 | 9(9) | |
|
||||
| 4 | 振込銀行コード | PD-BANK-CODE | 19 | 4 | X(4) | |
|
||||
| 5 | 振込口座番号 | PD-ACCOUNT-NO | 23 | 8 | 9(8) | |
|
||||
| 6 | 予備 | PD-FILLER | 31 | 170 | X(170) | |
|
||||
|
||||
---
|
||||
|
||||
## 新規プログラムタイプカバレッジ一覧(10種)
|
||||
|
||||
| No. | 名称 | 分類 | 対応プログラム | カバレッジ(現状→目標) |
|
||||
|:---:|------|:----:|:--------------:|:---------------------:|
|
||||
| 04 | レイアウト編集のみ(GETPUT) | 编辑 | KYU08PRI | ◎(既存) |
|
||||
| 08 | キーブレイク(集約) | key切 | KYU03AGG | × → ◎ |
|
||||
| 09 | DB更新 | 数据库 | KYU02REG, KYU06UPD | ◎(既存、本サブシステムで+2本) |
|
||||
| 10 | 50分割 | 分割 | KYU07DIV | × → ◎ |
|
||||
| 21 | CSV→FB変換(改行あり) | 文件转换 | KYU01CVT | × → ◎ |
|
||||
| 23 | SELECT条件 | 数据库 | KYU05DED | × → ◎ |
|
||||
| 32 | 1:N+キーブレイク(同キー) | 混合 | KYU04CAL | × → ◎ |
|
||||
| 35 | MERGE(複数ファイル結合) | 排序 | KYU09MRG | × → ◎ |
|
||||
|
||||
**プログラムタイプカバレッジ率:** 16/35(45.7%)→ **24/35(68.6%)**
|
||||
|
||||
> 本サブシステムで新規追加するプログラムタイプは **7種**(08, 09x2, 10, 21, 23, 32, 35)。
|
||||
> 09(DB更新)は既にKIN02UPD・ZAN06UPDで◎であるが、本サブシステムでさらに2本追加し実績を拡充。
|
||||
> No.27(項目チェック半角20桁/4桁)はKYU01CVT内でSUB04CHK(内部処理25)により実装され、プログラムタイプとしては単一(21)を維持。
|
||||
|
||||
---
|
||||
|
||||
## 新規予約語カバレッジ一覧
|
||||
|
||||
| No. | 予約語 | 現状 | 目標 | プログラム | 使用コンテキスト |
|
||||
|:---:|--------|:---:|:----:|-----------|----------------|
|
||||
| 6 | ALPHABETIC | × | ◎ | KYU01CVT | クラス条件(社員名英字判定) |
|
||||
| 8 | ALSO | △ | ◎ | KYU04CAL | EVALUATE ALSO(勤怠区分×手当種別) |
|
||||
| 31 | CONVERTING | × | ◎ | KYU01CVT | INSPECT CONVERTING(引用符内改行→SPACE) |
|
||||
| 34 | COUNT | × | ◎ | KYU01CVT | UNSTRING COUNT IN(項目数カウント) |
|
||||
| 40 | DECLARATIVES | × | ◎ | KYU01CVT | ファイルエラー処理の宣言部 |
|
||||
| 45 | DESCENDING | × | ◎ | KYU04CAL | OCCURS DESCENDING KEY(高額手当優先) |
|
||||
| 50 | DOWN | × | ◎ | KYU08PRI | SET DOWN BY(ページカウンタ減少) |
|
||||
| 55 | END-ADD | × | ◎ | KYU03AGG | ADD文の明示的END-ADD |
|
||||
| 58 | END-DIVIDE | × | ◎ | KYU04CAL | DIVIDE文の明示的END-DIVIDE |
|
||||
| 66 | END-SUBTRACT | × | ◎ | KYU05DED | SUBTRACT文の明示的END-SUBTRACT |
|
||||
| 112 | NEXT | × | △ | KYU09MRG | READ NEXTの代替(MERGE RETURN使用) |
|
||||
| 128 | PAGE | △ | ◎ | KYU08PRI | LINAGE PAGE句 / FD PAGE-COUNTER |
|
||||
| 129 | PAGE-COUNTER | × | ◎ | KYU08PRI | 特殊レジスタ(自動ページ番号) |
|
||||
| 142 | REMOVAL | × | — | — | CLOSE FOR REMOVALは今回不要 |
|
||||
| 177 | UP | × | ◎ | KYU08PRI | SET UP BY(PAGE-COUNTER増加) |
|
||||
| 180 | USE | × | ◎ | KYU01CVT | USE AFTER ERROR(ファイルエラー処理) |
|
||||
| 183 | VALUES | × | ◎ | KYU05DED | 88-level VALUES複数値指定 |
|
||||
| 193 | ENTRY | × | ◎ | KYU09MRG | 代替エントリポイント定義 |
|
||||
| 194 | MERGE | × | ◎ | KYU09MRG | MERGE文(複数ファイル結合) |
|
||||
| 196 | RETURN | × | ◎ | KYU09MRG | MERGE OUTPUT PROCEDUREのRETURN文 |
|
||||
| 204 | BEFORE | × | ◎ | KYU08PRI | WRITE BEFORE ADVANCING |
|
||||
|
||||
**予約語カバレッジ率(◎+△):** 125/205(61.0%)→ **145/205(70.7%)**
|
||||
**内 ◎:** 101/205(49.3%)→ **121/205(59.0%)**
|
||||
|
||||
> 前回変更で追加した DECLARATIVES / USE / SORT / RELEASE / および ADDRESS 除外の修正は、
|
||||
> 今回のパターン純化方針に伴い再編。SORT / RELEASE は KYU07DIV に COBOL SORT を使わないため削除。
|
||||
|
||||
---
|
||||
|
||||
## PICTURE記号カバレッジ拡張
|
||||
|
||||
| 記号 | 現状 | 目標 | プログラム | 使用例 |
|
||||
|:----:|:----:|:----:|-----------|--------|
|
||||
| ZZZ9 | × | ◎ | KYU08PRI | PIC Z(8)9 BLANK WHEN ZERO |
|
||||
|
||||
---
|
||||
|
||||
## 全体サマリ
|
||||
|
||||
| 指標 | 現状 | 目標(追加後) | 増分 |
|
||||
|------|:----:|:--------------:|:----:|
|
||||
| プログラムタイプ(35種) | 16使用 | **24使用** | **+8**(68.6%) |
|
||||
| 予約語 ◎+△(205) | 125 | **145** | **+20**(70.7%) |
|
||||
| 予約語 ◎(205) | 101 | **121** | **+20**(59.0%) |
|
||||
| PICTURE記号(11種) | 7 | **8** | **+1** |
|
||||
| COBOLプログラム数 | 20 | **29** | **+9** |
|
||||
Reference in New Issue
Block a user