repository restructure: move .git to production/, rename dirs (design→基本設計書, list→品質管理, docs→参考資料), add Subsystem A KIN01-03 files, update AGENTS.md and README.md, cleanup tmp/ tools/ bk/

This commit is contained in:
qiuqiuqiu
2026-06-27 01:09:40 +08:00
parent 6754df70cd
commit 3379941b44
22 changed files with 3325 additions and 57 deletions
+594
View File
@@ -0,0 +1,594 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. KIN01INP.
*****************************************************************
* システム名 : 勤怠休暇管理システム *
* プログラムID : KIN01INP *
* プログラム名 : 休暇申請CSV取込・検証処理 *
* 作成日 : 2026-06-17 *
* 処理概要 : CSV形式の休暇申請ファイルを読み込み、 *
* 休暇種別テーブル検索と項目チェックを行い、 *
* ステータスによってWORK-LEAVEまたは *
* ERROR-LOGへ振り分ける。 *
*****************************************************************
* 更新履歴 *
*---------------------------------------------------------------*
* 更新日付 担当者 更新内容 *
*---------------------------------------------------------------*
* 26-06-17 @@@ 新規作成 *
* *
*****************************************************************
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-ZSERIES.
OBJECT-COMPUTER. IBM-ZSERIES.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT R01INNFIL ASSIGN TO KIN01R01.
SELECT W01OUTFIL ASSIGN TO KIN01W01.
SELECT W02OUTFIL ASSIGN TO KIN01W02.
*
DATA DIVISION.
FILE SECTION.
*
*****************************************************************
* ##R01## *
*****************************************************************
FD R01INNFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 R01INNREC.
03 R01LINE PIC X(80).
*
*****************************************************************
* ##W01## *
*****************************************************************
FD W01OUTFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 W01OUTREC.
COPY KIN01REC REPLACING ==(A)== BY ==W01==.
*
*****************************************************************
* ##W02## *
*****************************************************************
FD W02OUTFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS V.
01 W02OUTREC.
COPY KIN05REC REPLACING ==(A)== BY ==W02==.
*
WORKING-STORAGE SECTION.
*
*****************************************************************
* コンスタント領域 *
*****************************************************************
01 CNSARA.
03 CNS-PRGIDX PIC X(008) VALUE 'KIN01INP'.
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-STAT-1 PIC X(001) VALUE '1'.
03 CNS-STAT-9 PIC X(001) VALUE '9'.
03 CNS-LEAVE-01 PIC X(002) VALUE '01'.
03 CNS-LEAVE-02 PIC X(002) VALUE '02'.
03 CNS-LEAVE-03 PIC X(002) VALUE '03'.
03 CNS-LEAVE-04 PIC X(002) VALUE '04'.
*
*****************************************************************
* カウンタ領域 *
*****************************************************************
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-U06 PIC 9(008).
*** 読込フラグ
03 WRK-R01EOF PIC X(001).
*** CSV分解用
03 WRK-COMMA-CNT PIC 9(002) COMP.
03 WRK-COMMA-DISP PIC 9(002).
03 WRK-LT-FOUND PIC X(001).
03 WRK-ERR-TYPE PIC X(001).
03 WRK-CSV-APPL-ID PIC X(009).
03 WRK-CSV-EMP-ID PIC X(008).
03 WRK-CSV-START-DATE PIC X(008).
03 WRK-CSV-START-TIME PIC X(004).
03 WRK-CSV-END-DATE PIC X(008).
03 WRK-CSV-END-TIME PIC X(004).
03 WRK-CSV-LEAVE-TYPE PIC X(002).
03 WRK-CSV-STATUS PIC X(001).
*** ステータス再定義(数値+88条件)
03 WRK-STATUS-NUM REDEFINES WRK-CSV-STATUS
PIC 9(001).
88 WRK-STATUS-ACTIVE VALUE 1.
88 WRK-STATUS-CANCEL VALUE 9.
*** 休暇種別内部テーブル(4件)
03 WRK-LEAVE-TYPE-TABLE.
05 WRK-LT-ENTRY OCCURS 4 TIMES
INDEXED BY WRK-LT-IDX.
07 WRK-LT-CODE PIC X(002).
*** REDEFINESデモ(同一領域 複数型 来回代入)
03 WRK-DEMO-AREA PIC 9(008).
03 WRK-DEMO-ALPHA REDEFINES WRK-DEMO-AREA
PIC X(008).
03 WRK-DEMO-GRP REDEFINES WRK-DEMO-AREA.
05 WRK-DEMO-TYPE PIC 9(004).
05 WRK-DEMO-VALUE PIC 9(004).
*
*****************************************************************
* サブプログラム連絡領域 *
*****************************************************************
*** 運用日付取得
COPY ZANDATAC.
*** メッセージ編集出力SR用
COPY ZANMSGAC.
*** ABEND処理SR用
COPY ZANENDAC.
*** 項目チェックSR用
COPY ZANCHKAC.
*
PROCEDURE DIVISION.
*****************************************************************
* サブモジュールNO: (0.0) *
* サブモジュール名: 制御処理 *
* 処理概要 : メインコントロール処理 *
*****************************************************************
0000MAJCOLSOR SECTION.
*
*** 初期処理
PERFORM 1000ITTSOR.
*
*** メイン処理
PERFORM 2000MAJSOR
UNTIL WRK-R01EOF = '1'.
*
*** 終了処理
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 '01' TO WRK-LT-CODE(1).
MOVE '02' TO WRK-LT-CODE(2).
MOVE '03' TO WRK-LT-CODE(3).
MOVE '04' TO WRK-LT-CODE(4).
*
*** 運用日付取得
INITIALIZE D01UBSPAR.
CALL 'SUB01DAT' USING D01UBSPAR.
IF D01FKICOD = ZERO
MOVE D01UBSUDATE TO WRK-U06
ELSE
INITIALIZE M00MHOPAR
MOVE CNS-MSGSUBEEK TO M00MSGCOD
MOVE 'SUB01DAT' TO M00UMKDATS22-01
MOVE D01FKICOD TO M00UMKDATS22-02
PERFORM 4000MSGOUTSOR
PERFORM 9999ABDSOR
END-IF.
*
*** 入出力ファイルOPEN
OPEN INPUT R01INNFIL
OUTPUT W01OUTFIL
W02OUTFIL.
*
*** #R01#を読み込み
PERFORM 1100R01INNSOR.
*
1000ITTSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(1.1) *
* サブモジュール名:##R01##読込処理 *
* 処理概要 : レコード読込・EOF判定処理 *
*****************************************************************
1100R01INNSOR SECTION.
*
READ R01INNFIL
AT END
MOVE '1' TO WRK-R01EOF
NOT AT END
ADD 1 TO CUN-R01INN
END-READ.
*
1100R01INNSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(2.0) *
* サブモジュール名: 主処理 *
* 処理概要 : CSV分解・休暇種別検索・ステータス振分 *
*****************************************************************
2000MAJSOR SECTION.
*
*** CSV分解
PERFORM 2010CSVSOR.
*
*** 休暇種別テーブル検索
PERFORM 2020LEAVSERSOR.
*
*** エラー判定(フィールド数/休暇種別)
IF WRK-COMMA-CNT NOT = 8
MOVE 'F' TO WRK-ERR-TYPE
PERFORM 2050ERRORSOR
ELSE IF WRK-LT-FOUND NOT = '1'
MOVE 'L' TO WRK-ERR-TYPE
PERFORM 2050ERRORSOR
ELSE
*** ステータス判定(IF/ELSE連鎖)
IF WRK-STATUS-ACTIVE
PERFORM 2030VALIDATESOR
ELSE IF WRK-STATUS-CANCEL
PERFORM 2040CANCELSOR
ELSE
MOVE 'S' TO WRK-ERR-TYPE
PERFORM 2050ERRORSOR
END-IF
END-IF.
*
*** 次のレコード読込
PERFORM 1100R01INNSOR.
*
2000MAJSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(2.1) *
* サブモジュール名: CSV分解処理 *
* 処理概要 : UNSTRINGでCSVを8項目に分解する *
*****************************************************************
2010CSVSOR SECTION.
*
MOVE ZERO TO WRK-COMMA-CNT.
INITIALIZE WRK-CSV-APPL-ID
WRK-CSV-EMP-ID
WRK-CSV-START-DATE
WRK-CSV-START-TIME
WRK-CSV-END-DATE
WRK-CSV-END-TIME
WRK-CSV-LEAVE-TYPE
WRK-CSV-STATUS.
UNSTRING R01INNREC
DELIMITED BY ','
INTO WRK-CSV-APPL-ID
WRK-CSV-EMP-ID
WRK-CSV-START-DATE
WRK-CSV-START-TIME
WRK-CSV-END-DATE
WRK-CSV-END-TIME
WRK-CSV-LEAVE-TYPE
WRK-CSV-STATUS
TALLYING IN WRK-COMMA-CNT
END-UNSTRING.
*
2010CSVSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(2.2) *
* サブモジュール名: 休暇種別テーブル検索処理 *
* 処理概要 : SEARCH(非ALL)で休暇種別の妥当性を検証 *
*****************************************************************
2020LEAVSERSOR SECTION.
*
MOVE '0' TO WRK-LT-FOUND.
SET WRK-LT-IDX TO 1.
SEARCH WRK-LT-ENTRY
VARYING WRK-LT-IDX
AT END
CONTINUE
WHEN WRK-LT-CODE(WRK-LT-IDX)
= WRK-CSV-LEAVE-TYPE
MOVE '1' TO WRK-LT-FOUND
END-SEARCH.
*
2020LEAVSERSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(2.3) *
* サブモジュール名: 有効申請処理 *
* 処理概要 : SUB04CHKで日付/時刻チェックしW01出力 *
*****************************************************************
2030VALIDATESOR SECTION.
*
*** W01レコード初期化
INITIALIZE W01OUTREC.
*
*** SUB04CHKで社員番号チェック
INITIALIZE C01CHKPAR.
MOVE WRK-CSV-EMP-ID TO C01CHKDAT.
MOVE 'EMPID' TO C01CHKTYP.
CALL 'SUB04CHK' USING C01CHKPAR.
IF C01CHKRRC NOT = ZERO
MOVE '01' TO W02ERR-CATEGORY
STRING 'EMP-ID ERROR EMP='
WRK-CSV-EMP-ID
DELIMITED BY SIZE
INTO W02ERR-DETAIL
WRITE W02OUTREC
ADD 1 TO CUN-W02OUT
GO TO 2030VALIDATESOR-EXT
END-IF.
*
*** SUB04CHKで開始日付チェック
INITIALIZE C01CHKPAR.
MOVE WRK-CSV-START-DATE TO C01CHKDAT.
MOVE 'DATE' TO C01CHKTYP.
CALL 'SUB04CHK' USING C01CHKPAR.
IF C01CHKRRC NOT = ZERO
MOVE '01' TO W02ERR-CATEGORY
STRING 'START-DATE ERROR EMP='
WRK-CSV-EMP-ID
' DATE='
WRK-CSV-START-DATE
DELIMITED BY SIZE
INTO W02ERR-DETAIL
WRITE W02OUTREC
ADD 1 TO CUN-W02OUT
GO TO 2030VALIDATESOR-EXT
END-IF.
*
*** SUB04CHKで開始時刻チェック
INITIALIZE C01CHKPAR.
MOVE WRK-CSV-START-TIME TO C01CHKDAT.
MOVE 'TIME' TO C01CHKTYP.
CALL 'SUB04CHK' USING C01CHKPAR.
IF C01CHKRRC NOT = ZERO
MOVE '01' TO W02ERR-CATEGORY
STRING 'START-TIME ERROR EMP='
WRK-CSV-EMP-ID
' TIME='
WRK-CSV-START-TIME
DELIMITED BY SIZE
INTO W02ERR-DETAIL
WRITE W02OUTREC
ADD 1 TO CUN-W02OUT
GO TO 2030VALIDATESOR-EXT
END-IF.
*
*** SUB04CHKで終了日付チェック
INITIALIZE C01CHKPAR.
MOVE WRK-CSV-END-DATE TO C01CHKDAT.
MOVE 'DATE' TO C01CHKTYP.
CALL 'SUB04CHK' USING C01CHKPAR.
IF C01CHKRRC NOT = ZERO
MOVE '01' TO W02ERR-CATEGORY
STRING 'END-DATE ERROR EMP='
WRK-CSV-EMP-ID
' DATE='
WRK-CSV-END-DATE
DELIMITED BY SIZE
INTO W02ERR-DETAIL
WRITE W02OUTREC
ADD 1 TO CUN-W02OUT
GO TO 2030VALIDATESOR-EXT
END-IF.
*
*** SUB04CHKで終了時刻チェック
INITIALIZE C01CHKPAR.
MOVE WRK-CSV-END-TIME TO C01CHKDAT.
MOVE 'TIME' TO C01CHKTYP.
CALL 'SUB04CHK' USING C01CHKPAR.
IF C01CHKRRC NOT = ZERO
MOVE '01' TO W02ERR-CATEGORY
STRING 'END-TIME ERROR EMP='
WRK-CSV-EMP-ID
' TIME='
WRK-CSV-END-TIME
DELIMITED BY SIZE
INTO W02ERR-DETAIL
WRITE W02OUTREC
ADD 1 TO CUN-W02OUT
GO TO 2030VALIDATESOR-EXT
END-IF.
*
*** 複合条件デモ(AND+OR+3段ネスト)
IF W01START-DATE NOT = ZERO
AND W01END-DATE NOT = ZERO
AND W01START-TIME NOT = ZERO
IF W01START-DATE > W01END-DATE
OR (W01START-DATE = W01END-DATE
AND W01START-TIME >= W01END-TIME)
MOVE 10 TO WRK-DEMO-TYPE
ELSE
MOVE 20 TO WRK-DEMO-TYPE
END-IF
END-IF.
*
*** W01出力(新規/変更: APPL-ID=CSV値, STATUS='1')
MOVE WRK-CSV-APPL-ID TO W01APPL-ID.
MOVE WRK-CSV-EMP-ID TO W01EMP-ID.
MOVE WRK-CSV-LEAVE-TYPE TO W01LEAVE-TYPE.
MOVE WRK-CSV-START-DATE TO W01START-DATE.
MOVE WRK-CSV-START-TIME TO W01START-TIME.
MOVE WRK-CSV-END-DATE TO W01END-DATE.
MOVE WRK-CSV-END-TIME TO W01END-TIME.
MOVE WRK-CSV-STATUS TO W01STATUS.
WRITE W01OUTREC.
ADD 1 TO CUN-W01OUT.
*
2030VALIDATESOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(2.4) *
* サブモジュール名: 取消申請処理 *
* 処理概要 : 取消レコードをW01出力(検証は行わない) *
*****************************************************************
2040CANCELSOR SECTION.
*
*** W01レコード初期化
INITIALIZE W01OUTREC.
*
*** W01出力(取消: APPL-ID=CSV値, STATUS='9')
MOVE WRK-CSV-APPL-ID TO W01APPL-ID.
MOVE WRK-CSV-EMP-ID TO W01EMP-ID.
MOVE WRK-CSV-LEAVE-TYPE TO W01LEAVE-TYPE.
MOVE WRK-CSV-START-DATE TO W01START-DATE.
MOVE WRK-CSV-START-TIME TO W01START-TIME.
MOVE WRK-CSV-END-DATE TO W01END-DATE.
MOVE WRK-CSV-END-TIME TO W01END-TIME.
MOVE WRK-CSV-STATUS TO W01STATUS.
WRITE W01OUTREC.
ADD 1 TO CUN-W01OUT.
*
2040CANCELSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(2.5) *
* サブモジュール名: エラー処理 *
* 処理概要 : エラーレコードをW02出力 *
*****************************************************************
2050ERRORSOR SECTION.
*
*** W02レコード初期化
INITIALIZE W02OUTREC.
MOVE '01' TO W02ERR-CATEGORY.
*
*** エラー種別判定
EVALUATE WRK-ERR-TYPE
WHEN 'F'
MOVE 1 TO WRK-DEMO-TYPE
MOVE WRK-COMMA-CNT TO WRK-DEMO-VALUE
STRING 'FIELD COUNT ERROR CNT='
WRK-DEMO-ALPHA
DELIMITED BY SIZE
INTO W02ERR-DETAIL
WHEN 'L'
MOVE 2 TO WRK-DEMO-TYPE
MOVE 0 TO WRK-DEMO-VALUE
STRING 'INVALID LEAVE TYPE='
WRK-CSV-LEAVE-TYPE
' EMP='
WRK-CSV-EMP-ID
' ERR='
WRK-DEMO-ALPHA
DELIMITED BY SIZE
INTO W02ERR-DETAIL
WHEN 'S'
MOVE 3 TO WRK-DEMO-TYPE
MOVE 0 TO WRK-DEMO-VALUE
STRING 'INVALID STATUS='
WRK-CSV-STATUS
' EMP='
WRK-CSV-EMP-ID
' ERR='
WRK-DEMO-ALPHA
DELIMITED BY SIZE
INTO W02ERR-DETAIL
WHEN OTHER
MOVE 9 TO WRK-DEMO-TYPE
MOVE 0 TO WRK-DEMO-VALUE
STRING 'UNKNOWN ERROR EMP='
WRK-CSV-EMP-ID
' ERR='
WRK-DEMO-ALPHA
DELIMITED BY SIZE
INTO W02ERR-DETAIL
END-EVALUATE.
*
WRITE W02OUTREC.
ADD 1 TO CUN-W02OUT.
*
2050ERRORSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(3.0) *
* サブモジュール名: 終了処理 *
* 処理概要 : ファイルクローズ・件数と終了メッセージ出力 *
*****************************************************************
3000STPSOR SECTION.
*
*** 入出力ファイルCLOSE
CLOSE R01INNFIL
W01OUTFIL
W02OUTFIL.
*
*** 入出力ファイル件数出力
INITIALIZE M00MHOPAR.
MOVE CNS-MSGIINKES TO M00MSGCOD.
MOVE 'KIN01R01' TO M00UMKDATS22-01.
MOVE CUN-R01INN TO M00UMKDATS22-02.
PERFORM 4000MSGOUTSOR.
*
INITIALIZE M00MHOPAR.
MOVE CNS-MSGOUTKES TO M00MSGCOD.
MOVE 'KIN01W01' TO M00UMKDATS22-01.
MOVE CUN-W01OUT TO M00UMKDATS22-02.
PERFORM 4000MSGOUTSOR.
*
INITIALIZE M00MHOPAR.
MOVE CNS-MSGOUTKES TO M00MSGCOD.
MOVE 'KIN01W02' 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) *
* サブモジュール名: メッセージ編集出力処理 *
* 処理概要 : メッセージ編集出力サブPGM呼出 *
*****************************************************************
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処理 *
* 処理概要 : ABENDサブPGM呼出 *
*****************************************************************
9999ABDSOR SECTION.
*
MOVE CNS-ABD999 TO E01ABDCOD.
CALL 'SUB03END' USING E01ABDPAR.
*
9999ABDSOR-EXT.
EXIT.
+439
View File
@@ -0,0 +1,439 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. KIN02UPD.
*****************************************************************
* システム名 : 勤怠休暇管理システム *
* プログラムID : KIN02UPD *
* プログラム名 : 休暇申請DB更新処理 *
* 作成日 : 2026-06-17 *
* 処理概要 : WORK-LEAVEの各レコードをDB2テーブル *
* LEAVE_RECORDSに反映する。 *
* ステータスに応じて新規登録(INSERT)、 *
* 変更(DELETE+INSERT)、取消(DELETE)を行う。 *
* *
*****************************************************************
* 更新履歴 *
*---------------------------------------------------------------*
* 更新日付 担当者 更新内容 *
*---------------------------------------------------------------*
* 26-06-17 @@@ 新規作成 *
* *
*****************************************************************
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-ZSERIES.
OBJECT-COMPUTER. IBM-ZSERIES.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT R01INNFIL ASSIGN TO KIN01W01.
SELECT W01OUTFIL ASSIGN TO KIN02W01.
*
DATA DIVISION.
FILE SECTION.
*
*****************************************************************
* R01 (WORK-LEAVE) 80B FB *
*****************************************************************
FD R01INNFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 R01INNREC.
COPY KIN01REC REPLACING ==(A)== BY ==R01==.
*
*
*****************************************************************
* W01 (ERROR-LOG) 200B VB *
*****************************************************************
FD W01OUTFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS V.
01 W01OUTREC.
COPY KIN05REC REPLACING ==(A)== BY ==W01==.
*
WORKING-STORAGE SECTION.
*
*****************************************************************
* SQLCA *
*****************************************************************
EXEC SQL INCLUDE SQLCA END-EXEC.
*
*****************************************************************
* コンスタント領域 *
*****************************************************************
01 CNSARA.
03 CNS-PRGIDX PIC X(008) VALUE 'KIN02UPD'.
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-ABD999 PIC 9(003) VALUE 999.
03 CNS-KN0002 PIC 9(001) VALUE 2.
*
*****************************************************************
* カウンタ領域 *
*****************************************************************
01 CUNARA.
03 CUN-R01INN PIC S9(009) COMP-3
VALUE ZERO.
03 CUN-DBXINS PIC S9(009) COMP-3
VALUE ZERO.
03 CUN-DBXDEL PIC S9(009) COMP-3
VALUE ZERO.
03 CUN-DBXUPD PIC S9(009) COMP-3
VALUE ZERO.
03 CUN-W01OUT PIC S9(009) COMP-3
VALUE ZERO.
*
*****************************************************************
* 作業領域 *
*****************************************************************
01 WRKARA.
*** EOF判定
03 WRK-R01EOF PIC X(001).
88 WRK-R01-EOF VALUE '1'.
*** SQL用ホスト変数
03 WS-APPL-ID PIC 9(009).
03 WS-EMP-ID PIC X(008).
03 WS-LEAVE-TYPE PIC X(002).
03 WS-START-DATE PIC X(008).
03 WS-START-TIME PIC X(004).
03 WS-END-DATE PIC X(008).
03 WS-END-TIME PIC X(004).
03 WS-STATUS PIC X(001).
*** SQLCODE表示用
03 WRK-SQLCODE-DISP PIC +9(009).
*** エラーログ編集領域
03 WRK-ERR-CATEGORY PIC 9(002).
03 WRK-ERR-DETAIL PIC X(198).
*
*****************************************************************
* サブプログラム連絡領域 *
*****************************************************************
*** メッセージ編集出力SR用
COPY ZANMSGAC.
*** ABEND処理SR用
COPY ZANENDAC.
*
PROCEDURE DIVISION.
*****************************************************************
* サブモジュールNO: (0.0) *
* サブモジュール名: 制御処理 *
* 処理概要 : メインコントロール処理 *
*****************************************************************
0000MAJCOLSOR SECTION.
*
*** 初期処理
PERFORM 1000ITTSOR.
*
*** メイン処理
PERFORM 2000MAJSOR
UNTIL WRK-R01-EOF.
*
*** 終了処理
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/kin.db' END-EXEC.
*
*** R01ファイルOPEN
OPEN INPUT R01INNFIL.
*** W01ファイルOPEN
OPEN OUTPUT W01OUTFIL.
*
*** R01を初回読込
PERFORM 1100R01INNSOR.
*
1000ITTSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(1.1) *
* サブモジュール名:R01読込処理 *
* 処理概要 : WORK-LEAVE読込 *
*****************************************************************
1100R01INNSOR SECTION.
*
READ R01INNFIL
AT END
MOVE '1' TO WRK-R01EOF
NOT AT END
ADD 1 TO CUN-R01INN
END-READ.
*
1100R01INNSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(2.0) *
* サブモジュール名:主処理 *
* 処理概要 : R01WORK-LEAVE)→DB更新処理 *
*****************************************************************
2000MAJSOR SECTION.
*
*** レコード処理
PERFORM 2100PROCSOR.
*
*** 次レコード読込
PERFORM 1100R01INNSOR.
*
2000MAJSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(2.1) *
* サブモジュール名:レコード判定処理 *
* 処理概要 : ステータス判定→各DB更新処理分岐 *
*****************************************************************
2100PROCSOR SECTION.
*
MOVE R01APPL-ID TO WS-APPL-ID.
MOVE R01EMP-ID TO WS-EMP-ID.
MOVE R01LEAVE-TYPE TO WS-LEAVE-TYPE.
MOVE R01START-DATE TO WS-START-DATE.
MOVE R01START-TIME TO WS-START-TIME.
MOVE R01END-DATE TO WS-END-DATE.
MOVE R01END-TIME TO WS-END-TIME.
MOVE R01STATUS TO WS-STATUS.
*
EVALUATE TRUE
WHEN WS-STATUS = '1'
AND WS-APPL-ID = 0
PERFORM 2110INSERTSOR
WHEN WS-STATUS = '1'
AND WS-APPL-ID > 0
PERFORM 2120UPDATESOR
WHEN WS-STATUS = '9'
PERFORM 2130DELETESOR
WHEN OTHER
CONTINUE
END-EVALUATE.
*
2100PROCSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(2.1.1) *
* サブモジュール名:INSERT処理(新規登録) *
* 処理概要 : LEAVE_RECORDSに新規レコード追加 *
*****************************************************************
2110INSERTSOR SECTION.
*
EXEC SQL
INSERT INTO LEAVE_RECORDS
(EMP_ID, LEAVE_TYPE,
START_DATE, START_TIME,
END_DATE, END_TIME,
STATUS)
VALUES
(:WS-EMP-ID, :WS-LEAVE-TYPE,
:WS-START-DATE, :WS-START-TIME,
:WS-END-DATE, :WS-END-TIME,
:WS-STATUS)
END-EXEC.
*
IF SQLCODE NOT = 0
PERFORM 9100DBERRSOR
END-IF.
*
ADD 1 TO CUN-DBXINS.
*
2110INSERTSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(2.1.2) *
* サブモジュール名:UPDATE処理(変更) *
* 処理概要 : DELETE(旧レコード)→INSERT(新レコード) *
*****************************************************************
2120UPDATESOR SECTION.
*
EXEC SQL
DELETE FROM LEAVE_RECORDS
WHERE APPLICATION_ID = :WS-APPL-ID
END-EXEC.
*
IF SQLCODE NOT = 0
PERFORM 9100DBERRSOR
END-IF.
*
EXEC SQL
INSERT INTO LEAVE_RECORDS
(EMP_ID, LEAVE_TYPE,
START_DATE, START_TIME,
END_DATE, END_TIME,
STATUS)
VALUES
(:WS-EMP-ID, :WS-LEAVE-TYPE,
:WS-START-DATE, :WS-START-TIME,
:WS-END-DATE, :WS-END-TIME,
:WS-STATUS)
END-EXEC.
*
IF SQLCODE NOT = 0
PERFORM 9100DBERRSOR
END-IF.
*
ADD 1 TO CUN-DBXUPD.
*
2120UPDATESOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(2.1.3) *
* サブモジュール名:DELETE処理(取消) *
* 処理概要 : APPL-ID一致レコードをDELETE *
*****************************************************************
2130DELETESOR SECTION.
*
EXEC SQL
DELETE FROM LEAVE_RECORDS
WHERE APPLICATION_ID = :WS-APPL-ID
END-EXEC.
*
IF SQLCODE NOT = 0
PERFORM 9100DBERRSOR
END-IF.
*
ADD 1 TO CUN-DBXDEL.
*
2130DELETESOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(3.0) *
* サブモジュール名:終了処理 *
* 処理概要 : COMMIT・ファイルクローズ・件数出力 *
*****************************************************************
3000STPSOR SECTION.
*
*** COMMIT
EXEC SQL
COMMIT WORK
END-EXEC.
*
*** 入出力ファイルCLOSE
CLOSE R01INNFIL
W01OUTFIL.
*
*** 件数メッセージ出力
INITIALIZE M00MHOPAR.
MOVE CNS-MSGIINKES TO M00MSGCOD.
MOVE 'KIN01W01' TO M00UMKDATS22-01.
MOVE CUN-R01INN TO M00UMKDATS22-02.
PERFORM 4000MSGOUTSOR.
*
INITIALIZE M00MHOPAR.
MOVE CNS-MSGIINKES TO M00MSGCOD.
MOVE 'INS' TO M00UMKDATS22-01.
MOVE CUN-DBXINS TO M00UMKDATS22-02.
PERFORM 4000MSGOUTSOR.
*
INITIALIZE M00MHOPAR.
MOVE CNS-MSGIINKES TO M00MSGCOD.
MOVE 'UPD' TO M00UMKDATS22-01.
MOVE CUN-DBXUPD TO M00UMKDATS22-02.
PERFORM 4000MSGOUTSOR.
*
INITIALIZE M00MHOPAR.
MOVE CNS-MSGOUTKES TO M00MSGCOD.
MOVE 'DEL' TO M00UMKDATS22-01.
MOVE CUN-DBXDEL TO M00UMKDATS22-02.
PERFORM 4000MSGOUTSOR.
*
INITIALIZE M00MHOPAR.
MOVE CNS-MSGOUTKES TO M00MSGCOD.
MOVE 'KIN02W01' TO M00UMKDATS22-01.
MOVE CUN-W01OUT TO M00UMKDATS22-02.
PERFORM 4000MSGOUTSOR.
*
*** 終了メッセージ出力
INITIALIZE M00MHOPAR.
MOVE CNS-MSGFIN TO M00MSGCOD.
PERFORM 4000MSGOUTSOR.
*
3000STPSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(4.0) *
* サブモジュール名:メッセージ編集出力処理 *
* 処理概要 : メッセージ編集出力サブPGM呼出 *
*****************************************************************
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.1) *
* サブモジュール名:DBエラー処理 *
* 処理概要 : SQLエラー→ROLLBACK+メッセージ出力+ABEND *
*****************************************************************
9100DBERRSOR SECTION.
*
*** ROLLBACK
EXEC SQL
ROLLBACK WORK
END-EXEC.
*
*** エラーログ出力
INITIALIZE W01OUTREC.
MOVE '01' TO W01ERR-CATEGORY.
MOVE SQLCODE TO WRK-SQLCODE-DISP.
STRING 'KIN02UPD SQLCODE='
WRK-SQLCODE-DISP DELIMITED BY SIZE
' APPL-ID='
WS-APPL-ID DELIMITED BY SIZE
INTO W01ERR-DETAIL
END-STRING.
WRITE W01OUTREC.
ADD 1 TO CUN-W01OUT.
*
*** エラーメッセージ出力
INITIALIZE M00MHOPAR.
MOVE CNS-MSGSUBEEK TO M00MSGCOD.
MOVE 'KIN02UPD SQL ERROR' TO M00UMKDATS22-01.
MOVE WRK-SQLCODE-DISP TO M00UMKDATS22-02.
MOVE WS-APPL-ID TO M00UMKDATS22-03.
PERFORM 4000MSGOUTSOR.
*
PERFORM 9999ABDSOR.
*
9100DBERRSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(9.9) *
* サブモジュール名:ABEND処理 *
* 処理概要 : ABENDサブPGM呼出 *
*****************************************************************
9999ABDSOR SECTION.
*
MOVE CNS-ABD999 TO E01ABDCOD.
CALL 'SUB03END' USING E01ABDPAR.
*
9999ABDSOR-EXT.
EXIT.
+511
View File
@@ -0,0 +1,511 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. KIN03EXP.
*****************************************************************
* システム名 : 勤怠休暇管理システム *
* プログラムID : KIN03EXP *
* プログラム名 : 休暇日別展開処理 *
* 作成日 : 2026-06-17 *
* 処理概要 : LEAVE_RECORDS(DB2)より有効申請を読込み、 *
* 開始日〜終了日の期間を日別に展開し、 *
* 休日・週末を除外してLEAVE-DAILY-fileを出力 *
* する。社員番号キーブレイクで小計出力を行う。*
*****************************************************************
* 更新履歴 *
*---------------------------------------------------------------*
* 更新日付 担当者 更新内容 *
*---------------------------------------------------------------*
* 26-06-17 @@@ 新規作成 *
* *
*****************************************************************
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-ZSERIES.
OBJECT-COMPUTER. IBM-ZSERIES.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT W01OUTFIL ASSIGN TO "KIN02W01.DAT".
*
DATA DIVISION.
FILE SECTION.
*
*****************************************************************
* W01 (LEAVE-DAILY) 80B FB *
*****************************************************************
FD W01OUTFIL
LABEL RECORD IS STANDARD
BLOCK CONTAINS 0
RECORDING MODE IS F.
01 W01OUTREC.
COPY KIN02REC REPLACING ==(A)== BY ==W01==.
*
WORKING-STORAGE SECTION.
*
*****************************************************************
* SQLCA *
*****************************************************************
EXEC SQL INCLUDE SQLCA END-EXEC.
*
*****************************************************************
* コンスタント領域 *
*****************************************************************
01 CNSARA.
03 CNS-PRGIDX PIC X(008) VALUE 'KIN03EXP'.
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-W01OUT PIC S9(009) COMP-3
VALUE ZERO.
*
*****************************************************************
* DBホスト変数(DISPLAY形式:bridgeテキストI/F対応) *
*****************************************************************
01 SQL-HOST-VARS.
03 SQL-APPL-ID PIC X(009).
03 SQL-EMP-ID PIC X(008).
03 SQL-LEAVE-TYPE PIC X(002).
03 SQL-START-DATE PIC X(008).
03 SQL-START-TIME PIC X(004).
03 SQL-END-DATE PIC X(008).
03 SQL-END-TIME PIC X(004).
03 SQL-HD-DATE PIC X(008).
*
*****************************************************************
* 作業領域 *
*****************************************************************
01 WRKARA.
*** EOF判定
03 WRK-R01EOF PIC X(001).
88 WRK-R01-EOF VALUE '1'.
*** キーブレイク用
03 WRK-BFR-EMP-ID PIC X(008).
*** 社員別小計カウンタ
03 CUN-EMP-SUB PIC S9(009) COMP-3
VALUE ZERO.
*** 日付展開用
03 WRK-DATE-CURRENT PIC 9(008).
03 WRK-DATE-ALPHA REDEFINES WRK-DATE-CURRENT
PIC X(008).
03 WRK-DATE-NUM REDEFINES WRK-DATE-CURRENT.
05 WRK-DATE-YEAR PIC 9(004).
05 WRK-DATE-MONTH PIC 9(002).
05 WRK-DATE-DAY PIC 9(002).
03 WRK-DATE-END PIC 9(008).
*** 曜日判定用
03 WRK-DAY-OF-WEEK PIC 9(001).
*** 休日テーブル件数(ODO前に定義)
03 WRK-HD-COUNT PIC 9(004) COMP
VALUE ZERO.
*** 休日テーブル存在フラグ
03 WRK-HD-FOUND PIC X(001).
*** 休日テーブル(ODOは末尾に配置)
03 WRK-HOLIDAY-TABLE.
05 WRK-HD-ENTRY OCCURS 1 TO 366 TIMES
DEPENDING ON WRK-HD-COUNT
ASCENDING KEY IS WRK-HD-DATE
INDEXED BY WRK-HD-IDX.
07 WRK-HD-DATE PIC 9(008).
*
*****************************************************************
* サブプログラム連絡領域 *
*****************************************************************
*** 運用日付取得
COPY ZANDATAC.
*** メッセージ編集出力SR用
COPY ZANMSGAC.
*** ABEND処理SR用
COPY ZANENDAC.
*
PROCEDURE DIVISION.
*****************************************************************
* サブモジュールNO: (0.0) *
* サブモジュール名: 制御処理 *
* 処理概要 : メインコントロール処理 *
*****************************************************************
0000MAJCOLSOR SECTION.
*
*** 初期処理
PERFORM 1000ITTSOR.
*
*** メイン処理
PERFORM 2000MAJSOR
UNTIL WRK-R01EOF = '1'.
*
*** 終了処理
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/kin.db' END-EXEC.
*
*** 運用日付取得
INITIALIZE D01UBSPAR.
CALL 'SUB01DAT' USING D01UBSPAR.
IF D01FKICOD = ZERO
MOVE D01UBSUDATE TO WRK-DATE-CURRENT
ELSE
INITIALIZE M00MHOPAR
MOVE CNS-MSGSUBEEK TO M00MSGCOD
MOVE 'SUB01DAT' TO M00UMKDATS22-01
MOVE D01FKICOD TO M00UMKDATS22-02
PERFORM 4000MSGOUTSOR
PERFORM 9999ABDSOR
END-IF.
*
*** 休日カレンダーテーブル読込
PERFORM 1200HDINNSOR.
*
*** 出力ファイルOPEN
OPEN OUTPUT W01OUTFIL.
*
*** C1カーソル初回FETCH(SELECT INTO)
PERFORM 1100C1INITSOR.
*
1000ITTSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(1.1) *
* サブモジュール名:C1初回FETCH処理 *
* 処理概要 : LEAVE_RECORDSをSELECT INTO(初回のみ) *
*****************************************************************
1100C1INITSOR SECTION.
*
MOVE SPACES TO SQL-APPL-ID.
EXEC SQL
SELECT APPLICATION_ID, EMP_ID, LEAVE_TYPE,
START_DATE, START_TIME,
END_DATE, END_TIME
FROM LEAVE_RECORDS
WHERE STATUS = '1'
ORDER BY EMP_ID, START_DATE
INTO :SQL-APPL-ID, :SQL-EMP-ID, :SQL-LEAVE-TYPE,
:SQL-START-DATE, :SQL-START-TIME,
:SQL-END-DATE, :SQL-END-TIME
END-EXEC.
*
IF SQLCODE = 0
ADD 1 TO CUN-R01INN
ELSE
MOVE '1' TO WRK-R01EOF
END-IF.
*
1100C1INITSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(1.2) *
* サブモジュール名:C1次回FETCH処理 *
* 処理概要 : br_fetch_nextで次行を読込(2回目以降) *
*****************************************************************
1100C1FETCHSOR SECTION.
*
CALL 'br_fetch_next' USING SQLCODE.
*
IF SQLCODE = 0
MOVE SPACES TO SQL-APPL-ID
MOVE 0 TO WS-COL-IDX
MOVE 256 TO WS-COL-LEN
CALL 'br_get_col' USING
WS-COL-IDX, SQL-APPL-ID, WS-COL-LEN
MOVE 1 TO WS-COL-IDX
MOVE 256 TO WS-COL-LEN
CALL 'br_get_col' USING
WS-COL-IDX, SQL-EMP-ID, WS-COL-LEN
MOVE 2 TO WS-COL-IDX
MOVE 256 TO WS-COL-LEN
CALL 'br_get_col' USING
WS-COL-IDX, SQL-LEAVE-TYPE, WS-COL-LEN
MOVE 3 TO WS-COL-IDX
MOVE 256 TO WS-COL-LEN
CALL 'br_get_col' USING
WS-COL-IDX, SQL-START-DATE, WS-COL-LEN
MOVE 4 TO WS-COL-IDX
MOVE 256 TO WS-COL-LEN
CALL 'br_get_col' USING
WS-COL-IDX, SQL-START-TIME, WS-COL-LEN
MOVE 5 TO WS-COL-IDX
MOVE 256 TO WS-COL-LEN
CALL 'br_get_col' USING
WS-COL-IDX, SQL-END-DATE, WS-COL-LEN
MOVE 6 TO WS-COL-IDX
MOVE 256 TO WS-COL-LEN
CALL 'br_get_col' USING
WS-COL-IDX, SQL-END-TIME, WS-COL-LEN
ADD 1 TO CUN-R01INN
ELSE
MOVE '1' TO WRK-R01EOF
END-IF.
*
1100C1FETCHSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO:(1.3) *
* サブモジュール名: 休日カレンダー読込処理 *
* 処理概要 : HOLIDAY_CALENDARをWORKING-STORAGEに格納 *
*****************************************************************
1200HDINNSOR SECTION.
*
*** C2初回FETCH(SELECT INTO)
EXEC SQL
SELECT HOLIDAY_DATE
FROM HOLIDAY_CALENDAR
ORDER BY HOLIDAY_DATE
INTO :SQL-HD-DATE
END-EXEC.
*
*** 休日テーブルに全件読込
PERFORM UNTIL SQLCODE NOT = 0
ADD 1 TO WRK-HD-COUNT
MOVE SQL-HD-DATE TO WRK-HD-DATE(WRK-HD-COUNT)
CALL 'br_fetch_next' USING SQLCODE
IF SQLCODE = 0
MOVE 0 TO WS-COL-IDX
MOVE 256 TO WS-COL-LEN
CALL 'br_get_col' USING
WS-COL-IDX, SQL-HD-DATE, WS-COL-LEN
END-IF
END-PERFORM.
*
1200HDINNSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO: (2.0) *
* サブモジュール名: 主処理 *
* 処理概要 : キーブレイク(社員番号)毎の処理を行う *
*****************************************************************
2000MAJSOR SECTION.
*
*** 社員番号キー保存
MOVE SQL-EMP-ID TO WRK-BFR-EMP-ID.
*
*** 1社員分処理(キーブレイク範囲)
PERFORM 2100-PROCESS-EMP
THRU 2100-PROCESS-EMP-EXIT.
*
2000MAJSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO: (2.1) *
* サブモジュール名: 社員別処理 *
* 処理概要 : 1社員の全申請を処理(PERFORM THRU対象) *
*****************************************************************
2100-PROCESS-EMP SECTION.
*
MOVE ZERO TO CUN-EMP-SUB.
*
PERFORM UNTIL WRK-R01EOF = '1'
OR SQL-EMP-ID NOT = WRK-BFR-EMP-ID
PERFORM 2200-EXPAND-DATE
THRU 2200-EXPAND-DATE-EXIT
PERFORM 1100C1FETCHSOR
END-PERFORM.
*
*** 社員別小計出力(キーブレイク)
INITIALIZE M00MHOPAR.
MOVE CNS-MSGKEYINF TO M00MSGCOD.
MOVE WRK-BFR-EMP-ID TO M00UMKDATS22-01.
MOVE CUN-EMP-SUB TO M00UMKDATS22-02.
MOVE 'EMP SUB' TO M00UMKDATS22-03.
PERFORM 4000MSGOUTSOR.
*
2100-PROCESS-EMP-EXIT.
EXIT.
*****************************************************************
* サブモジュールNO: (2.2) *
* サブモジュール名: 日付展開処理 *
* 処理概要 : 開始日〜終了日をループ(PERFORM THRU対象) *
* 休日/週末を除外してLEAVE-DAILYを出力 *
*****************************************************************
2200-EXPAND-DATE SECTION.
*
MOVE SQL-START-DATE TO WRK-DATE-CURRENT.
MOVE SQL-END-DATE TO WRK-DATE-END.
*
PERFORM UNTIL WRK-DATE-CURRENT > WRK-DATE-END
COMPUTE WRK-DAY-OF-WEEK =
FUNCTION MOD(
FUNCTION INTEGER-OF-DATE(WRK-DATE-CURRENT), 7)
IF WRK-DAY-OF-WEEK = 0
OR WRK-DAY-OF-WEEK = 6
IF WRK-HD-COUNT > 0
AND WRK-DATE-CURRENT NOT = ZERO
CONTINUE
ELSE
CONTINUE
END-IF
ELSE
*** 休日テーブル検索
MOVE '0' TO WRK-HD-FOUND
IF WRK-HD-COUNT > 0
SET WRK-HD-IDX TO 1
SEARCH ALL WRK-HD-ENTRY
AT END
CONTINUE
WHEN WRK-HD-DATE(WRK-HD-IDX)
= WRK-DATE-CURRENT
MOVE '1' TO WRK-HD-FOUND
END-SEARCH
END-IF
IF WRK-HD-FOUND = '0'
INITIALIZE W01OUTREC
MOVE FUNCTION NUMVAL(SQL-APPL-ID)
TO W01APPL-ID
MOVE WRK-BFR-EMP-ID TO W01EMP-ID
MOVE SQL-LEAVE-TYPE TO W01LEAVE-TYPE
MOVE SQL-START-TIME TO W01START-TIME
MOVE SQL-END-TIME TO W01END-TIME
MOVE WRK-DATE-ALPHA
TO W01DATE
WRITE W01OUTREC
ADD 1 TO CUN-W01OUT
ADD 1 TO CUN-EMP-SUB
END-IF
END-IF
*** 日付加算
PERFORM 2300-DATE-ADD-1
END-PERFORM.
*
2200-EXPAND-DATE-EXIT.
EXIT.
*****************************************************************
* サブモジュールNO: (2.3) *
* サブモジュール名: 日付加算処理 *
* 処理概要 : 日付を1日進める(月/年跨ぎ対応) *
*****************************************************************
2300-DATE-ADD-1 SECTION.
*
ADD 1 TO WRK-DATE-DAY.
*
EVALUATE WRK-DATE-MONTH
WHEN 1 WHEN 3 WHEN 5 WHEN 7
WHEN 8 WHEN 10 WHEN 12
IF WRK-DATE-DAY > 31
MOVE 1 TO WRK-DATE-DAY
ADD 1 TO WRK-DATE-MONTH
IF WRK-DATE-MONTH > 12
MOVE 1 TO WRK-DATE-MONTH
ADD 1 TO WRK-DATE-YEAR
END-IF
END-IF
WHEN 4 WHEN 6 WHEN 9 WHEN 11
IF WRK-DATE-DAY > 30
MOVE 1 TO WRK-DATE-DAY
ADD 1 TO WRK-DATE-MONTH
END-IF
WHEN 2
IF (FUNCTION MOD(WRK-DATE-YEAR, 400) = 0)
OR (FUNCTION MOD(WRK-DATE-YEAR, 4) = 0
AND FUNCTION MOD(WRK-DATE-YEAR, 100)
NOT = 0)
IF WRK-DATE-DAY > 29
MOVE 1 TO WRK-DATE-DAY
ADD 1 TO WRK-DATE-MONTH
END-IF
ELSE
IF WRK-DATE-DAY > 28
MOVE 1 TO WRK-DATE-DAY
ADD 1 TO WRK-DATE-MONTH
END-IF
END-IF
END-EVALUATE.
*
2300-DATE-ADD-1-EXT.
EXIT.
*****************************************************************
* サブモジュールNO: (3.0) *
* サブモジュール名: 終了処理 *
* 処理概要 : ファイルクローズ・件数出力 *
*****************************************************************
3000STPSOR SECTION.
*
*** 出力ファイルCLOSE
CLOSE W01OUTFIL.
*
*** 入力件数出力
INITIALIZE M00MHOPAR.
MOVE CNS-MSGIINKES TO M00MSGCOD.
MOVE 'LEAVE_RECORDS' TO M00UMKDATS22-01.
MOVE CUN-R01INN TO M00UMKDATS22-02.
PERFORM 4000MSGOUTSOR.
*
*** 出力件数出力
INITIALIZE M00MHOPAR.
MOVE CNS-MSGOUTKES TO M00MSGCOD.
MOVE 'KIN02W01' TO M00UMKDATS22-01.
MOVE CUN-W01OUT TO M00UMKDATS22-02.
PERFORM 4000MSGOUTSOR.
*
*** 休日テーブル件数出力
INITIALIZE M00MHOPAR.
MOVE CNS-MSGKEYINF TO M00MSGCOD.
MOVE 'HOLIDAYS LOADED' TO M00UMKDATS22-01.
MOVE WRK-HD-COUNT TO M00UMKDATS22-02.
PERFORM 4000MSGOUTSOR.
*
*** 終了メッセージ出力
INITIALIZE M00MHOPAR.
MOVE CNS-MSGFIN TO M00MSGCOD.
PERFORM 4000MSGOUTSOR.
*
3000STPSOR-EXT.
EXIT.
*****************************************************************
* サブモジュールNO: (4.0) *
* サブモジュール名: メッセージ編集出力処理 *
* 処理概要 : メッセージ編集出力サブPGM呼出 *
*****************************************************************
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処理 *
* 処理概要 : ABENDサブPGM呼出 *
*****************************************************************
9999ABDSOR SECTION.
*
MOVE CNS-ABD999 TO E01ABDCOD.
CALL 'SUB03END' USING E01ABDPAR.
*
9999ABDSOR-EXT.
EXIT.
+16
View File
@@ -295,6 +295,22 @@
INITIALIZE W01OUTREC
W03OUTREC.
*
*** SUB04CHKで社員番号チェック
INITIALIZE C01CHKPAR.
MOVE WRK-CSV-EMP-ID TO C01CHKDAT.
MOVE 'EMPID' TO C01CHKTYP.
CALL 'SUB04CHK' USING C01CHKPAR.
IF C01CHKRRC NOT = ZERO
MOVE '01' TO W03ERR-CATEGORY
STRING 'EMP-ID ERROR:'
WRK-CSV-EMP-ID
DELIMITED BY SIZE
INTO W03ERR-DETAIL
WRITE W03OUTREC
ADD 1 TO CUN-W03OUT
GO TO 2020VALIDATESOR-EXT
END-IF.
*
*** SUB04CHKで日付チェック
INITIALIZE C01CHKPAR.
MOVE WRK-CSV-APPL-DATE TO C01CHKDAT.