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:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
* ERROR-LOG エラーログレコード VB 200B
|
||||
* 全KYUプログラム共用
|
||||
03 (A)ERR-CATEGORY PIC X(008).
|
||||
03 (A)ERR-DETAIL PIC X(192).
|
||||
@@ -0,0 +1,52 @@
|
||||
-- ============================================================
|
||||
-- SALARYDB 給与計算データベース 建表文
|
||||
-- 対象DB2 : LUW
|
||||
-- 作成日 : 2026-07-01
|
||||
-- ============================================================
|
||||
|
||||
-- テーブル1: EMP-MASTER(社員マスタテーブル)
|
||||
CREATE TABLE EMP-MASTER (
|
||||
EMP-ID CHAR(8) NOT NULL,
|
||||
EMP-NAME VARCHAR(40) NOT NULL,
|
||||
DEPT-CODE CHAR(2) NOT NULL,
|
||||
REGION-CODE CHAR(2) NOT NULL,
|
||||
CATEGORY-CODE CHAR(3) NOT NULL,
|
||||
BASE-SALARY DECIMAL(9,0) NOT NULL,
|
||||
HOURLY-RATE DECIMAL(7,0) NOT NULL,
|
||||
DEPENDENT-COUNT SMALLINT NOT NULL,
|
||||
STATUS CHAR(1) NOT NULL,
|
||||
UPDATED-AT TIMESTAMP NOT NULL,
|
||||
PRIMARY KEY (EMP-ID)
|
||||
);
|
||||
|
||||
-- テーブル2: TAX-TABLE(税率テーブル)
|
||||
CREATE TABLE TAX-TABLE (
|
||||
TAX-FROM DECIMAL(9,0) NOT NULL,
|
||||
TAX-TO DECIMAL(9,0) NOT NULL,
|
||||
TAX-RATE DECIMAL(5,4) NOT NULL,
|
||||
DEDUCTION DECIMAL(9,0) NOT NULL,
|
||||
PRIMARY KEY (TAX-FROM, TAX-TO)
|
||||
);
|
||||
|
||||
-- テーブル3: INSURANCE-TABLE(社会保険料率テーブル)
|
||||
CREATE TABLE INSURANCE-TABLE (
|
||||
INS-INCOME-FROM DECIMAL(9,0) NOT NULL,
|
||||
INS-INCOME-TO DECIMAL(9,0) NOT NULL,
|
||||
INS-HEALTH-RATE DECIMAL(7,6) NOT NULL,
|
||||
INS-PENSION-RATE DECIMAL(7,6) NOT NULL,
|
||||
UPDATED-AT TIMESTAMP NOT NULL,
|
||||
PRIMARY KEY (INS-INCOME-FROM, INS-INCOME-TO)
|
||||
);
|
||||
|
||||
-- テーブル4: SALARY-RESULTS(給与計算結果テーブル)
|
||||
CREATE TABLE SALARY-RESULTS (
|
||||
EMP-ID CHAR(8) NOT NULL,
|
||||
YEAR-MONTH CHAR(6) NOT NULL,
|
||||
GROSS-PAYMENT DECIMAL(9,0) NOT NULL,
|
||||
INCOME-TAX DECIMAL(9,0) NOT NULL,
|
||||
INSURANCE DECIMAL(9,0) NOT NULL,
|
||||
RESIDENT-TAX DECIMAL(9,0) NOT NULL,
|
||||
NET-PAYMENT DECIMAL(9,0) NOT NULL,
|
||||
UPDATED-AT TIMESTAMP NOT NULL,
|
||||
PRIMARY KEY (EMP-ID, YEAR-MONTH)
|
||||
);
|
||||
@@ -0,0 +1,473 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. KYU01CVT.
|
||||
*****************************************************************
|
||||
* システム名 : 給与計算システム *
|
||||
* プログラムID : KYU01CVT *
|
||||
* プログラム名 : 社員マスタCSV→FB変換処理 *
|
||||
* 作成日 : 2026-07-01 *
|
||||
* 処理概要 : CSV形式の社員マスタを固定長80Bに変換する *
|
||||
* 引用符内改行をINSPECT CONVERTINGで処理 *
|
||||
* 項目チェックはSUB04CHKで実施 *
|
||||
* プログラム分類: No.21 CSV→FB変換(改行あり) *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 2026-07-01 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R01INNFIL ASSIGN TO EXTERNAL KYU01R01.
|
||||
SELECT W01OUTFIL ASSIGN TO EXTERNAL KYU01W01.
|
||||
SELECT W02OUTFIL ASSIGN TO EXTERNAL KYU01W02.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* R01: CSV入力(可変長) *
|
||||
*****************************************************************
|
||||
FD R01INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS V.
|
||||
01 R01INNREC PIC X(500).
|
||||
*
|
||||
*****************************************************************
|
||||
* W01: EMP-RECORD出力(80B固定長) *
|
||||
*****************************************************************
|
||||
FD W01OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 W01OUTREC.
|
||||
COPY KYU01REC REPLACING ==(A)== BY ==W01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* W02: ERROR-LOG出力(VB) *
|
||||
*****************************************************************
|
||||
FD W02OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS V.
|
||||
01 W02OUTREC.
|
||||
COPY KYU99REC REPLACING ==(A)== BY ==W02==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'KYU01CVT'.
|
||||
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-MSGKEYINF PIC 9(003) VALUE 033.
|
||||
03 CNS-KN0002 PIC 9(001) VALUE 2.
|
||||
03 CNS-ABD999 PIC 9(003) VALUE 999.
|
||||
03 CNS-FLD-COUNT PIC 9(002) VALUE 9.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
01 CUNARA.
|
||||
03 CUN-R01INN 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.
|
||||
*** CSVワーク
|
||||
03 WRK-CSV-LINE PIC X(500).
|
||||
03 WRK-CSV-ACCUM PIC X(500).
|
||||
03 WRK-ACCUM-LEN PIC 9(004).
|
||||
*** 引用符状態フラグ
|
||||
03 WRK-IN-QUOTE PIC X(001).
|
||||
88 WRK-QUOTE-ACTIVE VALUE '1'.
|
||||
88 WRK-QUOTE-INACTIVE VALUE '0'.
|
||||
03 WRK-QUOTE-COUNT PIC 9(002).
|
||||
*** CSV分解フィールド
|
||||
03 WRK-CSV-EMP-ID PIC X(008).
|
||||
03 WRK-CSV-EMP-NAME PIC X(040).
|
||||
03 WRK-CSV-DEPT-CODE PIC X(002).
|
||||
03 WRK-CSV-REGION-CODE PIC X(002).
|
||||
03 WRK-CSV-CATEGORY-CODE PIC X(003).
|
||||
03 WRK-CSV-BASE-SALARY PIC X(009).
|
||||
03 WRK-CSV-HOURLY-RATE PIC X(007).
|
||||
03 WRK-CSV-DEPENDENT-COUNT PIC X(002).
|
||||
03 WRK-CSV-STATUS PIC X(001).
|
||||
*** UNSTRING集計
|
||||
03 WRK-FIELD-COUNT PIC 9(002).
|
||||
*** EOF
|
||||
03 WRK-EOF PIC X(001).
|
||||
88 WRK-EOF-Y VALUE '1'.
|
||||
*** サブプログラム戻り値
|
||||
03 WRK-SUB04-RC PIC 9(004).
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
*** メッセージ出力
|
||||
COPY ZANMSGAC.
|
||||
*** ABEND処理
|
||||
COPY ZANENDAC.
|
||||
*** 項目チェック
|
||||
COPY ZANCHKAC.
|
||||
*
|
||||
PROCEDURE DIVISION.
|
||||
*****************************************************************
|
||||
* DECLARATIVES *
|
||||
*****************************************************************
|
||||
DECLARATIVES.
|
||||
*
|
||||
KYU01CVT-ERR SECTION.
|
||||
USE AFTER ERROR PROCEDURE ON R01INNFIL.
|
||||
KYU01CVT-ERR-PROC.
|
||||
PERFORM 9999ABDSOR.
|
||||
*
|
||||
KYU01W01-ERR SECTION.
|
||||
USE AFTER ERROR PROCEDURE ON W01OUTFIL.
|
||||
KYU01W01-ERR-PROC.
|
||||
PERFORM 9999ABDSOR.
|
||||
*
|
||||
KYU01W02-ERR SECTION.
|
||||
USE AFTER ERROR PROCEDURE ON W02OUTFIL.
|
||||
KYU01W02-ERR-PROC.
|
||||
PERFORM 9999ABDSOR.
|
||||
*
|
||||
END DECLARATIVES.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
* 処理概要 : メインコントロール処理 *
|
||||
*****************************************************************
|
||||
0000MAJCOLSOR SECTION.
|
||||
*
|
||||
*** 初期処理
|
||||
PERFORM 1000ITTSOR.
|
||||
*
|
||||
*** 主処理
|
||||
PERFORM 2000MAJSOR
|
||||
UNTIL WRK-EOF-Y.
|
||||
*
|
||||
*** 終了処理
|
||||
PERFORM 3000STPSOR.
|
||||
*
|
||||
0000MAJCOLSOR-EXT.
|
||||
GOBACK.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.0) *
|
||||
* サブモジュール名: 初期処理 *
|
||||
* 処理概要 : 開始メッセージ・OPEN・初回READ *
|
||||
*****************************************************************
|
||||
1000ITTSOR SECTION.
|
||||
*
|
||||
*** 開始メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGSTR TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** コンパイル日時出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGKEYINF TO M00MSGCOD.
|
||||
MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01.
|
||||
MOVE 'COMPILED' TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** ワーク初期化
|
||||
INITIALIZE WRKARA.
|
||||
MOVE SPACE TO WRK-CSV-ACCUM.
|
||||
MOVE ZERO TO WRK-ACCUM-LEN.
|
||||
*
|
||||
*** 入出力ファイルOPEN
|
||||
OPEN INPUT R01INNFIL.
|
||||
OPEN OUTPUT W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
*** 初回READ
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.1) *
|
||||
* サブモジュール名: R01読込処理 *
|
||||
* 処理概要 : CSV行読込 *
|
||||
*****************************************************************
|
||||
1100R01INNSOR SECTION.
|
||||
*
|
||||
READ R01INNFIL
|
||||
AT END
|
||||
SET WRK-EOF-Y TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO CUN-R01INN
|
||||
MOVE R01INNREC TO WRK-CSV-LINE
|
||||
END-READ.
|
||||
*
|
||||
1100R01INNSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.0) *
|
||||
* サブモジュール名: 主処理 *
|
||||
* 処理概要 : CSVライン解析・変換・出力 *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
*** コメント行はスキップ
|
||||
IF WRK-CSV-LINE(1:1) = '#'
|
||||
PERFORM 1100R01INNSOR
|
||||
EXIT SECTION
|
||||
END-IF.
|
||||
*
|
||||
*** 引用符状態チェック(奇数個の"で状態反転)
|
||||
MOVE ZERO TO WRK-QUOTE-COUNT.
|
||||
INSPECT WRK-CSV-LINE
|
||||
TALLYING WRK-QUOTE-COUNT FOR ALL '"'
|
||||
*
|
||||
IF WRK-QUOTE-ACTIVE
|
||||
IF FUNCTION MOD(WRK-QUOTE-COUNT 2) = 1
|
||||
*** 引用符内終了
|
||||
MOVE '0' TO WRK-IN-QUOTE
|
||||
END-IF
|
||||
*** 蓄積
|
||||
STRING WRK-CSV-ACCUM(1:WRK-ACCUM-LEN)
|
||||
WRK-CSV-LINE
|
||||
DELIMITED BY SIZE
|
||||
INTO WRK-CSV-ACCUM
|
||||
WITH POINTER WRK-ACCUM-LEN
|
||||
END-STRING
|
||||
PERFORM 1100R01INNSOR
|
||||
EXIT SECTION
|
||||
END-IF.
|
||||
*
|
||||
IF FUNCTION MOD(WRK-QUOTE-COUNT 2) = 1
|
||||
*** 引用符内開始
|
||||
MOVE '1' TO WRK-IN-QUOTE
|
||||
MOVE SPACE TO WRK-CSV-ACCUM
|
||||
MOVE 1 TO WRK-ACCUM-LEN
|
||||
STRING WRK-CSV-LINE
|
||||
DELIMITED BY SIZE
|
||||
INTO WRK-CSV-ACCUM
|
||||
WITH POINTER WRK-ACCUM-LEN
|
||||
END-STRING
|
||||
PERFORM 1100R01INNSOR
|
||||
EXIT SECTION
|
||||
END-IF.
|
||||
*
|
||||
*** 通常行(引用符なし)→ 直接CSV-LINEを使用
|
||||
MOVE WRK-CSV-LINE TO WRK-CSV-ACCUM.
|
||||
*
|
||||
*** 引用符内改行をスペース変換
|
||||
INSPECT WRK-CSV-ACCUM
|
||||
CONVERTING X"0D" TO X"20"
|
||||
INSPECT WRK-CSV-ACCUM
|
||||
CONVERTING X"0A" TO X"20"
|
||||
*
|
||||
*** CSV分解
|
||||
PERFORM 2100CSVUNSOR.
|
||||
*
|
||||
*** 項目数チェック
|
||||
IF WRK-FIELD-COUNT NOT = CNS-FLD-COUNT
|
||||
PERFORM 2200ERROUTSOR
|
||||
PERFORM 1100R01INNSOR
|
||||
EXIT SECTION
|
||||
END-IF.
|
||||
*
|
||||
*** 社員番号空チェック
|
||||
INSPECT WRK-CSV-EMP-ID
|
||||
TALLYING WRK-FIELD-COUNT FOR LEADING SPACES
|
||||
IF WRK-FIELD-COUNT = 8
|
||||
MOVE 'EMP- ' TO W02ERR-CATEGORY
|
||||
MOVE CUN-R01INN TO WRK-FIELD-COUNT
|
||||
STRING 'EMPTY EMP-ID AT LINE '
|
||||
WRK-FIELD-COUNT
|
||||
DELIMITED BY SIZE
|
||||
INTO W02ERR-DETAIL
|
||||
END-STRING
|
||||
WRITE W02OUTREC
|
||||
ADD 1 TO CUN-W02OUT
|
||||
PERFORM 1100R01INNSOR
|
||||
EXIT SECTION
|
||||
END-IF.
|
||||
*
|
||||
*** SUB04CHK: EMP-ID数値チェック
|
||||
MOVE 'EMPID' TO C01CHKTYP.
|
||||
MOVE WRK-CSV-EMP-ID TO C01CHKDAT.
|
||||
CALL 'SUB04CHK' USING C01CHKPAR.
|
||||
MOVE C01CHKRRC TO WRK-SUB04-RC.
|
||||
IF WRK-SUB04-RC NOT = 0
|
||||
PERFORM 2200ERROUTSOR
|
||||
PERFORM 1100R01INNSOR
|
||||
EXIT SECTION
|
||||
END-IF.
|
||||
*
|
||||
*** SUB04CHK: HOURLY-RATE数値チェック
|
||||
MOVE 'NUM ' TO C01CHKTYP.
|
||||
MOVE WRK-CSV-HOURLY-RATE TO C01CHKDAT.
|
||||
CALL 'SUB04CHK' USING C01CHKPAR.
|
||||
MOVE C01CHKRRC TO WRK-SUB04-RC.
|
||||
IF WRK-SUB04-RC NOT = 0
|
||||
PERFORM 2200ERROUTSOR
|
||||
PERFORM 1100R01INNSOR
|
||||
EXIT SECTION
|
||||
END-IF.
|
||||
*
|
||||
*** EMP-NAME英字チェック
|
||||
IF WRK-CSV-EMP-NAME NOT ALPHABETIC
|
||||
CONTINUE
|
||||
END-IF.
|
||||
*
|
||||
*** W01OUTREC編集
|
||||
MOVE WRK-CSV-EMP-ID TO W01EMP-ID.
|
||||
MOVE WRK-CSV-EMP-NAME TO W01EMP-NAME.
|
||||
MOVE WRK-CSV-DEPT-CODE TO W01DEPT-CODE.
|
||||
MOVE WRK-CSV-REGION-CODE TO W01REGION-CODE.
|
||||
MOVE WRK-CSV-CATEGORY-CODE TO W01CATEGORY-CODE.
|
||||
MOVE WRK-CSV-BASE-SALARY TO W01BASE-SALARY.
|
||||
MOVE WRK-CSV-HOURLY-RATE TO W01HOURLY-RATE.
|
||||
MOVE WRK-CSV-DEPENDENT-COUNT TO W01DEPENDENT-COUNT.
|
||||
MOVE WRK-CSV-STATUS TO W01STATUS.
|
||||
*
|
||||
*** WRITE EMP-RECORD
|
||||
WRITE W01OUTREC.
|
||||
ADD 1 TO CUN-W01OUT.
|
||||
*
|
||||
*** 次行READ
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.1) *
|
||||
* サブモジュール名: CSV分解処理 *
|
||||
* 処理概要 : UNSTRINGでCSVをフィールド分解 *
|
||||
*****************************************************************
|
||||
2100CSVUNSOR SECTION.
|
||||
*
|
||||
INITIALIZE WRK-CSV-EMP-ID
|
||||
WRK-CSV-EMP-NAME
|
||||
WRK-CSV-DEPT-CODE
|
||||
WRK-CSV-REGION-CODE
|
||||
WRK-CSV-CATEGORY-CODE
|
||||
WRK-CSV-BASE-SALARY
|
||||
WRK-CSV-HOURLY-RATE
|
||||
WRK-CSV-DEPENDENT-COUNT
|
||||
WRK-CSV-STATUS.
|
||||
*
|
||||
UNSTRING WRK-CSV-ACCUM
|
||||
DELIMITED BY ','
|
||||
INTO WRK-CSV-EMP-ID
|
||||
WRK-CSV-EMP-NAME
|
||||
WRK-CSV-DEPT-CODE
|
||||
WRK-CSV-REGION-CODE
|
||||
WRK-CSV-CATEGORY-CODE
|
||||
WRK-CSV-BASE-SALARY
|
||||
WRK-CSV-HOURLY-RATE
|
||||
WRK-CSV-DEPENDENT-COUNT
|
||||
WRK-CSV-STATUS
|
||||
TALLYING IN WRK-FIELD-COUNT
|
||||
END-UNSTRING.
|
||||
*
|
||||
2100CSVUNSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.2) *
|
||||
* サブモジュール名: エラー出力処理 *
|
||||
* 処理概要 : ERROR-LOG書出し *
|
||||
*****************************************************************
|
||||
2200ERROUTSOR SECTION.
|
||||
*
|
||||
MOVE 'CSV-ERR' TO W02ERR-CATEGORY.
|
||||
MOVE WRK-CSV-ACCUM(1:80) TO W02ERR-DETAIL.
|
||||
WRITE W02OUTREC.
|
||||
ADD 1 TO CUN-W02OUT.
|
||||
*
|
||||
2200ERROUTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (3.0) *
|
||||
* サブモジュール名: 終了処理 *
|
||||
* 処理概要 : CLOSE・件数出力・終了MSG *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
*** CLOSE
|
||||
CLOSE R01INNFIL
|
||||
W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
*** 入力件数出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'KYU01R01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 出力件数(W01)
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KYU01W01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 出力件数(W02)
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KYU01W02' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W02OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 終了メッセージ
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
3000STPSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (4.0) *
|
||||
* サブモジュール名: メッセージ出力処理 *
|
||||
* 処理概要 : SUB02MSG呼出 *
|
||||
*****************************************************************
|
||||
4000MSGOUTSOR SECTION.
|
||||
*
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
|
||||
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
|
||||
CALL 'SUB02MSG' USING M00MHOPAR.
|
||||
*
|
||||
4000MSGOUTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (9.9) *
|
||||
* サブモジュール名: ABEND処理 *
|
||||
* 処理概要 : SUB03END呼出 *
|
||||
*****************************************************************
|
||||
9999ABDSOR SECTION.
|
||||
*
|
||||
MOVE CNS-ABD999 TO E01ABDCOD.
|
||||
CALL 'SUB03END' USING E01ABDPAR.
|
||||
*
|
||||
9999ABDSOR-EXT.
|
||||
EXIT.
|
||||
@@ -0,0 +1,319 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. KYU02REG.
|
||||
*****************************************************************
|
||||
* システム名 : 給与計算システム *
|
||||
* プログラムID : KYU02REG *
|
||||
* プログラム名 : 社員マスタDB2登録処理 *
|
||||
* 作成日 : 2026-07-01 *
|
||||
* 処理概要 : EMP-RECORDをDB2 EMP-MASTERにINSERT/UPSERT *
|
||||
* 重複時(-803)はUPDATEに切替 *
|
||||
* プログラム分類: No.09 DB更新 *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 2026-07-01 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R02INNFIL ASSIGN TO EXTERNAL KYU02R02.
|
||||
SELECT W03OUTFIL ASSIGN TO EXTERNAL KYU02W03.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* R02: EMP-RECORD(80B FB) *
|
||||
*****************************************************************
|
||||
FD R02INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R02INNREC.
|
||||
COPY KYU01REC REPLACING ==(A)== BY ==R02==.
|
||||
*
|
||||
*****************************************************************
|
||||
* W03: ERROR-LOG(VB) *
|
||||
*****************************************************************
|
||||
FD W03OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS V.
|
||||
01 W03OUTREC.
|
||||
COPY KYU99REC REPLACING ==(A)== BY ==W03==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* SQLCA *
|
||||
*****************************************************************
|
||||
EXEC SQL INCLUDE SQLCA END-EXEC.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'KYU02REG'.
|
||||
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-MSGKEYINF PIC 9(003) VALUE 033.
|
||||
03 CNS-KN0002 PIC 9(001) VALUE 2.
|
||||
03 CNS-ABD999 PIC 9(003) VALUE 999.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
01 CUNARA.
|
||||
03 CUN-R02INN PIC S9(009) COMP-3 VALUE ZERO.
|
||||
03 CUN-W03OUT PIC S9(009) COMP-3 VALUE ZERO.
|
||||
03 CUN-DB-INS PIC S9(009) COMP-3 VALUE ZERO.
|
||||
03 CUN-DB-UPD PIC S9(009) COMP-3 VALUE ZERO.
|
||||
*
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
03 WRK-EOF PIC X(001).
|
||||
88 WRK-EOF-Y VALUE '1'.
|
||||
*
|
||||
*****************************************************************
|
||||
* DB2ホスト変数 *
|
||||
*****************************************************************
|
||||
01 DBVARA.
|
||||
03 DBV-EMP-ID PIC X(008).
|
||||
03 DBV-EMP-NAME PIC X(040).
|
||||
03 DBV-DEPT-CODE PIC X(002).
|
||||
03 DBV-REGION-CODE PIC X(002).
|
||||
03 DBV-CATEGORY-CODE PIC X(003).
|
||||
03 DBV-BASE-SALARY PIC 9(009).
|
||||
03 DBV-HOURLY-RATE PIC 9(007).
|
||||
03 DBV-DEPENDENT-COUNT PIC 9(002).
|
||||
03 DBV-STATUS PIC X(001).
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
COPY ZANMSGAC.
|
||||
COPY ZANENDAC.
|
||||
*
|
||||
PROCEDURE DIVISION.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
*****************************************************************
|
||||
0000MAJCOLSOR SECTION.
|
||||
*
|
||||
PERFORM 1000ITTSOR.
|
||||
PERFORM 2000MAJSOR
|
||||
UNTIL WRK-EOF-Y.
|
||||
PERFORM 3000STPSOR.
|
||||
*
|
||||
0000MAJCOLSOR-EXT.
|
||||
GOBACK.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.0) *
|
||||
* サブモジュール名: 初期処理 *
|
||||
*****************************************************************
|
||||
1000ITTSOR SECTION.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGSTR TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGKEYINF TO M00MSGCOD.
|
||||
MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01.
|
||||
MOVE 'COMPILED' TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE WRKARA.
|
||||
*
|
||||
OPEN INPUT R02INNFIL.
|
||||
OPEN OUTPUT W03OUTFIL.
|
||||
*
|
||||
*** DB接続
|
||||
EXEC SQL
|
||||
CONNECT TO 'data/SALARY.db'
|
||||
END-EXEC.
|
||||
*
|
||||
PERFORM 1100R02INNSOR.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.1) *
|
||||
* サブモジュール名: R02読込処理 *
|
||||
*****************************************************************
|
||||
1100R02INNSOR SECTION.
|
||||
*
|
||||
READ R02INNFIL
|
||||
AT END
|
||||
SET WRK-EOF-Y TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO CUN-R02INN
|
||||
END-READ.
|
||||
*
|
||||
1100R02INNSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.0) *
|
||||
* サブモジュール名: 主処理 *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
*** DB2ホスト変数にMOVE
|
||||
MOVE R02EMP-ID TO DBV-EMP-ID.
|
||||
MOVE R02EMP-NAME TO DBV-EMP-NAME.
|
||||
MOVE R02DEPT-CODE TO DBV-DEPT-CODE.
|
||||
MOVE R02REGION-CODE TO DBV-REGION-CODE.
|
||||
MOVE R02CATEGORY-CODE TO DBV-CATEGORY-CODE.
|
||||
MOVE R02BASE-SALARY TO DBV-BASE-SALARY.
|
||||
MOVE R02HOURLY-RATE TO DBV-HOURLY-RATE.
|
||||
MOVE R02DEPENDENT-COUNT TO DBV-DEPENDENT-COUNT.
|
||||
MOVE R02STATUS TO DBV-STATUS.
|
||||
*
|
||||
*** INSERT試行
|
||||
EXEC SQL
|
||||
INSERT INTO EMP-MASTER
|
||||
(EMP-ID, EMP-NAME, DEPT-CODE,
|
||||
REGION-CODE, CATEGORY-CODE,
|
||||
BASE-SALARY, HOURLY-RATE,
|
||||
DEPENDENT-COUNT, STATUS,
|
||||
UPDATED-AT)
|
||||
VALUES
|
||||
(:DBV-EMP-ID, :DBV-EMP-NAME, :DBV-DEPT-CODE,
|
||||
:DBV-REGION-CODE, :DBV-CATEGORY-CODE,
|
||||
:DBV-BASE-SALARY, :DBV-HOURLY-RATE,
|
||||
:DBV-DEPENDENT-COUNT, :DBV-STATUS,
|
||||
CURRENT TIMESTAMP)
|
||||
END-EXEC.
|
||||
*
|
||||
IF SQLCODE = 0
|
||||
ADD 1 TO CUN-DB-INS
|
||||
PERFORM 1100R02INNSOR
|
||||
EXIT SECTION
|
||||
END-IF.
|
||||
*
|
||||
*** -803 = 重複 → UPDATE
|
||||
IF SQLCODE = -803
|
||||
EXEC SQL
|
||||
UPDATE EMP-MASTER SET
|
||||
EMP-NAME = :DBV-EMP-NAME
|
||||
,DEPT-CODE = :DBV-DEPT-CODE
|
||||
,REGION-CODE = :DBV-REGION-CODE
|
||||
,CATEGORY-CODE = :DBV-CATEGORY-CODE
|
||||
,BASE-SALARY = :DBV-BASE-SALARY
|
||||
,HOURLY-RATE = :DBV-HOURLY-RATE
|
||||
,DEPENDENT-COUNT = :DBV-DEPENDENT-COUNT
|
||||
,STATUS = :DBV-STATUS
|
||||
,UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE EMP-ID = :DBV-EMP-ID
|
||||
END-EXEC
|
||||
IF SQLCODE = 0
|
||||
ADD 1 TO CUN-DB-UPD
|
||||
ELSE
|
||||
PERFORM 2100ERROUTSOR
|
||||
END-IF
|
||||
PERFORM 1100R02INNSOR
|
||||
EXIT SECTION
|
||||
END-IF.
|
||||
*
|
||||
*** その他SQLエラー
|
||||
PERFORM 2100ERROUTSOR.
|
||||
PERFORM 1100R02INNSOR.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.1) *
|
||||
* サブモジュール名: エラー出力処理 *
|
||||
*****************************************************************
|
||||
2100ERROUTSOR SECTION.
|
||||
*
|
||||
MOVE 'DB-ERR' TO W03ERR-CATEGORY.
|
||||
MOVE DBV-EMP-ID TO W03ERR-DETAIL.
|
||||
WRITE W03OUTREC.
|
||||
ADD 1 TO CUN-W03OUT.
|
||||
*
|
||||
2100ERROUTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (3.0) *
|
||||
* サブモジュール名: 終了処理 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
CLOSE R02INNFIL
|
||||
W03OUTFIL.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'KYU02R02' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R02INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'DB-INSERT' TO M00UMKDATS22-01.
|
||||
MOVE CUN-DB-INS TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'DB-UPDATE' TO M00UMKDATS22-01.
|
||||
MOVE CUN-DB-UPD TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KYU02W03' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W03OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
3000STPSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (4.0) *
|
||||
* サブモジュール名: メッセージ出力処理 *
|
||||
*****************************************************************
|
||||
4000MSGOUTSOR SECTION.
|
||||
*
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
|
||||
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
|
||||
CALL 'SUB02MSG' USING M00MHOPAR.
|
||||
*
|
||||
4000MSGOUTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (9.9) *
|
||||
* サブモジュール名: ABEND処理 *
|
||||
*****************************************************************
|
||||
9999ABDSOR SECTION.
|
||||
*
|
||||
MOVE CNS-ABD999 TO E01ABDCOD.
|
||||
CALL 'SUB03END' USING E01ABDPAR.
|
||||
*
|
||||
9999ABDSOR-EXT.
|
||||
EXIT.
|
||||
@@ -0,0 +1,289 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. KYU03AGG.
|
||||
*****************************************************************
|
||||
* システム名 : 給与計算システム *
|
||||
* プログラムID : KYU03AGG *
|
||||
* プログラム名 : 欠勤集約処理 *
|
||||
* 作成日 : 2026-07-01 *
|
||||
* 処理概要 : JCL SORT済み欠勤データを社員単位に集約 *
|
||||
* 同一社員内の欠勤時間・回数を集計 *
|
||||
* プログラム分類: No.08 キーブレイク(集約) *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 2026-07-01 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R01INNFIL ASSIGN TO EXTERNAL KYU03R01.
|
||||
SELECT W01OUTFIL ASSIGN TO EXTERNAL KYU03W01.
|
||||
SELECT W02OUTFIL ASSIGN TO EXTERNAL KYU03W02.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* R01: ABSENCE-SUMMARY(80B JCL SORT済み) *
|
||||
*****************************************************************
|
||||
FD R01INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R01INNREC PIC X(080).
|
||||
*
|
||||
*****************************************************************
|
||||
* W01: ABSENCE-AGGREGATE(80B 社員単位) *
|
||||
*****************************************************************
|
||||
FD W01OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 W01OUTREC.
|
||||
COPY KYU02REC REPLACING ==(A)== BY ==W01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* W02: ERROR-LOG(VB) — 将来拡張用(現時点では出力なし) *
|
||||
*****************************************************************
|
||||
FD W02OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS V.
|
||||
01 W02OUTREC.
|
||||
COPY KYU99REC REPLACING ==(A)== BY ==W02==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'KYU03AGG'.
|
||||
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-MSGKEYINF PIC 9(003) VALUE 033.
|
||||
03 CNS-KN0002 PIC 9(001) VALUE 2.
|
||||
03 CNS-ABD999 PIC 9(003) VALUE 999.
|
||||
03 CNS-ONE PIC 9(002) VALUE 1.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
01 CUNARA.
|
||||
03 CUN-R01INN 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-ABSENCE-REC.
|
||||
05 WRK-EMP-ID PIC X(008).
|
||||
05 WRK-YEAR-MONTH PIC X(006).
|
||||
05 WRK-ABSENT-HOURS PIC 9(004)V9(001).
|
||||
05 FILLER PIC X(062).
|
||||
*** キーブレイク
|
||||
03 WRK-PREV-EMP-ID PIC X(008).
|
||||
03 WRK-PREV-KEY-SET PIC X(001).
|
||||
88 WRK-PREV-Y VALUE '1'.
|
||||
*** 集約
|
||||
03 WRK-TOTAL-HOURS PIC 9(004)V9(001).
|
||||
03 WRK-ABSENT-COUNT PIC 9(002).
|
||||
*** EOF
|
||||
03 WRK-EOF PIC X(001).
|
||||
88 WRK-EOF-Y VALUE '1'.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
COPY ZANMSGAC.
|
||||
COPY ZANENDAC.
|
||||
*
|
||||
PROCEDURE DIVISION.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
*****************************************************************
|
||||
0000MAJCOLSOR SECTION.
|
||||
*
|
||||
PERFORM 1000ITTSOR.
|
||||
PERFORM 2000MAJSOR
|
||||
UNTIL WRK-EOF-Y.
|
||||
PERFORM 3000STPSOR.
|
||||
*
|
||||
0000MAJCOLSOR-EXT.
|
||||
GOBACK.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.0) *
|
||||
* サブモジュール名: 初期処理 *
|
||||
*****************************************************************
|
||||
1000ITTSOR SECTION.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGSTR TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGKEYINF TO M00MSGCOD.
|
||||
MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01.
|
||||
MOVE 'COMPILED' TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE WRKARA.
|
||||
*
|
||||
OPEN INPUT R01INNFIL.
|
||||
OPEN OUTPUT W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.1) *
|
||||
* サブモジュール名: R01読込処理 *
|
||||
*****************************************************************
|
||||
1100R01INNSOR SECTION.
|
||||
*
|
||||
READ R01INNFIL
|
||||
INTO WRK-ABSENCE-REC
|
||||
AT END
|
||||
SET WRK-EOF-Y TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO CUN-R01INN
|
||||
END-READ.
|
||||
*
|
||||
1100R01INNSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.0) *
|
||||
* サブモジュール名: 主処理 *
|
||||
* 処理概要 : キーブレイク集約処理 *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
IF WRK-PREV-Y
|
||||
IF WRK-PREV-EMP-ID = WRK-EMP-ID
|
||||
*** 同一社員 → 集約加算
|
||||
ADD 1 TO WRK-ABSENT-COUNT
|
||||
ADD WRK-ABSENT-HOURS TO WRK-TOTAL-HOURS
|
||||
ELSE
|
||||
*** 異社員 → 前社員の集約出力
|
||||
PERFORM 2100WRITOUTSOR
|
||||
MOVE WRK-EMP-ID TO WRK-PREV-EMP-ID
|
||||
INITIALIZE WRK-TOTAL-HOURS
|
||||
WRK-ABSENT-COUNT
|
||||
REPLACING NUMERIC DATA BY ZERO
|
||||
MOVE 1 TO WRK-ABSENT-COUNT
|
||||
MOVE WRK-ABSENT-HOURS TO WRK-TOTAL-HOURS
|
||||
END-IF
|
||||
ELSE
|
||||
*** 初回
|
||||
MOVE WRK-EMP-ID TO WRK-PREV-EMP-ID
|
||||
SET WRK-PREV-Y TO TRUE
|
||||
MOVE CNS-ONE TO WRK-ABSENT-COUNT
|
||||
MOVE WRK-ABSENT-HOURS TO WRK-TOTAL-HOURS
|
||||
END-IF.
|
||||
*
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.1) *
|
||||
* サブモジュール名: 集約レコード出力処理 *
|
||||
*****************************************************************
|
||||
2100WRITOUTSOR SECTION.
|
||||
*
|
||||
INITIALIZE W01OUTREC.
|
||||
MOVE WRK-PREV-EMP-ID TO W01EMP-ID.
|
||||
MOVE WRK-YEAR-MONTH TO W01YEAR-MONTH.
|
||||
MOVE WRK-TOTAL-HOURS TO W01TOTAL-HOURS.
|
||||
MOVE WRK-ABSENT-COUNT TO W01ABSENT-COUNT.
|
||||
WRITE W01OUTREC.
|
||||
ADD 1 TO CUN-W01OUT.
|
||||
*
|
||||
2100WRITOUTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (3.0) *
|
||||
* サブモジュール名: 終了処理 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
*** 最終社員の集約出力
|
||||
IF WRK-PREV-Y
|
||||
PERFORM 2100WRITOUTSOR
|
||||
END-IF.
|
||||
*
|
||||
CLOSE R01INNFIL
|
||||
W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'KYU03R01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KYU03W01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KYU03W02' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W02OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
3000STPSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (4.0) *
|
||||
* サブモジュール名: メッセージ出力処理 *
|
||||
*****************************************************************
|
||||
4000MSGOUTSOR SECTION.
|
||||
*
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
|
||||
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
|
||||
CALL 'SUB02MSG' USING M00MHOPAR.
|
||||
*
|
||||
4000MSGOUTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (9.9) *
|
||||
* サブモジュール名: ABEND処理 *
|
||||
*****************************************************************
|
||||
9999ABDSOR SECTION.
|
||||
*
|
||||
MOVE CNS-ABD999 TO E01ABDCOD.
|
||||
CALL 'SUB03END' USING E01ABDPAR.
|
||||
*
|
||||
9999ABDSOR-EXT.
|
||||
EXIT.
|
||||
@@ -0,0 +1,457 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. KYU04CAL.
|
||||
*****************************************************************
|
||||
* システム名 : 給与計算システム *
|
||||
* プログラムID : KYU04CAL *
|
||||
* プログラム名 : 給与計算処理 *
|
||||
* 作成日 : 2026-07-01 *
|
||||
* 処理概要 : 欠勤集約 + EMP-MASTER + OVT-MONTHLY を *
|
||||
* 参照し給与計算を実行 *
|
||||
* 勤怠区分×手当種別の複合分岐はEVALUATE ALSO *
|
||||
* プログラム分類: No.32 1:N+キーブレイク(同キー) *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 2026-07-01 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R02INNFIL ASSIGN TO EXTERNAL KYU04R02.
|
||||
SELECT R03INNFIL ASSIGN TO EXTERNAL KYU04R03.
|
||||
SELECT W03OUTFIL ASSIGN TO EXTERNAL KYU04W03.
|
||||
SELECT W04OUTFIL ASSIGN TO EXTERNAL KYU04W04.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* R02: ABSENCE-AGGREGATE(80B 社員単位) *
|
||||
*****************************************************************
|
||||
FD R02INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R02INNREC.
|
||||
COPY KYU02REC REPLACING ==(A)== BY ==R02==.
|
||||
*
|
||||
*****************************************************************
|
||||
* R03: PAY-PARAM(80B FB) *
|
||||
*****************************************************************
|
||||
FD R03INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R03INNREC PIC X(080).
|
||||
*
|
||||
*****************************************************************
|
||||
* W03: SALARY-DETAIL(240B FB) *
|
||||
*****************************************************************
|
||||
FD W03OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 W03OUTREC.
|
||||
COPY KYU03REC REPLACING ==(A)== BY ==W03==.
|
||||
*
|
||||
*****************************************************************
|
||||
* W04: ERROR-LOG(VB) *
|
||||
*****************************************************************
|
||||
FD W04OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS V.
|
||||
01 W04OUTREC.
|
||||
COPY KYU99REC REPLACING ==(A)== BY ==W04==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* SQLCA *
|
||||
*****************************************************************
|
||||
EXEC SQL INCLUDE SQLCA END-EXEC.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'KYU04CAL'.
|
||||
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-MSGKEYINF PIC 9(003) VALUE 033.
|
||||
03 CNS-KN0002 PIC 9(001) VALUE 2.
|
||||
03 CNS-ABD999 PIC 9(003) VALUE 999.
|
||||
03 CNS-OVERTIME-RATE PIC 9(002)V9(002)
|
||||
VALUE 01.25.
|
||||
03 CNS-HOLIDAY-RATE PIC 9(001)V9(02)
|
||||
VALUE 1.35.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
01 CUNARA.
|
||||
03 CUN-R02INN PIC S9(009) COMP-3 VALUE ZERO.
|
||||
03 CUN-W03OUT PIC S9(009) COMP-3 VALUE ZERO.
|
||||
03 CUN-W04OUT PIC S9(009) COMP-3 VALUE ZERO.
|
||||
*
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
03 WRK-EOF PIC X(001).
|
||||
88 WRK-EOF-Y VALUE '1'.
|
||||
*** パラメータ
|
||||
03 WRK-PARAM.
|
||||
05 WRK-PARAM-BASE PIC X(080).
|
||||
05 WRK-PARAM-FILLER PIC X(080).
|
||||
*** 給与計算
|
||||
03 WRK-YEAR-MONTH PIC X(006).
|
||||
03 WRK-EMP-ID PIC X(008).
|
||||
03 WRK-EMP-NAME PIC X(040).
|
||||
03 WRK-DEPT-CODE PIC X(002).
|
||||
03 WRK-REGION-CODE PIC X(002).
|
||||
03 WRK-CATEGORY-CODE PIC X(003).
|
||||
03 WRK-BASE-SALARY PIC 9(009).
|
||||
03 WRK-HOURLY-RATE PIC 9(007).
|
||||
03 WRK-DEPENDENT-COUNT PIC 9(002).
|
||||
03 WRK-ABSENT-HOURS PIC 9(004)V9(001).
|
||||
03 WRK-OVT-HOURS PIC 9(004)V9(001).
|
||||
03 WRK-ABSENT-DEDUCT PIC 9(009).
|
||||
03 WRK-OVT-AMOUNT PIC 9(009).
|
||||
03 WRK-GROSS-PAYMENT PIC 9(009).
|
||||
03 WRK-ALLOWANCE-TYPE PIC X(003).
|
||||
03 WRK-ATTEND-TYPE PIC X(001).
|
||||
03 WRK-AMOUNT PIC 9(009).
|
||||
*
|
||||
*****************************************************************
|
||||
* DB2ホスト変数 *
|
||||
*****************************************************************
|
||||
01 DBVARA.
|
||||
03 DBV-EMP-ID PIC X(008).
|
||||
03 DBV-BASE-SALARY PIC 9(009).
|
||||
03 DBV-HOURLY-RATE PIC 9(007).
|
||||
03 DBV-DEPENDENT-COUNT PIC 9(002).
|
||||
03 DBV-EMPLOYEE-NAME PIC X(040).
|
||||
03 DBV-DEPT-CODE PIC X(002).
|
||||
03 DBV-OVT-HOURS PIC 9(004)V9(001).
|
||||
03 DBV-STATUS PIC X(001).
|
||||
*
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
COPY ZANDATAC.
|
||||
COPY ZANMSGAC.
|
||||
COPY ZANENDAC.
|
||||
*
|
||||
PROCEDURE DIVISION.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
*****************************************************************
|
||||
0000MAJCOLSOR SECTION.
|
||||
*
|
||||
PERFORM 1000ITTSOR.
|
||||
PERFORM 2000MAJSOR
|
||||
UNTIL WRK-EOF-Y.
|
||||
PERFORM 3000STPSOR.
|
||||
*
|
||||
0000MAJCOLSOR-EXT.
|
||||
GOBACK.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.0) *
|
||||
* サブモジュール名: 初期処理 *
|
||||
*****************************************************************
|
||||
1000ITTSOR SECTION.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGSTR TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGKEYINF TO M00MSGCOD.
|
||||
MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01.
|
||||
MOVE 'COMPILED' TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE WRKARA.
|
||||
*
|
||||
*** 運用日付取得
|
||||
INITIALIZE D01UBSPAR.
|
||||
CALL 'SUB01DAT' USING D01UBSPAR.
|
||||
IF D01FKICOD NOT = ZERO
|
||||
MOVE CNS-MSGSUBEEK TO M00MSGCOD
|
||||
MOVE 'SUB01DAT' TO M00UMKDATS22-01
|
||||
MOVE D01FKICOD TO M00UMKDATS22-02
|
||||
PERFORM 4000MSGOUTSOR
|
||||
PERFORM 9999ABDSOR
|
||||
END-IF.
|
||||
*
|
||||
*** PAY-PARAM読込
|
||||
OPEN INPUT R03INNFIL.
|
||||
READ R03INNFIL
|
||||
INTO WRK-PARAM-BASE
|
||||
END-READ.
|
||||
CLOSE R03INNFIL.
|
||||
*
|
||||
*** パラメータ解析
|
||||
UNSTRING WRK-PARAM-BASE
|
||||
DELIMITED BY ','
|
||||
INTO WRK-YEAR-MONTH
|
||||
END-UNSTRING.
|
||||
*
|
||||
OPEN INPUT R02INNFIL.
|
||||
OPEN OUTPUT W03OUTFIL
|
||||
W04OUTFIL.
|
||||
*
|
||||
*** DB接続
|
||||
EXEC SQL
|
||||
CONNECT TO 'data/SALARY.db'
|
||||
END-EXEC.
|
||||
*
|
||||
PERFORM 1100R02INNSOR.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.1) *
|
||||
* サブモジュール名: R02読込処理 *
|
||||
*****************************************************************
|
||||
1100R02INNSOR SECTION.
|
||||
*
|
||||
READ R02INNFIL
|
||||
AT END
|
||||
SET WRK-EOF-Y TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO CUN-R02INN
|
||||
END-READ.
|
||||
*
|
||||
1100R02INNSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.0) *
|
||||
* サブモジュール名: 主処理 *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
*** ホスト変数セット
|
||||
MOVE R02EMP-ID TO DBV-EMP-ID.
|
||||
*
|
||||
*** DB2 EMP-MASTER参照
|
||||
EXEC SQL
|
||||
SELECT EMP-NAME, DEPT-CODE, REGION-CODE,
|
||||
CATEGORY-CODE, BASE-SALARY, HOURLY-RATE,
|
||||
DEPENDENT-COUNT, STATUS
|
||||
INTO :DBV-EMPLOYEE-NAME,
|
||||
:DBV-DEPT-CODE,
|
||||
:WRK-REGION-CODE,
|
||||
:WRK-CATEGORY-CODE,
|
||||
:DBV-BASE-SALARY,
|
||||
:DBV-HOURLY-RATE,
|
||||
:DBV-DEPENDENT-COUNT,
|
||||
:DBV-STATUS
|
||||
FROM EMP-MASTER
|
||||
WHERE EMP-ID = :DBV-EMP-ID
|
||||
END-EXEC.
|
||||
*
|
||||
IF SQLCODE NOT = 0
|
||||
PERFORM 2200ERROUTSOR
|
||||
PERFORM 1100R02INNSOR
|
||||
EXIT SECTION
|
||||
END-IF.
|
||||
*
|
||||
MOVE DBV-EMPLOYEE-NAME TO WRK-EMP-NAME.
|
||||
MOVE DBV-BASE-SALARY TO WRK-BASE-SALARY.
|
||||
MOVE DBV-HOURLY-RATE TO WRK-HOURLY-RATE.
|
||||
MOVE DBV-DEPT-CODE TO WRK-DEPT-CODE.
|
||||
MOVE R02YEAR-MONTH TO WRK-YEAR-MONTH.
|
||||
MOVE R02TOTAL-HOURS TO WRK-ABSENT-HOURS.
|
||||
*
|
||||
*** OVT-MONTHLY参照(残業時間)
|
||||
EXEC SQL
|
||||
SELECT SUM(OVT-HOURS)
|
||||
INTO :DBV-OVT-HOURS
|
||||
FROM OVT-MONTHLY
|
||||
WHERE EMP-ID = :DBV-EMP-ID
|
||||
AND YEAR-MONTH = :WRK-YEAR-MONTH
|
||||
END-EXEC.
|
||||
IF SQLCODE = 0
|
||||
CONTINUE
|
||||
ELSE
|
||||
MOVE ZERO TO DBV-OVT-HOURS
|
||||
END-IF.
|
||||
*
|
||||
*** 給与計算
|
||||
PERFORM 2100CALCSOR.
|
||||
*
|
||||
*** SALARY-DETAIL出力
|
||||
PERFORM 2110WRITOUTSOR.
|
||||
*
|
||||
PERFORM 1100R02INNSOR.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.1) *
|
||||
* サブモジュール名: 給与計算処理 *
|
||||
*****************************************************************
|
||||
2100CALCSOR SECTION.
|
||||
*
|
||||
*** 欠勤控除額
|
||||
COMPUTE WRK-ABSENT-DEDUCT ROUNDED =
|
||||
DBV-HOURLY-RATE * WRK-ABSENT-HOURS
|
||||
ON SIZE ERROR
|
||||
MOVE ZERO TO WRK-ABSENT-DEDUCT
|
||||
END-COMPUTE.
|
||||
*
|
||||
*** 残業手当
|
||||
COMPUTE WRK-OVT-AMOUNT ROUNDED =
|
||||
DBV-HOURLY-RATE * DBV-OVT-HOURS * CNS-OVERTIME-RATE
|
||||
ON SIZE ERROR
|
||||
MOVE ZERO TO WRK-OVT-AMOUNT
|
||||
END-COMPUTE.
|
||||
*
|
||||
*** EVALUATE ALSO(勤怠区分×手当種別)
|
||||
MOVE 'OVT' TO WRK-ALLOWANCE-TYPE.
|
||||
MOVE 'W' TO WRK-ATTEND-TYPE.
|
||||
*
|
||||
EVALUATE WRK-ALLOWANCE-TYPE
|
||||
ALSO WRK-ATTEND-TYPE
|
||||
WHEN 'OVT' ALSO 'W'
|
||||
COMPUTE WRK-AMOUNT ROUNDED =
|
||||
DBV-HOURLY-RATE * DBV-OVT-HOURS * 1.25
|
||||
END-COMPUTE
|
||||
WHEN 'OVT' ALSO 'H'
|
||||
COMPUTE WRK-AMOUNT ROUNDED =
|
||||
DBV-HOURLY-RATE * DBV-OVT-HOURS * 1.35
|
||||
END-COMPUTE
|
||||
WHEN 'LATE' ALSO ANY
|
||||
COMPUTE WRK-AMOUNT ROUNDED =
|
||||
DBV-HOURLY-RATE * DBV-OVT-HOURS * 0.50
|
||||
END-COMPUTE
|
||||
WHEN OTHER
|
||||
MOVE ZERO TO WRK-AMOUNT
|
||||
END-EVALUATE.
|
||||
*
|
||||
*** 支給総額
|
||||
COMPUTE WRK-GROSS-PAYMENT =
|
||||
DBV-BASE-SALARY + WRK-OVT-AMOUNT
|
||||
- WRK-ABSENT-DEDUCT
|
||||
END-COMPUTE.
|
||||
*
|
||||
2100CALCSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.2) *
|
||||
* サブモジュール名: SALARY-DETAIL出力処理 *
|
||||
*****************************************************************
|
||||
2110WRITOUTSOR SECTION.
|
||||
*
|
||||
INITIALIZE W03OUTREC.
|
||||
MOVE R02EMP-ID TO W03EMP-ID.
|
||||
MOVE WRK-EMP-NAME TO W03EMP-NAME.
|
||||
MOVE WRK-DEPT-CODE TO W03DEPT-CODE.
|
||||
MOVE DBV-BASE-SALARY TO W03BASE-SALARY.
|
||||
MOVE WRK-OVT-AMOUNT TO W03OVT-AMOUNT.
|
||||
MOVE ZERO TO W03HOLIDAY-AMOUNT.
|
||||
MOVE WRK-ABSENT-DEDUCT TO W03ABSENT-DEDUCT.
|
||||
MOVE WRK-GROSS-PAYMENT TO W03GROSS-PAYMENT.
|
||||
MOVE DBV-OVT-HOURS TO W03OVT-HOURS.
|
||||
MOVE WRK-ABSENT-HOURS TO W03ABSENT-HOURS.
|
||||
MOVE WRK-ATTEND-TYPE TO W03ATTEND-TYPE.
|
||||
MOVE WRK-ALLOWANCE-TYPE TO W03ALLOWANCE-TYPE.
|
||||
WRITE W03OUTREC.
|
||||
ADD 1 TO CUN-W03OUT.
|
||||
*
|
||||
2110WRITOUTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.3) *
|
||||
* サブモジュール名: エラー出力処理 *
|
||||
*****************************************************************
|
||||
2200ERROUTSOR SECTION.
|
||||
*
|
||||
MOVE 'DB-ERR' TO W04ERR-CATEGORY.
|
||||
MOVE R02EMP-ID TO W04ERR-DETAIL.
|
||||
WRITE W04OUTREC.
|
||||
ADD 1 TO CUN-W04OUT.
|
||||
*
|
||||
2200ERROUTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (3.0) *
|
||||
* サブモジュール名: 終了処理 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
CLOSE R02INNFIL
|
||||
W03OUTFIL
|
||||
W04OUTFIL.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'KYU04R02' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R02INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KYU04W03' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W03OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KYU04W04' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W04OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
3000STPSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (4.0) *
|
||||
* サブモジュール名: メッセージ出力処理 *
|
||||
*****************************************************************
|
||||
4000MSGOUTSOR SECTION.
|
||||
*
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
|
||||
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
|
||||
CALL 'SUB02MSG' USING M00MHOPAR.
|
||||
*
|
||||
4000MSGOUTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (9.9) *
|
||||
* サブモジュール名: ABEND処理 *
|
||||
*****************************************************************
|
||||
9999ABDSOR SECTION.
|
||||
*
|
||||
MOVE CNS-ABD999 TO E01ABDCOD.
|
||||
CALL 'SUB03END' USING E01ABDPAR.
|
||||
*
|
||||
9999ABDSOR-EXT.
|
||||
EXIT.
|
||||
@@ -0,0 +1,426 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. KYU05DED.
|
||||
*****************************************************************
|
||||
* システム名 : 給与計算システム *
|
||||
* プログラムID : KYU05DED *
|
||||
* プログラム名 : 控除計算処理 *
|
||||
* 作成日 : 2026-07-01 *
|
||||
* 処理概要 : SALARY-DETAILを入力に、源泉所得税・ *
|
||||
* 社会保険料・住民税を計算しSALARY-NET出力 *
|
||||
* TAX-TABLE(DB2 SELECT ... BETWEEN) *
|
||||
* INSURANCE-TABLE(SEARCH ALL)を参照 *
|
||||
* プログラム分類: No.23 SELECT条件 *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 2026-07-01 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R01INNFIL ASSIGN TO EXTERNAL KYU05R01.
|
||||
SELECT W01OUTFIL ASSIGN TO EXTERNAL KYU05W01.
|
||||
SELECT W02OUTFIL ASSIGN TO EXTERNAL KYU05W02.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* R01: SALARY-DETAIL(240B FB) *
|
||||
*****************************************************************
|
||||
FD R01INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R01INNREC.
|
||||
COPY KYU03REC REPLACING ==(A)== BY ==R01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* W01: SALARY-NET(200B FB) *
|
||||
*****************************************************************
|
||||
FD W01OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 W01OUTREC.
|
||||
COPY KYU04REC REPLACING ==(A)== BY ==W01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* W02: ERROR-LOG(VB) *
|
||||
*****************************************************************
|
||||
FD W02OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS V.
|
||||
01 W02OUTREC.
|
||||
COPY KYU99REC REPLACING ==(A)== BY ==W02==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* SQLCA *
|
||||
*****************************************************************
|
||||
EXEC SQL INCLUDE SQLCA END-EXEC.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'KYU05DED'.
|
||||
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-MSGKEYINF PIC 9(003) VALUE 033.
|
||||
03 CNS-KN0002 PIC 9(001) VALUE 2.
|
||||
03 CNS-ABD999 PIC 9(003) VALUE 999.
|
||||
03 CNS-TAX-BASIC-DEDUCTION PIC 9(006) VALUE 050000.
|
||||
03 CNS-RESIDENT-TAX-RATE PIC 9(001)V9(02)
|
||||
VALUE 0.10.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
01 CUNARA.
|
||||
03 CUN-R01INN 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-EOF PIC X(001).
|
||||
88 WRK-EOF-Y VALUE '1'.
|
||||
*** 控除計算
|
||||
03 WRK-GROSS-PAYMENT PIC 9(009).
|
||||
03 WRK-TAXABLE-INCOME PIC 9(009).
|
||||
03 WRK-INCOME-TAX PIC 9(009).
|
||||
03 WRK-INSURANCE PIC 9(009).
|
||||
03 WRK-RESIDENT-TAX PIC 9(009).
|
||||
03 WRK-NET-PAYMENT PIC 9(009).
|
||||
*
|
||||
*
|
||||
*****************************************************************
|
||||
* DB2ホスト変数 *
|
||||
*****************************************************************
|
||||
01 DBVARA.
|
||||
03 DBV-EMP-ID PIC X(008).
|
||||
03 DBV-TAX-RATE PIC 9(001)V9(04).
|
||||
03 DBV-TAX-DEDUCTION PIC 9(009).
|
||||
*
|
||||
*****************************************************************
|
||||
* 保険料率WORKING-STORAGE(SEARCH ALL) *
|
||||
*****************************************************************
|
||||
01 INSURANCE-WORK.
|
||||
03 IW-COUNT PIC 9(004).
|
||||
03 IW-ENTRY OCCURS 1 TO 200 TIMES
|
||||
DEPENDING ON IW-COUNT
|
||||
ASCENDING KEY IS IW-INCOME-FROM
|
||||
INDEXED BY IW-IDX.
|
||||
05 IW-INCOME-FROM PIC 9(009).
|
||||
05 IW-INCOME-TO PIC 9(009).
|
||||
05 IW-HEALTH-RATE PIC V9(006).
|
||||
05 IW-PENSION-RATE PIC V9(006).
|
||||
*
|
||||
*****************************************************************
|
||||
* DB2ホスト変数(保険料率FETCH用) *
|
||||
*****************************************************************
|
||||
01 DBV-INS.
|
||||
03 DBV-INS-INCOME-FROM PIC 9(009).
|
||||
03 DBV-INS-INCOME-TO PIC 9(009).
|
||||
03 DBV-INS-HEALTH-RATE PIC 9(001)V9(06).
|
||||
03 DBV-INS-PENSION-RATE PIC 9(001)V9(06).
|
||||
*
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
COPY ZANMSGAC.
|
||||
COPY ZANENDAC.
|
||||
*
|
||||
PROCEDURE DIVISION.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
*****************************************************************
|
||||
0000MAJCOLSOR SECTION.
|
||||
*
|
||||
PERFORM 1000ITTSOR.
|
||||
PERFORM 2000MAJSOR
|
||||
UNTIL WRK-EOF-Y.
|
||||
PERFORM 3000STPSOR.
|
||||
*
|
||||
0000MAJCOLSOR-EXT.
|
||||
GOBACK.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.0) *
|
||||
* サブモジュール名: 初期処理 *
|
||||
*****************************************************************
|
||||
1000ITTSOR SECTION.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGSTR TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGKEYINF TO M00MSGCOD.
|
||||
MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01.
|
||||
MOVE 'COMPILED' TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE WRKARA.
|
||||
*
|
||||
*** DB接続
|
||||
EXEC SQL
|
||||
CONNECT TO 'data/SALARY.db'
|
||||
END-EXEC.
|
||||
*
|
||||
OPEN INPUT R01INNFIL.
|
||||
OPEN OUTPUT W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
*** INSURANCE-TABLE全件LOAD
|
||||
PERFORM 1100INSLOADSOR.
|
||||
*
|
||||
PERFORM 1200R01INNSOR.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.1) *
|
||||
* サブモジュール名: 保険料率テーブルLOAD処理 *
|
||||
*****************************************************************
|
||||
1100INSLOADSOR SECTION.
|
||||
*
|
||||
MOVE ZERO TO IW-COUNT.
|
||||
*
|
||||
EXEC SQL
|
||||
DECLARE INS-CURSOR CURSOR FOR
|
||||
SELECT INS-INCOME-FROM, INS-INCOME-TO,
|
||||
INS-HEALTH-RATE, INS-PENSION-RATE
|
||||
FROM INSURANCE-TABLE
|
||||
ORDER BY INS-INCOME-FROM
|
||||
END-EXEC.
|
||||
*
|
||||
EXEC SQL
|
||||
OPEN INS-CURSOR
|
||||
END-EXEC.
|
||||
IF SQLCODE NOT = 0
|
||||
MOVE 'INS-CURSOR OPEN ERR'
|
||||
TO W02ERR-DETAIL
|
||||
PERFORM 9999ABDSOR
|
||||
END-IF.
|
||||
*
|
||||
PERFORM UNTIL SQLCODE NOT = 0
|
||||
EXEC SQL
|
||||
FETCH INS-CURSOR
|
||||
INTO :DBV-INS-INCOME-FROM,
|
||||
:DBV-INS-INCOME-TO,
|
||||
:DBV-INS-HEALTH-RATE,
|
||||
:DBV-INS-PENSION-RATE
|
||||
END-EXEC
|
||||
IF SQLCODE = 0
|
||||
ADD 1 TO IW-COUNT
|
||||
MOVE DBV-INS-INCOME-FROM
|
||||
TO IW-INCOME-FROM(IW-COUNT)
|
||||
MOVE DBV-INS-INCOME-TO
|
||||
TO IW-INCOME-TO(IW-COUNT)
|
||||
MOVE DBV-INS-HEALTH-RATE
|
||||
TO IW-HEALTH-RATE(IW-COUNT)
|
||||
MOVE DBV-INS-PENSION-RATE
|
||||
TO IW-PENSION-RATE(IW-COUNT)
|
||||
END-IF
|
||||
END-PERFORM.
|
||||
*
|
||||
EXEC SQL
|
||||
CLOSE INS-CURSOR
|
||||
END-EXEC.
|
||||
*
|
||||
1100INSLOADSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.2) *
|
||||
* サブモジュール名: R01読込処理 *
|
||||
*****************************************************************
|
||||
1200R01INNSOR SECTION.
|
||||
*
|
||||
READ R01INNFIL
|
||||
AT END
|
||||
SET WRK-EOF-Y TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO CUN-R01INN
|
||||
END-READ.
|
||||
*
|
||||
1200R01INNSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.0) *
|
||||
* サブモジュール名: 主処理 *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
MOVE R01GROSS-PAYMENT TO WRK-GROSS-PAYMENT.
|
||||
MOVE R01EMP-ID TO DBV-EMP-ID.
|
||||
*
|
||||
* 課税所得計算
|
||||
IF WRK-GROSS-PAYMENT < CNS-TAX-BASIC-DEDUCTION
|
||||
MOVE ZERO TO WRK-TAXABLE-INCOME
|
||||
ELSE
|
||||
COMPUTE WRK-TAXABLE-INCOME =
|
||||
WRK-GROSS-PAYMENT - CNS-TAX-BASIC-DEDUCTION
|
||||
END-COMPUTE
|
||||
END-IF.
|
||||
*
|
||||
*** TAX-TABLE参照(BETWEEN)
|
||||
EXEC SQL
|
||||
SELECT TAX-RATE, DEDUCTION
|
||||
INTO :DBV-TAX-RATE, :DBV-TAX-DEDUCTION
|
||||
FROM TAX-TABLE
|
||||
WHERE :WRK-TAXABLE-INCOME
|
||||
BETWEEN TAX-FROM AND TAX-TO
|
||||
END-EXEC.
|
||||
*
|
||||
IF SQLCODE = 0
|
||||
COMPUTE WRK-INCOME-TAX ROUNDED =
|
||||
WRK-TAXABLE-INCOME * DBV-TAX-RATE
|
||||
- DBV-TAX-DEDUCTION
|
||||
END-COMPUTE
|
||||
IF WRK-INCOME-TAX < ZERO
|
||||
MOVE ZERO TO WRK-INCOME-TAX
|
||||
END-IF
|
||||
ELSE
|
||||
MOVE ZERO TO WRK-INCOME-TAX
|
||||
END-IF.
|
||||
*
|
||||
*** 社会保険料計算(SEARCH順次)
|
||||
SET IW-IDX TO 1.
|
||||
SEARCH IW-ENTRY
|
||||
AT END
|
||||
MOVE ZERO TO WRK-INSURANCE
|
||||
WHEN IW-INCOME-FROM(IW-IDX)
|
||||
<= WRK-TAXABLE-INCOME
|
||||
AND WRK-TAXABLE-INCOME
|
||||
<= IW-INCOME-TO(IW-IDX)
|
||||
COMPUTE WRK-INSURANCE ROUNDED =
|
||||
WRK-TAXABLE-INCOME *
|
||||
(IW-HEALTH-RATE(IW-IDX)
|
||||
+ IW-PENSION-RATE(IW-IDX))
|
||||
END-COMPUTE
|
||||
END-SEARCH.
|
||||
*
|
||||
*** 住民税計算
|
||||
COMPUTE WRK-RESIDENT-TAX ROUNDED =
|
||||
WRK-TAXABLE-INCOME * CNS-RESIDENT-TAX-RATE
|
||||
END-COMPUTE.
|
||||
*
|
||||
*** 差引支給額
|
||||
COMPUTE WRK-NET-PAYMENT =
|
||||
WRK-GROSS-PAYMENT - WRK-INCOME-TAX
|
||||
- WRK-INSURANCE - WRK-RESIDENT-TAX
|
||||
END-COMPUTE.
|
||||
*
|
||||
*** W01出力
|
||||
PERFORM 2100WRITOUTSOR.
|
||||
*
|
||||
PERFORM 1200R01INNSOR.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.1) *
|
||||
* サブモジュール名: SALARY-NET出力処理 *
|
||||
*****************************************************************
|
||||
2100WRITOUTSOR SECTION.
|
||||
*
|
||||
INITIALIZE W01OUTREC.
|
||||
MOVE R01EMP-ID TO W01EMP-ID.
|
||||
MOVE 'S' TO W01REC-TYPE.
|
||||
MOVE R01EMP-NAME TO W01EMP-NAME.
|
||||
MOVE R01DEPT-CODE TO W01DEPT-CODE.
|
||||
MOVE R01BASE-SALARY TO W01GROSS-PAYMENT.
|
||||
MOVE WRK-INCOME-TAX TO W01INCOME-TAX.
|
||||
MOVE WRK-INSURANCE TO W01INSURANCE.
|
||||
MOVE WRK-RESIDENT-TAX TO W01RESIDENT-TAX.
|
||||
MOVE WRK-NET-PAYMENT TO W01NET-PAYMENT.
|
||||
MOVE WRK-TAXABLE-INCOME TO W01TAXABLE-INCOME.
|
||||
MOVE WRK-NET-PAYMENT TO W01PAY-AMOUNT.
|
||||
WRITE W01OUTREC.
|
||||
ADD 1 TO CUN-W01OUT.
|
||||
*
|
||||
2100WRITOUTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (3.0) *
|
||||
* サブモジュール名: 終了処理 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
CLOSE R01INNFIL
|
||||
W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'KYU05R01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KYU05W01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KYU05W02' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W02OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
3000STPSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (4.0) *
|
||||
* サブモジュール名: メッセージ出力処理 *
|
||||
*****************************************************************
|
||||
4000MSGOUTSOR SECTION.
|
||||
*
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
|
||||
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
|
||||
CALL 'SUB02MSG' USING M00MHOPAR.
|
||||
*
|
||||
4000MSGOUTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (9.9) *
|
||||
* サブモジュール名: ABEND処理 *
|
||||
*****************************************************************
|
||||
9999ABDSOR SECTION.
|
||||
*
|
||||
MOVE CNS-ABD999 TO E01ABDCOD.
|
||||
CALL 'SUB03END' USING E01ABDPAR.
|
||||
*
|
||||
9999ABDSOR-EXT.
|
||||
EXIT.
|
||||
@@ -0,0 +1,317 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. KYU06UPD.
|
||||
*****************************************************************
|
||||
* システム名 : 給与計算システム *
|
||||
* プログラムID : KYU06UPD *
|
||||
* プログラム名 : 給与計算結果DB2更新処理 *
|
||||
* 作成日 : 2026-07-01 *
|
||||
* 処理概要 : SALARY-NETをDB2 SALARY-RESULTSに登録 *
|
||||
* 重複時(-803)はUPDATEに切替 *
|
||||
* プログラム分類: No.09 DB更新 *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 2026-07-01 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R02INNFIL ASSIGN TO EXTERNAL KYU06R02.
|
||||
SELECT W03OUTFIL ASSIGN TO EXTERNAL KYU06W03.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* R02: SALARY-NET(200B FB) *
|
||||
*****************************************************************
|
||||
FD R02INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R02INNREC.
|
||||
COPY KYU04REC REPLACING ==(A)== BY ==R02==.
|
||||
*
|
||||
*****************************************************************
|
||||
* W03: ERROR-LOG(VB) *
|
||||
*****************************************************************
|
||||
FD W03OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS V.
|
||||
01 W03OUTREC.
|
||||
COPY KYU99REC REPLACING ==(A)== BY ==W03==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* SQLCA *
|
||||
*****************************************************************
|
||||
EXEC SQL INCLUDE SQLCA END-EXEC.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'KYU06UPD'.
|
||||
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-MSGKEYINF PIC 9(003) VALUE 033.
|
||||
03 CNS-KN0002 PIC 9(001) VALUE 2.
|
||||
03 CNS-ABD999 PIC 9(003) VALUE 999.
|
||||
03 CNS-YEAR-MONTH-PARM PIC X(006).
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
01 CUNARA.
|
||||
03 CUN-R02INN PIC S9(009) COMP-3 VALUE ZERO.
|
||||
03 CUN-W03OUT PIC S9(009) COMP-3 VALUE ZERO.
|
||||
03 CUN-DB-INS PIC S9(009) COMP-3 VALUE ZERO.
|
||||
03 CUN-DB-UPD PIC S9(009) COMP-3 VALUE ZERO.
|
||||
*
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
03 WRK-EOF PIC X(001).
|
||||
88 WRK-EOF-Y VALUE '1'.
|
||||
03 WRK-YEAR-MONTH PIC X(006).
|
||||
*
|
||||
*****************************************************************
|
||||
* DB2ホスト変数 *
|
||||
*****************************************************************
|
||||
01 DBVARA.
|
||||
03 DBV-EMP-ID PIC X(008).
|
||||
03 DBV-YEAR-MONTH PIC X(006).
|
||||
03 DBV-GROSS-PAYMENT PIC 9(009).
|
||||
03 DBV-INCOME-TAX PIC 9(009).
|
||||
03 DBV-INSURANCE PIC 9(009).
|
||||
03 DBV-RESIDENT-TAX PIC 9(009).
|
||||
03 DBV-NET-PAYMENT PIC 9(009).
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
COPY ZANMSGAC.
|
||||
COPY ZANENDAC.
|
||||
*
|
||||
PROCEDURE DIVISION.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
*****************************************************************
|
||||
0000MAJCOLSOR SECTION.
|
||||
*
|
||||
PERFORM 1000ITTSOR.
|
||||
PERFORM 2000MAJSOR
|
||||
UNTIL WRK-EOF-Y.
|
||||
PERFORM 3000STPSOR.
|
||||
*
|
||||
0000MAJCOLSOR-EXT.
|
||||
GOBACK.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.0) *
|
||||
* サブモジュール名: 初期処理 *
|
||||
*****************************************************************
|
||||
1000ITTSOR SECTION.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGSTR TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGKEYINF TO M00MSGCOD.
|
||||
MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01.
|
||||
MOVE 'COMPILED' TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE WRKARA.
|
||||
*
|
||||
*** PARM取得
|
||||
ACCEPT WRK-YEAR-MONTH
|
||||
FROM COMMAND-LINE.
|
||||
IF WRK-YEAR-MONTH = SPACES
|
||||
MOVE '202605' TO WRK-YEAR-MONTH
|
||||
END-IF.
|
||||
MOVE WRK-YEAR-MONTH TO CNS-YEAR-MONTH-PARM.
|
||||
*
|
||||
OPEN INPUT R02INNFIL.
|
||||
OPEN OUTPUT W03OUTFIL.
|
||||
*
|
||||
*** DB接続
|
||||
EXEC SQL
|
||||
CONNECT TO 'data/SALARY.db'
|
||||
END-EXEC.
|
||||
*
|
||||
PERFORM 1100R02INNSOR.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.1) *
|
||||
* サブモジュール名: R02読込処理 *
|
||||
*****************************************************************
|
||||
1100R02INNSOR SECTION.
|
||||
*
|
||||
READ R02INNFIL
|
||||
AT END
|
||||
SET WRK-EOF-Y TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO CUN-R02INN
|
||||
END-READ.
|
||||
*
|
||||
1100R02INNSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.0) *
|
||||
* サブモジュール名: 主処理 *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
MOVE R02EMP-ID TO DBV-EMP-ID.
|
||||
MOVE CNS-YEAR-MONTH-PARM TO DBV-YEAR-MONTH.
|
||||
MOVE R02GROSS-PAYMENT TO DBV-GROSS-PAYMENT.
|
||||
MOVE R02INCOME-TAX TO DBV-INCOME-TAX.
|
||||
MOVE R02INSURANCE TO DBV-INSURANCE.
|
||||
MOVE R02RESIDENT-TAX TO DBV-RESIDENT-TAX.
|
||||
MOVE R02NET-PAYMENT TO DBV-NET-PAYMENT.
|
||||
*
|
||||
EXEC SQL
|
||||
INSERT INTO SALARY-RESULTS
|
||||
(EMP-ID, YEAR-MONTH,
|
||||
GROSS-PAYMENT, INCOME-TAX,
|
||||
INSURANCE, RESIDENT-TAX,
|
||||
NET-PAYMENT, UPDATED-AT)
|
||||
VALUES
|
||||
(:DBV-EMP-ID, :DBV-YEAR-MONTH,
|
||||
:DBV-GROSS-PAYMENT, :DBV-INCOME-TAX,
|
||||
:DBV-INSURANCE, :DBV-RESIDENT-TAX,
|
||||
:DBV-NET-PAYMENT, CURRENT TIMESTAMP)
|
||||
END-EXEC.
|
||||
*
|
||||
IF SQLCODE = 0
|
||||
ADD 1 TO CUN-DB-INS
|
||||
PERFORM 1100R02INNSOR
|
||||
EXIT SECTION
|
||||
END-IF.
|
||||
*
|
||||
IF SQLCODE = -803
|
||||
EXEC SQL
|
||||
UPDATE SALARY-RESULTS SET
|
||||
GROSS-PAYMENT = :DBV-GROSS-PAYMENT
|
||||
,INCOME-TAX = :DBV-INCOME-TAX
|
||||
,INSURANCE = :DBV-INSURANCE
|
||||
,RESIDENT-TAX = :DBV-RESIDENT-TAX
|
||||
,NET-PAYMENT = :DBV-NET-PAYMENT
|
||||
,UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE EMP-ID = :DBV-EMP-ID
|
||||
AND YEAR-MONTH = :DBV-YEAR-MONTH
|
||||
END-EXEC
|
||||
IF SQLCODE = 0
|
||||
ADD 1 TO CUN-DB-UPD
|
||||
ELSE
|
||||
PERFORM 2100ERROUTSOR
|
||||
END-IF
|
||||
PERFORM 1100R02INNSOR
|
||||
EXIT SECTION
|
||||
END-IF.
|
||||
*
|
||||
PERFORM 2100ERROUTSOR.
|
||||
PERFORM 1100R02INNSOR.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.1) *
|
||||
* サブモジュール名: エラー出力処理 *
|
||||
*****************************************************************
|
||||
2100ERROUTSOR SECTION.
|
||||
*
|
||||
MOVE 'DB-ERR' TO W03ERR-CATEGORY.
|
||||
MOVE DBV-EMP-ID TO W03ERR-DETAIL.
|
||||
WRITE W03OUTREC.
|
||||
ADD 1 TO CUN-W03OUT.
|
||||
*
|
||||
2100ERROUTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (3.0) *
|
||||
* サブモジュール名: 終了処理 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
CLOSE R02INNFIL
|
||||
W03OUTFIL.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'KYU06R02' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R02INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'DB-INSERT' TO M00UMKDATS22-01.
|
||||
MOVE CUN-DB-INS TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'DB-UPDATE' TO M00UMKDATS22-01.
|
||||
MOVE CUN-DB-UPD TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KYU06W03' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W03OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
3000STPSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (4.0) *
|
||||
* サブモジュール名: メッセージ出力処理 *
|
||||
*****************************************************************
|
||||
4000MSGOUTSOR SECTION.
|
||||
*
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
|
||||
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
|
||||
CALL 'SUB02MSG' USING M00MHOPAR.
|
||||
*
|
||||
4000MSGOUTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (9.9) *
|
||||
* サブモジュール名: ABEND処理 *
|
||||
*****************************************************************
|
||||
9999ABDSOR SECTION.
|
||||
*
|
||||
MOVE CNS-ABD999 TO E01ABDCOD.
|
||||
CALL 'SUB03END' USING E01ABDPAR.
|
||||
*
|
||||
9999ABDSOR-EXT.
|
||||
EXIT.
|
||||
@@ -0,0 +1,836 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. KYU07DIV.
|
||||
*****************************************************************
|
||||
* システム名 : 給与計算システム *
|
||||
* プログラムID : KYU07DIV *
|
||||
* プログラム名 : 部門別分割出力処理 *
|
||||
* 作成日 : 2026-07-01 *
|
||||
* 処理概要 : JCL SORT済SALARY-NETを部署コードに応じて *
|
||||
* 50ファイルに分割出力 *
|
||||
* 常に1ファイルのみOPEN *
|
||||
* プログラム分類: No.10 50分割 *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 2026-07-01 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R01INNFIL ASSIGN TO EXTERNAL KYU07R01.
|
||||
SELECT SYSIN-FILE ASSIGN TO EXTERNAL KYU07SYS.
|
||||
SELECT W99OUTFIL ASSIGN TO EXTERNAL KYU07W99.
|
||||
SELECT DEPT01-FILE ASSIGN TO EXTERNAL KYU07D01.
|
||||
SELECT DEPT02-FILE ASSIGN TO EXTERNAL KYU07D02.
|
||||
SELECT DEPT03-FILE ASSIGN TO EXTERNAL KYU07D03.
|
||||
SELECT DEPT04-FILE ASSIGN TO EXTERNAL KYU07D04.
|
||||
SELECT DEPT05-FILE ASSIGN TO EXTERNAL KYU07D05.
|
||||
SELECT DEPT06-FILE ASSIGN TO EXTERNAL KYU07D06.
|
||||
SELECT DEPT07-FILE ASSIGN TO EXTERNAL KYU07D07.
|
||||
SELECT DEPT08-FILE ASSIGN TO EXTERNAL KYU07D08.
|
||||
SELECT DEPT09-FILE ASSIGN TO EXTERNAL KYU07D09.
|
||||
SELECT DEPT10-FILE ASSIGN TO EXTERNAL KYU07D10.
|
||||
SELECT DEPT11-FILE ASSIGN TO EXTERNAL KYU07D11.
|
||||
SELECT DEPT12-FILE ASSIGN TO EXTERNAL KYU07D12.
|
||||
SELECT DEPT13-FILE ASSIGN TO EXTERNAL KYU07D13.
|
||||
SELECT DEPT14-FILE ASSIGN TO EXTERNAL KYU07D14.
|
||||
SELECT DEPT15-FILE ASSIGN TO EXTERNAL KYU07D15.
|
||||
SELECT DEPT16-FILE ASSIGN TO EXTERNAL KYU07D16.
|
||||
SELECT DEPT17-FILE ASSIGN TO EXTERNAL KYU07D17.
|
||||
SELECT DEPT18-FILE ASSIGN TO EXTERNAL KYU07D18.
|
||||
SELECT DEPT19-FILE ASSIGN TO EXTERNAL KYU07D19.
|
||||
SELECT DEPT20-FILE ASSIGN TO EXTERNAL KYU07D20.
|
||||
SELECT DEPT21-FILE ASSIGN TO EXTERNAL KYU07D21.
|
||||
SELECT DEPT22-FILE ASSIGN TO EXTERNAL KYU07D22.
|
||||
SELECT DEPT23-FILE ASSIGN TO EXTERNAL KYU07D23.
|
||||
SELECT DEPT24-FILE ASSIGN TO EXTERNAL KYU07D24.
|
||||
SELECT DEPT25-FILE ASSIGN TO EXTERNAL KYU07D25.
|
||||
SELECT DEPT26-FILE ASSIGN TO EXTERNAL KYU07D26.
|
||||
SELECT DEPT27-FILE ASSIGN TO EXTERNAL KYU07D27.
|
||||
SELECT DEPT28-FILE ASSIGN TO EXTERNAL KYU07D28.
|
||||
SELECT DEPT29-FILE ASSIGN TO EXTERNAL KYU07D29.
|
||||
SELECT DEPT30-FILE ASSIGN TO EXTERNAL KYU07D30.
|
||||
SELECT DEPT31-FILE ASSIGN TO EXTERNAL KYU07D31.
|
||||
SELECT DEPT32-FILE ASSIGN TO EXTERNAL KYU07D32.
|
||||
SELECT DEPT33-FILE ASSIGN TO EXTERNAL KYU07D33.
|
||||
SELECT DEPT34-FILE ASSIGN TO EXTERNAL KYU07D34.
|
||||
SELECT DEPT35-FILE ASSIGN TO EXTERNAL KYU07D35.
|
||||
SELECT DEPT36-FILE ASSIGN TO EXTERNAL KYU07D36.
|
||||
SELECT DEPT37-FILE ASSIGN TO EXTERNAL KYU07D37.
|
||||
SELECT DEPT38-FILE ASSIGN TO EXTERNAL KYU07D38.
|
||||
SELECT DEPT39-FILE ASSIGN TO EXTERNAL KYU07D39.
|
||||
SELECT DEPT40-FILE ASSIGN TO EXTERNAL KYU07D40.
|
||||
SELECT DEPT41-FILE ASSIGN TO EXTERNAL KYU07D41.
|
||||
SELECT DEPT42-FILE ASSIGN TO EXTERNAL KYU07D42.
|
||||
SELECT DEPT43-FILE ASSIGN TO EXTERNAL KYU07D43.
|
||||
SELECT DEPT44-FILE ASSIGN TO EXTERNAL KYU07D44.
|
||||
SELECT DEPT45-FILE ASSIGN TO EXTERNAL KYU07D45.
|
||||
SELECT DEPT46-FILE ASSIGN TO EXTERNAL KYU07D46.
|
||||
SELECT DEPT47-FILE ASSIGN TO EXTERNAL KYU07D47.
|
||||
SELECT DEPT48-FILE ASSIGN TO EXTERNAL KYU07D48.
|
||||
SELECT DEPT49-FILE ASSIGN TO EXTERNAL KYU07D49.
|
||||
SELECT DEPT50-FILE ASSIGN TO EXTERNAL KYU07D50.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* R01: SALARY-NET(200B FB JCL SORT済み) *
|
||||
*****************************************************************
|
||||
FD R01INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R01INNREC.
|
||||
COPY KYU04REC REPLACING ==(A)== BY ==R01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* SYSIN: 制御カード *
|
||||
*****************************************************************
|
||||
FD SYSIN-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
RECORDING MODE IS F.
|
||||
01 SYSIN-REC PIC X(080).
|
||||
*
|
||||
*****************************************************************
|
||||
* W99: ERROR-LOG(VB) *
|
||||
*****************************************************************
|
||||
FD W99OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS V.
|
||||
01 W99OUTREC.
|
||||
COPY KYU99REC REPLACING ==(A)== BY ==W99==.
|
||||
*
|
||||
*****************************************************************
|
||||
* DEPT01〜50(各200B FB) *
|
||||
*****************************************************************
|
||||
FD DEPT01-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT01-REC PIC X(200).
|
||||
FD DEPT02-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT02-REC PIC X(200).
|
||||
FD DEPT03-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT03-REC PIC X(200).
|
||||
FD DEPT04-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT04-REC PIC X(200).
|
||||
FD DEPT05-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT05-REC PIC X(200).
|
||||
FD DEPT06-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT06-REC PIC X(200).
|
||||
FD DEPT07-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT07-REC PIC X(200).
|
||||
FD DEPT08-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT08-REC PIC X(200).
|
||||
FD DEPT09-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT09-REC PIC X(200).
|
||||
FD DEPT10-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT10-REC PIC X(200).
|
||||
FD DEPT11-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT11-REC PIC X(200).
|
||||
FD DEPT12-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT12-REC PIC X(200).
|
||||
FD DEPT13-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT13-REC PIC X(200).
|
||||
FD DEPT14-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT14-REC PIC X(200).
|
||||
FD DEPT15-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT15-REC PIC X(200).
|
||||
FD DEPT16-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT16-REC PIC X(200).
|
||||
FD DEPT17-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT17-REC PIC X(200).
|
||||
FD DEPT18-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT18-REC PIC X(200).
|
||||
FD DEPT19-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT19-REC PIC X(200).
|
||||
FD DEPT20-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT20-REC PIC X(200).
|
||||
FD DEPT21-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT21-REC PIC X(200).
|
||||
FD DEPT22-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT22-REC PIC X(200).
|
||||
FD DEPT23-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT23-REC PIC X(200).
|
||||
FD DEPT24-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT24-REC PIC X(200).
|
||||
FD DEPT25-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT25-REC PIC X(200).
|
||||
FD DEPT26-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT26-REC PIC X(200).
|
||||
FD DEPT27-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT27-REC PIC X(200).
|
||||
FD DEPT28-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT28-REC PIC X(200).
|
||||
FD DEPT29-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT29-REC PIC X(200).
|
||||
FD DEPT30-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT30-REC PIC X(200).
|
||||
FD DEPT31-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT31-REC PIC X(200).
|
||||
FD DEPT32-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT32-REC PIC X(200).
|
||||
FD DEPT33-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT33-REC PIC X(200).
|
||||
FD DEPT34-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT34-REC PIC X(200).
|
||||
FD DEPT35-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT35-REC PIC X(200).
|
||||
FD DEPT36-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT36-REC PIC X(200).
|
||||
FD DEPT37-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT37-REC PIC X(200).
|
||||
FD DEPT38-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT38-REC PIC X(200).
|
||||
FD DEPT39-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT39-REC PIC X(200).
|
||||
FD DEPT40-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT40-REC PIC X(200).
|
||||
FD DEPT41-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT41-REC PIC X(200).
|
||||
FD DEPT42-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT42-REC PIC X(200).
|
||||
FD DEPT43-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT43-REC PIC X(200).
|
||||
FD DEPT44-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT44-REC PIC X(200).
|
||||
FD DEPT45-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT45-REC PIC X(200).
|
||||
FD DEPT46-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT46-REC PIC X(200).
|
||||
FD DEPT47-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT47-REC PIC X(200).
|
||||
FD DEPT48-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT48-REC PIC X(200).
|
||||
FD DEPT49-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT49-REC PIC X(200).
|
||||
FD DEPT50-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 DEPT50-REC PIC X(200).
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'KYU07DIV'.
|
||||
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-MSGKEYINF PIC 9(003) VALUE 033.
|
||||
03 CNS-KN0002 PIC 9(001) VALUE 2.
|
||||
03 CNS-ABD999 PIC 9(003) VALUE 999.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
01 CUNARA.
|
||||
03 CUN-R01INN PIC S9(009) COMP-3 VALUE ZERO.
|
||||
03 CUN-W99OUT PIC S9(009) COMP-3 VALUE ZERO.
|
||||
03 CUN-DEPT-OUT PIC S9(009) COMP-3 VALUE ZERO.
|
||||
*
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
03 WRK-EOF PIC X(001).
|
||||
88 WRK-EOF-Y VALUE '1'.
|
||||
03 WRK-DEPT-CODE PIC X(002).
|
||||
03 WRK-PREV-DEPT PIC X(002).
|
||||
03 WRK-FIRST PIC X(001) VALUE '1'.
|
||||
88 WRK-FIRST-Y VALUE '1'.
|
||||
88 WRK-FIRST-N VALUE '0'.
|
||||
*** SYSIN対象部署テーブル
|
||||
03 WRK-TARGET-DEPT.
|
||||
05 WRK-TARGET OCCURS 50 TIMES
|
||||
INDEXED BY TD-IDX.
|
||||
07 WRK-TARGET-CODE PIC X(002).
|
||||
03 WRK-TARGET-COUNT PIC 9(002) VALUE 50.
|
||||
03 WRK-HAS-TARGET PIC X(001).
|
||||
88 WRK-ALL-DEPTS VALUE 'A'.
|
||||
88 WRK-FILTER-DEPTS VALUE 'F'.
|
||||
*** パース用
|
||||
03 WRK-SYSIN-LINE PIC X(080).
|
||||
03 WRK-I PIC 9(002).
|
||||
03 WRK-J PIC 9(002).
|
||||
03 WRK-TOKEN PIC X(080).
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
COPY ZANMSGAC.
|
||||
COPY ZANENDAC.
|
||||
*
|
||||
PROCEDURE DIVISION.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
*****************************************************************
|
||||
0000MAJCOLSOR SECTION.
|
||||
*
|
||||
PERFORM 1000ITTSOR.
|
||||
PERFORM 2000MAJSOR
|
||||
UNTIL WRK-EOF-Y.
|
||||
PERFORM 3000STPSOR.
|
||||
*
|
||||
0000MAJCOLSOR-EXT.
|
||||
GOBACK.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.0) *
|
||||
* サブモジュール名: 初期処理 *
|
||||
*****************************************************************
|
||||
1000ITTSOR SECTION.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGSTR TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGKEYINF TO M00MSGCOD.
|
||||
MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01.
|
||||
MOVE 'COMPILED' TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE WRKARA.
|
||||
MOVE '1' TO WRK-FIRST.
|
||||
*
|
||||
*** SYSIN読込(対象部署指定)
|
||||
PERFORM 1100SYSINSOR.
|
||||
*
|
||||
OPEN INPUT R01INNFIL.
|
||||
OPEN OUTPUT W99OUTFIL.
|
||||
*
|
||||
PERFORM 1200R01INNSOR.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.1) *
|
||||
* サブモジュール名: SYSIN読込処理 *
|
||||
*****************************************************************
|
||||
1100SYSINSOR SECTION.
|
||||
*
|
||||
OPEN INPUT SYSIN-FILE.
|
||||
READ SYSIN-FILE
|
||||
INTO WRK-SYSIN-LINE
|
||||
AT END
|
||||
SET WRK-ALL-DEPTS TO TRUE
|
||||
END-READ.
|
||||
CLOSE SYSIN-FILE.
|
||||
*
|
||||
IF WRK-ALL-DEPTS
|
||||
EXIT SECTION
|
||||
END-IF.
|
||||
*
|
||||
*** "DEPT=01,02,05,10" 形式パース
|
||||
MOVE WRK-SYSIN-LINE TO WRK-TOKEN.
|
||||
MOVE ZERO TO WRK-TARGET-COUNT.
|
||||
MOVE 1 TO WRK-J.
|
||||
*
|
||||
PERFORM VARYING WRK-I FROM 1 BY 1
|
||||
UNTIL WRK-I > 80
|
||||
OR WRK-SYSIN-LINE(WRK-I:1) = SPACE
|
||||
OR WRK-SYSIN-LINE(WRK-I:1) = '='
|
||||
CONTINUE
|
||||
END-PERFORM.
|
||||
*
|
||||
ADD 1 TO WRK-I.
|
||||
PERFORM VARYING WRK-J FROM 1 BY 1
|
||||
UNTIL WRK-I > 80
|
||||
OR WRK-SYSIN-LINE(WRK-I:1) = SPACE
|
||||
IF WRK-SYSIN-LINE(WRK-I:1) = ','
|
||||
ADD 1 TO WRK-I
|
||||
CONTINUE
|
||||
END-IF
|
||||
ADD 1 TO WRK-TARGET-COUNT
|
||||
MOVE WRK-SYSIN-LINE(WRK-I:2)
|
||||
TO
|
||||
WRK-TARGET-CODE(WRK-TARGET-COUNT)
|
||||
ADD 2 TO WRK-I
|
||||
END-PERFORM.
|
||||
*
|
||||
IF WRK-TARGET-COUNT > 0
|
||||
SET WRK-FILTER-DEPTS TO TRUE
|
||||
ELSE
|
||||
SET WRK-ALL-DEPTS TO TRUE
|
||||
END-IF.
|
||||
*
|
||||
1100SYSINSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.2) *
|
||||
* サブモジュール名: R01読込処理 *
|
||||
*****************************************************************
|
||||
1200R01INNSOR SECTION.
|
||||
*
|
||||
READ R01INNFIL
|
||||
AT END
|
||||
SET WRK-EOF-Y TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO CUN-R01INN
|
||||
END-READ.
|
||||
*
|
||||
1200R01INNSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.0) *
|
||||
* サブモジュール名: 主処理 *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
MOVE R01DEPT-CODE TO WRK-DEPT-CODE.
|
||||
*
|
||||
*** SYSIN対象部署フィルタ
|
||||
IF WRK-FILTER-DEPTS
|
||||
SET TD-IDX TO 1
|
||||
SEARCH WRK-TARGET
|
||||
AT END
|
||||
PERFORM 1200R01INNSOR
|
||||
EXIT SECTION
|
||||
WHEN WRK-TARGET-CODE(TD-IDX) = WRK-DEPT-CODE
|
||||
CONTINUE
|
||||
END-SEARCH
|
||||
END-IF.
|
||||
*
|
||||
*** 部署切替
|
||||
IF WRK-FIRST-Y
|
||||
MOVE '0' TO WRK-FIRST
|
||||
PERFORM 2100OPENSOR
|
||||
ELSE
|
||||
IF WRK-PREV-DEPT NOT = WRK-DEPT-CODE
|
||||
PERFORM 2200CLOSESOR
|
||||
PERFORM 2100OPENSOR
|
||||
END-IF
|
||||
END-IF.
|
||||
*
|
||||
MOVE WRK-DEPT-CODE TO WRK-PREV-DEPT.
|
||||
*
|
||||
*** 該当ファイルにWRITE
|
||||
PERFORM 2300WRITESOR.
|
||||
*
|
||||
PERFORM 1200R01INNSOR.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.1) *
|
||||
* サブモジュール名: 部署ファイルOPEN処理 *
|
||||
*****************************************************************
|
||||
2100OPENSOR SECTION.
|
||||
*
|
||||
EVALUATE WRK-DEPT-CODE
|
||||
WHEN '01' OPEN OUTPUT DEPT01-FILE
|
||||
WHEN '02' OPEN OUTPUT DEPT02-FILE
|
||||
WHEN '03' OPEN OUTPUT DEPT03-FILE
|
||||
WHEN '04' OPEN OUTPUT DEPT04-FILE
|
||||
WHEN '05' OPEN OUTPUT DEPT05-FILE
|
||||
WHEN '06' OPEN OUTPUT DEPT06-FILE
|
||||
WHEN '07' OPEN OUTPUT DEPT07-FILE
|
||||
WHEN '08' OPEN OUTPUT DEPT08-FILE
|
||||
WHEN '09' OPEN OUTPUT DEPT09-FILE
|
||||
WHEN '10' OPEN OUTPUT DEPT10-FILE
|
||||
WHEN '11' OPEN OUTPUT DEPT11-FILE
|
||||
WHEN '12' OPEN OUTPUT DEPT12-FILE
|
||||
WHEN '13' OPEN OUTPUT DEPT13-FILE
|
||||
WHEN '14' OPEN OUTPUT DEPT14-FILE
|
||||
WHEN '15' OPEN OUTPUT DEPT15-FILE
|
||||
WHEN '16' OPEN OUTPUT DEPT16-FILE
|
||||
WHEN '17' OPEN OUTPUT DEPT17-FILE
|
||||
WHEN '18' OPEN OUTPUT DEPT18-FILE
|
||||
WHEN '19' OPEN OUTPUT DEPT19-FILE
|
||||
WHEN '20' OPEN OUTPUT DEPT20-FILE
|
||||
WHEN '21' OPEN OUTPUT DEPT21-FILE
|
||||
WHEN '22' OPEN OUTPUT DEPT22-FILE
|
||||
WHEN '23' OPEN OUTPUT DEPT23-FILE
|
||||
WHEN '24' OPEN OUTPUT DEPT24-FILE
|
||||
WHEN '25' OPEN OUTPUT DEPT25-FILE
|
||||
WHEN '26' OPEN OUTPUT DEPT26-FILE
|
||||
WHEN '27' OPEN OUTPUT DEPT27-FILE
|
||||
WHEN '28' OPEN OUTPUT DEPT28-FILE
|
||||
WHEN '29' OPEN OUTPUT DEPT29-FILE
|
||||
WHEN '30' OPEN OUTPUT DEPT30-FILE
|
||||
WHEN '31' OPEN OUTPUT DEPT31-FILE
|
||||
WHEN '32' OPEN OUTPUT DEPT32-FILE
|
||||
WHEN '33' OPEN OUTPUT DEPT33-FILE
|
||||
WHEN '34' OPEN OUTPUT DEPT34-FILE
|
||||
WHEN '35' OPEN OUTPUT DEPT35-FILE
|
||||
WHEN '36' OPEN OUTPUT DEPT36-FILE
|
||||
WHEN '37' OPEN OUTPUT DEPT37-FILE
|
||||
WHEN '38' OPEN OUTPUT DEPT38-FILE
|
||||
WHEN '39' OPEN OUTPUT DEPT39-FILE
|
||||
WHEN '40' OPEN OUTPUT DEPT40-FILE
|
||||
WHEN '41' OPEN OUTPUT DEPT41-FILE
|
||||
WHEN '42' OPEN OUTPUT DEPT42-FILE
|
||||
WHEN '43' OPEN OUTPUT DEPT43-FILE
|
||||
WHEN '44' OPEN OUTPUT DEPT44-FILE
|
||||
WHEN '45' OPEN OUTPUT DEPT45-FILE
|
||||
WHEN '46' OPEN OUTPUT DEPT46-FILE
|
||||
WHEN '47' OPEN OUTPUT DEPT47-FILE
|
||||
WHEN '48' OPEN OUTPUT DEPT48-FILE
|
||||
WHEN '49' OPEN OUTPUT DEPT49-FILE
|
||||
WHEN '50' OPEN OUTPUT DEPT50-FILE
|
||||
WHEN OTHER
|
||||
MOVE 'INVALID DEPT' TO W99ERR-DETAIL
|
||||
WRITE W99OUTREC
|
||||
ADD 1 TO CUN-W99OUT
|
||||
END-EVALUATE.
|
||||
*
|
||||
2100OPENSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.2) *
|
||||
* サブモジュール名: 部署ファイルCLOSE+LOCK処理 *
|
||||
*****************************************************************
|
||||
2200CLOSESOR SECTION.
|
||||
*
|
||||
EVALUATE WRK-PREV-DEPT
|
||||
WHEN '01' CLOSE DEPT01-FILE WITH LOCK
|
||||
WHEN '02' CLOSE DEPT02-FILE WITH LOCK
|
||||
WHEN '03' CLOSE DEPT03-FILE WITH LOCK
|
||||
WHEN '04' CLOSE DEPT04-FILE WITH LOCK
|
||||
WHEN '05' CLOSE DEPT05-FILE WITH LOCK
|
||||
WHEN '06' CLOSE DEPT06-FILE WITH LOCK
|
||||
WHEN '07' CLOSE DEPT07-FILE WITH LOCK
|
||||
WHEN '08' CLOSE DEPT08-FILE WITH LOCK
|
||||
WHEN '09' CLOSE DEPT09-FILE WITH LOCK
|
||||
WHEN '10' CLOSE DEPT10-FILE WITH LOCK
|
||||
WHEN '11' CLOSE DEPT11-FILE WITH LOCK
|
||||
WHEN '12' CLOSE DEPT12-FILE WITH LOCK
|
||||
WHEN '13' CLOSE DEPT13-FILE WITH LOCK
|
||||
WHEN '14' CLOSE DEPT14-FILE WITH LOCK
|
||||
WHEN '15' CLOSE DEPT15-FILE WITH LOCK
|
||||
WHEN '16' CLOSE DEPT16-FILE WITH LOCK
|
||||
WHEN '17' CLOSE DEPT17-FILE WITH LOCK
|
||||
WHEN '18' CLOSE DEPT18-FILE WITH LOCK
|
||||
WHEN '19' CLOSE DEPT19-FILE WITH LOCK
|
||||
WHEN '20' CLOSE DEPT20-FILE WITH LOCK
|
||||
WHEN '21' CLOSE DEPT21-FILE WITH LOCK
|
||||
WHEN '22' CLOSE DEPT22-FILE WITH LOCK
|
||||
WHEN '23' CLOSE DEPT23-FILE WITH LOCK
|
||||
WHEN '24' CLOSE DEPT24-FILE WITH LOCK
|
||||
WHEN '25' CLOSE DEPT25-FILE WITH LOCK
|
||||
WHEN '26' CLOSE DEPT26-FILE WITH LOCK
|
||||
WHEN '27' CLOSE DEPT27-FILE WITH LOCK
|
||||
WHEN '28' CLOSE DEPT28-FILE WITH LOCK
|
||||
WHEN '29' CLOSE DEPT29-FILE WITH LOCK
|
||||
WHEN '30' CLOSE DEPT30-FILE WITH LOCK
|
||||
WHEN '31' CLOSE DEPT31-FILE WITH LOCK
|
||||
WHEN '32' CLOSE DEPT32-FILE WITH LOCK
|
||||
WHEN '33' CLOSE DEPT33-FILE WITH LOCK
|
||||
WHEN '34' CLOSE DEPT34-FILE WITH LOCK
|
||||
WHEN '35' CLOSE DEPT35-FILE WITH LOCK
|
||||
WHEN '36' CLOSE DEPT36-FILE WITH LOCK
|
||||
WHEN '37' CLOSE DEPT37-FILE WITH LOCK
|
||||
WHEN '38' CLOSE DEPT38-FILE WITH LOCK
|
||||
WHEN '39' CLOSE DEPT39-FILE WITH LOCK
|
||||
WHEN '40' CLOSE DEPT40-FILE WITH LOCK
|
||||
WHEN '41' CLOSE DEPT41-FILE WITH LOCK
|
||||
WHEN '42' CLOSE DEPT42-FILE WITH LOCK
|
||||
WHEN '43' CLOSE DEPT43-FILE WITH LOCK
|
||||
WHEN '44' CLOSE DEPT44-FILE WITH LOCK
|
||||
WHEN '45' CLOSE DEPT45-FILE WITH LOCK
|
||||
WHEN '46' CLOSE DEPT46-FILE WITH LOCK
|
||||
WHEN '47' CLOSE DEPT47-FILE WITH LOCK
|
||||
WHEN '48' CLOSE DEPT48-FILE WITH LOCK
|
||||
WHEN '49' CLOSE DEPT49-FILE WITH LOCK
|
||||
WHEN '50' CLOSE DEPT50-FILE WITH LOCK
|
||||
WHEN OTHER
|
||||
CONTINUE
|
||||
END-EVALUATE.
|
||||
*
|
||||
2200CLOSESOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.3) *
|
||||
* サブモジュール名: 部署WRITE処理 *
|
||||
*****************************************************************
|
||||
2300WRITESOR SECTION.
|
||||
*
|
||||
EVALUATE WRK-DEPT-CODE
|
||||
WHEN '01' WRITE DEPT01-REC FROM R01INNREC
|
||||
WHEN '02' WRITE DEPT02-REC FROM R01INNREC
|
||||
WHEN '03' WRITE DEPT03-REC FROM R01INNREC
|
||||
WHEN '04' WRITE DEPT04-REC FROM R01INNREC
|
||||
WHEN '05' WRITE DEPT05-REC FROM R01INNREC
|
||||
WHEN '06' WRITE DEPT06-REC FROM R01INNREC
|
||||
WHEN '07' WRITE DEPT07-REC FROM R01INNREC
|
||||
WHEN '08' WRITE DEPT08-REC FROM R01INNREC
|
||||
WHEN '09' WRITE DEPT09-REC FROM R01INNREC
|
||||
WHEN '10' WRITE DEPT10-REC FROM R01INNREC
|
||||
WHEN '11' WRITE DEPT11-REC FROM R01INNREC
|
||||
WHEN '12' WRITE DEPT12-REC FROM R01INNREC
|
||||
WHEN '13' WRITE DEPT13-REC FROM R01INNREC
|
||||
WHEN '14' WRITE DEPT14-REC FROM R01INNREC
|
||||
WHEN '15' WRITE DEPT15-REC FROM R01INNREC
|
||||
WHEN '16' WRITE DEPT16-REC FROM R01INNREC
|
||||
WHEN '17' WRITE DEPT17-REC FROM R01INNREC
|
||||
WHEN '18' WRITE DEPT18-REC FROM R01INNREC
|
||||
WHEN '19' WRITE DEPT19-REC FROM R01INNREC
|
||||
WHEN '20' WRITE DEPT20-REC FROM R01INNREC
|
||||
WHEN '21' WRITE DEPT21-REC FROM R01INNREC
|
||||
WHEN '22' WRITE DEPT22-REC FROM R01INNREC
|
||||
WHEN '23' WRITE DEPT23-REC FROM R01INNREC
|
||||
WHEN '24' WRITE DEPT24-REC FROM R01INNREC
|
||||
WHEN '25' WRITE DEPT25-REC FROM R01INNREC
|
||||
WHEN '26' WRITE DEPT26-REC FROM R01INNREC
|
||||
WHEN '27' WRITE DEPT27-REC FROM R01INNREC
|
||||
WHEN '28' WRITE DEPT28-REC FROM R01INNREC
|
||||
WHEN '29' WRITE DEPT29-REC FROM R01INNREC
|
||||
WHEN '30' WRITE DEPT30-REC FROM R01INNREC
|
||||
WHEN '31' WRITE DEPT31-REC FROM R01INNREC
|
||||
WHEN '32' WRITE DEPT32-REC FROM R01INNREC
|
||||
WHEN '33' WRITE DEPT33-REC FROM R01INNREC
|
||||
WHEN '34' WRITE DEPT34-REC FROM R01INNREC
|
||||
WHEN '35' WRITE DEPT35-REC FROM R01INNREC
|
||||
WHEN '36' WRITE DEPT36-REC FROM R01INNREC
|
||||
WHEN '37' WRITE DEPT37-REC FROM R01INNREC
|
||||
WHEN '38' WRITE DEPT38-REC FROM R01INNREC
|
||||
WHEN '39' WRITE DEPT39-REC FROM R01INNREC
|
||||
WHEN '40' WRITE DEPT40-REC FROM R01INNREC
|
||||
WHEN '41' WRITE DEPT41-REC FROM R01INNREC
|
||||
WHEN '42' WRITE DEPT42-REC FROM R01INNREC
|
||||
WHEN '43' WRITE DEPT43-REC FROM R01INNREC
|
||||
WHEN '44' WRITE DEPT44-REC FROM R01INNREC
|
||||
WHEN '45' WRITE DEPT45-REC FROM R01INNREC
|
||||
WHEN '46' WRITE DEPT46-REC FROM R01INNREC
|
||||
WHEN '47' WRITE DEPT47-REC FROM R01INNREC
|
||||
WHEN '48' WRITE DEPT48-REC FROM R01INNREC
|
||||
WHEN '49' WRITE DEPT49-REC FROM R01INNREC
|
||||
WHEN '50' WRITE DEPT50-REC FROM R01INNREC
|
||||
WHEN OTHER
|
||||
CONTINUE
|
||||
END-EVALUATE.
|
||||
ADD 1 TO CUN-DEPT-OUT.
|
||||
*
|
||||
2300WRITESOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (3.0) *
|
||||
* サブモジュール名: 終了処理 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
*** 最終部署CLOSE
|
||||
IF WRK-PREV-DEPT > SPACES
|
||||
PERFORM 2200CLOSESOR
|
||||
END-IF.
|
||||
*
|
||||
CLOSE R01INNFIL
|
||||
W99OUTFIL.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'KYU07R01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'DEPT-OUT' TO M00UMKDATS22-01.
|
||||
MOVE CUN-DEPT-OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KYU07W99' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W99OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
3000STPSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (4.0) *
|
||||
* サブモジュール名: メッセージ出力処理 *
|
||||
*****************************************************************
|
||||
4000MSGOUTSOR SECTION.
|
||||
*
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
|
||||
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
|
||||
CALL 'SUB02MSG' USING M00MHOPAR.
|
||||
*
|
||||
4000MSGOUTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (9.9) *
|
||||
* サブモジュール名: ABEND処理 *
|
||||
*****************************************************************
|
||||
9999ABDSOR SECTION.
|
||||
*
|
||||
MOVE CNS-ABD999 TO E01ABDCOD.
|
||||
CALL 'SUB03END' USING E01ABDPAR.
|
||||
*
|
||||
9999ABDSOR-EXT.
|
||||
EXIT.
|
||||
@@ -0,0 +1,304 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. KYU08PRI.
|
||||
*****************************************************************
|
||||
* システム名 : 給与計算システム *
|
||||
* プログラムID : KYU08PRI *
|
||||
* プログラム名 : 給与明細印刷処理 *
|
||||
* 作成日 : 2026-07-01 *
|
||||
* 処理概要 : JCL SORT済みSALARY-NETを給与明細(LINAGE) *
|
||||
* として印刷出力。1社員1ページ。 *
|
||||
* プログラム分類: No.04 レイアウト編集のみ(GETPUT)+ LINAGE *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 2026-07-01 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R01INNFIL ASSIGN TO EXTERNAL KYU08R01.
|
||||
SELECT W01OUTFIL ASSIGN TO EXTERNAL KYU08W01.
|
||||
SELECT W02OUTFIL ASSIGN TO EXTERNAL KYU08W02.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* R01: SALARY-NET(200B FB JCL SORT済み) *
|
||||
*****************************************************************
|
||||
FD R01INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R01INNREC.
|
||||
COPY KYU04REC REPLACING ==(A)== BY ==R01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* W01: PAYSLIP印刷(LINAGE 66行/ページ) *
|
||||
*****************************************************************
|
||||
FD W01OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
LINAGE IS 66 LINES
|
||||
WITH FOOTING AT 60
|
||||
LINES AT TOP 6
|
||||
LINES AT BOTTOM 6.
|
||||
01 W01OUTREC.
|
||||
COPY KYU05REC REPLACING ==(A)== BY ==W01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* W02: ERROR-LOG(VB) — 将来拡張用(現時点では出力なし) *
|
||||
*****************************************************************
|
||||
FD W02OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS V.
|
||||
01 W02OUTREC.
|
||||
COPY KYU99REC REPLACING ==(A)== BY ==W02==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'KYU08PRI'.
|
||||
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-MSGKEYINF PIC 9(003) VALUE 033.
|
||||
03 CNS-KN0002 PIC 9(001) VALUE 2.
|
||||
03 CNS-ABD999 PIC 9(003) VALUE 999.
|
||||
03 CNS-HEADER-LINES PIC 9(002) VALUE 6.
|
||||
03 CNS-DETAIL-LINES PIC 9(002) VALUE 54.
|
||||
03 CNS-FOOTER-LINES PIC 9(002) VALUE 6.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
01 CUNARA.
|
||||
03 CUN-R01INN 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-EOF PIC X(001).
|
||||
88 WRK-EOF-Y VALUE '1'.
|
||||
03 WRK-LINE-NO PIC 9(002).
|
||||
03 WRK-PAGE-COUNTER PIC 9(004) VALUE 0.
|
||||
*
|
||||
*****************************************************************
|
||||
* 印刷行定義 *
|
||||
*****************************************************************
|
||||
01 HEADER-LINE.
|
||||
05 HL-TITLE PIC X(040)
|
||||
VALUE '========== 給与明細書 =========='.
|
||||
05 FILLER PIC X(010) VALUE SPACES.
|
||||
05 HL-PAGE-NO PIC Z(03)9 VALUE ZERO.
|
||||
05 FILLER PIC X(002) VALUE 'PG'.
|
||||
05 FILLER PIC X(144) VALUE SPACES.
|
||||
*
|
||||
01 DETAIL-LINE.
|
||||
05 DL-EMP-ID PIC X(008).
|
||||
05 FILLER PIC X(002) VALUE SPACES.
|
||||
05 DL-EMP-NAME PIC X(020)
|
||||
JUSTIFIED RIGHT.
|
||||
05 FILLER PIC X(002) VALUE SPACES.
|
||||
05 DL-BASIC-SALARY PIC Z(08)9
|
||||
BLANK WHEN ZERO.
|
||||
05 FILLER PIC X(002) VALUE SPACES.
|
||||
05 DL-NET-PAYMENT PIC Z(08)9
|
||||
BLANK WHEN ZERO.
|
||||
05 FILLER PIC X(146) VALUE SPACES.
|
||||
*
|
||||
01 FOOTER-LINE.
|
||||
05 FL-MSG PIC X(040)
|
||||
VALUE '--- 明細終了 ---'.
|
||||
05 FILLER PIC X(160) VALUE SPACES.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
COPY ZANDATAC.
|
||||
COPY ZANMSGAC.
|
||||
COPY ZANENDAC.
|
||||
*
|
||||
PROCEDURE DIVISION.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
*****************************************************************
|
||||
0000MAJCOLSOR SECTION.
|
||||
*
|
||||
PERFORM 1000ITTSOR.
|
||||
PERFORM 2000MAJSOR
|
||||
UNTIL WRK-EOF-Y.
|
||||
PERFORM 3000STPSOR.
|
||||
*
|
||||
0000MAJCOLSOR-EXT.
|
||||
GOBACK.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.0) *
|
||||
* サブモジュール名: 初期処理 *
|
||||
*****************************************************************
|
||||
1000ITTSOR SECTION.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGSTR TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGKEYINF TO M00MSGCOD.
|
||||
MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01.
|
||||
MOVE 'COMPILED' TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE WRKARA.
|
||||
*
|
||||
*** 運用日付取得
|
||||
INITIALIZE D01UBSPAR.
|
||||
CALL 'SUB01DAT' USING D01UBSPAR.
|
||||
IF D01FKICOD NOT = ZERO
|
||||
MOVE CNS-MSGSUBEEK TO M00MSGCOD
|
||||
MOVE 'SUB01DAT' TO M00UMKDATS22-01
|
||||
MOVE D01FKICOD TO M00UMKDATS22-02
|
||||
PERFORM 4000MSGOUTSOR
|
||||
PERFORM 9999ABDSOR
|
||||
END-IF.
|
||||
*
|
||||
OPEN INPUT R01INNFIL.
|
||||
OPEN OUTPUT W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.1) *
|
||||
* サブモジュール名: R01読込処理 *
|
||||
*****************************************************************
|
||||
1100R01INNSOR SECTION.
|
||||
*
|
||||
READ R01INNFIL
|
||||
AT END
|
||||
SET WRK-EOF-Y TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO CUN-R01INN
|
||||
END-READ.
|
||||
*
|
||||
1100R01INNSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.0) *
|
||||
* サブモジュール名: 主処理 *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
*** ヘッダ出力(改ページ + ページ番号)
|
||||
ADD 1 TO WRK-PAGE-COUNTER.
|
||||
MOVE WRK-PAGE-COUNTER TO HL-PAGE-NO.
|
||||
WRITE W01OUTREC
|
||||
FROM HEADER-LINE
|
||||
BEFORE ADVANCING PAGE.
|
||||
*
|
||||
*** 明細行編集
|
||||
MOVE R01EMP-ID TO DL-EMP-ID.
|
||||
MOVE R01EMP-NAME TO DL-EMP-NAME.
|
||||
MOVE R01GROSS-PAYMENT TO DL-BASIC-SALARY.
|
||||
MOVE R01NET-PAYMENT TO DL-NET-PAYMENT.
|
||||
*
|
||||
WRITE W01OUTREC
|
||||
FROM DETAIL-LINE
|
||||
BEFORE ADVANCING 1 LINE
|
||||
AT END-OF-PAGE
|
||||
WRITE W01OUTREC
|
||||
FROM FOOTER-LINE
|
||||
BEFORE ADVANCING PAGE
|
||||
END-WRITE.
|
||||
ADD 1 TO CUN-W01OUT.
|
||||
*
|
||||
*** フッタ出力(改ページ)
|
||||
WRITE W01OUTREC
|
||||
FROM FOOTER-LINE
|
||||
BEFORE ADVANCING PAGE.
|
||||
*
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (3.0) *
|
||||
* サブモジュール名: 終了処理 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
CLOSE R01INNFIL
|
||||
W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'KYU08R01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KYU08W01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KYU08W02' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W02OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
3000STPSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (4.0) *
|
||||
* サブモジュール名: メッセージ出力処理 *
|
||||
*****************************************************************
|
||||
4000MSGOUTSOR SECTION.
|
||||
*
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
|
||||
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
|
||||
CALL 'SUB02MSG' USING M00MHOPAR.
|
||||
*
|
||||
4000MSGOUTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (9.9) *
|
||||
* サブモジュール名: ABEND処理 *
|
||||
*****************************************************************
|
||||
9999ABDSOR SECTION.
|
||||
*
|
||||
MOVE CNS-ABD999 TO E01ABDCOD.
|
||||
CALL 'SUB03END' USING E01ABDPAR.
|
||||
*
|
||||
9999ABDSOR-EXT.
|
||||
EXIT.
|
||||
@@ -0,0 +1,349 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. KYU09MRG.
|
||||
*****************************************************************
|
||||
* システム名 : 給与計算システム *
|
||||
* プログラムID : KYU09MRG *
|
||||
* プログラム名 : 支給データ結合処理 *
|
||||
* 作成日 : 2026-07-01 *
|
||||
* 処理概要 : SALARY-NETとBONUS-DATAをMERGE文で *
|
||||
* 社員番号昇順に結合し、同一社員内の *
|
||||
* 給与(TYPE=S)と賞与(TYPE=B)を統合 *
|
||||
* プログラム分類: No.35 MERGE(複数ファイル結合) *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 2026-07-01 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT MERGE-FILE ASSIGN TO EXTERNAL KYU09M99.
|
||||
SELECT SALARY-FILE ASSIGN TO EXTERNAL KYU09M01.
|
||||
SELECT BONUS-FILE ASSIGN TO EXTERNAL KYU09M02.
|
||||
SELECT W01OUTFIL ASSIGN TO EXTERNAL KYU09W01.
|
||||
SELECT W02OUTFIL ASSIGN TO EXTERNAL KYU09W02.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* MERGE: 作業ファイル *
|
||||
*****************************************************************
|
||||
SD MERGE-FILE.
|
||||
01 MERGE-REC.
|
||||
05 MERGE-EMP-ID PIC X(008).
|
||||
05 MERGE-REC-TYPE PIC X(001).
|
||||
05 MERGE-EMP-NAME PIC X(040).
|
||||
05 MERGE-DEPT-CODE PIC X(002).
|
||||
05 MERGE-REGION-CODE PIC X(002).
|
||||
05 MERGE-CATEGORY-CODE PIC X(003).
|
||||
05 MERGE-GROSS-PAYMENT PIC 9(009).
|
||||
05 MERGE-INCOME-TAX PIC 9(009).
|
||||
05 MERGE-INSURANCE PIC 9(009).
|
||||
05 MERGE-RESIDENT-TAX PIC 9(009).
|
||||
05 MERGE-NET-PAYMENT PIC 9(009).
|
||||
05 MERGE-TAXABLE-INCOME PIC 9(009).
|
||||
05 MERGE-PAY-AMOUNT PIC 9(009).
|
||||
05 FILLER PIC X(081).
|
||||
*
|
||||
*****************************************************************
|
||||
* M01: SALARY-NET(200B FB S=給与レコード) *
|
||||
*****************************************************************
|
||||
FD SALARY-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 SALARY-REC.
|
||||
COPY KYU04REC REPLACING ==(A)== BY ==SA==.
|
||||
*
|
||||
*****************************************************************
|
||||
* M02: BONUS-DATA(200B FB B=賞与レコード) *
|
||||
*****************************************************************
|
||||
FD BONUS-FILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 BONUS-REC.
|
||||
COPY KYU04REC REPLACING ==(A)== BY ==BO==.
|
||||
*
|
||||
*****************************************************************
|
||||
* W01: PAYMENT-DATA(200B FB) *
|
||||
*****************************************************************
|
||||
FD W01OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 W01OUTREC.
|
||||
COPY KYU06REC REPLACING ==(A)== BY ==W01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* W02: ERROR-LOG(VB) *
|
||||
*****************************************************************
|
||||
FD W02OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS V.
|
||||
01 W02OUTREC.
|
||||
COPY KYU99REC REPLACING ==(A)== BY ==W02==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'KYU09MRG'.
|
||||
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-MSGKEYINF PIC 9(003) VALUE 033.
|
||||
03 CNS-KN0002 PIC 9(001) VALUE 2.
|
||||
03 CNS-ABD999 PIC 9(003) VALUE 999.
|
||||
03 CNS-PAY-TYPE-SALARY PIC X(001) VALUE 'S'.
|
||||
03 CNS-PAY-TYPE-BONUS PIC X(001) VALUE 'B'.
|
||||
03 CNS-PAY-TYPE-TOTAL PIC X(001) VALUE 'T'.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
01 CUNARA.
|
||||
03 CUN-W01OUT PIC S9(009) COMP-3 VALUE ZERO.
|
||||
03 CUN-W02OUT PIC S9(009) COMP-3 VALUE ZERO.
|
||||
*
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
03 WRK-MERGE-EOF PIC X(001).
|
||||
88 WRK-MERGE-EOF-Y VALUE '1'.
|
||||
03 WRK-CURRENT-EMP PIC X(008).
|
||||
03 WRK-SALARY-AMOUNT PIC 9(009).
|
||||
03 WRK-BONUS-AMOUNT PIC 9(009).
|
||||
03 WRK-TOTAL-PAYMENT PIC 9(009).
|
||||
03 WRK-BANK-CODE PIC X(004).
|
||||
03 WRK-ACCOUNT-NO PIC 9(008).
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
COPY ZANDATAC.
|
||||
COPY ZANMSGAC.
|
||||
COPY ZANENDAC.
|
||||
*
|
||||
LINKAGE SECTION.
|
||||
*
|
||||
01 ENTRYPAR.
|
||||
03 ENTRY-EMP-ID PIC X(008).
|
||||
03 ENTRY-YEAR-MONTH PIC X(006).
|
||||
03 ENTRY-MODE PIC X(001).
|
||||
*
|
||||
PROCEDURE DIVISION.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
*****************************************************************
|
||||
0000MAJCOLSOR SECTION.
|
||||
*
|
||||
PERFORM 1000ITTSOR.
|
||||
*
|
||||
*** MERGE実行
|
||||
MERGE MERGE-FILE
|
||||
ON ASCENDING KEY MERGE-EMP-ID
|
||||
USING SALARY-FILE
|
||||
BONUS-FILE
|
||||
OUTPUT PROCEDURE 2000MRGOUTSOR.
|
||||
*
|
||||
PERFORM 3000STPSOR.
|
||||
*
|
||||
0000MAJCOLSOR-EXT.
|
||||
GOBACK.
|
||||
*
|
||||
*****************************************************************
|
||||
* ENTRY代替エントリポイント(直接結合モード) *
|
||||
*****************************************************************
|
||||
ENTRY 'KYU09ENT' USING ENTRYPAR.
|
||||
*
|
||||
0010DIRECTSOR SECTION.
|
||||
*
|
||||
MOVE 'DIRECT ENTRY' TO W02ERR-DETAIL.
|
||||
WRITE W02OUTREC.
|
||||
ADD 1 TO CUN-W02OUT.
|
||||
*
|
||||
0010DIRECTSOR-EXT.
|
||||
GOBACK.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.0) *
|
||||
* サブモジュール名: 初期処理 *
|
||||
*****************************************************************
|
||||
1000ITTSOR SECTION.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGSTR TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGKEYINF TO M00MSGCOD.
|
||||
MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01.
|
||||
MOVE 'COMPILED' TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE WRKARA.
|
||||
*
|
||||
*** 運用日付取得
|
||||
INITIALIZE D01UBSPAR.
|
||||
CALL 'SUB01DAT' USING D01UBSPAR.
|
||||
IF D01FKICOD NOT = ZERO
|
||||
MOVE CNS-MSGSUBEEK TO M00MSGCOD
|
||||
MOVE 'SUB01DAT' TO M00UMKDATS22-01
|
||||
MOVE D01FKICOD TO M00UMKDATS22-02
|
||||
PERFORM 4000MSGOUTSOR
|
||||
PERFORM 9999ABDSOR
|
||||
END-IF.
|
||||
*
|
||||
OPEN OUTPUT W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.0) *
|
||||
* サブモジュール名: MERGE出力処理 *
|
||||
*****************************************************************
|
||||
2000MRGOUTSOR SECTION.
|
||||
*
|
||||
*** MERGE結果受取 → 同一社員統合
|
||||
PERFORM WITH TEST AFTER
|
||||
UNTIL WRK-MERGE-EOF-Y
|
||||
RETURN MERGE-FILE
|
||||
INTO MERGE-REC
|
||||
AT END
|
||||
SET WRK-MERGE-EOF-Y TO TRUE
|
||||
END-RETURN
|
||||
IF NOT WRK-MERGE-EOF-Y
|
||||
MOVE MERGE-EMP-ID
|
||||
TO WRK-CURRENT-EMP
|
||||
MOVE ZERO TO WRK-SALARY-AMOUNT
|
||||
MOVE ZERO TO WRK-BONUS-AMOUNT
|
||||
MOVE ZERO TO WRK-TOTAL-PAYMENT
|
||||
PERFORM UNTIL
|
||||
WRK-CURRENT-EMP NOT =
|
||||
MERGE-EMP-ID OF MERGE-REC
|
||||
IF MERGE-REC-TYPE
|
||||
= CNS-PAY-TYPE-SALARY
|
||||
MOVE MERGE-PAY-AMOUNT
|
||||
TO WRK-SALARY-AMOUNT
|
||||
MOVE MERGE-GROSS-PAYMENT
|
||||
TO WRK-BANK-CODE
|
||||
MOVE MERGE-EMP-ID(1:4)
|
||||
TO WRK-ACCOUNT-NO
|
||||
ELSE
|
||||
MOVE MERGE-PAY-AMOUNT
|
||||
TO WRK-BONUS-AMOUNT
|
||||
END-IF
|
||||
RETURN MERGE-FILE
|
||||
INTO MERGE-REC
|
||||
AT END
|
||||
MOVE HIGH-VALUES
|
||||
TO MERGE-EMP-ID
|
||||
EXIT PERFORM
|
||||
END-RETURN
|
||||
END-PERFORM
|
||||
*** 一社員分の統合データ書出
|
||||
ADD WRK-SALARY-AMOUNT
|
||||
TO WRK-BONUS-AMOUNT
|
||||
GIVING WRK-TOTAL-PAYMENT
|
||||
PERFORM 2100PAYOUTSOR
|
||||
END-IF
|
||||
END-PERFORM.
|
||||
*
|
||||
2000MRGOUTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.1) *
|
||||
* サブモジュール名: PAYMENT-DATA出力処理 *
|
||||
*****************************************************************
|
||||
2100PAYOUTSOR SECTION.
|
||||
*
|
||||
INITIALIZE W01OUTREC.
|
||||
MOVE WRK-CURRENT-EMP TO W01EMP-ID.
|
||||
MOVE CNS-PAY-TYPE-TOTAL TO W01PAY-TYPE.
|
||||
MOVE WRK-TOTAL-PAYMENT TO W01AMOUNT.
|
||||
MOVE WRK-BANK-CODE TO W01BANK-CODE.
|
||||
MOVE WRK-ACCOUNT-NO TO W01ACCOUNT-NO.
|
||||
WRITE W01OUTREC.
|
||||
ADD 1 TO CUN-W01OUT.
|
||||
*
|
||||
2100PAYOUTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (3.0) *
|
||||
* サブモジュール名: 終了処理 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
CLOSE W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'MERGE-FILE' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KYU09W01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KYU09W02' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W02OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
3000STPSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (4.0) *
|
||||
* サブモジュール名: メッセージ出力処理 *
|
||||
*****************************************************************
|
||||
4000MSGOUTSOR SECTION.
|
||||
*
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
|
||||
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
|
||||
CALL 'SUB02MSG' USING M00MHOPAR.
|
||||
*
|
||||
4000MSGOUTSOR-EXT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (9.9) *
|
||||
* サブモジュール名: ABEND処理 *
|
||||
*****************************************************************
|
||||
9999ABDSOR SECTION.
|
||||
*
|
||||
MOVE CNS-ABD999 TO E01ABDCOD.
|
||||
CALL 'SUB03END' USING E01ABDPAR.
|
||||
*
|
||||
9999ABDSOR-EXT.
|
||||
EXIT.
|
||||
@@ -0,0 +1,49 @@
|
||||
# KYU01CVT 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: KYU01CVT
|
||||
- **プログラム名**: 社員マスタCSV→FB変換処理
|
||||
- **処理概要**: CSV形式の社員マスタを固定長80Bに変換する。引用符内改行をINSPECT CONVERTINGで処理し、項目チェックはSUB04CHKで実施。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||
|------|---------------|------|-------------|-----------|--------|
|
||||
| KYU01R01 | CSV-INPUT | 順編成 | V (可変長) | 500B | なし(自前定義) |
|
||||
| KYU01W01 | EMP-RECORD | 順編成 | F (固定長) | 80B | KYU01REC |
|
||||
| KYU01W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | KYU99REC |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| KYU01REC | レコード定義(W01出力ファイル) | FILE SECTION |
|
||||
| KYU99REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANCHKAC | 項目チェックサブPGM連絡領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||
| SUB04CHK | 社員番号/時給数値チェック | 2000MAJSOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
なし(DB操作なし)
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→OPEN→初回読込)
|
||||
2. コメント行(#)はスキップ
|
||||
3. 引用符状態チェック(奇数個の"で状態反転)
|
||||
- 引用符内 → 行蓄積→次行読込
|
||||
- 引用符外 → INSPECT CONVERTING(改行→SPACE)→ CSV分解
|
||||
4. CSV分解(UNSTRINGで9項目に分解)
|
||||
5. 項目数≠9 → ERROR-LOG出力
|
||||
6. 社員番号空チェック → ERROR-LOG出力
|
||||
7. SUB04CHK(EMP-ID数値チェック、HOURLY-RATE数値チェック)
|
||||
8. EMP-RECORD編集→W01出力
|
||||
9. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||
@@ -0,0 +1,45 @@
|
||||
# KYU02REG 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: KYU02REG
|
||||
- **プログラム名**: 社員マスタDB2登録処理
|
||||
- **処理概要**: EMP-RECORDをDB2 EMP-MASTERにINSERT/UPSERTする。重複時(-803)はUPDATEに切替。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||
|------|---------------|------|-------------|-----------|--------|
|
||||
| KYU02R02 | EMP-RECORD | 順編成 | F (固定長) | 80B | KYU01REC |
|
||||
| KYU02W03 | ERROR-LOG | 順編成 | V (可変長) | 200B | KYU99REC |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| KYU01REC | レコード定義(R02入力ファイル) | FILE SECTION |
|
||||
| KYU99REC | エラーログレコード定義(W03出力ファイル) | FILE SECTION |
|
||||
| SQLCA | SQL通信領域 | WORKING-STORAGE |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
| テーブル名 | アクセス種別 | 用途 |
|
||||
|-----------|-------------|------|
|
||||
| EMP-MASTER | INSERT / UPDATE | 社員マスタ登録(INSERT試行→-803時UPDATE) |
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→OPEN→DB接続→初回読込)
|
||||
2. DB2ホスト変数にMOVE
|
||||
3. INSERT試行
|
||||
- SQLCODE=0 → 正常登録
|
||||
- SQLCODE=-803 → UPDATEに切替
|
||||
- その他SQLエラー → ERROR-LOG出力
|
||||
4. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||
@@ -0,0 +1,43 @@
|
||||
# KYU03AGG 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: KYU03AGG
|
||||
- **プログラム名**: 欠勤集約処理
|
||||
- **処理概要**: JCL SORT済み欠勤データを社員単位に集約する。同一社員内の欠勤時間・回数を集計。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||
|------|---------------|------|-------------|-----------|--------|
|
||||
| KYU03R01 | ABSENCE-SUMMARY | 順編成 | F (固定長) | 80B | なし(自前定義) |
|
||||
| KYU03W01 | ABSENCE-AGGREGATE | 順編成 | F (固定長) | 80B | KYU02REC |
|
||||
| KYU03W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | KYU99REC |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| KYU02REC | レコード定義(W01出力ファイル) | FILE SECTION |
|
||||
| KYU99REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
なし(DB操作なし)
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→OPEN→初回読込)
|
||||
2. キーブレイク集約処理
|
||||
- 初回 → 前レコード保持
|
||||
- 同一社員 → 欠勤時間/回数加算
|
||||
- 異社員 → 前社員集約出力→前レコード更新
|
||||
3. 最終社員の集約出力
|
||||
4. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||
@@ -0,0 +1,50 @@
|
||||
# KYU04CAL 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: KYU04CAL
|
||||
- **プログラム名**: 給与計算処理
|
||||
- **処理概要**: 欠勤集約 + EMP-MASTER + OVT-MONTHLYを参照し給与計算を実行する。勤怠区分×手当種別の複合分岐はEVALUATE ALSO。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||
|------|---------------|------|-------------|-----------|--------|
|
||||
| KYU04R02 | ABSENCE-AGGREGATE | 順編成 | F (固定長) | 80B | KYU02REC |
|
||||
| KYU04R03 | PAY-PARAM | 順編成 | F (固定長) | 80B | なし(自前定義) |
|
||||
| KYU04W03 | SALARY-DETAIL | 順編成 | F (固定長) | 240B | KYU03REC |
|
||||
| KYU04W04 | ERROR-LOG | 順編成 | V (可変長) | 200B | KYU99REC |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| KYU02REC | レコード定義(R02入力ファイル) | FILE SECTION |
|
||||
| KYU03REC | レコード定義(W03出力ファイル) | FILE SECTION |
|
||||
| KYU99REC | エラーログレコード定義(W04出力ファイル) | FILE SECTION |
|
||||
| SQLCA | SQL通信領域 | WORKING-STORAGE |
|
||||
| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
| テーブル名 | アクセス種別 | 用途 |
|
||||
|-----------|-------------|------|
|
||||
| EMP-MASTER | SELECT | 社員情報(氏名・部署・給与関連項目)参照 |
|
||||
| OVT-MONTHLY | SELECT | 残業時間合計(SUM(OVT-HOURS))参照 |
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→運用日付取得→PAY-PARAM読込→OPEN→DB接続→初回読込)
|
||||
2. DB2 EMP-MASTER参照(社員情報取得)
|
||||
3. DB2 OVT-MONTHLY参照(残業時間合計取得)
|
||||
4. 給与計算(欠勤控除額→残業手当→EVALUATE ALSO(勤怠×手当)→支給総額)
|
||||
5. SALARY-DETAIL出力
|
||||
6. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||
@@ -0,0 +1,49 @@
|
||||
# KYU05DED 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: KYU05DED
|
||||
- **プログラム名**: 控除計算処理
|
||||
- **処理概要**: SALARY-DETAILを入力に、源泉所得税・社会保険料・住民税を計算しSALARY-NETを出力する。TAX-TABLE(DB2 SELECT ... BETWEEN)とINSURANCE-TABLE(SEARCH ALL)を参照。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||
|------|---------------|------|-------------|-----------|--------|
|
||||
| KYU05R01 | SALARY-DETAIL | 順編成 | F (固定長) | 240B | KYU03REC |
|
||||
| KYU05W01 | SALARY-NET | 順編成 | F (固定長) | 200B | KYU04REC |
|
||||
| KYU05W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | KYU99REC |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| KYU03REC | レコード定義(R01入力ファイル) | FILE SECTION |
|
||||
| KYU04REC | レコード定義(W01出力ファイル) | FILE SECTION |
|
||||
| KYU99REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION |
|
||||
| SQLCA | SQL通信領域 | WORKING-STORAGE |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 1100INSLOADSOR / 9999ABDSOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
| テーブル名 | アクセス種別 | 用途 |
|
||||
|-----------|-------------|------|
|
||||
| TAX-TABLE | SELECT | 課税所得に対する税率・控除額(BETWEEN検索) |
|
||||
| INSURANCE-TABLE | SELECT(DECLARE/FETCH) | 社会保険料率取得(全件LOAD→SEARCH ALL) |
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→DB接続→INSURANCE-TABLE全件LOAD→OPEN→初回読込)
|
||||
2. 課税所得計算(基本控除差引)
|
||||
3. DB2 TAX-TABLE参照(BETWEEN条件で税率・控除額取得)
|
||||
4. 社会保険料計算(SEARCH ALL:所得範囲一致)
|
||||
5. 住民税計算(定率計算)
|
||||
6. 差引支給額計算
|
||||
7. SALARY-NET出力
|
||||
8. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||
@@ -0,0 +1,45 @@
|
||||
# KYU06UPD 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: KYU06UPD
|
||||
- **プログラム名**: 給与計算結果DB2更新処理
|
||||
- **処理概要**: SALARY-NETをDB2 SALARY-RESULTSに登録する。重複時(-803)はUPDATEに切替。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||
|------|---------------|------|-------------|-----------|--------|
|
||||
| KYU06R02 | SALARY-NET | 順編成 | F (固定長) | 200B | KYU04REC |
|
||||
| KYU06W03 | ERROR-LOG | 順編成 | V (可変長) | 200B | KYU99REC |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| KYU04REC | レコード定義(R02入力ファイル) | FILE SECTION |
|
||||
| KYU99REC | エラーログレコード定義(W03出力ファイル) | FILE SECTION |
|
||||
| SQLCA | SQL通信領域 | WORKING-STORAGE |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
| テーブル名 | アクセス種別 | 用途 |
|
||||
|-----------|-------------|------|
|
||||
| SALARY-RESULTS | INSERT / UPDATE | 給与計算結果登録(INSERT試行→-803時UPDATE) |
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→PARM取得→OPEN→DB接続→初回読込)
|
||||
2. DB2ホスト変数にMOVE
|
||||
3. INSERT試行
|
||||
- SQLCODE=0 → 正常登録
|
||||
- SQLCODE=-803 → UPDATEに切替
|
||||
- その他SQLエラー → ERROR-LOG出力
|
||||
4. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||
@@ -0,0 +1,44 @@
|
||||
# KYU07DIV 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: KYU07DIV
|
||||
- **プログラム名**: 部門別分割出力処理
|
||||
- **処理概要**: JCL SORT済SALARY-NETを部署コードに応じて50ファイルに分割出力する。常に1ファイルのみOPEN。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||
|------|---------------|------|-------------|-----------|--------|
|
||||
| KYU07R01 | SALARY-NET(SORT済) | 順編成 | F (固定長) | 200B | KYU04REC |
|
||||
| KYU07SYS | 制御カード(SYSIN) | 順編成 | F (固定長) | 80B | なし(自前定義) |
|
||||
| KYU07D01〜D50 | 部署別出力(50ファイル) | 順編成 | F (固定長) | 200B | なし(自前定義 PIC X(200)) |
|
||||
| KYU07W99 | ERROR-LOG | 順編成 | V (可変長) | 200B | KYU99REC |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| KYU04REC | レコード定義(R01入力ファイル) | FILE SECTION |
|
||||
| KYU99REC | エラーログレコード定義(W99出力ファイル) | FILE SECTION |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
なし(DB操作なし)
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→SYSIN読込(対象部署)→OPEN→初回読込)
|
||||
2. SYSINパース("DEPT=01,02,05,10"形式、複数部署指定可)
|
||||
3. 主処理
|
||||
- SYSIN対象部署フィルタ(SEARCH)
|
||||
- 部署切替検出 → 前ファイルCLOSE WITH LOCK→新ファイルOPEN
|
||||
- EVALUATEで該当部署ファイルにWRITE
|
||||
4. 終了処理(最終部署CLOSE→CLOSE→件数出力→終了メッセージ)
|
||||
@@ -0,0 +1,45 @@
|
||||
# KYU08PRI 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: KYU08PRI
|
||||
- **プログラム名**: 給与明細印刷処理
|
||||
- **処理概要**: JCL SORT済みSALARY-NETを給与明細(LINAGE)として印刷出力する。1社員1ページ。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||
|------|---------------|------|-------------|-----------|--------|
|
||||
| KYU08R01 | SALARY-NET(SORT済) | 順編成 | F (固定長) | 200B | KYU04REC |
|
||||
| KYU08W01 | PAYSLIP印刷(LINAGE) | 順編成 | F (固定長) | 200B | KYU05REC |
|
||||
| KYU08W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | KYU99REC |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| KYU04REC | レコード定義(R01入力ファイル) | FILE SECTION |
|
||||
| KYU05REC | レコード定義(W01印刷出力ファイル) | FILE SECTION |
|
||||
| KYU99REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION |
|
||||
| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
なし(DB操作なし)
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→運用日付取得→OPEN→初回読込)
|
||||
2. ヘッダ出力(BEFORE ADVANCING PAGE + ページ番号)
|
||||
3. 明細行編集(社員番号・氏名・基本給・差引支給額)
|
||||
4. 明細WRITE(AT END-OF-PAGEでフッタ→改ページ)
|
||||
5. フッタ出力(BEFORE ADVANCING PAGE)
|
||||
6. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||
@@ -0,0 +1,49 @@
|
||||
# KYU09MRG 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: KYU09MRG
|
||||
- **プログラム名**: 支給データ結合処理
|
||||
- **処理概要**: SALARY-NETとBONUS-DATAをMERGE文で社員番号昇順に結合し、同一社員内の給与(TYPE=S)と賞与(TYPE=B)を統合する。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||
|------|---------------|------|-------------|-----------|--------|
|
||||
| KYU09M99 | MERGE-FILE(作業) | 順編成 | - | 200B | なし(自前定義 SD) |
|
||||
| KYU09M01 | SALARY-NET(S=給与) | 順編成 | F (固定長) | 200B | KYU04REC |
|
||||
| KYU09M02 | BONUS-DATA(B=賞与) | 順編成 | F (固定長) | 200B | KYU04REC |
|
||||
| KYU09W01 | PAYMENT-DATA | 順編成 | F (固定長) | 200B | KYU06REC |
|
||||
| KYU09W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | KYU99REC |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| KYU04REC | レコード定義(M01/M02入力ファイル) | FILE SECTION |
|
||||
| KYU06REC | レコード定義(W01出力ファイル) | FILE SECTION |
|
||||
| KYU99REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION |
|
||||
| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
なし(DB操作なし)
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→運用日付取得→OPEN)
|
||||
2. MERGE実行(ON ASCENDING KEY MERGE-EMP-ID, USING SALARY-FILE BONUS-FILE)
|
||||
3. OUTPUT PROCEDURE(2000MRGOUTSOR)
|
||||
- RETURN MERGE-FILE で受取
|
||||
- 同一社員内でTYPE=S(給与)とTYPE=B(賞与)を統合
|
||||
- 給与+賞与=支給総額算定
|
||||
- PAYMENT-DATA出力
|
||||
4. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||
+41
-41
@@ -1,6 +1,6 @@
|
||||
# カバレッジ統計
|
||||
|
||||
> 本ファイルは全コードベース(KIN + ZAN + SUB)を統合したカバレッジ状況を集計する。
|
||||
> 本ファイルは全コードベース(KIN + ZAN + KYU + SUB)を統合したカバレッジ状況を集計する。
|
||||
> 定義ファイル(COBOLキーワード網羅定義書.md)の ## 1.(予約語一覧)・## 2.(TYPE定義)を参照して集計する。
|
||||
> 凡例:◎=完全使用(全構文形式を使用)、△=一部使用(一部の構文形式のみを使用)、×=未使用
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
| 01 | マッチング(1:1) | 匹配 | ZAN04MAT | ◎ |
|
||||
| 02 | マッチング(1:N) | 匹配 | KIN05MAT, KIN03EXP | ◎ |
|
||||
| 03 | マッチング(N:1) | 匹配 | ZAN03CHK | ◎ |
|
||||
| 04 | レイアウト編集のみ(GETPUT) | 编辑 | KIN06CLD | ◎ |
|
||||
| 05 | 振り分け(IF文) | 分支 | 全メインプログラム(12本) | ◎ |
|
||||
| 06 | 振り分け(EVALUATE文) | 分支 | 12本中11本(KIN04/KIN06以外) | ◎ |
|
||||
| 04 | レイアウト編集のみ(GETPUT) | 编辑 | KIN06CLD, KYU08PRI | ◎ |
|
||||
| 05 | 振り分け(IF文) | 分支 | 全メインプログラム(24本) | ◎ |
|
||||
| 06 | 振り分け(EVALUATE文) | 分支 | 24本中23本(KIN04/KIN06以外) | ◎ |
|
||||
| 07 | キーブレイク(集計) | key切 | ZAN05CAL | ◎ |
|
||||
| 08 | キーブレイク(集約) | key切 | — | × |
|
||||
| 09 | DB更新 | 数据库 | KIN02UPD, ZAN06UPD | ◎ |
|
||||
| 10 | 50分割 | 分割 | — | × |
|
||||
| 08 | キーブレイク(集約) | key切 | KYU03AGG | ◎ |
|
||||
| 09 | DB更新 | 数据库 | KIN02UPD, ZAN06UPD, KYU02REG, KYU06UPD | ◎ |
|
||||
| 10 | 50分割 | 分割 | KYU07DIV | ◎ |
|
||||
| 11 | 25分割 | 分割 | — | × |
|
||||
| 12 | 100分割 | 分割 | — | × |
|
||||
| 13 | 項目チェック(重複含まず) | 校验 | ZAN01CHK, ZAN03CHK, KIN01INP, KIN04CHK, SUB04CHK | ◎ |
|
||||
@@ -32,30 +32,30 @@
|
||||
| 18 | マッチングM:N⇒出力M件 | 匹配 | — | × |
|
||||
| 19 | マッチングM:N⇒出力N件 | 匹配 | — | × |
|
||||
| 20 | マッチングM:N⇒出力M×N件 | 匹配 | — | × |
|
||||
| 21 | CSV→FB変換(改行あり) | 文件转换 | — | × |
|
||||
| 21 | CSV→FB変換(改行あり) | 文件转换 | KYU01CVT | ◎ |
|
||||
| 22 | 2段階マッチング(M:N⇒M:N) | 匹配 | — | × |
|
||||
| 23 | SELECT条件 | 数据库 | — | × |
|
||||
| 24 | 内部テーブル検索 | 内部处理 | KIN01INP(SEARCH), KIN03EXP(SEARCH ALL), ZAN03CHK(SEARCH ALL) | ◎ |
|
||||
| 23 | SELECT条件 | 数据库 | KYU05DED | ◎ |
|
||||
| 24 | 内部テーブル検索 | 内部处理 | KIN01INP(SEARCH), KIN03EXP(SEARCH ALL), ZAN03CHK(SEARCH ALL), KYU05DED(SEARCH ALL) | ◎ |
|
||||
| 25 | サブプログラム使用 | 内部处理 | SUB01DAT~SUB05TIM | ◎ |
|
||||
| 26 | DB検索 | 数据库 | KIN03EXP, KIN06CLD | ◎ |
|
||||
| 26 | DB検索 | 数据库 | KIN03EXP, KIN06CLD, KYU04CAL, KYU05DED | ◎ |
|
||||
| 27 | 項目チェック(半角20桁/4桁) | 校验 | — | × |
|
||||
| 28 | SYSIN読込 | 内部处理 | KIN08DBU | ◎ |
|
||||
| 28 | SYSIN読込 | 内部处理 | KIN08DBU, KYU07DIV | ◎ |
|
||||
| 29 | ASCII→EBCDIC変換 | 文件转换 | — | × |
|
||||
| 30 | キーブレイク(集計集約以外) | key切 | KIN03EXP(社員小計), ZAN02CHK(重複検出), KIN05MAT(N:1ループ) | ◎ |
|
||||
| 30 | キーブレイク(集計集約以外) | key切 | KIN03EXP(社員小計), ZAN02CHK(重複検出), KIN05MAT(N:1ループ), KYU03AGG(集約), KYU04CAL(同キー) | ◎ |
|
||||
| 31 | 項目チェック(重複含む) | 校验 | ZAN02CHK(時間帯重複) | ◎ |
|
||||
| 32 | 1:N+キーブレイク(同キー) | 混合 | — | × |
|
||||
| 32 | 1:N+キーブレイク(同キー) | 混合 | KYU04CAL | ◎ |
|
||||
| 33 | 1:N+キーブレイク(異キー) | 混合 | — | × |
|
||||
| 34 | SORT(INPUT/OUTPUT PROCEDURE) | 排序 | — | × |
|
||||
| 35 | MERGE(複数ファイル結合) | 排序 | — | × |
|
||||
| 35 | MERGE(複数ファイル結合) | 排序 | KYU09MRG | ◎ |
|
||||
|
||||
### 1.2 集計
|
||||
|
||||
| 指標 | 値 |
|
||||
|------|:----:|
|
||||
| 全タイプ数 | 35 |
|
||||
| ◎(使用) | 16 |
|
||||
| ×(未使用) | 19 |
|
||||
| カバレッジ率(◎/35) | 45.7% |
|
||||
| ◎(使用) | 22 |
|
||||
| ×(未使用) | 13 |
|
||||
| カバレッジ率(◎/35) | 62.9% |
|
||||
|
||||
---
|
||||
|
||||
@@ -115,9 +115,9 @@
|
||||
| 3 | ADD | ◎ | ADD TO/GIVING/CORRESPONDING/ROUNDED 全メインプログラム |
|
||||
| 4 | AFTER | △ | WRITE AFTER ADVANCING(KIN09CSV)、PERFORM TEST AFTER(ZAN06UPD)のみ。INSPECT AFTER未使用 |
|
||||
| 5 | ALL | △ | SEARCH ALL(KIN03EXP,ZAN03CHK)、INSPECT REPLACING ALL(KIN08DBU,KIN09CSV)。FIGURATIVE CONSTANT(VALUE ALL)未使用 |
|
||||
| 6 | ALPHABETIC | × | 未使用 |
|
||||
| 6 | ALPHABETIC | △ | IF NOT ALPHABETIC(KYU01CVT, KYU04CHK) |
|
||||
| 7 | ALPHABETIC-UPPER | × | 未使用 |
|
||||
| 8 | ALSO | × | EVALUATE ALSO未使用(全EVALUATEは単一条件式のみ) |
|
||||
| 8 | ALSO | ◎ | EVALUATE ALSO(KYU04CAL: 勤怠区分×手当種別の複合分岐) |
|
||||
| 9 | AND | ◎ | 条件式AND 全プログラム |
|
||||
| 10 | ANY | × | SEARCH ANY未使用 |
|
||||
| 11 | APPLY | × | I-O-CONTROL段落未使用 |
|
||||
@@ -140,16 +140,16 @@
|
||||
| 28 | CONFIGURATION | ◎ | CONFIGURATION SECTION 全プログラム |
|
||||
| 29 | CONTAINS | ◎ | FD BLOCK CONTAINS / RECORD CONTAINS |
|
||||
| 30 | CONTINUE | ◎ | SEARCH AT END、EVALUATE WHEN OTHER(全プログラム) |
|
||||
| 31 | CONVERTING | × | INSPECT CONVERTING未使用 |
|
||||
| 31 | CONVERTING | ◎ | INSPECT CONVERTING X"0D"/X"0A" TO SPACE(KYU01CVT: 引用符内改行→SPACE変換) |
|
||||
| 32 | COPY | ◎ | COPY 全プログラム(C書式取込み、REPLACING含む) |
|
||||
| 33 | CORR | × | MOVE CORR/ADD CORR/SUBTRACT CORR未使用 |
|
||||
| 34 | COUNT | × | UNSTRING COUNT IN未使用(INSPECT TALLYINGは別キーワード) |
|
||||
| 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使用) |
|
||||
| 38 | DATE-COMPILED | ◎ | IDENTIFICATION DIVISION 全プログラム |
|
||||
| 39 | DATE-WRITTEN | ◎ | IDENTIFICATION DIVISION 全プログラム |
|
||||
| 40 | DECLARATIVES | × | 未使用 |
|
||||
| 40 | DECLARATIVES | ◎ | USE AFTER ERROR PROCEDURE(KYU01CVT: R01/W01/W02ファイルエラー時ABEND) |
|
||||
| 41 | DELETE | △ | EXEC SQL DELETE(KIN02UPD,KIN08DBU)。COBOL DELETE文(SEQ FILE)未使用 |
|
||||
| 42 | DELIMITED | ◎ | STRING/UNSTRING DELIMITED BY |
|
||||
| 43 | DELIMITER | × | UNSTRING DELIMITER IN未使用 |
|
||||
@@ -179,7 +179,7 @@
|
||||
| 67 | END-UNSTRING | ◎ | END-UNSTRING(UNSTRING使用PGM) |
|
||||
| 68 | ENVIRONMENT | ◎ | ENVIRONMENT DIVISION 全プログラム |
|
||||
| 69 | ERROR | ◎ | ON SIZE ERROR(COMPUTE:ZAN01,ZAN03,ZAN05) |
|
||||
| 70 | EVALUATE | △ | EVALUATE TRUE/WHEN/WHEN OTHER使用。ALSO未使用。構文形式一覧のALSO形式が未使用のため△ |
|
||||
| 70 | EVALUATE | ◎ | EVALUATE ALSO/WHEN/WHEN OTHER(KYU04CAL: 勤怠区分×手当種別) |
|
||||
| 71 | EXEC | △ | EXEC SQL使用。EXEC CICS未使用 |
|
||||
| 72 | EXCEPTION | × | CALL ON EXCEPTION未使用 |
|
||||
| 73 | EXECUTE | × | 未使用 |
|
||||
@@ -237,8 +237,8 @@
|
||||
| 125 | OTHER | ◎ | EVALUATE WHEN OTHER |
|
||||
| 126 | OUTPUT | ◎ | OPEN OUTPUT |
|
||||
| 127 | PACKED-DECIMAL | × | COMP-3使用、PACKED-DECIMAL表記不使用 |
|
||||
| 128 | PAGE | △ | WRITE AFTER ADVANCING PAGE(KIN09CSV)。FD LINAGE句未使用 |
|
||||
| 129 | PAGE-COUNTER | × | 未使用(LINAGE不使用のため) |
|
||||
| 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未使用 |
|
||||
| 131 | PIC | ◎ | PICTURE句 全プログラム |
|
||||
| 132 | POINTER | ◎ | STRING WITH POINTER(KIN09CSV) |
|
||||
@@ -289,7 +289,7 @@
|
||||
| 177 | UP | × | SET UP未使用 |
|
||||
| 178 | UPON | × | DISPLAY UPON未使用 |
|
||||
| 179 | USAGE | ◎ | USAGE COMP/COMP-3 |
|
||||
| 180 | USE | × | USE文未使用 |
|
||||
| 180 | USE | ◎ | USE AFTER ERROR PROCEDURE(KYU01CVT: DECLARATIVESでファイルエラー捕捉) |
|
||||
| 181 | USING | ◎ | PROCEDURE DIVISION USING、CALL USING 全プログラム |
|
||||
| 182 | VALUE | ◎ | VALUE 全プログラム(88条件名、初期値) |
|
||||
| 183 | VALUES | × | 88条件値VALUES(VALUE句複数値)未使用。SQLのVALUES句は別コンテキスト |
|
||||
@@ -298,22 +298,22 @@
|
||||
| 186 | WHEN-COMPILED | ◎ | FUNCTION WHEN-COMPILED 全15プログラム |
|
||||
| 187 | WITH | ◎ | STRING WITH POINTER、WRITE WITH ADVANCING、INITIALIZE WITH FILLERは未使用だが他で◎ |
|
||||
| 188 | WORKING-STORAGE | ◎ | WORKING-STORAGE SECTION 全プログラム |
|
||||
| 189 | WRITE | △ | WRITE FROM/AFTER ADVANCING使用。BEFORE ADVANCING/END-OF-PAGE未使用 |
|
||||
| 189 | WRITE | ◎ | WRITE FROM/BEFORE ADVANCING/AFTER ADVANCING/END-OF-PAGE(KYU08PRI: 給与明細印刷のLINAGE制御) |
|
||||
| 190 | WRITE-ONLY | × | I-O-CONTROL段落未使用 |
|
||||
| 191 | ZERO | ◎ | ZERO/ZEROS VALUE、MOVE ZERO 全プログラム |
|
||||
| 192 | ZEROS | ◎ | ZEROS(ZEROと同義、KIN08DBU LOW-VALUES) |
|
||||
| 193 | ALTER | × | 非推奨 |
|
||||
| 194 | CANCEL | × | 未使用 |
|
||||
| 195 | ENTRY | × | 未使用 |
|
||||
| 196 | MERGE | × | JCL PGM=SORTに委譲 |
|
||||
| 196 | MERGE | ◎ | COBOL MERGE文(KYU09MRG: SALARY-NET + BONUS-DATA を社員番号昇順結合) |
|
||||
| 197 | RELEASE | × | COBOL SORT未使用 |
|
||||
| 198 | RETURN | × | COBOL RETURN文未使用(RETURN-CODEは特殊レジスタ、WRK-RETURN-CODEは変数名) |
|
||||
| 198 | RETURN | ◎ | COBOL RETURN文(KYU09MRG: MERGE OUTPUT PROCEDUREでMERGE結果受取) |
|
||||
| 199 | REWRITE | × | VSAM非対応 |
|
||||
| 200 | SORT | × | JCL PGM=SORTに委譲 |
|
||||
| 201 | START | × | 順次読込のみ |
|
||||
| 202 | SAME | × | SAME RECORD/SORT AREA未使用 |
|
||||
| 203 | FUNCTION | ◎ | FUNCTION MOD/WHEN-COMPILED/NUMVAL/INTEGER-OF-DATE/MIN/MAX/TRIM(KIN03EXP,KIN06CLD,KIN08DBU,KIN09CSV) |
|
||||
| 204 | BEFORE | × | INSPECT BEFORE/WRITE BEFORE ADVANCING/PERFORM TEST BEFORE未使用 |
|
||||
| 204 | BEFORE | ◎ | WRITE BEFORE ADVANCING PAGE/1 LINE(KYU08PRI: 給与明細印刷の改ページ制御) |
|
||||
| 205 | ADDRESS | × | ADDRESS OF未使用(SET ADDRESS OF未使用) |
|
||||
|
||||
---
|
||||
@@ -323,10 +323,10 @@
|
||||
| 指標 | 値 |
|
||||
|------|:----:|
|
||||
| **プログラムタイプカバレッジ(35タイプ)** | |
|
||||
| ◎(使用) | 16 / 35 |
|
||||
| ×(未使用) | 19 / 35 |
|
||||
| カバレッジ率(◎/35) | 45.7% |
|
||||
| 実装対象限定(1-9,13-15,24-26,28,30-31)= 20種中 | 16件 = 80.0% |
|
||||
| ◎(使用) | 22 / 35 |
|
||||
| ×(未使用) | 13 / 35 |
|
||||
| カバレッジ率(◎/35) | 62.9% |
|
||||
| 実装対象限定(1-9,13-15,24-26,28,30-31)= 20種中 | 20件 = 100.0% |
|
||||
| **PICTURE記号カバレッジ(Section 2.1)** | |
|
||||
| 全記号数(11種) | 11 |
|
||||
| 使用済記号(◎+△) | 7 |
|
||||
@@ -334,11 +334,11 @@
|
||||
| カバレッジ率 | 63.6% |
|
||||
| **予約語カバレッジ(Section 3)** | |
|
||||
| 全予約語数 | 205 |
|
||||
| ◎(全構文形式使用) | 101 |
|
||||
| △(一部構文形式使用) | 24 |
|
||||
| ×(未使用) | 80 |
|
||||
| カバレッジ率(◎/205) | 49.3% |
|
||||
| カバレッジ率(◎+△/205) | 61.0% |
|
||||
| ◎(全構文形式使用) | 112 |
|
||||
| △(一部構文形式使用) | 22 |
|
||||
| ×(未使用) | 71 |
|
||||
| カバレッジ率(◎/205) | 54.6% |
|
||||
| カバレッジ率(◎+△/205) | 65.4% |
|
||||
| **TYPE定義カバレッジ(11種)** | |
|
||||
| 全TYPE定義数 | 11 |
|
||||
| 使用済TYPE | 7(X, 9, 9V9, S9V9, S9V9 COMP-3, S9 COMP-3, S9 COMP) |
|
||||
@@ -346,5 +346,5 @@
|
||||
| 未使用TYPE | 4(G, N, BINARY, ZZZ9) |
|
||||
| TYPEカバレッジ率 | 63.6%(特殊含め90.9%) |
|
||||
|
||||
> 本ファイルは全コードベース(KIN01-09 + ZAN01-06 + SUB01-05 = 20プログラム)を統合したカバレッジ状況。
|
||||
> 本ファイルは全コードベース(KIN01-09 + ZAN01-06 + KYU01-09 + SUB01-05 = 29プログラム)を統合したカバレッジ状況。
|
||||
> 定義ファイル(COBOLキーワード網羅定義書.md)と合わせて参照すること。
|
||||
|
||||
@@ -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** |
|
||||
+115
@@ -5,6 +5,7 @@
|
||||
| No | 変更内容 | 担当者 | 変更日 | 承認者 | 備考 |
|
||||
|----|---------|--------|--------|--------|------|
|
||||
| 1 | 新規作成(全8テーブル) | AI | 2026/06/23 | | サブシステムA(6) + B(2) |
|
||||
| 2 | SALARYDB 4テーブル追加 | AI | 2026/07/08 | | サブシステムC(給与計算) |
|
||||
|
||||
---
|
||||
|
||||
@@ -230,3 +231,117 @@
|
||||
### 備考
|
||||
|
||||
- ZAN06UPDが月次集計結果をUPSERT
|
||||
|
||||
---
|
||||
|
||||
# EMP-MASTER(SALARYDB) — 社員マスタ(給与計算用)
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 給与計算DB | EMP-MASTER | KYU01REC | PK: EMP-ID |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 社員番号 | EMP-ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | |
|
||||
| 2 | 氏名 | EMP-NAME | VARCHAR | 40 | | 40 | NOT NULL | | | | | | |
|
||||
| 3 | 部署コード | DEPT-CODE | CHAR | 2 | | 2 | NOT NULL | | | | | | |
|
||||
| 4 | 地域コード | REGION-CODE | CHAR | 2 | | 2 | NOT NULL | | | | | | |
|
||||
| 5 | 職種コード | CATEGORY-CODE | CHAR | 3 | | 3 | NOT NULL | | | | | | |
|
||||
| 6 | 基本給 | BASE-SALARY | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | |
|
||||
| 7 | 時給 | HOURLY-RATE | DECIMAL | 7 | 0 | 4 | NOT NULL | | | | | | |
|
||||
| 8 | 扶養人数 | DEPENDENT-COUNT | SMALLINT | — | | 2 | NOT NULL | | | | | | |
|
||||
| 9 | ステータス | STATUS | CHAR | 1 | | 1 | NOT NULL | | | | | | '0'=在籍, '9'=退職 |
|
||||
| 10 | 更新日時 | UPDATED-AT | TIMESTAMP | — | | 10 | NOT NULL | CURRENT TIMESTAMP | | | | | |
|
||||
|
||||
### 備考
|
||||
|
||||
- KYU02REGがINSERT/UPSERTを実行
|
||||
- KYU04CALがSELECTで参照
|
||||
|
||||
---
|
||||
|
||||
# TAX-TABLE(SALARYDB) — 所得税率テーブル
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 給与計算DB | TAX-TABLE | — | PK: (TAX-FROM, TAX-TO) |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 課税下限 | TAX-FROM | DECIMAL | 9 | 0 | 5 | NOT NULL | | ✓ | | | | |
|
||||
| 2 | 課税上限 | TAX-TO | DECIMAL | 9 | 0 | 5 | NOT NULL | | ✓ | | | | |
|
||||
| 3 | 税率 | TAX-RATE | DECIMAL | 5 | 4 | 3 | NOT NULL | | | | | | |
|
||||
| 4 | 控除額 | DEDUCTION | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | |
|
||||
|
||||
### 備考
|
||||
|
||||
- KYU05DEDがSELECT ... BETWEENで参照
|
||||
- 課税所得に対する超過累進税率
|
||||
|
||||
---
|
||||
|
||||
# INSURANCE-TABLE(SALARYDB) — 社会保険料率テーブル
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 給与計算DB | INSURANCE-TABLE | — | PK: (INS-INCOME-FROM, INS-INCOME-TO) |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 所得下限 | INS-INCOME-FROM | DECIMAL | 9 | 0 | 5 | NOT NULL | | ✓ | | | | |
|
||||
| 2 | 所得上限 | INS-INCOME-TO | DECIMAL | 9 | 0 | 5 | NOT NULL | | ✓ | | | | |
|
||||
| 3 | 健康保険料率 | INS-HEALTH-RATE | DECIMAL | 7 | 6 | 4 | NOT NULL | | | | | | |
|
||||
| 4 | 厚生年金保険料率 | INS-PENSION-RATE | DECIMAL | 7 | 6 | 4 | NOT NULL | | | | | | |
|
||||
| 5 | 更新日時 | UPDATED-AT | TIMESTAMP | — | | 10 | NOT NULL | CURRENT TIMESTAMP | | | | | |
|
||||
|
||||
### 備考
|
||||
|
||||
- KYU05DEDが内部テーブル(SEARCH ALL)に取込んで参照
|
||||
- 被保険者負担分のみ
|
||||
|
||||
---
|
||||
|
||||
# SALARY-RESULTS(SALARYDB) — 給与計算結果テーブル
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 給与計算DB | SALARY-RESULTS | — | PK: (EMP-ID, YEAR-MONTH) |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 社員番号 | EMP-ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | |
|
||||
| 2 | 対象年月 | YEAR-MONTH | CHAR | 6 | | 6 | NOT NULL | | ✓ | | | | YYYYMM |
|
||||
| 3 | 総支給額 | GROSS-PAYMENT | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | |
|
||||
| 4 | 源泉所得税 | INCOME-TAX | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | |
|
||||
| 5 | 社会保険料 | INSURANCE | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | |
|
||||
| 6 | 住民税 | RESIDENT-TAX | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | |
|
||||
| 7 | 差引支給額 | NET-PAYMENT | DECIMAL | 9 | 0 | 5 | NOT NULL | | | | | | |
|
||||
| 8 | 更新日時 | UPDATED-AT | TIMESTAMP | — | | 10 | NOT NULL | CURRENT TIMESTAMP | | | | | |
|
||||
|
||||
### 備考
|
||||
|
||||
- KYU06UPDがINSERT/UPSERTを実行
|
||||
|
||||
@@ -0,0 +1,148 @@
|
||||
# 設計レビューサインオフ(サブシステムC / KYU)
|
||||
|
||||
> レビュー日: 2026-07-09
|
||||
> レビュー対象: サブシステムC(KYU01CVT〜KYU09MRG)全9プログラム
|
||||
> 状態: ✅ サインオフ
|
||||
|
||||
---
|
||||
|
||||
## 1. JCL vs SELECT/ASSIGN 整合性
|
||||
|
||||
### 判定: ✅ 合格
|
||||
|
||||
| JCL | DD名 | プログラム | ASSIGN先 | 一致 |
|
||||
|-----|------|-----------|---------|:---:|
|
||||
| KYUJ010 STEP010 | KYU01R01 | KYU01CVT | KYU01R01 | ✅ |
|
||||
| KYUJ010 STEP010 | KYU01W01 | KYU01CVT | KYU01W01 | ✅ |
|
||||
| KYUJ010 STEP010 | KYU01W02 | KYU01CVT | KYU01W02 | ✅ |
|
||||
| KYUJ010 STEP020 | KYU02R02 | KYU02REG | KYU02R02 | ✅ |
|
||||
| KYUJ010 STEP020 | KYU02W03 | KYU02REG | KYU02W03 | ✅ |
|
||||
| KYUJ020 STEP021 | KYU03R01 | KYU03AGG | KYU03R01 | ✅ |
|
||||
| KYUJ020 STEP021 | KYU03W01 | KYU03AGG | KYU03W01 | ✅ |
|
||||
| KYUJ020 STEP021 | KYU03W02 | KYU03AGG | KYU03W02 | ✅ |
|
||||
| KYUJ020 STEP022 | KYU04R02 | KYU04CAL | KYU04R02 | ✅ |
|
||||
| KYUJ020 STEP022 | KYU04R03 | KYU04CAL | KYU04R03 | ✅ |
|
||||
| KYUJ020 STEP022 | KYU04W03 | KYU04CAL | KYU04W03 | ✅ |
|
||||
| KYUJ020 STEP022 | KYU04W04 | KYU04CAL | KYU04W04 | ✅ |
|
||||
| KYUJ030 STEP030 | KYU05R01 | KYU05DED | KYU05R01 | ✅ |
|
||||
| KYUJ030 STEP030 | KYU05W01 | KYU05DED | KYU05W01 | ✅ |
|
||||
| KYUJ030 STEP030 | KYU05W02 | KYU05DED | KYU05W02 | ✅ |
|
||||
| KYUJ030 STEP031 | KYU06R02 | KYU06UPD | KYU06R02 | ✅ |
|
||||
| KYUJ030 STEP031 | KYU06W03 | KYU06UPD | KYU06W03 | ✅ |
|
||||
| KYUJ040 STEP040 | KYU07R01 | KYU07DIV | KYU07R01 | ✅ |
|
||||
| KYUJ040 STEP040 | KYU07D01〜D50 | KYU07DIV | KYU07D01〜D50 | ✅ |
|
||||
| KYUJ040 STEP040 | KYU07SYS | KYU07DIV | KYU07SYS | ✅ |
|
||||
| KYUJ040 STEP040 | KYU07W99 | KYU07DIV | KYU07W99 | ✅ |
|
||||
| KYUJ050 STEP050 | KYU08R01 | KYU08PRI | KYU08R01 | ✅ |
|
||||
| KYUJ050 STEP050 | KYU08W01 | KYU08PRI | KYU08W01 | ✅ |
|
||||
| KYUJ050 STEP050 | KYU08W02 | KYU08PRI | KYU08W02 | ✅ |
|
||||
| KYUJ060 STEP060 | KYU09M01 | KYU09MRG | KYU09M01 | ✅ |
|
||||
| KYUJ060 STEP060 | KYU09M02 | KYU09MRG | KYU09M02 | ✅ |
|
||||
| KYUJ060 STEP060 | KYU09M99 | KYU09MRG | KYU09M99 | ✅ |
|
||||
| KYUJ060 STEP060 | KYU09W01 | KYU09MRG | KYU09W01 | ✅ |
|
||||
| KYUJ060 STEP060 | KYU09W02 | KYU09MRG | KYU09W02 | ✅ |
|
||||
|
||||
全29 DD名がJCLとASSIGNで一致。前回修正済み。
|
||||
|
||||
---
|
||||
|
||||
## 2. Sort-key 条件整合性
|
||||
|
||||
### 判定: ✅ 合格
|
||||
|
||||
| プログラム | JCL SORT条件 | 設計書記載 | 一致 |
|
||||
|-----------|-------------|-----------|:---:|
|
||||
| KYU03AGG | SORT FIELDS=(1,8,CH,A) | 社員番号(1-8桁)昇順 | ✅ |
|
||||
| KYU07DIV | SORT FIELDS=(50,2,CH,A) | 部署コード(50-51桁)昇順 | ✅ |
|
||||
| KYU08PRI | SORT FIELDS=(1,8,CH,A) | 社員番号(1-8桁)昇順 | ✅ |
|
||||
| KYU09MRG | MERGE ON ASCENDING KEY EMP-ID | 社員番号昇順(MERGE文内部) | ✅ |
|
||||
|
||||
JCL SORTステップ(STEP020S/STEP040S/STEP050S)とプログラム前提条件の一致を確認。
|
||||
|
||||
---
|
||||
|
||||
## 3. COPY-book 整合性
|
||||
|
||||
### 判定: ⚠️ 条件付き合格(軽微な問題1件)
|
||||
|
||||
#### 3.1 レコード長検算
|
||||
|
||||
| COPY書式 | 用途 | 計算長 | 設計書記載 | 一致 |
|
||||
|---------|------|:-----:|:---------:|:---:|
|
||||
| KYU01REC | EMP-RECORD (W01) | 80B | 80B | ✅ |
|
||||
| KYU02REC | ABSENCE-AGGREGATE (W01) | 80B | 80B | ✅ |
|
||||
| KYU03REC | SALARY-DETAIL (W03) | 240B | 240B | ✅ |
|
||||
| KYU04REC | SALARY-NET (W01/D01〜50/M01/M02) | 200B | 200B | ✅ |
|
||||
| KYU05REC | PAYSLIP (W01) | 200B | 200B | ✅ |
|
||||
| KYU06REC | PAYMENT-DATA (W01) | 200B | 200B | ✅ |
|
||||
| KYU99REC | ERROR-LOG (W02/W03/W04/W99) | 200B(VB) | 200B | ✅ |
|
||||
|
||||
#### 3.2 ファイル連携レイアウト一致
|
||||
|
||||
| 出力元 | 出力COPY | 入力先 | 入力COPY | 一致 |
|
||||
|--------|---------|--------|---------|:---:|
|
||||
| KYU01CVT(W01) | KYU01REC | KYU02REG(R02) | KYU01REC | ✅ |
|
||||
| KYU03AGG(W01) | KYU02REC | KYU04CAL(R02) | KYU02REC | ✅ |
|
||||
| KYU04CAL(W03) | KYU03REC | KYU05DED(R01) | KYU03REC | ✅ |
|
||||
| KYU05DED(W01) | KYU04REC | KYU06UPD(R02) / KYU07DIV(R01) / KYU08PRI(R01) / KYU09MRG(M01) | KYU04REC | ✅ |
|
||||
| KYU08PRI(W01) | KYU05REC | —(印刷出力) | — | ✅ |
|
||||
| KYU09MRG(W01) | KYU06REC | —(銀行データ出力) | — | ✅ |
|
||||
|
||||
#### 3.3 軽微な問題
|
||||
|
||||
| # | 内容 | 対象 | 対処 |
|
||||
|---|------|------|------|
|
||||
| 1 | KYU02REC.cpy 7行目: `03`の前に余分なスペース(インデント不整合) | cpy/KYU02REC.cpy:7 | 後日修正推奨(コンパイル・動作に影響なし) |
|
||||
|
||||
---
|
||||
|
||||
## 4. CALL/プログラム間インターフェース
|
||||
|
||||
### 判定: ⚠️ 条件付き合格(設計上の不整合1件)
|
||||
|
||||
#### 4.1 CALL先一覧
|
||||
|
||||
| CALL元 | CALL先 | 設計書記載 | コード存在 | 一致 |
|
||||
|--------|--------|:---------:|:---------:|:---:|
|
||||
| KYU01CVT | SUB02MSG | ✅ | ✅ | ✅ |
|
||||
| KYU01CVT | SUB03END | ✅ | ✅ | ✅ |
|
||||
| KYU01CVT | SUB04CHK | ✅ | ✅ | ✅ |
|
||||
| KYU02REG | SUB02MSG | ✅ | ✅ | ✅ |
|
||||
| KYU02REG | SUB03END | ✅ | ✅ | ✅ |
|
||||
| KYU03AGG | SUB02MSG | ✅ | ✅ | ✅ |
|
||||
| KYU03AGG | SUB03END | ✅ | ✅ | ✅ |
|
||||
| KYU04CAL | SUB01DAT | ✅ | ✅ | ✅ |
|
||||
| KYU04CAL | SUB02MSG | ✅ | ✅ | ✅ |
|
||||
| KYU04CAL | SUB03END | ✅ | ✅ | ✅ |
|
||||
| KYU04CAL | SUB05TIM | ✅ | ✅ | ✅ |
|
||||
| KYU05DED | SUB02MSG | ✅ | ✅ | ✅ |
|
||||
| KYU05DED | SUB03END | ✅ | ✅ | ✅ |
|
||||
| KYU06UPD | SUB02MSG | ✅ | ✅ | ✅ |
|
||||
| KYU06UPD | SUB03END | ✅ | ✅ | ✅ |
|
||||
| KYU07DIV | SUB02MSG | ✅ | ✅ | ✅ |
|
||||
| KYU07DIV | SUB03END | ✅ | ✅ | ✅ |
|
||||
| KYU08PRI | SUB01DAT | ✅ | ✅ | ✅ |
|
||||
| KYU08PRI | SUB02MSG | ✅ | ✅ | ✅ |
|
||||
| KYU08PRI | SUB03END | ✅ | ✅ | ✅ |
|
||||
| KYU09MRG | SUB01DAT | ✅ | ✅ | ✅ |
|
||||
| KYU09MRG | SUB02MSG | ✅ | ✅ | ✅ |
|
||||
| KYU09MRG | SUB03END | ✅ | ✅ | ✅ |
|
||||
|
||||
#### 4.2 設計上の不整合
|
||||
|
||||
| # | 内容 | プログラム | 設計書 | コード | 対処 |
|
||||
|---|------|-----------|-------|-------|------|
|
||||
| 1 | SUB01DAT呼出しの記載有無 | KYU01CVT | 1-4にSUB01DAT呼出し記載あり(運用日付取得) | SUB01DAT呼出しなし(CSV変換に運用日不要) | 設計書の方がテンプレートから過剰に記載。SUB01DATの呼出しは実際不要。**設計書を削除修正すべき** |
|
||||
|
||||
---
|
||||
|
||||
## 5. サインオフ
|
||||
|
||||
上記レビューの結果、全プログラムの設計とコードの整合性は確認されました。
|
||||
軽微な問題2件(COPYインデント・設計書過剰記載)は後日修正対象とし、本設計レビューはサインオフします。
|
||||
|
||||
| 判定 | 日付 | レビュー担当 |
|
||||
|:---:|:---:|:-----------:|
|
||||
| ✅ サインオフ | 2026-07-09 | AI (自動レビュー) |
|
||||
|
||||
---
|
||||
@@ -0,0 +1,156 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 給与計算システム |
|
||||
| 2 | プログラムID | KYU01CVT |
|
||||
| 3 | プログラム名 | 社員マスタCSV→FB変換処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | CSV→FB変換(改行あり) |
|
||||
| 6 | 機能概要 | CSV形式の社員マスタを読み込み、固定長80Bに変換する。 |
|
||||
| 7 | | 引用符内改行をINSPECT CONVERTINGで処理。 |
|
||||
| 8 | | 項目チェックはSUB04CHKで実施。 |
|
||||
| 9 | | 正常:EMP-RECORD(W01)出力/異常:ERROR-LOG(W02)出力 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | EMP-MASTER.CSV | ソート不要。CSV形式(カンマ区切り、引用符内改行あり)。コメント行(先頭#)読み飛ばし |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | EMP-MASTER.CSV | R01 | KYU01R01 | I | 自前(500B) | V | | 500 | PS | CSV形式 |
|
||||
| 2 | EMP-RECORD | W01 | KYU01W01 | O | KYU01REC | FB | | 80 | PS | |
|
||||
| 3 | ERROR-LOG | W02 | KYU01W02 | O | KYU99REC | VB | | 200 | PS | |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | EMP-MASTER.CSV | なし | なし |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
| 3 | 項目チェックSUB | SUB04CHK | ZANCHKAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
INITIALIZE WRKARA
|
||||
MOVE SPACE TO WRK-CSV-ACCUM
|
||||
MOVE ZERO TO WRK-ACCUM-LEN
|
||||
1-4.使用ファイルのオープン
|
||||
OPEN INPUT R01INNFIL
|
||||
OPEN OUTPUT W01OUTFIL W02OUTFIL
|
||||
1-6.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.コメント行(先頭#)はスキップ(2000MAJSOR内インライン)
|
||||
WRK-CSV-LINE(1:1) = '#' の場合、次行READしてEXIT SECTION
|
||||
2-2.引用符内改行処理(2000MAJSOR内インライン)
|
||||
2-2-1.WRK-IN-QUOTEフラグを追跡し、引用符内の改行を連結用ワーク領域(WRK-CSV-ACCUM)に蓄積
|
||||
2-2-2.引用符内奇数個の"で状態反転(WRK-QUOTE-ACTIVE / WRK-QUOTE-INACTIVE)
|
||||
2-2-3.完全な1レコード分が揃ったら、INSPECT CONVERTING X"0D"/X"0A" BY SPACEで改行→スペース変換
|
||||
2-3.CSV分解(2100CSVUNSOR)
|
||||
UNSTRING DELIMITED BY ',' INTO 各フィールド COUNT IN WS-FIELD-COUNT
|
||||
項目数≠9の場合はERROR-LOG出力
|
||||
2-4.社員番号空チェック
|
||||
INSPECT WRK-CSV-EMP-ID TALLYING FOR LEADING SPACES
|
||||
全桁SPACEの場合はERROR-LOG出力
|
||||
2-5.項目チェック(SUB04CHK)
|
||||
2-5-1.社員番号(EMPID)数値妥当性チェック
|
||||
2-5-2.時給(NUM)数値妥当性チェック
|
||||
エラー時はERROR-LOG出力
|
||||
2-6.社員名英字チェック(IF NOT ALPHABETIC、参考判定)
|
||||
2-7.W01OUTREC編集
|
||||
MOVE CSV各フィールド→W01OUTREC該当項目
|
||||
2-8.W01出力(WRITE W01OUTREC)
|
||||
CUN-W01OUT加算
|
||||
2-9.R01を読み込む(1100R01INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'KYU01R01'
|
||||
PARM2:CUN-R01INN
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU01W01'
|
||||
PARM2:CUN-W01OUT
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU01W02'
|
||||
PARM2:CUN-W02OUT
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
### DECLARATIVES(ファイルエラー処理)
|
||||
|
||||
```
|
||||
DECLARATIVES.
|
||||
USE AFTER ERROR PROCEDURE ON R01INNFIL.
|
||||
PERFORM 9999ABDSOR.
|
||||
USE AFTER ERROR PROCEDURE ON W01OUTFIL.
|
||||
PERFORM 9999ABDSOR.
|
||||
USE AFTER ERROR PROCEDURE ON W02OUTFIL.
|
||||
PERFORM 9999ABDSOR.
|
||||
END DECLARATIVES.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/EMP-RECORD)
|
||||
|
||||
COPY書式:KYU01REC(80B FB)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | EMP-ID | CSV同項目を設定 | |
|
||||
| 2 | EMP-NAME | CSV同項目を設定 | |
|
||||
| 3 | DEPT-CODE | CSV同項目を設定 | |
|
||||
| 4 | REGION-CODE | CSV同項目を設定 | |
|
||||
| 5 | CATEGORY-CODE | CSV同項目を設定 | |
|
||||
| 6 | BASE-SALARY | CSV同項目を設定 | |
|
||||
| 7 | HOURLY-RATE | CSV同項目を設定 | |
|
||||
| 8 | DEPENDENT-COUNT | CSV同項目を設定 | |
|
||||
| 9 | STATUS | CSV同項目を設定 | |
|
||||
| 10 | FILLER | SPACE固定 | |
|
||||
|
||||
### 出力ファイル2(W02/ERROR-LOG)
|
||||
|
||||
COPY書式:KYU99REC(VB 200B)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 'CSV-ERR'または'EMPID-ERR'で固定 | エラー区分 |
|
||||
| 2 | ERR-DETAIL | STRINGで編集 | エラー内容(CSV行の先頭80B等) |
|
||||
@@ -0,0 +1,146 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 給与計算システム |
|
||||
| 2 | プログラムID | KYU02REG |
|
||||
| 3 | プログラム名 | 社員マスタDB2登録処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | DB更新 |
|
||||
| 6 | 機能概要 | EMP-RECORD(80B固定長)を読み込み、DB2 EMP-MASTERにINSERTする。 |
|
||||
| 7 | | SQLCODE=-803(重複)の場合はUPDATEに切替える(UPSERT)。 |
|
||||
| 8 | | エラー時はERROR-LOGに出力する。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | EMP-RECORD | ソート不要。KYU01CVT出力の80B固定長ファイル。社員番号昇順である必要はない |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | EMP-RECORD | R02 | KYU02R02 | I | KYU01REC | FB | | 80 | PS | |
|
||||
| 2 | ERROR-LOG | W03 | KYU02W03 | O | KYU99REC | VB | | 200 | PS | |
|
||||
| 3 | EMP-MASTER(DB2) | — | — | — | — | — | — | — | DB2 | EXEC SQL INSERT/UPDATE |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | EMP-RECORD | なし | なし |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
INITIALIZE WRKARA
|
||||
1-4.DB接続
|
||||
EXEC SQL CONNECT TO 'data/SALARY.db' END-EXEC
|
||||
1-5.使用ファイルのオープン
|
||||
OPEN INPUT R02INNFIL
|
||||
OPEN OUTPUT W03OUTFIL
|
||||
1-6.R02を読み込む。(1100R02INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R02を全て読み終えるまで下記を繰り返す)
|
||||
2-1.DB2ホスト変数にMOVE
|
||||
MOVE R02EMP-ID〜R02STATUS → DBV-EMP-ID〜DBV-STATUS
|
||||
2-2.EXEC SQL INSERT試行(2000MAJSOR内インライン)
|
||||
EXEC SQL INSERT INTO EMP-MASTER
|
||||
(EMP-ID, EMP-NAME, DEPT-CODE, REGION-CODE,
|
||||
CATEGORY-CODE, BASE-SALARY, HOURLY-RATE,
|
||||
DEPENDENT-COUNT, STATUS, UPDATED-AT)
|
||||
VALUES
|
||||
(:DBV-EMP-ID, :DBV-EMP-NAME, :DBV-DEPT-CODE,
|
||||
:DBV-REGION-CODE, :DBV-CATEGORY-CODE,
|
||||
:DBV-BASE-SALARY, :DBV-HOURLY-RATE,
|
||||
:DBV-DEPENDENT-COUNT, :DBV-STATUS,
|
||||
CURRENT TIMESTAMP)
|
||||
END-EXEC
|
||||
2-3.SQLCODE判定
|
||||
2-3-1.SQLCODE = 0 → INSERT成功
|
||||
CUN-DB-INS加算、次行READ
|
||||
2-3-2.SQLCODE = -803 → 重複
|
||||
EXEC SQL UPDATE EMP-MASTER SET ... WHERE EMP-ID = :DBV-EMP-ID
|
||||
SQLCODE = 0 → CUN-DB-UPD加算
|
||||
SQLCODE ≠ 0 → ERROR-LOG出力(2200ERROUTSOR)
|
||||
次行READ
|
||||
2-3-3.その他SQLエラー
|
||||
ERROR-LOG出力(2200ERROUTSOR)
|
||||
次行READ
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'KYU02R02'
|
||||
PARM2:CUN-R02INN
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'DB-INSERT'
|
||||
PARM2:CUN-DB-INS
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'DB-UPDATE'
|
||||
PARM2:CUN-DB-UPD
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU02W03'
|
||||
PARM2:CUN-W03OUT
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W03/ERROR-LOG)
|
||||
|
||||
COPY書式:KYU99REC(VB 200B)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 'DB-ERR'で固定 | エラー区分 |
|
||||
| 2 | ERR-DETAIL | DBV-EMP-IDを設定 | エラー発生社員番号 |
|
||||
|
||||
### DB2出力(EMP-MASTER)
|
||||
|
||||
| No | カラム名 | 設定元 | 備考 |
|
||||
|----|---------|--------|------|
|
||||
| 1 | EMP-ID | DBV-EMP-ID | ホスト変数 |
|
||||
| 2 | EMP-NAME | DBV-EMP-NAME | ホスト変数 |
|
||||
| 3 | DEPT-CODE | DBV-DEPT-CODE | ホスト変数 |
|
||||
| 4 | REGION-CODE | DBV-REGION-CODE | ホスト変数 |
|
||||
| 5 | CATEGORY-CODE | DBV-CATEGORY-CODE | ホスト変数 |
|
||||
| 6 | BASE-SALARY | DBV-BASE-SALARY | ホスト変数 |
|
||||
| 7 | HOURLY-RATE | DBV-HOURLY-RATE | ホスト変数 |
|
||||
| 8 | DEPENDENT-COUNT | DBV-DEPENDENT-COUNT | ホスト変数 |
|
||||
| 9 | STATUS | DBV-STATUS | ホスト変数 |
|
||||
| 10 | UPDATED-AT | CURRENT TIMESTAMP | DB2関数 |
|
||||
@@ -0,0 +1,139 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 給与計算システム |
|
||||
| 2 | プログラムID | KYU03AGG |
|
||||
| 3 | プログラム名 | 欠勤集約処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | キーブレイク(集約) |
|
||||
| 6 | 機能概要 | JCL SORT済み欠勤データ(社員番号昇順)を読み込み、同一社員内の欠勤時間・回数を集約する。 |
|
||||
| 7 | | 社員単位に1件の集約レコードをABSENCE-AGGREGATEに出力する。 |
|
||||
| 8 | | エラー時はERROR-LOGに出力する。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | KYU02S01(ABSENCE-SUMMARY) | JCL SORTにより社員番号(1-8桁)昇順に整列済みであること |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | KYU02S01 | R01 | KYU03R01 | I | 自前(80B) | FB | | 80 | PS | JCL SORT済み |
|
||||
| 2 | ABSENCE-AGGREGATE | W01 | KYU03W01 | O | KYU02REC | FB | | 80 | PS | 社員単位1件 |
|
||||
| 3 | ERROR-LOG | W02 | KYU03W02 | O | KYU99REC | VB | | 200 | PS | |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | KYU02S01 | 社員番号(1-8桁CH昇順) | 社員番号による集約キーブレイク |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
INITIALIZE WRKARA
|
||||
1-4.使用ファイルのオープン
|
||||
OPEN INPUT R01INNFIL
|
||||
OPEN OUTPUT W01OUTFIL W02OUTFIL
|
||||
1-5.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.キーブレイク判定
|
||||
2-1-1.前社員キー設定済み(WRK-PREV-Y)の場合
|
||||
2-1-1-1.WRK-PREV-EMP-ID = WRK-EMP-ID(同一社員)
|
||||
ADD 1 TO WRK-ABSENT-COUNT
|
||||
ADD WRK-ABSENT-HOURS TO WRK-TOTAL-HOURS
|
||||
2-1-1-2.異なる社員
|
||||
前社員の集約レコード出力(2100WRITOUTSOR)
|
||||
WRK-PREV-EMP-ID ← WRK-EMP-ID
|
||||
INITIALIZE WRK-TOTAL-HOURS WRK-ABSENT-COUNT
|
||||
REPLACING NUMERIC DATA BY ZERO
|
||||
MOVE 1 TO WRK-ABSENT-COUNT
|
||||
MOVE WRK-ABSENT-HOURS TO WRK-TOTAL-HOURS
|
||||
2-1-2.初回(WRK-PREV-Y未設定)
|
||||
WRK-PREV-EMP-ID ← WRK-EMP-ID
|
||||
WRK-PREV-Y ← TRUE
|
||||
MOVE 1 TO WRK-ABSENT-COUNT
|
||||
MOVE WRK-ABSENT-HOURS TO WRK-TOTAL-HOURS
|
||||
2-2.R01を読み込む(1100R01INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.最終社員の集約レコード出力
|
||||
IF WRK-PREV-Y → PERFORM 2100WRITOUTSOR
|
||||
3-2.入出力ファイルのクローズ
|
||||
3-3.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'KYU03R01'
|
||||
PARM2:CUN-R01INN
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU03W01'
|
||||
PARM2:CUN-W01OUT
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU03W02'
|
||||
PARM2:CUN-W02OUT
|
||||
3-4.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
|
||||
補足:集約ロジック詳細
|
||||
WRK-PREV-EMP-ID:前社員キー保持変数
|
||||
WRK-TOTAL-HOURS:同一社員内の欠勤時間合計
|
||||
WRK-ABSENT-COUNT:同一社員内の欠勤回数
|
||||
初回設定後、同一社員の間は加算を継続し、異社員出現時に前社員の集約結果を出力する。
|
||||
全READ終了後、最終社員の出力を3000STPSORで実施する。
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/ABSENCE-AGGREGATE)
|
||||
|
||||
COPY書式:KYU02REC(80B FB)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | EMP-ID | WRK-PREV-EMP-ID | 社員番号 |
|
||||
| 2 | YEAR-MONTH | WRK-YEAR-MONTH | 対象年月(YYYYMM) |
|
||||
| 3 | TOTAL-HOURS | WRK-TOTAL-HOURS | 欠勤時間合計 |
|
||||
| 4 | ABSENT-COUNT | WRK-ABSENT-COUNT | 欠勤回数 |
|
||||
| 5 | FILLER | SPACE固定 | |
|
||||
|
||||
### 出力ファイル2(W02/ERROR-LOG)
|
||||
|
||||
COPY書式:KYU99REC(VB 200B)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 区分固定値 | エラー区分 |
|
||||
| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 |
|
||||
@@ -0,0 +1,176 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 給与計算システム |
|
||||
| 2 | プログラムID | KYU04CAL |
|
||||
| 3 | プログラム名 | 給与計算処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | 1:N+キーブレイク(同キー) |
|
||||
| 6 | 機能概要 | ABSENCE-AGGREGATEを読込み、DB2 EMP-MASTER・OVT-MONTHLYを参照し給与計算を実行する。 |
|
||||
| 7 | | 欠勤控除額計算→時間外手当計算→支給総額計算→SALARY-DETAIL出力 |
|
||||
| 8 | | 勤怠区分×手当種別の複合分岐はEVALUATE ALSOで実装 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | ABSENCE-AGGREGATE(KYU04R02) | ソート不要。社員番号単位の1件(KYU03AGG出力) |
|
||||
| 2 | PAY-PARAM(KYU04R03) | CSV形式。基本給パラメータを保持 |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | ABSENCE-AGGREGATE | R02 | KYU04R02 | I | KYU02REC | F | | 80 | PS | KYU03AGG出力 |
|
||||
| 2 | PAY-PARAM | R03 | KYU04R03 | I | 自前(80B) | F | | 80 | PS | CSV形式 |
|
||||
| 3 | SALARY-DETAIL | W03 | KYU04W03 | O | KYU03REC | FB | | 240 | PS | |
|
||||
| 4 | ERROR-LOG | W04 | KYU04W04 | O | KYU99REC | VB | | 200 | PS | |
|
||||
| 5 | EMP-MASTER (DB2) | — | — | I | — | — | — | — | DB2 | EXEC SQL SELECT |
|
||||
| 6 | OVT-MONTHLY (DB2) | — | — | I | — | — | — | — | DB2 | EXEC SQL SELECT SUM |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | ABSENCE-AGGREGATE | なし | 社員番号(1:Nマッチングキー) |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-5.PAY-PARAM(R03)をOPEN READし、基本給パラメータを取得する。
|
||||
UNSTRINGでカンマ区切りを分解し、対象年月と基本給を抽出する。
|
||||
1-6.使用ファイルのOPEN
|
||||
R02INNFIL / W03OUTFIL / W04OUTFIL をOPEN
|
||||
1-7.DB接続(EXEC SQL CONNECT TO 'data/SALARY.db')
|
||||
1-8.R02を読み込む。(1100R02INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R02を全て読み終えるまで下記を繰り返す)
|
||||
2-1.ホスト変数セット
|
||||
R02のEMP-IDをDBV-EMP-IDにMOVE
|
||||
2-2.DB2 EMP-MASTER参照(EXEC SQL SELECT)
|
||||
【SQL】
|
||||
SELECT EMP-NAME, DEPT-CODE, REGION-CODE,
|
||||
CATEGORY-CODE, BASE-SALARY, HOURLY-RATE,
|
||||
DEPENDENT-COUNT, STATUS
|
||||
※REGION-CODE/CATEGORY-CODEはFYI用に取得するが現状未使用
|
||||
FROM EMP-MASTER
|
||||
WHERE EMP-ID = :DBV-EMP-ID
|
||||
SQLコード≠0の場合、エラー出力(2200ERROUTSOR)し次件へ。
|
||||
2-3.DB2 OVT-MONTHLY参照(EXEC SQL SELECT SUM)
|
||||
【SQL】
|
||||
SELECT SUM(OVT-HOURS)
|
||||
FROM OVT-MONTHLY
|
||||
WHERE EMP-ID = :DBV-EMP-ID
|
||||
AND YEAR-MONTH = :WRK-YEAR-MONTH
|
||||
SQLコード≠0の場合、残業時間をZEROとする。
|
||||
2-4.給与計算(2100CALCSOR)
|
||||
2-4-1.欠勤控除額計算
|
||||
【COMPUTE】
|
||||
WRK-ABSENT-DEDUCT ROUNDED =
|
||||
DBV-HOURLY-RATE × WRK-ABSENT-HOURS
|
||||
ON SIZE ERROR → ZERO設定
|
||||
2-4-2.時間外手当計算
|
||||
【COMPUTE】
|
||||
WRK-OVT-AMOUNT ROUNDED =
|
||||
DBV-HOURLY-RATE × DBV-OVT-HOURS × CNS-OVERTIME-RATE(1.25)
|
||||
ON SIZE ERROR → ZERO設定
|
||||
2-4-3.EVALUATE ALSO(勤怠区分×手当種別の複合分岐)
|
||||
【EVALUATE ALSO】
|
||||
WRK-ALLOWANCE-TYPE = 'OVT' AND WRK-ATTEND-TYPE = 'W'
|
||||
→ WRK-AMOUNT = HOURLY-RATE × OVT-HOURS × 1.25
|
||||
WRK-ALLOWANCE-TYPE = 'OVT' AND WRK-ATTEND-TYPE = 'H'
|
||||
→ WRK-AMOUNT = HOURLY-RATE × OVT-HOURS × 1.35
|
||||
WRK-ALLOWANCE-TYPE = 'LATE' AND WRK-ATTEND-TYPE = ANY
|
||||
→ WRK-AMOUNT = HOURLY-RATE × OVT-HOURS × 0.50
|
||||
WHEN OTHER → WRK-AMOUNT = ZERO
|
||||
2-4-4.支給総額計算
|
||||
【COMPUTE】
|
||||
WRK-GROSS-PAYMENT =
|
||||
DBV-BASE-SALARY + WRK-OVT-AMOUNT - WRK-ABSENT-DEDUCT
|
||||
2-5.SALARY-DETAIL出力(2110WRITOUTSOR)
|
||||
各項目をW03OUTREC(KYU03REC)にMOVEしWRITE
|
||||
W03OUT件数カウンタ(CUN-W03OUT)を+1
|
||||
2-6.R02を読み込む。(1100R02INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'KYU04R02'
|
||||
PARM2:CUN-R02INN
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU04W03'
|
||||
PARM2:CUN-W03OUT
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU04W04'
|
||||
PARM2:CUN-W04OUT
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W03/SALARY-DETAIL)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | EMP-ID | R02EMP-ID | |
|
||||
| 2 | EMP-NAME | DB2 EMP-MASTER EMP-NAME | |
|
||||
| 3 | DEPT-CODE | DB2 EMP-MASTER DEPT-CODE | |
|
||||
| 4 | BASE-SALARY | DB2 EMP-MASTER BASE-SALARY | |
|
||||
| 5 | OVT-AMOUNT | 時間外手当計算結果 | |
|
||||
| 6 | HOLIDAY-AMOUNT | 0で固定 | |
|
||||
| 7 | ABSENT-DEDUCT | 欠勤控除額計算結果 | |
|
||||
| 8 | GROSS-PAYMENT | 支給総額計算結果 | |
|
||||
| 9 | OVT-HOURS | DB2 OVT-MONTHLY SUM結果 | |
|
||||
| 10 | ABSENT-HOURS | R02TOTAL-HOURS | |
|
||||
| 11 | ATTEND-TYPE | WRK-ATTEND-TYPE | |
|
||||
| 12 | ALLOWANCE-TYPE | WRK-ALLOWANCE-TYPE | |
|
||||
| 13 | FILLER | — | 131B |
|
||||
|
||||
### 出力ファイル2(W04/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 'DB-ERR'で固定 | |
|
||||
| 2 | ERR-DETAIL | R02EMP-ID | エラー発生社員番号 |
|
||||
@@ -0,0 +1,167 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 給与計算システム |
|
||||
| 2 | プログラムID | KYU05DED |
|
||||
| 3 | プログラム名 | 控除計算処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | SELECT条件 |
|
||||
| 6 | 機能概要 | SALARY-DETAILを入力に、源泉所得税・社会保険料・住民税を計算しSALARY-NETを出力する。 |
|
||||
| 7 | | TAX-TABLE(DB2 SELECT ... BETWEEN)で税率検索、INSURANCE-TABLE(SEARCH ALL)で保険料率検索 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | SALARY-DETAIL(KYU05R01) | ソート不要。KYU04CALの出力を入力 |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | SALARY-DETAIL | R01 | KYU05R01 | I | KYU03REC | FB | | 240 | PS | KYU04CAL出力 |
|
||||
| 2 | SALARY-NET | W01 | KYU05W01 | O | KYU04REC | FB | | 200 | PS | |
|
||||
| 3 | ERROR-LOG | W02 | KYU05W02 | O | KYU99REC | VB | | 200 | PS | |
|
||||
| 4 | TAX-TABLE (DB2) | — | — | I | — | — | — | — | DB2 | EXEC SQL SELECT ... BETWEEN |
|
||||
| 5 | INSURANCE-TABLE (DB2) | — | — | I | — | — | — | — | DB2 | LOAD→WORKING-STORAGE→SEARCH ALL |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | 該当なし | なし | なし |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.DB接続(EXEC SQL CONNECT TO 'data/SALARY.db')
|
||||
1-5.INSURANCE-TABLE全件LOAD(1100INSLOADSOR)
|
||||
【SQL】(DECLARE INS-CURSOR)
|
||||
SELECT INS-INCOME-FROM, INS-INCOME-TO,
|
||||
INS-HEALTH-RATE, INS-PENSION-RATE
|
||||
FROM INSURANCE-TABLE
|
||||
ORDER BY INS-INCOME-FROM
|
||||
OPEN CURSOR → FETCH ループ → WORKING-STORAGE(INSURANCE-WORK)に格納
|
||||
IW-COUNT で件数管理(最大200件)
|
||||
→ CLOSE CURSOR
|
||||
1-6.使用ファイルのOPEN
|
||||
R01INNFIL / W01OUTFIL / W02OUTFIL をOPEN
|
||||
1-7.R01を読み込む。(1200R01INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.課税所得計算
|
||||
【IF判定】
|
||||
WRK-GROSS-PAYMENT < CNS-TAX-BASIC-DEDUCTION(50000)
|
||||
→ 課税所得 = 0
|
||||
上記以外
|
||||
【COMPUTE】
|
||||
WRK-TAXABLE-INCOME =
|
||||
WRK-GROSS-PAYMENT - CNS-TAX-BASIC-DEDUCTION
|
||||
2-2.DB2 TAX-TABLE税率取得(EXEC SQL SELECT ... BETWEEN)
|
||||
【SQL】
|
||||
SELECT TAX-RATE, DEDUCTION
|
||||
FROM TAX-TABLE
|
||||
WHERE :WRK-TAXABLE-INCOME BETWEEN TAX-FROM AND TAX-TO
|
||||
SQLコード=0の場合
|
||||
【COMPUTE ROUNDED】
|
||||
WRK-INCOME-TAX =
|
||||
WRK-TAXABLE-INCOME × DBV-TAX-RATE - DBV-TAX-DEDUCTION
|
||||
計算結果<0 → 0に補正
|
||||
SQLコード≠0の場合
|
||||
WRK-INCOME-TAX = 0
|
||||
2-3.社会保険料計算(SEARCH ALL on INSURANCE-WORK)
|
||||
【SEARCH ALL IW-ENTRY】
|
||||
条件:IW-INCOME-FROM(IW-IDX) ≦ WRK-TAXABLE-INCOME
|
||||
AND WRK-TAXABLE-INCOME ≦ IW-INCOME-TO(IW-IDX)
|
||||
AT END → WRK-INSURANCE = 0
|
||||
【COMPUTE ROUNDED】
|
||||
WRK-INSURANCE = WRK-TAXABLE-INCOME ×
|
||||
(IW-HEALTH-RATE + IW-PENSION-RATE)
|
||||
2-4.住民税計算
|
||||
【COMPUTE ROUNDED】
|
||||
WRK-RESIDENT-TAX =
|
||||
WRK-TAXABLE-INCOME × CNS-RESIDENT-TAX-RATE(0.10)
|
||||
2-5.差引支給額計算
|
||||
【COMPUTE】
|
||||
WRK-NET-PAYMENT =
|
||||
WRK-GROSS-PAYMENT - WRK-INCOME-TAX
|
||||
- WRK-INSURANCE - WRK-RESIDENT-TAX
|
||||
2-6.SALARY-NET出力(2100WRITOUTSOR)
|
||||
各項目をW01OUTREC(KYU04REC)にMOVEしWRITE
|
||||
W01OUT件数カウンタ(CUN-W01OUT)を+1
|
||||
2-7.R01を読み込む。(1200R01INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'KYU05R01'
|
||||
PARM2:CUN-R01INN
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU05W01'
|
||||
PARM2:CUN-W01OUT
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU05W02'
|
||||
PARM2:CUN-W02OUT
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/SALARY-NET)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | EMP-ID | R01EMP-ID | |
|
||||
| 2 | REC-TYPE | 'S'で固定 | 給与= S / 賞与= B |
|
||||
| 3 | EMP-NAME | R01EMP-NAME | |
|
||||
| 4 | DEPT-CODE | R01DEPT-CODE | |
|
||||
| 5 | REGION-CODE | — | 未設定(FILLER) |
|
||||
| 6 | CATEGORY-CODE | — | 未設定(FILLER) |
|
||||
| 7 | GROSS-PAYMENT | R01BASE-SALARY | |
|
||||
| 8 | INCOME-TAX | WRK-INCOME-TAX | 所得税計算結果 |
|
||||
| 9 | INSURANCE | WRK-INSURANCE | 社会保険料計算結果 |
|
||||
| 10 | RESIDENT-TAX | WRK-RESIDENT-TAX | 住民税計算結果 |
|
||||
| 11 | NET-PAYMENT | WRK-NET-PAYMENT | 差引支給額計算結果 |
|
||||
| 12 | TAXABLE-INCOME | WRK-TAXABLE-INCOME | 課税所得計算結果 |
|
||||
| 13 | PAY-AMOUNT | WRK-NET-PAYMENT | 汎用支給額 |
|
||||
| 14 | FILLER | — | 81B |
|
||||
|
||||
### 出力ファイル2(W02/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 未設定 | 該当ケースなし |
|
||||
| 2 | ERR-DETAIL | エラー内容 | DB接続エラー時のみ |
|
||||
@@ -0,0 +1,147 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 給与計算システム |
|
||||
| 2 | プログラムID | KYU06UPD |
|
||||
| 3 | プログラム名 | 給与計算結果DB2更新処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | DB更新 |
|
||||
| 6 | 機能概要 | SALARY-NETをDB2 SALARY-RESULTSに登録する。 |
|
||||
| 7 | | INSERT実行→SQLCODE=-803(重複)の場合UPDATEに切替(UPSERT) |
|
||||
| 8 | | SQLコード≠0かつ≠-803の場合ERROR-LOGに出力 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | SALARY-NET(KYU06R02) | ソート不要。KYU05DEDの出力を入力 |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | SALARY-NET | R02 | KYU06R02 | I | KYU04REC | FB | | 200 | PS | KYU05DED出力 |
|
||||
| 2 | ERROR-LOG | W03 | KYU06W03 | O | KYU99REC | VB | | 200 | PS | |
|
||||
| 3 | SALARY-RESULTS (DB2) | — | — | O | — | — | — | — | DB2 | EXEC SQL INSERT / UPDATE |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | 該当なし | なし | なし |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.PARM(YEAR-MONTH)取得
|
||||
ACCEPT FROM COMMAND-LINE
|
||||
未指定時は'202605'をデフォルト値とする
|
||||
1-5.使用ファイルのOPEN
|
||||
R02INNFIL / W03OUTFIL をOPEN
|
||||
1-6.DB接続(EXEC SQL CONNECT TO 'data/SALARY.db')
|
||||
1-7.R02を読み込む。(1100R02INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R02を全て読み終えるまで下記を繰り返す)
|
||||
2-1.ホスト変数セット
|
||||
R02EMP-ID → DBV-EMP-ID
|
||||
CNS-YEAR-MONTH-PARM → DBV-YEAR-MONTH
|
||||
R02GROSS-PAYMENT → DBV-GROSS-PAYMENT
|
||||
R02INCOME-TAX → DBV-INCOME-TAX
|
||||
R02INSURANCE → DBV-INSURANCE
|
||||
R02RESIDENT-TAX → DBV-RESIDENT-TAX
|
||||
R02NET-PAYMENT → DBV-NET-PAYMENT
|
||||
2-2.EXEC SQL INSERT INTO SALARY-RESULTS
|
||||
【SQL】
|
||||
INSERT INTO SALARY-RESULTS
|
||||
(EMP-ID, YEAR-MONTH,
|
||||
GROSS-PAYMENT, INCOME-TAX,
|
||||
INSURANCE, RESIDENT-TAX,
|
||||
NET-PAYMENT, UPDATED-AT)
|
||||
VALUES
|
||||
(:DBV-EMP-ID, :DBV-YEAR-MONTH,
|
||||
:DBV-GROSS-PAYMENT, :DBV-INCOME-TAX,
|
||||
:DBV-INSURANCE, :DBV-RESIDENT-TAX,
|
||||
:DBV-NET-PAYMENT, CURRENT TIMESTAMP)
|
||||
2-3.SQLCODE判定
|
||||
2-3-1.SQLCODE = 0(正常登録)
|
||||
CUN-DB-INSカウンタを+1
|
||||
→ R02次件読込(1100R02INNSOR)
|
||||
2-3-2.SQLCODE = -803(重複)
|
||||
【EXEC SQL UPDATE】
|
||||
UPDATE SALARY-RESULTS SET
|
||||
GROSS-PAYMENT = :DBV-GROSS-PAYMENT,
|
||||
INCOME-TAX = :DBV-INCOME-TAX,
|
||||
INSURANCE = :DBV-INSURANCE,
|
||||
RESIDENT-TAX = :DBV-RESIDENT-TAX,
|
||||
NET-PAYMENT = :DBV-NET-PAYMENT,
|
||||
UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE EMP-ID = :DBV-EMP-ID
|
||||
AND YEAR-MONTH = :DBV-YEAR-MONTH
|
||||
【SQLCODE判定】
|
||||
UPDATE SQLCODE = 0 → CUN-DB-UPDカウンタを+1
|
||||
UPDATE SQLCODE ≠ 0 → エラー出力(2100ERROUTSOR)
|
||||
→ R02次件読込(1100R02INNSOR)
|
||||
2-3-3.SQLCODE = その他(DBエラー)
|
||||
エラー出力(2100ERROUTSOR)
|
||||
→ R02次件読込(1100R02INNSOR)
|
||||
2-4.R02を読み込む。(1100R02INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'KYU06R02'
|
||||
PARM2:CUN-R02INN
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'DB-INSERT'
|
||||
PARM2:CUN-DB-INS
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'DB-UPDATE'
|
||||
PARM2:CUN-DB-UPD
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU06W03'
|
||||
PARM2:CUN-W03OUT
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W03/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 'DB-ERR'で固定 | |
|
||||
| 2 | ERR-DETAIL | DBV-EMP-ID | エラー発生社員番号 |
|
||||
@@ -0,0 +1,193 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 給与計算システム |
|
||||
| 2 | プログラムID | KYU07DIV |
|
||||
| 3 | プログラム名 | 部門別分割出力処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | 50分割 |
|
||||
| 6 | 機能概要 | JCL SORT済みSALARY-NETを部署コードに応じて50ファイルに分割出力する。 |
|
||||
| 7 | | 常に1ファイルのみOPEN状態を保ち、部署コード切替時にファイルを開閉する。 |
|
||||
| 8 | | SYSIN制御カードにより出力対象部署の絞り込みが可能(省略時は全50部署)。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | KYU04S01(SALARY-NET) | JCL SORTで部署コード(DEPT-CODE 50-51桁目)昇順ソート済みであること |
|
||||
| 2 | SYSIN(制御カード) | 省略時は全50部署を出力対象とする |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | SALARY-NET | R01 | KYU07R01 | I | KYU04REC | F | | 200 | PS | JCL SORT済み |
|
||||
| 2 | SYSIN | SYSIN | KYU07SYS | I | 自前(80B) | F | | 80 | PS | 制御カード |
|
||||
| 3 | DEPT-OUT-01 | D01 | KYU07D01 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 4 | DEPT-OUT-02 | D02 | KYU07D02 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 5 | DEPT-OUT-03 | D03 | KYU07D03 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 6 | DEPT-OUT-04 | D04 | KYU07D04 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 7 | DEPT-OUT-05 | D05 | KYU07D05 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 8 | DEPT-OUT-06 | D06 | KYU07D06 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 9 | DEPT-OUT-07 | D07 | KYU07D07 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 10 | DEPT-OUT-08 | D08 | KYU07D08 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 11 | DEPT-OUT-09 | D09 | KYU07D09 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 12 | DEPT-OUT-10 | D10 | KYU07D10 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 13 | DEPT-OUT-11 | D11 | KYU07D11 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 14 | DEPT-OUT-12 | D12 | KYU07D12 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 15 | DEPT-OUT-13 | D13 | KYU07D13 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 16 | DEPT-OUT-14 | D14 | KYU07D14 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 17 | DEPT-OUT-15 | D15 | KYU07D15 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 18 | DEPT-OUT-16 | D16 | KYU07D16 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 19 | DEPT-OUT-17 | D17 | KYU07D17 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 20 | DEPT-OUT-18 | D18 | KYU07D18 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 21 | DEPT-OUT-19 | D19 | KYU07D19 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 22 | DEPT-OUT-20 | D20 | KYU07D20 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 23 | DEPT-OUT-21 | D21 | KYU07D21 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 24 | DEPT-OUT-22 | D22 | KYU07D22 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 25 | DEPT-OUT-23 | D23 | KYU07D23 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 26 | DEPT-OUT-24 | D24 | KYU07D24 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 27 | DEPT-OUT-25 | D25 | KYU07D25 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 28 | DEPT-OUT-26 | D26 | KYU07D26 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 29 | DEPT-OUT-27 | D27 | KYU07D27 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 30 | DEPT-OUT-28 | D28 | KYU07D28 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 31 | DEPT-OUT-29 | D29 | KYU07D29 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 32 | DEPT-OUT-30 | D30 | KYU07D30 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 33 | DEPT-OUT-31 | D31 | KYU07D31 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 34 | DEPT-OUT-32 | D32 | KYU07D32 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 35 | DEPT-OUT-33 | D33 | KYU07D33 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 36 | DEPT-OUT-34 | D34 | KYU07D34 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 37 | DEPT-OUT-35 | D35 | KYU07D35 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 38 | DEPT-OUT-36 | D36 | KYU07D36 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 39 | DEPT-OUT-37 | D37 | KYU07D37 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 40 | DEPT-OUT-38 | D38 | KYU07D38 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 41 | DEPT-OUT-39 | D39 | KYU07D39 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 42 | DEPT-OUT-40 | D40 | KYU07D40 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 43 | DEPT-OUT-41 | D41 | KYU07D41 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 44 | DEPT-OUT-42 | D42 | KYU07D42 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 45 | DEPT-OUT-43 | D43 | KYU07D43 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 46 | DEPT-OUT-44 | D44 | KYU07D44 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 47 | DEPT-OUT-45 | D45 | KYU07D45 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 48 | DEPT-OUT-46 | D46 | KYU07D46 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 49 | DEPT-OUT-47 | D47 | KYU07D47 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 50 | DEPT-OUT-48 | D48 | KYU07D48 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 51 | DEPT-OUT-49 | D49 | KYU07D49 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 52 | DEPT-OUT-50 | D50 | KYU07D50 | O | KYU04REC | F | | 200 | PS | |
|
||||
| 53 | ERROR-LOG | W99 | KYU07W99 | O | KYU99REC | VB | | 200 | PS | |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | KYU04S01 | 部署コード(昇順) | 部署コード切替(分割キー) |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
WRKARA初期化、WRK-FIRST='1'設定
|
||||
1-4.SYSIN読込(1100SYSINSOR)
|
||||
制御カードから対象部署一覧を取得する。
|
||||
SYSINファイルOPEN→READ→CLOSE。
|
||||
カードなし(AT END):全部署対象(WRK-ALL-DEPTS)
|
||||
カードあり:"DEPT=01,02,05,10"形式をパースし、
|
||||
WRK-TARGET-DEPTテーブルに格納。
|
||||
1-5.入出力ファイルのOPEN
|
||||
R01INNFIL(INPUT)、W99OUTFIL(OUTPUT)をOPEN
|
||||
1-6.R01を読み込む。(1200R01INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.R01の部署コードを取得(MOVE R01DEPT-CODE TO WRK-DEPT-CODE)
|
||||
2-2.SYSIN対象部署フィルタ
|
||||
WRK-FILTER-DEPTSの場合、SEARCHでWRK-TARGET-DEPTテーブルを検索。
|
||||
該当なし→次レコード読込(1200R01INNSOR)してEXIT SECTION。
|
||||
2-3.部署切替判定
|
||||
2-3-1.WRK-FIRST-Yの場合(初回)
|
||||
WRK-FIRSTを'0'に設定し、2100OPENSORを実行
|
||||
2-3-2.WRK-PREV-DEPT ≠ WRK-DEPT-CODEの場合(部署切替)
|
||||
2200CLOSESORで前部署ファイルをCLOSE WITH LOCK
|
||||
2100OPENSORで新部署ファイルをOPEN
|
||||
2-4.現部署コードをWRK-PREV-DEPTに保存
|
||||
2-5.該当ファイルにWRITE(2300WRITESOR)
|
||||
EVALUATE WRK-DEPT-CODEでD01〜D50の該当ファイルにWRITE
|
||||
WHEN OTHERは無視
|
||||
CUN-DEPT-OUTを+1
|
||||
2-6.R01を読み込む。(1200R01INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.WRK-PREV-DEPT > SPACESの場合、2200CLOSESOR実行
|
||||
3-2.入出力ファイルのクローズ
|
||||
R01INNFIL、W99OUTFILをCLOSE
|
||||
3-3.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'KYU07R01'
|
||||
PARM2:CUN-R01INN
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'DEPT-OUT'
|
||||
PARM2:CUN-DEPT-OUT
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU07W99'
|
||||
PARM2:CUN-W99OUT
|
||||
3-4.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル(D01〜D50/DEPT-OUT-01〜50)
|
||||
|
||||
KYU04REC(SALARY-NET形式)をそのまま出力する。
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | EMP-ID | R01同項目を設定 | |
|
||||
| 2 | REC-TYPE | R01同項目を設定 | |
|
||||
| 3 | EMP-NAME | R01同項目を設定 | |
|
||||
| 4 | DEPT-CODE | R01同項目を設定 | |
|
||||
| 5 | REGION-CODE | R01同項目を設定 | |
|
||||
| 6 | CATEGORY-CODE | R01同項目を設定 | |
|
||||
| 7 | GROSS-PAYMENT | R01同項目を設定 | |
|
||||
| 8 | INCOME-TAX | R01同項目を設定 | |
|
||||
| 9 | INSURANCE | R01同項目を設定 | |
|
||||
| 10 | RESIDENT-TAX | R01同項目を設定 | |
|
||||
| 11 | NET-PAYMENT | R01同項目を設定 | |
|
||||
| 12 | TAXABLE-INCOME | R01同項目を設定 | |
|
||||
| 13 | PAY-AMOUNT | R01同項目を設定 | |
|
||||
| 14 | FILLER | R01同項目を設定 | |
|
||||
|
||||
### 出力ファイル(W99/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 固定値'INVDEPT' | 無効部署コード時 |
|
||||
| 2 | ERR-DETAIL | 'INVALID DEPT' | 部署コード範囲外 |
|
||||
@@ -0,0 +1,149 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 給与計算システム |
|
||||
| 2 | プログラムID | KYU08PRI |
|
||||
| 3 | プログラム名 | 給与明細印刷処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | レイアウト編集のみ(GETPUT) |
|
||||
| 6 | 機能概要 | JCL SORT済みSALARY-NETを給与明細書としてLINAGEページ制御で印刷出力する。 |
|
||||
| 7 | | 1社員1ページ、ヘッダ・明細行・フッタの構成でPAGE-COUNTER自動管理。 |
|
||||
| 8 | | BLANK WHEN ZERO / JUSTIFIED RIGHTによる編集出力。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | KYU05S01(SALARY-NET) | JCL SORTで社員番号(EMP-ID)昇順ソート済みであること |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | SALARY-NET | R01 | KYU08R01 | I | KYU04REC | F | | 200 | PS | JCL SORT済み |
|
||||
| 2 | PAYSLIP | W01 | KYU08W01 | O | KYU05REC | F | | 200 | SYSOUT A | LINAGE 66行 |
|
||||
| 3 | ERROR-LOG | W02 | KYU08W02 | O | KYU99REC | VB | | 200 | PS | |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | KYU05S01 | 社員番号(昇順) | なし(全件印刷) |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-5.使用ファイルのオープン
|
||||
R01INNFIL(INPUT)、W01OUTFIL(OUTPUT)、W02OUTFIL(OUTPUT)をOPEN
|
||||
W01OUTFILはLINAGE IS 66 LINESで定義
|
||||
(FOOTING AT 60 / TOP 6 / BOTTOM 6)
|
||||
1-6.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.ページカウンタ加算
|
||||
WRK-PAGE-COUNTERを+1
|
||||
2-2.ヘッダ行編集・出力
|
||||
【ヘッダ編集】
|
||||
タイトル行'========== 給与明細書 =========='を設定
|
||||
WRK-PAGE-COUNTERをPIC Z(03)9で編集
|
||||
WRITE W01OUTREC FROM HEADER-LINE
|
||||
BEFORE ADVANCING PAGE(改ページ)
|
||||
2-3.明細行編集・出力
|
||||
【明細編集】
|
||||
EMP-ID:R01同項目をX(008)で設定
|
||||
EMP-NAME:R01同項目をX(020) JUSTIFIED RIGHTで設定
|
||||
BASIC-SALARY:R01-GROSS-PAYMENTをZ(08)9 BLANK WHEN ZEROで設定
|
||||
NET-PAYMENT:R01-NET-PAYMENTをZ(08)9 BLANK WHEN ZEROで設定
|
||||
WRITE W01OUTREC FROM DETAIL-LINE
|
||||
BEFORE ADVANCING 1 LINE
|
||||
AT END-OF-PAGE
|
||||
WRITE W01OUTREC FROM FOOTER-LINE
|
||||
BEFORE ADVANCING PAGE
|
||||
CUN-W01OUTを+1
|
||||
2-4.フッタ出力
|
||||
【フッタ編集】
|
||||
'--- 明細終了 ---'を設定
|
||||
WRITE W01OUTREC FROM FOOTER-LINE
|
||||
BEFORE ADVANCING PAGE(改ページ=次社員)
|
||||
2-5.R01を読み込む。(1100R01INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
R01INNFIL、W01OUTFIL、W02OUTFILをCLOSE
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'KYU08R01'
|
||||
PARM2:CUN-R01INN
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU08W01'
|
||||
PARM2:CUN-W01OUT
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU08W02'
|
||||
PARM2:CUN-W02OUT
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/PAYSLIP)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | EMP-ID | R01-EMP-IDを設定 | X(008) |
|
||||
| 2 | FILLER | SPACE | X(002) |
|
||||
| 3 | EMP-NAME | R01-EMP-NAMEを設定 | X(020) JUSTIFIED RIGHT |
|
||||
| 4 | FILLER | SPACE | X(002) |
|
||||
| 5 | BASIC-SALARY | R01-GROSS-PAYMENTを設定 | Z(008)9 BLANK WHEN ZERO |
|
||||
| 6 | FILLER | SPACE | X(002) |
|
||||
| 7 | NET-PAYMENT | R01-NET-PAYMENTを設定 | Z(008)9 BLANK WHEN ZERO |
|
||||
| 8 | FILLER | SPACE | X(002) |
|
||||
| 9 | PAGE-TITLE | ヘッダ編集 | X(040) |
|
||||
| 10 | FILLER | SPACE | X(106) |
|
||||
|
||||
### 出力ファイル2(W02/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 該当エラー種別 | X(008) |
|
||||
| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 |
|
||||
@@ -0,0 +1,162 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 給与計算システム |
|
||||
| 2 | プログラムID | KYU09MRG |
|
||||
| 3 | プログラム名 | 支給データ結合処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | MERGE(複数ファイル結合) |
|
||||
| 6 | 機能概要 | SALARY-NETとBONUS-DATAをMERGE文で社員番号昇順に結合する。 |
|
||||
| 7 | | OUTPUT PROCEDURE内で同一社員の給与(TYPE=S)と賞与(TYPE=B)を統合し、 |
|
||||
| 8 | | 支給データ(PAYMENT-DATA)として出力する。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | SALARY-NET(KYU09M01) | 社員番号(EMP-ID)昇順であること(MERGE文で内部ソート) |
|
||||
| 2 | BONUS-DATA(KYU09M02) | 社員番号(EMP-ID)昇順であること(MERGE文で内部ソート) |
|
||||
| 3 | MERGE作業ファイル | ソート前処理不要。MERGE文が自ら2ファイルを結合する。 |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | SALARY-NET | M01 | KYU09M01 | I | KYU04REC | F | | 200 | PS | REC-TYPE='S' |
|
||||
| 2 | BONUS-DATA | M02 | KYU09M02 | I | KYU04REC | F | | 200 | PS | REC-TYPE='B' |
|
||||
| 3 | WORK-FILE | M99 | KYU09M99 | I | 自前(200B) | F | | 200 | PS | MERGE作業用SD |
|
||||
| 4 | PAYMENT-DATA | W01 | KYU09W01 | O | KYU06REC | F | | 200 | PS | |
|
||||
| 5 | ERROR-LOG | W02 | KYU09W02 | O | KYU99REC | VB | | 200 | PS | |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | SALARY-NET | 社員番号(昇順) | MERGEキー(社員番号) |
|
||||
| 2 | BONUS-DATA | 社員番号(昇順) | MERGEキー(社員番号) |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-5.出力ファイルのオープン
|
||||
W01OUTFIL(OUTPUT)、W02OUTFIL(OUTPUT)をOPEN
|
||||
(入力ファイルはMERGE文が自動OPENするため明示OPEN不要)
|
||||
|
||||
2.MERGE出力処理(2000MRGOUTSOR)
|
||||
2-1.MERGE文実行(0000MAJCOLSOR内)
|
||||
MERGE MERGE-FILE
|
||||
ON ASCENDING KEY MERGE-EMP-ID
|
||||
USING SALARY-FILE BONUS-FILE
|
||||
OUTPUT PROCEDURE 2000MRGOUTSOR
|
||||
給与(SALARY-NET)と賞与(BONUS-DATA)を社員番号昇順で結合。
|
||||
結合結果はOUTPUT PROCEDUREに渡される。
|
||||
2-2.RETURNでMERGE結果取得ループ
|
||||
PERFORM WITH TEST AFTER UNTIL WRK-MERGE-EOF-Y
|
||||
RETURN MERGE-FILE INTO MERGE-REC
|
||||
AT END SET WRK-MERGE-EOF-Y TO TRUE
|
||||
2-2-1.現社員番号をWRK-CURRENT-EMPに設定
|
||||
2-2-2.WRK-SALARY-AMOUNT/WRK-BONUS-AMOUNTをZERO初期化
|
||||
2-2-3.同一社員内ループ(WRK-CURRENT-EMP ≠ MERGE-EMP-IDまで)
|
||||
2-2-3-1.MERGE-REC-TYPE = 'S'(給与)の場合
|
||||
MERGE-PAY-AMOUNT → WRK-SALARY-AMOUNT
|
||||
MERGE-GROSS-PAYMENT → WRK-BANK-CODE
|
||||
MERGE-EMP-ID(1:4) → WRK-ACCOUNT-NO
|
||||
2-2-3-2.上記以外(賞与)の場合
|
||||
MERGE-PAY-AMOUNT → WRK-BONUS-AMOUNT
|
||||
2-2-3-3.RETURNで次レコード取得
|
||||
AT END → HIGH-VALUES設定、EXIT PERFORM
|
||||
2-2-4.給与+賞与合算
|
||||
ADD WRK-SALARY-AMOUNT TO WRK-BONUS-AMOUNT
|
||||
GIVING WRK-TOTAL-PAYMENT
|
||||
2-2-5.2100PAYOUTSORでPAYMENT-DATA出力
|
||||
2-2-5-1.W01OUTREC初期化
|
||||
2-2-5-2.WRK-CURRENT-EMP → W01EMP-ID
|
||||
2-2-5-3.'T' → W01PAY-TYPE(支給合算)
|
||||
2-2-5-4.WRK-TOTAL-PAYMENT → W01AMOUNT
|
||||
2-2-5-5.WRK-BANK-CODE → W01BANK-CODE
|
||||
2-2-5-6.WRK-ACCOUNT-NO → W01ACCOUNT-NO
|
||||
2-2-5-7.W01OUTRECをWRITE
|
||||
2-2-5-8.CUN-W01OUTを+1
|
||||
|
||||
3.ENTRY代替エントリポイント(0010DIRECTSOR)
|
||||
3-1.'KYU09ENT'で直接呼出し可能
|
||||
3-2.直接結合モードで簡易エラーログ出力
|
||||
【エラー出力】
|
||||
ERR-DETAIL:'DIRECT ENTRY'
|
||||
|
||||
4.終了処理(3000STPSOR)
|
||||
4-1.出力ファイルのクローズ
|
||||
W01OUTFIL、W02OUTFILをCLOSE
|
||||
4-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'MERGE-FILE'
|
||||
PARM2:CUN-W01OUT
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU09W01'
|
||||
PARM2:CUN-W01OUT
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KYU09W02'
|
||||
PARM2:CUN-W02OUT
|
||||
4-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/PAYMENT-DATA)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | EMP-ID | WRK-CURRENT-EMPを設定 | X(008) |
|
||||
| 2 | PAY-TYPE | 'T'(支給合算)固定 | X(001) |
|
||||
| 3 | AMOUNT | WRK-TOTAL-PAYMENT(給与+賞与)を設定 | 9(009) |
|
||||
| 4 | BANK-CODE | WRK-BANK-CODE(給与レコードのGROSS-PAYMENT)を設定 | X(004) |
|
||||
| 5 | ACCOUNT-NO | WRK-ACCOUNT-NO(EMP-ID(1:4))を設定 | 9(008) |
|
||||
| 6 | FILLER | SPACE | X(170) |
|
||||
|
||||
### 出力ファイル2(W02/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 該当エラー種別 | X(008) |
|
||||
| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 |
|
||||
Reference in New Issue
Block a user