Remove Subsystem A src/bin from git (only production/ should be pushed)
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.
@@ -1,615 +0,0 @@
|
|||||||
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
|
|
||||||
FILE STATUS IS WS-R01-STATUS.
|
|
||||||
SELECT W01OUTFIL ASSIGN TO KIN01W01
|
|
||||||
FILE STATUS IS WS-W01-STATUS.
|
|
||||||
SELECT W02OUTFIL ASSIGN TO KIN01W02
|
|
||||||
FILE STATUS IS WS-W02-STATUS.
|
|
||||||
*
|
|
||||||
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 WS-R01-STATUS PIC X(002).
|
|
||||||
03 WS-W01-STATUS PIC X(002).
|
|
||||||
03 WS-W02-STATUS PIC X(002).
|
|
||||||
*** 運用日付
|
|
||||||
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.
|
|
||||||
*
|
|
||||||
*** OPENチェック
|
|
||||||
IF WS-R01-STATUS NOT = '00'
|
|
||||||
MOVE CNS-ABD999 TO E01ABDCOD
|
|
||||||
CALL 'SUB03END' USING E01ABDPAR
|
|
||||||
END-IF.
|
|
||||||
IF WS-W01-STATUS NOT = '00'
|
|
||||||
MOVE CNS-ABD999 TO E01ABDCOD
|
|
||||||
CALL 'SUB03END' USING E01ABDPAR
|
|
||||||
END-IF.
|
|
||||||
IF WS-W02-STATUS NOT = '00'
|
|
||||||
MOVE CNS-ABD999 TO E01ABDCOD
|
|
||||||
CALL 'SUB03END' USING E01ABDPAR
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
*** #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.
|
|
||||||
@@ -1,454 +0,0 @@
|
|||||||
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
|
|
||||||
FILE STATUS IS WS-R01-STATUS.
|
|
||||||
SELECT W01OUTFIL ASSIGN TO KIN02W01
|
|
||||||
FILE STATUS IS WS-W01-STATUS.
|
|
||||||
*
|
|
||||||
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.
|
|
||||||
*** ファイルステータス
|
|
||||||
03 WS-R01-STATUS PIC X(002).
|
|
||||||
03 WS-W01-STATUS PIC X(002).
|
|
||||||
*** 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.
|
|
||||||
*** OPENチェック(R01)
|
|
||||||
IF WS-R01-STATUS NOT = '00'
|
|
||||||
MOVE CNS-ABD999 TO E01ABDCOD
|
|
||||||
CALL 'SUB03END' USING E01ABDPAR
|
|
||||||
END-IF.
|
|
||||||
*** W01ファイルOPEN
|
|
||||||
OPEN OUTPUT W01OUTFIL.
|
|
||||||
*** OPENチェック(W01)
|
|
||||||
IF WS-W01-STATUS NOT = '00'
|
|
||||||
MOVE CNS-ABD999 TO E01ABDCOD
|
|
||||||
CALL 'SUB03END' USING E01ABDPAR
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
*** 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) *
|
|
||||||
* サブモジュール名:主処理 *
|
|
||||||
* 処理概要 : R01(WORK-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.
|
|
||||||
@@ -1,520 +0,0 @@
|
|||||||
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"
|
|
||||||
FILE STATUS IS WS-W01-STATUS.
|
|
||||||
*
|
|
||||||
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.
|
|
||||||
*** ファイルステータス
|
|
||||||
03 WS-W01-STATUS PIC X(002).
|
|
||||||
*** 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.
|
|
||||||
*
|
|
||||||
*** OPENチェック
|
|
||||||
IF WS-W01-STATUS NOT = '00'
|
|
||||||
MOVE CNS-ABD999 TO E01ABDCOD
|
|
||||||
CALL 'SUB03END' USING E01ABDPAR
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
*** 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.
|
|
||||||
@@ -1,493 +0,0 @@
|
|||||||
IDENTIFICATION DIVISION.
|
|
||||||
PROGRAM-ID. KIN04CHK.
|
|
||||||
*****************************************************************
|
|
||||||
* システム名 : 勤怠休暇管理システム *
|
|
||||||
* プログラムID : KIN04CHK *
|
|
||||||
* プログラム名 : 打刻項目チェック処理 *
|
|
||||||
* 作成日 : 2026-06-19 *
|
|
||||||
* 処理概要 : CSV形式の打刻データファイルを読み込み、 *
|
|
||||||
* IF多重ネスト(THEN句)で4段階チェックを実施、 *
|
|
||||||
* 正常はWRITE FROMでEDITED-PUNCHに出力、 *
|
|
||||||
* 異常はERROR-LOGに出力する。 *
|
|
||||||
*****************************************************************
|
|
||||||
* 更新履歴 *
|
|
||||||
*---------------------------------------------------------------*
|
|
||||||
* 更新日付 担当者 更新内容 *
|
|
||||||
*---------------------------------------------------------------*
|
|
||||||
* 26-06-19 @@@ 新規作成 *
|
|
||||||
*****************************************************************
|
|
||||||
ENVIRONMENT DIVISION.
|
|
||||||
CONFIGURATION SECTION.
|
|
||||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
|
||||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
|
||||||
*
|
|
||||||
INPUT-OUTPUT SECTION.
|
|
||||||
FILE-CONTROL.
|
|
||||||
SELECT R01INNFIL ASSIGN TO KIN04R01
|
|
||||||
FILE STATUS IS WS-R01-STATUS.
|
|
||||||
SELECT W01OUTFIL ASSIGN TO KIN04W01
|
|
||||||
FILE STATUS IS WS-W01-STATUS.
|
|
||||||
SELECT W02OUTFIL ASSIGN TO KIN04W02
|
|
||||||
FILE STATUS IS WS-W02-STATUS.
|
|
||||||
*
|
|
||||||
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 KIN04REC 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 'KIN04CHK'.
|
|
||||||
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-ERR-PUNCH PIC 9(002) VALUE 02.
|
|
||||||
03 CNS-FIELD-COUNT-6 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 WS-R01-STATUS PIC X(002).
|
|
||||||
03 WS-W01-STATUS PIC X(002).
|
|
||||||
03 WS-W02-STATUS PIC X(002).
|
|
||||||
*** 読込フラグ
|
|
||||||
03 WRK-R01EOF PIC X(001).
|
|
||||||
*** CSV分解用
|
|
||||||
03 WRK-COMMA-CNT PIC 9(002) COMP.
|
|
||||||
03 WRK-CSV-EMP-ID PIC X(008).
|
|
||||||
03 WRK-CSV-DATE PIC X(008).
|
|
||||||
03 WRK-CSV-TIME-IN PIC X(004).
|
|
||||||
03 WRK-CSV-TIME-OUT PIC X(004).
|
|
||||||
03 WRK-CSV-DEPT-ID PIC X(004).
|
|
||||||
03 WRK-CSV-TERMINAL PIC X(006).
|
|
||||||
*** 時刻数値変換用
|
|
||||||
03 WRK-TIME-IN-NUM PIC 9(004).
|
|
||||||
03 WRK-TIME-OUT-NUM PIC 9(004).
|
|
||||||
*** DISPLAY変換用
|
|
||||||
03 WRK-COMMA-DISP PIC 9(002).
|
|
||||||
*** EMPIDチェック結果
|
|
||||||
03 WRK-EMPID-OK PIC X(001).
|
|
||||||
88 WRK-EMPID-IS-OK VALUE '1'.
|
|
||||||
*
|
|
||||||
*****************************************************************
|
|
||||||
* WRITE FROM用 出力レコード領域 *
|
|
||||||
*****************************************************************
|
|
||||||
01 WS-W01REC.
|
|
||||||
COPY KIN04REC REPLACING ==(A)== BY ==O1==.
|
|
||||||
*
|
|
||||||
*****************************************************************
|
|
||||||
* サブプログラム連絡領域 *
|
|
||||||
*****************************************************************
|
|
||||||
*** 運用日付取得
|
|
||||||
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.
|
|
||||||
*
|
|
||||||
*** 運用日付取得
|
|
||||||
INITIALIZE D01UBSPAR.
|
|
||||||
CALL 'SUB01DAT' USING D01UBSPAR.
|
|
||||||
IF D01FKICOD = ZERO
|
|
||||||
CONTINUE
|
|
||||||
ELSE
|
|
||||||
INITIALIZE M00MHOPAR
|
|
||||||
MOVE CNS-MSGSUBEEK TO M00MSGCOD
|
|
||||||
MOVE 'SUB01DAT' TO M00UMKDATS22-01
|
|
||||||
MOVE D01FKICOD TO M00UMKDATS22-02
|
|
||||||
PERFORM 4000MSGOUTSOR
|
|
||||||
PERFORM 9999ABDSOR
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
*** 入出力ファイルOPEN
|
|
||||||
OPEN INPUT R01INNFIL
|
|
||||||
OUTPUT W01OUTFIL
|
|
||||||
W02OUTFIL.
|
|
||||||
*
|
|
||||||
*** OPENチェック
|
|
||||||
IF WS-R01-STATUS NOT = '00'
|
|
||||||
MOVE CNS-ABD999 TO E01ABDCOD
|
|
||||||
CALL 'SUB03END' USING E01ABDPAR
|
|
||||||
END-IF.
|
|
||||||
IF WS-W01-STATUS NOT = '00'
|
|
||||||
MOVE CNS-ABD999 TO E01ABDCOD
|
|
||||||
CALL 'SUB03END' USING E01ABDPAR
|
|
||||||
END-IF.
|
|
||||||
IF WS-W02-STATUS NOT = '00'
|
|
||||||
MOVE CNS-ABD999 TO E01ABDCOD
|
|
||||||
CALL 'SUB03END' USING E01ABDPAR
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
*** 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分解・IF多重ネスト(THEN句)で4段階チェック *
|
|
||||||
*****************************************************************
|
|
||||||
2000MAJSOR SECTION.
|
|
||||||
*
|
|
||||||
*** CSV分解
|
|
||||||
PERFORM 2010CSVSOR.
|
|
||||||
*
|
|
||||||
*** 社員番号チェック
|
|
||||||
PERFORM 2021EMPIDSOR.
|
|
||||||
*
|
|
||||||
*** 項目チェック(IF多重ネスト THEN句)
|
|
||||||
PERFORM 2020VALIDATESOR.
|
|
||||||
*
|
|
||||||
*** 次のレコード読込
|
|
||||||
PERFORM 1100R01INNSOR.
|
|
||||||
*
|
|
||||||
2000MAJSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブモジュールNO:(2.1) *
|
|
||||||
* サブモジュール名: CSV分解処理 *
|
|
||||||
* 処理概要 : UNSTRINGでCSVを6項目に分解する *
|
|
||||||
*****************************************************************
|
|
||||||
2010CSVSOR SECTION.
|
|
||||||
*
|
|
||||||
MOVE ZERO TO WRK-COMMA-CNT.
|
|
||||||
INITIALIZE WRK-CSV-EMP-ID
|
|
||||||
WRK-CSV-DATE
|
|
||||||
WRK-CSV-TIME-IN
|
|
||||||
WRK-CSV-TIME-OUT
|
|
||||||
WRK-CSV-DEPT-ID
|
|
||||||
WRK-CSV-TERMINAL.
|
|
||||||
UNSTRING R01INNREC
|
|
||||||
DELIMITED BY ','
|
|
||||||
INTO WRK-CSV-EMP-ID
|
|
||||||
WRK-CSV-DATE
|
|
||||||
WRK-CSV-TIME-IN
|
|
||||||
WRK-CSV-TIME-OUT
|
|
||||||
WRK-CSV-DEPT-ID
|
|
||||||
WRK-CSV-TERMINAL
|
|
||||||
TALLYING IN WRK-COMMA-CNT
|
|
||||||
END-UNSTRING.
|
|
||||||
*
|
|
||||||
2010CSVSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブモジュールNO:(2.1.5) *
|
|
||||||
* サブモジュール名: 社員番号チェック *
|
|
||||||
* 処理概要 : SUB04CHK EMPIDで社員番号の妥当性チェック *
|
|
||||||
*****************************************************************
|
|
||||||
2021EMPIDSOR SECTION.
|
|
||||||
*
|
|
||||||
MOVE '0' TO WRK-EMPID-OK.
|
|
||||||
IF WRK-COMMA-CNT = CNS-FIELD-COUNT-6
|
|
||||||
INITIALIZE C01CHKPAR
|
|
||||||
MOVE WRK-CSV-EMP-ID TO C01CHKDAT
|
|
||||||
MOVE 'EMPID' TO C01CHKTYP
|
|
||||||
CALL 'SUB04CHK' USING C01CHKPAR
|
|
||||||
IF C01CHKRRC = ZERO
|
|
||||||
MOVE '1' TO WRK-EMPID-OK
|
|
||||||
END-IF
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
2021EMPIDSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブモジュールNO:(2.2) *
|
|
||||||
* サブモジュール名: 項目チェック(IF多重ネスト THEN句) *
|
|
||||||
* 処理概要 : フィールド数→社員番号→日付→時刻→時刻順の *
|
|
||||||
* 4段階ネストチェックをTHEN句で記述 *
|
|
||||||
*****************************************************************
|
|
||||||
2020VALIDATESOR SECTION.
|
|
||||||
*
|
|
||||||
*** IF多重ネスト THEN句 (4段階)
|
|
||||||
*** 第1段階: フィールド数 + 社員番号必須
|
|
||||||
IF WRK-COMMA-CNT = CNS-FIELD-COUNT-6
|
|
||||||
AND WRK-EMPID-IS-OK
|
|
||||||
THEN
|
|
||||||
*** 第2段階: 日付チェック(SUB04CHK)
|
|
||||||
INITIALIZE C01CHKPAR
|
|
||||||
MOVE WRK-CSV-DATE TO C01CHKDAT
|
|
||||||
MOVE 'DATE' TO C01CHKTYP
|
|
||||||
CALL 'SUB04CHK' USING C01CHKPAR
|
|
||||||
IF C01CHKRRC = ZERO
|
|
||||||
THEN
|
|
||||||
*** 第3段階: 出勤時刻チェック(SUB04CHK)
|
|
||||||
INITIALIZE C01CHKPAR
|
|
||||||
MOVE WRK-CSV-TIME-IN TO C01CHKDAT
|
|
||||||
MOVE 'TIME' TO C01CHKTYP
|
|
||||||
CALL 'SUB04CHK' USING C01CHKPAR
|
|
||||||
IF C01CHKRRC = ZERO
|
|
||||||
THEN
|
|
||||||
*** 第3段階: 退勤時刻チェック(SUB04CHK)
|
|
||||||
INITIALIZE C01CHKPAR
|
|
||||||
MOVE WRK-CSV-TIME-OUT
|
|
||||||
TO C01CHKDAT
|
|
||||||
MOVE 'TIME' TO C01CHKTYP
|
|
||||||
CALL 'SUB04CHK' USING C01CHKPAR
|
|
||||||
IF C01CHKRRC = ZERO
|
|
||||||
THEN
|
|
||||||
*** 第4段階: 出勤<退勤チェック
|
|
||||||
MOVE WRK-CSV-TIME-IN
|
|
||||||
TO WRK-TIME-IN-NUM
|
|
||||||
MOVE WRK-CSV-TIME-OUT
|
|
||||||
TO WRK-TIME-OUT-NUM
|
|
||||||
IF WRK-TIME-IN-NUM
|
|
||||||
< WRK-TIME-OUT-NUM
|
|
||||||
THEN
|
|
||||||
PERFORM 2050NORMSOR
|
|
||||||
ELSE
|
|
||||||
PERFORM 2090ERRORSOR
|
|
||||||
END-IF
|
|
||||||
ELSE
|
|
||||||
PERFORM 2090ERRORSOR
|
|
||||||
END-IF
|
|
||||||
ELSE
|
|
||||||
PERFORM 2090ERRORSOR
|
|
||||||
END-IF
|
|
||||||
ELSE
|
|
||||||
PERFORM 2090ERRORSOR
|
|
||||||
END-IF
|
|
||||||
ELSE
|
|
||||||
PERFORM 2090ERRORSOR
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
2020VALIDATESOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブモジュールNO:(2.5) *
|
|
||||||
* サブモジュール名: 正常出力処理 *
|
|
||||||
* 処理概要 : WRITE FROMでEDITED-PUNCHに出力 *
|
|
||||||
*****************************************************************
|
|
||||||
2050NORMSOR SECTION.
|
|
||||||
*
|
|
||||||
*** WORKING-STORAGEに編集
|
|
||||||
MOVE WRK-CSV-EMP-ID TO O1EMP-ID.
|
|
||||||
MOVE WRK-CSV-DATE TO O1WORK-DATE.
|
|
||||||
MOVE WRK-CSV-TIME-IN TO O1STR-TIME.
|
|
||||||
MOVE WRK-CSV-TIME-OUT TO O1END-TIME.
|
|
||||||
MOVE WRK-CSV-DEPT-ID TO O1DEPT-ID.
|
|
||||||
MOVE WRK-CSV-TERMINAL TO O1TERMINAL.
|
|
||||||
*** WRITE FROM (新規カバレッジ)
|
|
||||||
WRITE W01OUTREC
|
|
||||||
FROM WS-W01REC.
|
|
||||||
ADD 1 TO CUN-W01OUT.
|
|
||||||
*
|
|
||||||
2050NORMSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブモジュールNO:(2.9) *
|
|
||||||
* サブモジュール名: エラー処理 *
|
|
||||||
* 処理概要 : エラーレコードをW02(ERROR-LOG)に出力 *
|
|
||||||
*****************************************************************
|
|
||||||
2090ERRORSOR SECTION.
|
|
||||||
*
|
|
||||||
*** W02レコード初期化
|
|
||||||
INITIALIZE W02OUTREC.
|
|
||||||
MOVE CNS-ERR-PUNCH TO W02ERR-CATEGORY.
|
|
||||||
*
|
|
||||||
*** エラー種別判定
|
|
||||||
IF WRK-COMMA-CNT NOT = CNS-FIELD-COUNT-6
|
|
||||||
MOVE WRK-COMMA-CNT TO WRK-COMMA-DISP
|
|
||||||
STRING
|
|
||||||
'FIELD COUNT ERR CNT='
|
|
||||||
WRK-COMMA-DISP
|
|
||||||
DELIMITED BY SIZE
|
|
||||||
INTO W02ERR-DETAIL
|
|
||||||
ELSE IF WRK-CSV-EMP-ID = SPACE
|
|
||||||
STRING
|
|
||||||
'EMP-ID EMPTY'
|
|
||||||
DELIMITED BY SIZE
|
|
||||||
INTO W02ERR-DETAIL
|
|
||||||
ELSE
|
|
||||||
STRING
|
|
||||||
'VALIDATION ERR EMP='
|
|
||||||
WRK-CSV-EMP-ID
|
|
||||||
' DATE='
|
|
||||||
WRK-CSV-DATE
|
|
||||||
' TI='
|
|
||||||
WRK-CSV-TIME-IN
|
|
||||||
' TO='
|
|
||||||
WRK-CSV-TIME-OUT
|
|
||||||
DELIMITED BY SIZE
|
|
||||||
INTO W02ERR-DETAIL
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
WRITE W02OUTREC.
|
|
||||||
ADD 1 TO CUN-W02OUT.
|
|
||||||
*
|
|
||||||
2090ERRORSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブモジュールNO:(3.0) *
|
|
||||||
* サブモジュール名: 終了処理 *
|
|
||||||
* 処理概要 : ファイルクローズ・件数と終了メッセージ出力 *
|
|
||||||
*****************************************************************
|
|
||||||
3000STPSOR SECTION.
|
|
||||||
*
|
|
||||||
*** 入出力ファイルCLOSE
|
|
||||||
CLOSE R01INNFIL
|
|
||||||
W01OUTFIL
|
|
||||||
W02OUTFIL.
|
|
||||||
*
|
|
||||||
*** 入出力ファイル件数出力
|
|
||||||
INITIALIZE M00MHOPAR.
|
|
||||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
|
||||||
MOVE 'KIN04R01' TO M00UMKDATS22-01.
|
|
||||||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
|
||||||
PERFORM 4000MSGOUTSOR.
|
|
||||||
*
|
|
||||||
INITIALIZE M00MHOPAR.
|
|
||||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
|
||||||
MOVE 'KIN04W01' TO M00UMKDATS22-01.
|
|
||||||
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
|
||||||
PERFORM 4000MSGOUTSOR.
|
|
||||||
*
|
|
||||||
INITIALIZE M00MHOPAR.
|
|
||||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
|
||||||
MOVE 'KIN04W02' 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.
|
|
||||||
@@ -1,449 +0,0 @@
|
|||||||
IDENTIFICATION DIVISION.
|
|
||||||
PROGRAM-ID. KIN06CLD.
|
|
||||||
*****************************************************************
|
|
||||||
* システム名 : 勤怠休暇管理システム *
|
|
||||||
* プログラムID : KIN06CLD *
|
|
||||||
* プログラム名 : 出勤日カレンダー生成処理 *
|
|
||||||
* 作成日 : 2026-06-20 *
|
|
||||||
* 処理概要 : PARM指定年月の出勤日カレンダーを生成。 *
|
|
||||||
* 在籍社員×当月全日をループし、休日判定 *
|
|
||||||
* (SEARCH ALL + 曜日)を行い出勤日のみ出力。 *
|
|
||||||
*****************************************************************
|
|
||||||
* 更新履歴 *
|
|
||||||
*---------------------------------------------------------------*
|
|
||||||
* 更新日付 担当者 更新内容 *
|
|
||||||
*---------------------------------------------------------------*
|
|
||||||
* 26-06-20 @@@ 新規作成 *
|
|
||||||
* 26-06-21 @@@ GnuCOBOL CONTINUE-in-ELSE-IF 回避 *
|
|
||||||
*****************************************************************
|
|
||||||
ENVIRONMENT DIVISION.
|
|
||||||
CONFIGURATION SECTION.
|
|
||||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
|
||||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
|
||||||
*
|
|
||||||
INPUT-OUTPUT SECTION.
|
|
||||||
FILE-CONTROL.
|
|
||||||
SELECT OUTRECFIL ASSIGN TO "data\KIN06W01.DAT"
|
|
||||||
FILE STATUS IS WS-OUT-STATUS.
|
|
||||||
*
|
|
||||||
DATA DIVISION.
|
|
||||||
FILE SECTION.
|
|
||||||
*
|
|
||||||
*****************************************************************
|
|
||||||
* ##OUTREC## WORK-DAY-FILE *
|
|
||||||
*****************************************************************
|
|
||||||
FD OUTRECFIL
|
|
||||||
LABEL RECORD IS STANDARD
|
|
||||||
BLOCK CONTAINS 0
|
|
||||||
RECORDING MODE IS F.
|
|
||||||
01 OUTREC.
|
|
||||||
COPY KIN06REC REPLACING ==(A)== BY ==OUT==.
|
|
||||||
*
|
|
||||||
WORKING-STORAGE SECTION.
|
|
||||||
*
|
|
||||||
*****************************************************************
|
|
||||||
* コンスタント領域 *
|
|
||||||
*****************************************************************
|
|
||||||
01 CNSARA.
|
|
||||||
03 CNS-PRGIDX PIC X(008) VALUE 'KIN06CLD'.
|
|
||||||
03 CNS-MSGSTR PIC 9(003) VALUE 001.
|
|
||||||
03 CNS-MSGFIN PIC 9(003) VALUE 002.
|
|
||||||
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 MONTH-DAYS.
|
|
||||||
03 FILLER PIC 9(002) VALUE 31.
|
|
||||||
03 FILLER PIC 9(002) VALUE 28.
|
|
||||||
03 FILLER PIC 9(002) VALUE 31.
|
|
||||||
03 FILLER PIC 9(002) VALUE 30.
|
|
||||||
03 FILLER PIC 9(002) VALUE 31.
|
|
||||||
03 FILLER PIC 9(002) VALUE 30.
|
|
||||||
03 FILLER PIC 9(002) VALUE 31.
|
|
||||||
03 FILLER PIC 9(002) VALUE 31.
|
|
||||||
03 FILLER PIC 9(002) VALUE 30.
|
|
||||||
03 FILLER PIC 9(002) VALUE 31.
|
|
||||||
03 FILLER PIC 9(002) VALUE 30.
|
|
||||||
03 FILLER PIC 9(002) VALUE 31.
|
|
||||||
01 MONTH-DAYS-R REDEFINES MONTH-DAYS.
|
|
||||||
03 MONTH-DAY PIC 9(002) OCCURS 12.
|
|
||||||
*
|
|
||||||
*****************************************************************
|
|
||||||
* 休日テーブル(SEARCH ALL用) *
|
|
||||||
*****************************************************************
|
|
||||||
01 HOLIDAY-TABLE.
|
|
||||||
03 HOLIDAY-ENTRIES OCCURS 50 TIMES
|
|
||||||
ASCENDING KEY IS HOLIDAY-DATE-ENT
|
|
||||||
INDEXED BY HOLIDAY-IDX.
|
|
||||||
05 HOLIDAY-DATE-ENT PIC X(008).
|
|
||||||
03 HOLIDAY-COUNT PIC 9(002).
|
|
||||||
*
|
|
||||||
*****************************************************************
|
|
||||||
* カウンタ領域 *
|
|
||||||
*****************************************************************
|
|
||||||
01 CUN-OUTREC PIC S9(009) COMP-3 VALUE ZERO.
|
|
||||||
*
|
|
||||||
*****************************************************************
|
|
||||||
* 作業領域 *
|
|
||||||
*****************************************************************
|
|
||||||
01 WRKARA.
|
|
||||||
*** ファイルステータス
|
|
||||||
03 WS-OUT-STATUS PIC X(002).
|
|
||||||
* PARM解析
|
|
||||||
03 WRK-CMDLINE PIC X(200).
|
|
||||||
03 WRK-PARM-POS PIC 9(004).
|
|
||||||
03 WRK-PARM-OK PIC X(001).
|
|
||||||
88 WRK-PARM-FOUND VALUE '1'.
|
|
||||||
03 WRK-PARM-CHECK PIC X(006).
|
|
||||||
03 WRK-YEARMONTH PIC 9(006).
|
|
||||||
03 WRK-YEAR PIC 9(004).
|
|
||||||
03 WRK-MONTH PIC 9(002).
|
|
||||||
03 WRK-LAST-DAY PIC 9(002).
|
|
||||||
* 日付ループ
|
|
||||||
03 WRK-DAY PIC 9(002).
|
|
||||||
03 WRK-DATE-INT PIC S9(009).
|
|
||||||
03 WRK-DOW PIC 9(001).
|
|
||||||
88 WRK-IS-SUNDAY VALUE 0.
|
|
||||||
88 WRK-IS-SATURDAY VALUE 6.
|
|
||||||
03 WRK-DATE-STR PIC 9(008).
|
|
||||||
03 WRK-DATE-STR-X PIC X(008).
|
|
||||||
* 社員CURSOR
|
|
||||||
03 WRK-EMP-EOF PIC X(001).
|
|
||||||
88 WRK-EMP-EOF-Y VALUE '1'.
|
|
||||||
* 休日判定
|
|
||||||
03 WRK-HOLIDAY-FOUND PIC X(001).
|
|
||||||
88 WRK-IS-HOLIDAY VALUE '1'.
|
|
||||||
*
|
|
||||||
*****************************************************************
|
|
||||||
* DBホスト変数 *
|
|
||||||
*****************************************************************
|
|
||||||
01 HV-EMP-ID PIC X(008).
|
|
||||||
01 HV-HOLIDAY-DATE PIC X(008).
|
|
||||||
*
|
|
||||||
*****************************************************************
|
|
||||||
* サブプログラム連絡領域 *
|
|
||||||
*****************************************************************
|
|
||||||
* メッセージ編集出力SR用
|
|
||||||
COPY ZANMSGAC.
|
|
||||||
* ABEND処理SR用
|
|
||||||
COPY ZANENDAC.
|
|
||||||
*
|
|
||||||
PROCEDURE DIVISION.
|
|
||||||
*****************************************************************
|
|
||||||
* サブモジュールNO: (0.0) *
|
|
||||||
* サブモジュール名: 制御処理 *
|
|
||||||
* 処理概要 : メインコントロール処理 *
|
|
||||||
*****************************************************************
|
|
||||||
0000MAJCOLSOR SECTION.
|
|
||||||
*
|
|
||||||
PERFORM 1000ITTSOR.
|
|
||||||
PERFORM 2000MAJSOR
|
|
||||||
UNTIL WRK-EMP-EOF-Y.
|
|
||||||
PERFORM 3000STPSOR.
|
|
||||||
*
|
|
||||||
0000MAJCOLSOR-EXT.
|
|
||||||
GOBACK.
|
|
||||||
*****************************************************************
|
|
||||||
* サブモジュールNO: (1.0) *
|
|
||||||
* サブモジュール名: 初期処理 *
|
|
||||||
* 処理概要 : 開始メッセージ出力・PARM解析・DB接続・ *
|
|
||||||
* 休日読込・社員CURSOR OPEN *
|
|
||||||
*****************************************************************
|
|
||||||
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
|
|
||||||
HOLIDAY-TABLE.
|
|
||||||
*
|
|
||||||
* PARM解析
|
|
||||||
PERFORM 1100PARMSOR.
|
|
||||||
*
|
|
||||||
* DB接続(bridge直接→EXEC SQLはWAで追加変数生成)
|
|
||||||
CALL 'br_open' USING 'data/kin.db'.
|
|
||||||
*
|
|
||||||
* 休日データ読込(bridge直接→EXEC SQL変換回避)
|
|
||||||
PERFORM 1200HOLIDAYSOR.
|
|
||||||
*
|
|
||||||
* 出力ファイルOPEN
|
|
||||||
OPEN OUTPUT OUTRECFIL.
|
|
||||||
*
|
|
||||||
* OPENチェック
|
|
||||||
IF WS-OUT-STATUS NOT = '00'
|
|
||||||
MOVE CNS-ABD999 TO E01ABDCOD
|
|
||||||
CALL 'SUB03END' USING E01ABDPAR
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
* 社員CURSOR OPEN
|
|
||||||
PERFORM 1300EMPOPNSOR.
|
|
||||||
*
|
|
||||||
1000ITTSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブモジュールNO:(1.1) *
|
|
||||||
* サブモジュール名: PARM解析 *
|
|
||||||
* 処理概要 : コマンドラインからYEARMONTH=を解析 *
|
|
||||||
*****************************************************************
|
|
||||||
1100PARMSOR SECTION.
|
|
||||||
*
|
|
||||||
INITIALIZE WRK-CMDLINE.
|
|
||||||
ACCEPT WRK-CMDLINE FROM COMMAND-LINE.
|
|
||||||
*
|
|
||||||
* YEARMONTH=を検索(PERFORM VARYINGでスキャン)
|
|
||||||
MOVE '0' TO WRK-PARM-OK.
|
|
||||||
MOVE 1 TO WRK-PARM-POS.
|
|
||||||
PERFORM UNTIL WRK-PARM-POS > 190
|
|
||||||
IF WRK-CMDLINE(WRK-PARM-POS:10) = 'YEARMONTH='
|
|
||||||
COMPUTE WRK-PARM-POS =
|
|
||||||
WRK-PARM-POS + 10
|
|
||||||
MOVE WRK-CMDLINE(WRK-PARM-POS:6)
|
|
||||||
TO WRK-PARM-CHECK
|
|
||||||
MOVE WRK-PARM-CHECK TO WRK-YEARMONTH
|
|
||||||
IF WRK-YEARMONTH NUMERIC
|
|
||||||
MOVE WRK-YEARMONTH
|
|
||||||
TO WRK-PARM-CHECK
|
|
||||||
IF WRK-CMDLINE(WRK-PARM-POS:6)
|
|
||||||
= WRK-PARM-CHECK
|
|
||||||
MOVE '1' TO WRK-PARM-OK
|
|
||||||
END-IF
|
|
||||||
END-IF
|
|
||||||
EXIT PERFORM
|
|
||||||
END-IF
|
|
||||||
ADD 1 TO WRK-PARM-POS
|
|
||||||
END-PERFORM.
|
|
||||||
*
|
|
||||||
* PARM必須チェック
|
|
||||||
IF NOT WRK-PARM-FOUND
|
|
||||||
MOVE CNS-ABD999 TO E01ABDCOD
|
|
||||||
CALL 'SUB03END' USING E01ABDPAR
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
* 年・月分解
|
|
||||||
MOVE WRK-YEARMONTH(1:4) TO WRK-YEAR.
|
|
||||||
MOVE WRK-YEARMONTH(5:2) TO WRK-MONTH.
|
|
||||||
*
|
|
||||||
* 月チェック(1-12)
|
|
||||||
IF WRK-MONTH < 1 OR WRK-MONTH > 12
|
|
||||||
MOVE CNS-ABD999 TO E01ABDCOD
|
|
||||||
CALL 'SUB03END' USING E01ABDPAR
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
* 月の日数計算(閏年対応)
|
|
||||||
MOVE MONTH-DAY(WRK-MONTH) TO WRK-LAST-DAY.
|
|
||||||
*
|
|
||||||
* 閏年判定(2月のみ)
|
|
||||||
IF WRK-MONTH = 02
|
|
||||||
IF (FUNCTION MOD(WRK-YEAR, 400) = 0)
|
|
||||||
OR (FUNCTION MOD(WRK-YEAR, 4) = 0
|
|
||||||
AND FUNCTION MOD(WRK-YEAR, 100) NOT = 0)
|
|
||||||
MOVE 29 TO WRK-LAST-DAY
|
|
||||||
END-IF
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
1100PARMSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブモジュールNO:(1.2) *
|
|
||||||
* サブモジュール名: 休日データ読込 *
|
|
||||||
* 処理概要 : HOLIDAY_CALENDARから全祝日をSELECT *
|
|
||||||
*****************************************************************
|
|
||||||
1200HOLIDAYSOR SECTION.
|
|
||||||
*
|
|
||||||
INITIALIZE HOLIDAY-TABLE.
|
|
||||||
*
|
|
||||||
* 休日SELECT(bridge直接)
|
|
||||||
>>SOURCE FORMAT IS FREE
|
|
||||||
STRING
|
|
||||||
'SELECT HOLIDAY_DATE FROM HOLIDAY_CALENDAR ORDER BY HOLIDAY_DATE'
|
|
||||||
X"00" INTO WS-SQL-STR
|
|
||||||
END-STRING
|
|
||||||
>>SOURCE FORMAT IS FIXED
|
|
||||||
*
|
|
||||||
CALL 'br_query' USING WS-SQL-STR, SQLCODE.
|
|
||||||
*
|
|
||||||
* 1行目を格納
|
|
||||||
IF SQLCODE = 0
|
|
||||||
IF HOLIDAY-COUNT < 50
|
|
||||||
ADD 1 TO HOLIDAY-COUNT
|
|
||||||
INITIALIZE HV-HOLIDAY-DATE
|
|
||||||
MOVE 0 TO WS-COL-IDX
|
|
||||||
MOVE 256 TO WS-COL-LEN
|
|
||||||
CALL 'br_get_col' USING
|
|
||||||
WS-COL-IDX, HV-HOLIDAY-DATE, WS-COL-LEN
|
|
||||||
MOVE HV-HOLIDAY-DATE TO
|
|
||||||
HOLIDAY-DATE-ENT(HOLIDAY-COUNT)
|
|
||||||
END-IF
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
* 続行をbr_fetch_next+br_get_colで読込
|
|
||||||
PERFORM UNTIL SQLCODE NOT = 0
|
|
||||||
CALL 'br_fetch_next' USING SQLCODE
|
|
||||||
IF SQLCODE = 0
|
|
||||||
IF HOLIDAY-COUNT < 50
|
|
||||||
ADD 1 TO HOLIDAY-COUNT
|
|
||||||
INITIALIZE HV-HOLIDAY-DATE
|
|
||||||
MOVE 0 TO WS-COL-IDX
|
|
||||||
MOVE 256 TO WS-COL-LEN
|
|
||||||
CALL 'br_get_col' USING
|
|
||||||
WS-COL-IDX, HV-HOLIDAY-DATE, WS-COL-LEN
|
|
||||||
MOVE HV-HOLIDAY-DATE TO
|
|
||||||
HOLIDAY-DATE-ENT(HOLIDAY-COUNT)
|
|
||||||
END-IF
|
|
||||||
END-IF
|
|
||||||
END-PERFORM.
|
|
||||||
*
|
|
||||||
1200HOLIDAYSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブモジュールNO:(1.3) *
|
|
||||||
* サブモジュール名: 社員CURSOR OPEN *
|
|
||||||
* 処理概要 : EMP_MASTERから在籍社員一覧を取得 *
|
|
||||||
*****************************************************************
|
|
||||||
1300EMPOPNSOR SECTION.
|
|
||||||
*
|
|
||||||
EXEC SQL
|
|
||||||
SELECT EMP_ID
|
|
||||||
FROM EMP_MASTER
|
|
||||||
WHERE STATUS = '1'
|
|
||||||
ORDER BY EMP_ID
|
|
||||||
INTO :HV-EMP-ID
|
|
||||||
END-EXEC.
|
|
||||||
*
|
|
||||||
IF SQLCODE NOT = 0
|
|
||||||
MOVE '1' TO WRK-EMP-EOF
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
1300EMPOPNSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブモジュールNO:(2.0) *
|
|
||||||
* サブモジュール名: 主処理(社員ループ) *
|
|
||||||
* 処理概要 : 各社員について当月1日〜月末日をループ *
|
|
||||||
*****************************************************************
|
|
||||||
2000MAJSOR SECTION.
|
|
||||||
*
|
|
||||||
* 当月1日〜月末日をループ
|
|
||||||
MOVE 1 TO WRK-DAY.
|
|
||||||
PERFORM UNTIL WRK-DAY > WRK-LAST-DAY
|
|
||||||
*
|
|
||||||
* 日付文字列構築(COMPUTE演算→参照変更バグ回避)
|
|
||||||
COMPUTE WRK-DATE-STR = WRK-YEAR * 10000
|
|
||||||
+ WRK-MONTH * 100 + WRK-DAY
|
|
||||||
MOVE WRK-DATE-STR TO WRK-DATE-STR-X
|
|
||||||
*
|
|
||||||
* 曜日計算
|
|
||||||
COMPUTE WRK-DATE-INT =
|
|
||||||
FUNCTION INTEGER-OF-DATE(WRK-DATE-STR)
|
|
||||||
COMPUTE WRK-DOW =
|
|
||||||
FUNCTION MOD(WRK-DATE-INT, 7)
|
|
||||||
*
|
|
||||||
* 休日判定(部分埋め→PERFORM VARYING)
|
|
||||||
MOVE '0' TO WRK-HOLIDAY-FOUND
|
|
||||||
PERFORM VARYING WS-COL-IDX FROM 1 BY 1
|
|
||||||
UNTIL WS-COL-IDX > HOLIDAY-COUNT
|
|
||||||
IF HOLIDAY-DATE-ENT(WS-COL-IDX) = WRK-DATE-STR-X
|
|
||||||
MOVE '1' TO WRK-HOLIDAY-FOUND
|
|
||||||
END-IF
|
|
||||||
END-PERFORM
|
|
||||||
*
|
|
||||||
* 出勤日のみ出力(単一IF+ORで記述→GnuCOBOL対策)
|
|
||||||
IF WRK-IS-HOLIDAY OR WRK-IS-SUNDAY
|
|
||||||
OR WRK-IS-SATURDAY
|
|
||||||
CONTINUE
|
|
||||||
ELSE
|
|
||||||
INITIALIZE OUTREC
|
|
||||||
MOVE HV-EMP-ID TO OUTEMP-ID
|
|
||||||
MOVE WRK-DATE-STR TO OUTDATE
|
|
||||||
* MOD(7):0=日…6=土 → 1=月…7=日に変換
|
|
||||||
IF WRK-DOW = 0
|
|
||||||
MOVE 7 TO OUTDAY-OF-WEEK
|
|
||||||
ELSE
|
|
||||||
MOVE WRK-DOW TO OUTDAY-OF-WEEK
|
|
||||||
END-IF
|
|
||||||
WRITE OUTREC
|
|
||||||
ADD 1 TO CUN-OUTREC
|
|
||||||
END-IF
|
|
||||||
*
|
|
||||||
ADD 1 TO WRK-DAY
|
|
||||||
END-PERFORM.
|
|
||||||
*
|
|
||||||
* 次の社員をFETCH(br_fetch_next+br_get_col)
|
|
||||||
CALL 'br_fetch_next' USING SQLCODE.
|
|
||||||
*
|
|
||||||
IF SQLCODE = 0
|
|
||||||
INITIALIZE HV-EMP-ID
|
|
||||||
MOVE 0 TO WS-COL-IDX
|
|
||||||
MOVE 256 TO WS-COL-LEN
|
|
||||||
CALL 'br_get_col' USING
|
|
||||||
WS-COL-IDX, HV-EMP-ID, WS-COL-LEN
|
|
||||||
ELSE
|
|
||||||
MOVE '1' TO WRK-EMP-EOF
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
2000MAJSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブモジュールNO:(3.0) *
|
|
||||||
* サブモジュール名: 終了処理 *
|
|
||||||
* 処理概要 : ファイルCLOSE・件数出力 *
|
|
||||||
*****************************************************************
|
|
||||||
3000STPSOR SECTION.
|
|
||||||
*
|
|
||||||
* 出力ファイルCLOSE
|
|
||||||
CLOSE OUTRECFIL.
|
|
||||||
*
|
|
||||||
* 出力件数メッセージ
|
|
||||||
INITIALIZE M00MHOPAR.
|
|
||||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
|
||||||
MOVE 'KIN06W01' TO M00UMKDATS22-01.
|
|
||||||
MOVE CUN-OUTREC 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処理 *
|
|
||||||
* 処理概要 : 異常終了処理 *
|
|
||||||
*****************************************************************
|
|
||||||
9999ABDSOR SECTION.
|
|
||||||
*
|
|
||||||
MOVE CNS-ABD999 TO E01ABDCOD.
|
|
||||||
CALL 'SUB03END' USING E01ABDPAR.
|
|
||||||
*
|
|
||||||
9999ABDSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
@@ -1,635 +0,0 @@
|
|||||||
IDENTIFICATION DIVISION.
|
|
||||||
PROGRAM-ID. KIN07DAI.
|
|
||||||
*****************************************************************
|
|
||||||
* システム名 : 勤怠休暇管理システム *
|
|
||||||
* プログラムID : KIN07DAI *
|
|
||||||
* プログラム名 : 日別勤怠計算処理 *
|
|
||||||
* 作成日 : 2026-06-23 *
|
|
||||||
* 処理概要 : WORK-DAY-FILE(R01)を主駆動にKIN-LEAVE(R02) *
|
|
||||||
* とLEAVE-DAILY(R03)を社員番号+日付キーで *
|
|
||||||
* 照合し、4パターン(EVALUATE)で *
|
|
||||||
* 日別勤怠記録(DAILY-RECORD)を出力する。 *
|
|
||||||
* 休暇時間はランチ除外+0.1h切上丸め。 *
|
|
||||||
* MULTIPLY/SUBTRACTで時間計算。 *
|
|
||||||
*****************************************************************
|
|
||||||
* 更新履歴 *
|
|
||||||
*---------------------------------------------------------------*
|
|
||||||
* 更新日付 担当者 更新内容 *
|
|
||||||
*---------------------------------------------------------------*
|
|
||||||
* 26-06-23 @@@ 新規作成 *
|
|
||||||
* *
|
|
||||||
*****************************************************************
|
|
||||||
ENVIRONMENT DIVISION.
|
|
||||||
CONFIGURATION SECTION.
|
|
||||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
|
||||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
|
||||||
*
|
|
||||||
INPUT-OUTPUT SECTION.
|
|
||||||
FILE-CONTROL.
|
|
||||||
SELECT R01INNFIL ASSIGN TO KIN07R01
|
|
||||||
FILE STATUS IS WS-R01-STATUS.
|
|
||||||
SELECT R02INNFIL ASSIGN TO KIN07R02
|
|
||||||
FILE STATUS IS WS-R02-STATUS.
|
|
||||||
SELECT R03INNFIL ASSIGN TO KIN07R03
|
|
||||||
FILE STATUS IS WS-R03-STATUS.
|
|
||||||
SELECT W01OUTFIL ASSIGN TO KIN07W01
|
|
||||||
FILE STATUS IS WS-W01-STATUS.
|
|
||||||
*
|
|
||||||
DATA DIVISION.
|
|
||||||
FILE SECTION.
|
|
||||||
*
|
|
||||||
*****************************************************************
|
|
||||||
* ##R01## WORK-DAY-FILE *
|
|
||||||
*****************************************************************
|
|
||||||
FD R01INNFIL
|
|
||||||
LABEL RECORD IS STANDARD
|
|
||||||
BLOCK CONTAINS 0
|
|
||||||
RECORDING MODE IS F.
|
|
||||||
01 R01INNREC.
|
|
||||||
COPY KIN06REC REPLACING ==(A)== BY ==SW==.
|
|
||||||
*
|
|
||||||
*****************************************************************
|
|
||||||
* ##R02## KIN-LEAVE *
|
|
||||||
*****************************************************************
|
|
||||||
FD R02INNFIL
|
|
||||||
LABEL RECORD IS STANDARD
|
|
||||||
BLOCK CONTAINS 0
|
|
||||||
RECORDING MODE IS F.
|
|
||||||
01 R02INNREC.
|
|
||||||
COPY KIN03REC REPLACING ==(A)== BY ==SR==.
|
|
||||||
*
|
|
||||||
*****************************************************************
|
|
||||||
* ##R03## LEAVE-DAILY *
|
|
||||||
*****************************************************************
|
|
||||||
FD R03INNFIL
|
|
||||||
LABEL RECORD IS STANDARD
|
|
||||||
BLOCK CONTAINS 0
|
|
||||||
RECORDING MODE IS F.
|
|
||||||
01 R03INNREC.
|
|
||||||
COPY KIN02REC REPLACING ==(A)== BY ==SL==.
|
|
||||||
*
|
|
||||||
*****************************************************************
|
|
||||||
* ##W01## DAILY-RECORD *
|
|
||||||
*****************************************************************
|
|
||||||
FD W01OUTFIL
|
|
||||||
LABEL RECORD IS STANDARD
|
|
||||||
BLOCK CONTAINS 0
|
|
||||||
RECORDING MODE IS F.
|
|
||||||
01 W01OUTREC.
|
|
||||||
COPY KIN07REC REPLACING ==(A)== BY ==SD==.
|
|
||||||
*
|
|
||||||
*****************************************************************
|
|
||||||
WORKING-STORAGE SECTION.
|
|
||||||
*
|
|
||||||
*****************************************************************
|
|
||||||
* コンスタント領域 *
|
|
||||||
*****************************************************************
|
|
||||||
01 CNSARA.
|
|
||||||
03 CNS-PRGIDX PIC X(008) VALUE 'KIN07DAI'.
|
|
||||||
03 CNS-MSGSTR PIC 9(003) VALUE 001.
|
|
||||||
03 CNS-MSGFIN PIC 9(003) VALUE 002.
|
|
||||||
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-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'.
|
|
||||||
*** 時刻定数
|
|
||||||
03 CNS-TIME-ZERO PIC 9(004) VALUE 0000.
|
|
||||||
*** 時間定数(分)
|
|
||||||
03 CNS-LUNCH-START-MIN PIC 9(004) VALUE 0720.
|
|
||||||
03 CNS-LUNCH-END-MIN PIC 9(004) VALUE 0780.
|
|
||||||
03 CNS-DAILY-HOURS PIC 9(004)V9(001) VALUE 8.0.
|
|
||||||
03 CNS-MINUTES-PER-HOUR PIC 9(003) VALUE 060.
|
|
||||||
03 CNS-RND-MODE-UP PIC 9(004) VALUE 1.
|
|
||||||
*
|
|
||||||
*****************************************************************
|
|
||||||
* カウンタ領域 *
|
|
||||||
*****************************************************************
|
|
||||||
01 CUNARA.
|
|
||||||
03 CUN-R01INN PIC S9(009) COMP-3
|
|
||||||
VALUE ZERO.
|
|
||||||
03 CUN-R02INN PIC S9(009) COMP-3
|
|
||||||
VALUE ZERO.
|
|
||||||
03 CUN-R03INN PIC S9(009) COMP-3
|
|
||||||
VALUE ZERO.
|
|
||||||
03 CUN-W01OUT PIC S9(009) COMP-3
|
|
||||||
VALUE ZERO.
|
|
||||||
*
|
|
||||||
*****************************************************************
|
|
||||||
* 作業領域 *
|
|
||||||
*****************************************************************
|
|
||||||
01 WRKARA.
|
|
||||||
*** ファイルステータス
|
|
||||||
03 WS-R01-STATUS PIC X(002).
|
|
||||||
03 WS-R02-STATUS PIC X(002).
|
|
||||||
03 WS-R03-STATUS PIC X(002).
|
|
||||||
03 WS-W01-STATUS PIC X(002).
|
|
||||||
*** 読込フラグ
|
|
||||||
03 WRK-R01EOF PIC X(001).
|
|
||||||
88 WRK-R01-EOF VALUE '1'.
|
|
||||||
03 WRK-R02EOF PIC X(001).
|
|
||||||
88 WRK-R02-EOF VALUE '1'.
|
|
||||||
03 WRK-R03EOF PIC X(001).
|
|
||||||
88 WRK-R03-EOF VALUE '1'.
|
|
||||||
*** マッチングキー領域
|
|
||||||
03 WRK-R01KEY.
|
|
||||||
05 WRK-R01K-EMP-ID PIC X(008).
|
|
||||||
05 WRK-R01K-DATE PIC 9(008).
|
|
||||||
03 WRK-R02KEY.
|
|
||||||
05 WRK-R02K-EMP-ID PIC X(008).
|
|
||||||
05 WRK-R02K-DATE PIC 9(008).
|
|
||||||
03 WRK-R03KEY.
|
|
||||||
05 WRK-R03K-EMP-ID PIC X(008).
|
|
||||||
05 WRK-R03K-DATE PIC 9(008).
|
|
||||||
*** パターン番号
|
|
||||||
03 PATTERN-NUM PIC 9(001).
|
|
||||||
88 PATTERN-A VALUE 1.
|
|
||||||
88 PATTERN-B VALUE 2.
|
|
||||||
88 PATTERN-C VALUE 3.
|
|
||||||
88 PATTERN-D VALUE 4.
|
|
||||||
*** 出力編集領域
|
|
||||||
03 WRK-TIME-IN PIC 9(004).
|
|
||||||
03 WRK-TIME-OUT PIC 9(004).
|
|
||||||
03 WRK-ABSENT-H PIC 9(004)V9(001).
|
|
||||||
*** 休暇時間積算領域
|
|
||||||
03 WRK-ANNUAL-H PIC 9(004)V9(001).
|
|
||||||
03 WRK-PERSONAL-H PIC 9(004)V9(001).
|
|
||||||
03 WRK-OFFICIAL-H PIC 9(004)V9(001).
|
|
||||||
03 WRK-SICK-H PIC 9(004)V9(001).
|
|
||||||
*** 時間計算領域(MULTIPLY/SUBTRACT使用)
|
|
||||||
03 WRK-START-HOUR PIC 9(002).
|
|
||||||
03 WRK-START-MIN PIC 9(002).
|
|
||||||
03 WRK-END-HOUR PIC 9(002).
|
|
||||||
03 WRK-END-MIN PIC 9(002).
|
|
||||||
03 WRK-START-MIN-TOTAL PIC 9(004).
|
|
||||||
03 WRK-END-MIN-TOTAL PIC 9(004).
|
|
||||||
03 WRK-TOTAL-MIN PIC 9(004).
|
|
||||||
03 WRK-LUNCH-OVERLAP PIC 9(004).
|
|
||||||
03 WRK-LEAVE-HOURS PIC 9(004)V9(001).
|
|
||||||
*
|
|
||||||
*****************************************************************
|
|
||||||
* サブプログラム連絡領域 *
|
|
||||||
*****************************************************************
|
|
||||||
*** メッセージ編集出力SR用
|
|
||||||
COPY ZANMSGAC.
|
|
||||||
*** ABEND処理SR用
|
|
||||||
COPY ZANENDAC.
|
|
||||||
*** 時刻丸め計算SR用
|
|
||||||
COPY ZANTIMAC.
|
|
||||||
*
|
|
||||||
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.
|
|
||||||
*
|
|
||||||
*** 入出力ファイルOPEN
|
|
||||||
OPEN INPUT R01INNFIL
|
|
||||||
R02INNFIL
|
|
||||||
R03INNFIL
|
|
||||||
OUTPUT W01OUTFIL.
|
|
||||||
*
|
|
||||||
*** OPENチェック
|
|
||||||
IF WS-R01-STATUS NOT = '00'
|
|
||||||
MOVE CNS-ABD999 TO E01ABDCOD
|
|
||||||
CALL 'SUB03END' USING E01ABDPAR
|
|
||||||
END-IF.
|
|
||||||
IF WS-R02-STATUS NOT = '00'
|
|
||||||
MOVE CNS-ABD999 TO E01ABDCOD
|
|
||||||
CALL 'SUB03END' USING E01ABDPAR
|
|
||||||
END-IF.
|
|
||||||
IF WS-R03-STATUS NOT = '00'
|
|
||||||
MOVE CNS-ABD999 TO E01ABDCOD
|
|
||||||
CALL 'SUB03END' USING E01ABDPAR
|
|
||||||
END-IF.
|
|
||||||
IF WS-W01-STATUS NOT = '00'
|
|
||||||
MOVE CNS-ABD999 TO E01ABDCOD
|
|
||||||
CALL 'SUB03END' USING E01ABDPAR
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
*** R01/R02/R03初回読込
|
|
||||||
PERFORM 1100R01INNSOR.
|
|
||||||
PERFORM 1200R02INNSOR.
|
|
||||||
PERFORM 1300R03INNSOR.
|
|
||||||
*
|
|
||||||
1000ITTSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブモジュールNO:(1.1) *
|
|
||||||
* サブモジュール名:R01読込処理 *
|
|
||||||
* 処理概要 : WORK-DAY-FILE読込・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:(1.2) *
|
|
||||||
* サブモジュール名:R02読込処理 *
|
|
||||||
* 処理概要 : KIN-LEAVE読込・EOF判定 *
|
|
||||||
*****************************************************************
|
|
||||||
1200R02INNSOR SECTION.
|
|
||||||
*
|
|
||||||
READ R02INNFIL
|
|
||||||
AT END
|
|
||||||
MOVE '1' TO WRK-R02EOF
|
|
||||||
NOT AT END
|
|
||||||
ADD 1 TO CUN-R02INN
|
|
||||||
END-READ.
|
|
||||||
*
|
|
||||||
1200R02INNSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブモジュールNO:(1.3) *
|
|
||||||
* サブモジュール名:R03読込処理 *
|
|
||||||
* 処理概要 : LEAVE-DAILY読込・EOF判定 *
|
|
||||||
*****************************************************************
|
|
||||||
1300R03INNSOR SECTION.
|
|
||||||
*
|
|
||||||
READ R03INNFIL
|
|
||||||
AT END
|
|
||||||
MOVE '1' TO WRK-R03EOF
|
|
||||||
NOT AT END
|
|
||||||
ADD 1 TO CUN-R03INN
|
|
||||||
END-READ.
|
|
||||||
*
|
|
||||||
1300R03INNSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブプログラムNO:(2.0) *
|
|
||||||
* サブプログラム名:主処理 *
|
|
||||||
* 処理概要 : R01駆動でR02/R03照合、4パターン分岐 *
|
|
||||||
*****************************************************************
|
|
||||||
2000MAJSOR SECTION.
|
|
||||||
*
|
|
||||||
*** R01キー設定
|
|
||||||
MOVE SWEMP-ID TO WRK-R01K-EMP-ID.
|
|
||||||
MOVE SWDATE TO WRK-R01K-DATE.
|
|
||||||
*
|
|
||||||
*** パターン・積算領域初期化
|
|
||||||
MOVE 4 TO PATTERN-NUM.
|
|
||||||
MOVE ZERO TO WRK-TIME-IN
|
|
||||||
WRK-TIME-OUT
|
|
||||||
WRK-ANNUAL-H
|
|
||||||
WRK-PERSONAL-H
|
|
||||||
WRK-OFFICIAL-H
|
|
||||||
WRK-SICK-H
|
|
||||||
WRK-ABSENT-H.
|
|
||||||
*
|
|
||||||
*** R02: 追越レコードをスキップ
|
|
||||||
PERFORM UNTIL WRK-R02-EOF
|
|
||||||
MOVE SREMP-ID TO WRK-R02K-EMP-ID
|
|
||||||
MOVE SRWORK-DATE TO WRK-R02K-DATE
|
|
||||||
IF WRK-R02KEY >= WRK-R01KEY
|
|
||||||
EXIT PERFORM
|
|
||||||
END-IF
|
|
||||||
PERFORM 1200R02INNSOR
|
|
||||||
END-PERFORM.
|
|
||||||
*
|
|
||||||
*** R02マッチ判定
|
|
||||||
IF NOT WRK-R02-EOF
|
|
||||||
AND WRK-R01KEY = WRK-R02KEY
|
|
||||||
MOVE SRSTR-TIME TO WRK-TIME-IN
|
|
||||||
MOVE SREND-TIME TO WRK-TIME-OUT
|
|
||||||
MOVE 2 TO PATTERN-NUM
|
|
||||||
PERFORM 1200R02INNSOR
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
*** R03: 追越レコードをスキップ
|
|
||||||
PERFORM UNTIL WRK-R03-EOF
|
|
||||||
MOVE SLEMP-ID TO WRK-R03K-EMP-ID
|
|
||||||
MOVE SLDATE TO WRK-R03K-DATE
|
|
||||||
IF WRK-R03KEY >= WRK-R01KEY
|
|
||||||
EXIT PERFORM
|
|
||||||
END-IF
|
|
||||||
PERFORM 1300R03INNSOR
|
|
||||||
END-PERFORM.
|
|
||||||
*
|
|
||||||
*** R03マッチループ(0〜N件の全休暇を処理)
|
|
||||||
IF NOT WRK-R03-EOF
|
|
||||||
AND WRK-R01KEY = WRK-R03KEY
|
|
||||||
PERFORM UNTIL WRK-R03-EOF
|
|
||||||
OR WRK-R01KEY NOT = WRK-R03KEY
|
|
||||||
PERFORM 5000CALCLVSOR
|
|
||||||
EVALUATE SLLEAVE-TYPE
|
|
||||||
WHEN CNS-LEAVE-01
|
|
||||||
ADD WRK-LEAVE-HOURS TO WRK-ANNUAL-H
|
|
||||||
WHEN CNS-LEAVE-02
|
|
||||||
ADD WRK-LEAVE-HOURS TO WRK-PERSONAL-H
|
|
||||||
WHEN CNS-LEAVE-03
|
|
||||||
ADD WRK-LEAVE-HOURS TO WRK-OFFICIAL-H
|
|
||||||
WHEN CNS-LEAVE-04
|
|
||||||
ADD WRK-LEAVE-HOURS TO WRK-SICK-H
|
|
||||||
WHEN OTHER
|
|
||||||
CONTINUE
|
|
||||||
END-EVALUATE
|
|
||||||
PERFORM 1300R03INNSOR
|
|
||||||
IF NOT WRK-R03-EOF
|
|
||||||
MOVE SLEMP-ID TO WRK-R03K-EMP-ID
|
|
||||||
MOVE SLDATE TO WRK-R03K-DATE
|
|
||||||
END-IF
|
|
||||||
END-PERFORM
|
|
||||||
IF PATTERN-NUM = 2
|
|
||||||
MOVE 1 TO PATTERN-NUM
|
|
||||||
ELSE
|
|
||||||
MOVE 3 TO PATTERN-NUM
|
|
||||||
END-IF
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
*** EVALUATE 4パターン分岐
|
|
||||||
EVALUATE TRUE
|
|
||||||
WHEN PATTERN-A
|
|
||||||
PERFORM 6100PATTERNASOR
|
|
||||||
WHEN PATTERN-B
|
|
||||||
PERFORM 6200PATTERNSOR
|
|
||||||
WHEN PATTERN-C
|
|
||||||
PERFORM 6300PATTERNSOR
|
|
||||||
WHEN PATTERN-D
|
|
||||||
PERFORM 6400PATTERNSOR
|
|
||||||
END-EVALUATE.
|
|
||||||
*
|
|
||||||
2000MAJSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブプログラムNO:(5.0) *
|
|
||||||
* サブプログラム名:休暇時間計算 *
|
|
||||||
* 処理概要 : R03レコードの開始/終了時刻から *
|
|
||||||
* ランチ除外+MULTIPLY/SUBTRACT計算し、 *
|
|
||||||
* SUB05TIM(0.1h切上)で丸める *
|
|
||||||
*****************************************************************
|
|
||||||
5000CALCLVSOR SECTION.
|
|
||||||
*
|
|
||||||
*** 開始時刻を時と分に分解
|
|
||||||
DIVIDE SLSTART-TIME BY 100
|
|
||||||
GIVING WRK-START-HOUR
|
|
||||||
REMAINDER WRK-START-MIN.
|
|
||||||
*** 終了時刻を時と分に分解
|
|
||||||
DIVIDE SLEND-TIME BY 100
|
|
||||||
GIVING WRK-END-HOUR
|
|
||||||
REMAINDER WRK-END-MIN.
|
|
||||||
*
|
|
||||||
*** MULTIPLY: 時→分変換
|
|
||||||
MULTIPLY WRK-START-HOUR BY CNS-MINUTES-PER-HOUR
|
|
||||||
GIVING WRK-START-MIN-TOTAL.
|
|
||||||
ADD WRK-START-MIN TO WRK-START-MIN-TOTAL.
|
|
||||||
*
|
|
||||||
MULTIPLY WRK-END-HOUR BY CNS-MINUTES-PER-HOUR
|
|
||||||
GIVING WRK-END-MIN-TOTAL.
|
|
||||||
ADD WRK-END-MIN TO WRK-END-MIN-TOTAL.
|
|
||||||
*
|
|
||||||
*** 総分数算出
|
|
||||||
COMPUTE WRK-TOTAL-MIN =
|
|
||||||
WRK-END-MIN-TOTAL - WRK-START-MIN-TOTAL.
|
|
||||||
*
|
|
||||||
*** ランチ除外判定 (12:00-13:00 = 720-780分)
|
|
||||||
MOVE ZERO TO WRK-LUNCH-OVERLAP.
|
|
||||||
IF WRK-END-MIN-TOTAL > CNS-LUNCH-START-MIN
|
|
||||||
AND WRK-START-MIN-TOTAL < CNS-LUNCH-END-MIN
|
|
||||||
COMPUTE WRK-LUNCH-OVERLAP =
|
|
||||||
FUNCTION MIN(WRK-END-MIN-TOTAL,
|
|
||||||
CNS-LUNCH-END-MIN)
|
|
||||||
- FUNCTION MAX(WRK-START-MIN-TOTAL,
|
|
||||||
CNS-LUNCH-START-MIN)
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
*** SUBTRACT: ランチ時間除外
|
|
||||||
SUBTRACT WRK-LUNCH-OVERLAP
|
|
||||||
FROM WRK-TOTAL-MIN.
|
|
||||||
*
|
|
||||||
*** 時間(小数)に変換
|
|
||||||
COMPUTE WRK-LEAVE-HOURS = WRK-TOTAL-MIN
|
|
||||||
/ CNS-MINUTES-PER-HOUR.
|
|
||||||
*
|
|
||||||
*** SUB05TIM呼出(0.1h切上)
|
|
||||||
MOVE WRK-LEAVE-HOURS TO T01TIMHRS.
|
|
||||||
MOVE CNS-RND-MODE-UP TO T01TIMRRC.
|
|
||||||
CALL 'SUB05TIM' USING T01TIMPAR.
|
|
||||||
*
|
|
||||||
*** 丸め結果を退避
|
|
||||||
MOVE T01TIMOUT TO WRK-LEAVE-HOURS.
|
|
||||||
*
|
|
||||||
5000CALCLVSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブモジュールNO:(6.1) *
|
|
||||||
* サブモジュール名:パターンA(打刻+休暇)出力 *
|
|
||||||
* 処理概要 : 打刻情報+R03休暇時間を出力 *
|
|
||||||
*****************************************************************
|
|
||||||
6100PATTERNASOR SECTION.
|
|
||||||
*
|
|
||||||
PERFORM 7000W01OUTSOR.
|
|
||||||
*
|
|
||||||
*** 次R01読込(R02/R03は処理済み)
|
|
||||||
PERFORM 1100R01INNSOR.
|
|
||||||
*
|
|
||||||
6100PATTERNASOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブプログラムNO:(6.2) *
|
|
||||||
* サブプログラム名:パターンB(打刻のみ)出力 *
|
|
||||||
* 処理概要 : 打刻情報のみ出力(休暇=0) *
|
|
||||||
*****************************************************************
|
|
||||||
6200PATTERNSOR SECTION.
|
|
||||||
*
|
|
||||||
*** 休暇/欠勤はゼロのまま
|
|
||||||
PERFORM 7000W01OUTSOR.
|
|
||||||
*
|
|
||||||
*** 次R01/R02読込
|
|
||||||
PERFORM 1100R01INNSOR.
|
|
||||||
*
|
|
||||||
6200PATTERNSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブプログラムNO:(6.3) *
|
|
||||||
* サブプログラム名:パターンC(休暇のみ)出力 *
|
|
||||||
* 処理概要 : 打刻なし、R03休暇時間を出力(8h上限) *
|
|
||||||
*****************************************************************
|
|
||||||
6300PATTERNSOR SECTION.
|
|
||||||
*
|
|
||||||
*** 打刻なし
|
|
||||||
MOVE CNS-TIME-ZERO TO WRK-TIME-IN
|
|
||||||
WRK-TIME-OUT.
|
|
||||||
*
|
|
||||||
*** 休暇時間上限チェック(所定労働時間8h)
|
|
||||||
IF WRK-ANNUAL-H > CNS-DAILY-HOURS
|
|
||||||
MOVE CNS-DAILY-HOURS TO WRK-ANNUAL-H
|
|
||||||
END-IF.
|
|
||||||
IF WRK-PERSONAL-H > CNS-DAILY-HOURS
|
|
||||||
MOVE CNS-DAILY-HOURS TO WRK-PERSONAL-H
|
|
||||||
END-IF.
|
|
||||||
IF WRK-OFFICIAL-H > CNS-DAILY-HOURS
|
|
||||||
MOVE CNS-DAILY-HOURS TO WRK-OFFICIAL-H
|
|
||||||
END-IF.
|
|
||||||
IF WRK-SICK-H > CNS-DAILY-HOURS
|
|
||||||
MOVE CNS-DAILY-HOURS TO WRK-SICK-H
|
|
||||||
END-IF.
|
|
||||||
*
|
|
||||||
PERFORM 7000W01OUTSOR.
|
|
||||||
*
|
|
||||||
*** 次R01/R03読込
|
|
||||||
PERFORM 1100R01INNSOR.
|
|
||||||
*
|
|
||||||
6300PATTERNSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブプログラムNO:(6.4) *
|
|
||||||
* サブプログラム名:パターンD(欠勤)出力 *
|
|
||||||
* 処理概要 : 打刻なし、休暇なし、未申請欠勤=8.0h *
|
|
||||||
*****************************************************************
|
|
||||||
6400PATTERNSOR SECTION.
|
|
||||||
*
|
|
||||||
*** 打刻なし
|
|
||||||
MOVE CNS-TIME-ZERO TO WRK-TIME-IN
|
|
||||||
WRK-TIME-OUT.
|
|
||||||
*** 未申請欠勤=8.0h
|
|
||||||
MOVE CNS-DAILY-HOURS TO WRK-ABSENT-H.
|
|
||||||
*
|
|
||||||
PERFORM 7000W01OUTSOR.
|
|
||||||
*
|
|
||||||
*** 次R01読込(R02/R03は次R01次第)
|
|
||||||
PERFORM 1100R01INNSOR.
|
|
||||||
*
|
|
||||||
6400PATTERNSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブモジュールNO:(7.0) *
|
|
||||||
* サブモジュール名:DAILY-RECORD出力 *
|
|
||||||
* 処理概要 : W01(DAILY-RECORD)に編集出力 *
|
|
||||||
*****************************************************************
|
|
||||||
7000W01OUTSOR SECTION.
|
|
||||||
*
|
|
||||||
MOVE SWEMP-ID TO SDEMP-ID.
|
|
||||||
MOVE SWDATE TO SDDATE.
|
|
||||||
MOVE WRK-TIME-IN TO SDTIME-IN.
|
|
||||||
MOVE WRK-TIME-OUT TO SDTIME-OUT.
|
|
||||||
MOVE WRK-ANNUAL-H TO SDANNUAL-H.
|
|
||||||
MOVE WRK-PERSONAL-H TO SDPERSONAL-H.
|
|
||||||
MOVE WRK-OFFICIAL-H TO SDOFFICIAL-H.
|
|
||||||
MOVE WRK-SICK-H TO SDSICK-H.
|
|
||||||
MOVE WRK-ABSENT-H TO SDABSENT-H.
|
|
||||||
*
|
|
||||||
WRITE W01OUTREC.
|
|
||||||
ADD 1 TO CUN-W01OUT.
|
|
||||||
*
|
|
||||||
7000W01OUTSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
*****************************************************************
|
|
||||||
* サブモジュールNO:(3.0) *
|
|
||||||
* サブモジュール名:終了処理 *
|
|
||||||
* 処理概要 : ファイルクローズ・件数と終了メッセージ出力 *
|
|
||||||
*****************************************************************
|
|
||||||
3000STPSOR SECTION.
|
|
||||||
*
|
|
||||||
*** 入出力ファイルCLOSE
|
|
||||||
CLOSE R01INNFIL
|
|
||||||
R02INNFIL
|
|
||||||
R03INNFIL
|
|
||||||
W01OUTFIL.
|
|
||||||
*
|
|
||||||
*** 入出力ファイル件数出力
|
|
||||||
INITIALIZE M00MHOPAR.
|
|
||||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
|
||||||
MOVE 'KIN07R01' TO M00UMKDATS22-01.
|
|
||||||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
|
||||||
PERFORM 4000MSGOUTSOR.
|
|
||||||
*
|
|
||||||
INITIALIZE M00MHOPAR.
|
|
||||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
|
||||||
MOVE 'KIN07R02' TO M00UMKDATS22-01.
|
|
||||||
MOVE CUN-R02INN TO M00UMKDATS22-02.
|
|
||||||
PERFORM 4000MSGOUTSOR.
|
|
||||||
*
|
|
||||||
INITIALIZE M00MHOPAR.
|
|
||||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
|
||||||
MOVE 'KIN07R03' TO M00UMKDATS22-01.
|
|
||||||
MOVE CUN-R03INN TO M00UMKDATS22-02.
|
|
||||||
PERFORM 4000MSGOUTSOR.
|
|
||||||
*
|
|
||||||
INITIALIZE M00MHOPAR.
|
|
||||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
|
||||||
MOVE 'KIN07W01' 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.9) *
|
|
||||||
* サブプログラム名:ABEND処理 *
|
|
||||||
* 処理概要 : ABENDサブPGM呼出 *
|
|
||||||
*****************************************************************
|
|
||||||
9999ABDSOR SECTION.
|
|
||||||
*
|
|
||||||
MOVE CNS-ABD999 TO E01ABDCOD.
|
|
||||||
CALL 'SUB03END' USING E01ABDPAR.
|
|
||||||
*
|
|
||||||
9999ABDSOR-EXT.
|
|
||||||
EXIT.
|
|
||||||
Reference in New Issue
Block a user