Initial import: 子系统B 前三本程序 production 资源
This commit is contained in:
@@ -0,0 +1,483 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. ZAN01CHK.
|
||||
*****************************************************************
|
||||
* システム名 : 残業統計管理システム *
|
||||
* プログラムID : ZAN01CHK *
|
||||
* プログラム名 : 残業申請振分処理 *
|
||||
* 作成日 : 2026-06-14 *
|
||||
* 処理概要 : CSV形式の残業申請ファイルを読み込み、 *
|
||||
* ステータスによって適切に振り分ける。 *
|
||||
* *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 26-06-14 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R01INNFIL ASSIGN TO ZAN01R01.
|
||||
SELECT W01OUTFIL ASSIGN TO ZAN01W01.
|
||||
SELECT W02OUTFIL ASSIGN TO ZAN01W02.
|
||||
SELECT W03OUTFIL ASSIGN TO ZAN01W03.
|
||||
*
|
||||
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 ZAN01REC REPLACING ==(A)== BY ==W01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* ##W02## *
|
||||
*****************************************************************
|
||||
FD W02OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 W02OUTREC.
|
||||
COPY ZAN01REC REPLACING ==(A)== BY ==W02==.
|
||||
*
|
||||
*****************************************************************
|
||||
* ##W03## *
|
||||
*****************************************************************
|
||||
FD W03OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS V.
|
||||
01 W03OUTREC.
|
||||
COPY ZAN05REC REPLACING ==(A)== BY ==W03==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'ZAN01CHK'.
|
||||
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 CNS-STAT-0 PIC X(001) VALUE '0'.
|
||||
01 CNS-STAT-1 PIC X(001) VALUE '1'.
|
||||
01 CNS-STAT-9 PIC X(001) VALUE '9'.
|
||||
01 CNS-TIME-1830 PIC 9(004) VALUE 1830.
|
||||
01 CNS-DIFF-30 PIC 9(004) VALUE 30.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
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.
|
||||
03 CUN-W03OUT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
*
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
*** 運用日付
|
||||
03 WRK-U06 PIC 9(008).
|
||||
*** 読込フラグ
|
||||
03 WRK-R01EOF PIC X(001).
|
||||
*** CSV分解用
|
||||
03 WRK-COMMA-CNT PIC 9(002) COMP.
|
||||
03 WRK-CSV-APPL-ID PIC X(008).
|
||||
03 WRK-CSV-EMP-ID PIC X(008).
|
||||
03 WRK-CSV-APPL-DATE PIC X(008).
|
||||
03 WRK-CSV-START-TIME PIC X(004).
|
||||
03 WRK-CSV-END-TIME PIC X(004).
|
||||
03 WRK-CSV-STATUS PIC X(001).
|
||||
03 WRK-CSV-OVT-TYPE PIC X(001).
|
||||
03 WRK-CSV-FILLER PIC X(046).
|
||||
*** 時間計算用
|
||||
03 WRK-START-NUM PIC 9(004).
|
||||
03 WRK-END-NUM PIC 9(004).
|
||||
03 WRK-DIFF-HH PIC 9(002).
|
||||
03 WRK-DIFF-MM PIC 9(002).
|
||||
03 WRK-DIFF-MIN 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.
|
||||
*
|
||||
*** 運用日付取得
|
||||
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
|
||||
W03OUTFIL.
|
||||
*
|
||||
*** #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.
|
||||
*
|
||||
*** ステータス判定
|
||||
EVALUATE TRUE
|
||||
WHEN WRK-CSV-STATUS = CNS-STAT-0
|
||||
OR WRK-CSV-STATUS = CNS-STAT-1
|
||||
*** 有効申請処理
|
||||
PERFORM 2020VALIDATESOR
|
||||
WHEN WRK-CSV-STATUS = CNS-STAT-9
|
||||
*** 取消申請処理
|
||||
PERFORM 2030CANCELSOR
|
||||
WHEN OTHER
|
||||
*** エラー処理
|
||||
PERFORM 2040ERRORSOR
|
||||
END-EVALUATE.
|
||||
*
|
||||
*** 次のレコード読込
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1) *
|
||||
* サブモジュール名: CSV分解処理 *
|
||||
* 処理概要 : UNSTRINGでCSVを分解する *
|
||||
*****************************************************************
|
||||
2010CSVSOR SECTION.
|
||||
*
|
||||
INITIALIZE WRK-CSV-APPL-ID
|
||||
WRK-CSV-EMP-ID
|
||||
WRK-CSV-APPL-DATE
|
||||
WRK-CSV-START-TIME
|
||||
WRK-CSV-END-TIME
|
||||
WRK-CSV-STATUS
|
||||
WRK-CSV-OVT-TYPE
|
||||
WRK-CSV-FILLER.
|
||||
UNSTRING R01INNREC
|
||||
DELIMITED BY ','
|
||||
INTO WRK-CSV-APPL-ID
|
||||
WRK-CSV-EMP-ID
|
||||
WRK-CSV-APPL-DATE
|
||||
WRK-CSV-START-TIME
|
||||
WRK-CSV-END-TIME
|
||||
WRK-CSV-STATUS
|
||||
WRK-CSV-OVT-TYPE
|
||||
WRK-CSV-FILLER
|
||||
TALLYING IN WRK-COMMA-CNT
|
||||
END-UNSTRING.
|
||||
*
|
||||
2010CSVSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.2) *
|
||||
* サブモジュール名: 有効申請処理 *
|
||||
* 処理概要 : 項目チェックしW01出力またはW03出力 *
|
||||
*****************************************************************
|
||||
2020VALIDATESOR SECTION.
|
||||
*
|
||||
*** W01/W03レコード初期化
|
||||
INITIALIZE W01OUTREC
|
||||
W03OUTREC.
|
||||
*
|
||||
*** SUB04CHKで日付チェック
|
||||
INITIALIZE C01CHKPAR.
|
||||
MOVE WRK-CSV-APPL-DATE TO C01CHKDAT.
|
||||
MOVE 'DATE' TO C01CHKTYP.
|
||||
CALL 'SUB04CHK' USING C01CHKPAR.
|
||||
IF C01CHKRRC NOT = ZERO
|
||||
MOVE '01' TO W03ERR-CATEGORY
|
||||
STRING 'DATE ERROR:'
|
||||
WRK-CSV-EMP-ID
|
||||
DELIMITED BY SIZE
|
||||
INTO W03ERR-DETAIL
|
||||
WRITE W03OUTREC
|
||||
ADD 1 TO CUN-W03OUT
|
||||
GO TO 2020VALIDATESOR-EXT
|
||||
END-IF.
|
||||
*
|
||||
*** 開始時刻チェック(1830以降)
|
||||
MOVE WRK-CSV-START-TIME TO WRK-START-NUM.
|
||||
IF WRK-START-NUM < CNS-TIME-1830
|
||||
MOVE '01' TO W03ERR-CATEGORY
|
||||
STRING 'START TIME < 1830'
|
||||
DELIMITED BY SIZE
|
||||
INTO W03ERR-DETAIL
|
||||
WRITE W03OUTREC
|
||||
ADD 1 TO CUN-W03OUT
|
||||
GO TO 2020VALIDATESOR-EXT
|
||||
END-IF.
|
||||
*
|
||||
*** 開始時刻 < 終了時刻チェック
|
||||
MOVE WRK-CSV-END-TIME TO WRK-END-NUM.
|
||||
IF WRK-START-NUM >= WRK-END-NUM
|
||||
MOVE '01' TO W03ERR-CATEGORY
|
||||
STRING 'START >= END'
|
||||
DELIMITED BY SIZE
|
||||
INTO W03ERR-DETAIL
|
||||
WRITE W03OUTREC
|
||||
ADD 1 TO CUN-W03OUT
|
||||
GO TO 2020VALIDATESOR-EXT
|
||||
END-IF.
|
||||
*
|
||||
*** 時間差30分以上チェック
|
||||
DIVIDE WRK-START-NUM BY 100
|
||||
GIVING WRK-DIFF-HH
|
||||
REMAINDER WRK-DIFF-MM.
|
||||
COMPUTE WRK-DIFF-MIN =
|
||||
WRK-DIFF-MM.
|
||||
DIVIDE WRK-END-NUM BY 100
|
||||
GIVING WRK-START-NUM
|
||||
REMAINDER WRK-END-NUM.
|
||||
COMPUTE WRK-DIFF-MIN =
|
||||
(WRK-START-NUM - WRK-DIFF-HH) * 60
|
||||
+ (WRK-END-NUM - WRK-DIFF-MM).
|
||||
IF WRK-DIFF-MIN < CNS-DIFF-30
|
||||
MOVE '01' TO W03ERR-CATEGORY
|
||||
STRING 'DIFF < 30MIN'
|
||||
DELIMITED BY SIZE
|
||||
INTO W03ERR-DETAIL
|
||||
WRITE W03OUTREC
|
||||
ADD 1 TO CUN-W03OUT
|
||||
GO TO 2020VALIDATESOR-EXT
|
||||
END-IF.
|
||||
*
|
||||
*** W01出力
|
||||
MOVE WRK-CSV-APPL-ID TO W01APPL-ID.
|
||||
MOVE WRK-CSV-EMP-ID TO W01EMP-ID.
|
||||
MOVE WRK-CSV-APPL-DATE TO W01APPL-DATE.
|
||||
MOVE WRK-CSV-START-TIME TO W01START-TIME.
|
||||
MOVE WRK-CSV-END-TIME TO W01END-TIME.
|
||||
MOVE WRK-CSV-STATUS TO W01STATUS.
|
||||
MOVE WRK-CSV-OVT-TYPE TO W01OVT-TYPE.
|
||||
WRITE W01OUTREC.
|
||||
ADD 1 TO CUN-W01OUT.
|
||||
*
|
||||
2020VALIDATESOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.3) *
|
||||
* サブモジュール名: 取消申請処理 *
|
||||
* 処理概要 : 取消レコードをW02出力する *
|
||||
*****************************************************************
|
||||
2030CANCELSOR SECTION.
|
||||
*
|
||||
*** W02レコード初期化
|
||||
INITIALIZE W02OUTREC.
|
||||
MOVE WRK-CSV-APPL-ID TO W02APPL-ID.
|
||||
MOVE WRK-CSV-EMP-ID TO W02EMP-ID.
|
||||
MOVE WRK-CSV-APPL-DATE TO W02APPL-DATE.
|
||||
MOVE WRK-CSV-START-TIME TO W02START-TIME.
|
||||
MOVE WRK-CSV-END-TIME TO W02END-TIME.
|
||||
MOVE WRK-CSV-STATUS TO W02STATUS.
|
||||
MOVE WRK-CSV-OVT-TYPE TO W02OVT-TYPE.
|
||||
WRITE W02OUTREC.
|
||||
ADD 1 TO CUN-W02OUT.
|
||||
*
|
||||
2030CANCELSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.4) *
|
||||
* サブモジュール名: エラー処理 *
|
||||
* 処理概要 : 不明ステータスをW03出力する *
|
||||
*****************************************************************
|
||||
2040ERRORSOR SECTION.
|
||||
*
|
||||
*** W03レコード初期化
|
||||
INITIALIZE W03OUTREC.
|
||||
MOVE '01' TO W03ERR-CATEGORY.
|
||||
STRING 'INVALID STATUS:'
|
||||
WRK-CSV-STATUS
|
||||
DELIMITED BY SIZE
|
||||
INTO W03ERR-DETAIL.
|
||||
WRITE W03OUTREC.
|
||||
ADD 1 TO CUN-W03OUT.
|
||||
*
|
||||
2040ERRORSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(3.0) *
|
||||
* サブモジュール名: 終了処理 *
|
||||
* 処理概要 : ファイルクローズ・件数と終了メッセージ出力 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
*** 入出力ファイルCLOSE
|
||||
CLOSE R01INNFIL
|
||||
W01OUTFIL
|
||||
W02OUTFIL
|
||||
W03OUTFIL.
|
||||
*
|
||||
*** 入出力ファイル件数出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'ZAN01R01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'ZAN01W01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'ZAN01W02' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W02OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'ZAN01W03' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W03OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 終了メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
3000STPSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(4.0) *
|
||||
* サブモジュール名: メッセージ編集出力処理 *
|
||||
* 処理概要 : メッセージ編集出力サブ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.
|
||||
@@ -0,0 +1,363 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. ZAN02CHK.
|
||||
*****************************************************************
|
||||
* システム名 : 残業統計管理システム *
|
||||
* プログラムID : ZAN02CHK *
|
||||
* プログラム名 : 時間帯重複チェック処理 *
|
||||
* 作成日 : 2026-06-14 *
|
||||
* 処理概要 : OVT-VSORTファイルの同一社員・同一日付内の *
|
||||
* 開始時刻と終了時刻の重複をチェックする。 *
|
||||
* *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 26-06-14 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R01INNFIL ASSIGN TO ZAN02R01.
|
||||
SELECT W01OUTFIL ASSIGN TO ZAN02W01.
|
||||
SELECT W02OUTFIL ASSIGN TO ZAN02W02.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* ##R01## *
|
||||
*****************************************************************
|
||||
FD R01INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R01INNREC.
|
||||
COPY ZAN01REC REPLACING ==(A)== BY ==R01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* ##W01## *
|
||||
*****************************************************************
|
||||
FD W01OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 W01OUTREC.
|
||||
COPY ZAN01REC REPLACING ==(A)== BY ==W01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* ##W02## *
|
||||
*****************************************************************
|
||||
FD W02OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS V.
|
||||
01 W02OUTREC.
|
||||
COPY ZAN05REC REPLACING ==(A)== BY ==W02==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'ZAN02CHK'.
|
||||
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 CNS-ERR-CAT02 PIC 9(002) VALUE 02.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
01 CUNARA.
|
||||
03 CUN-R01INN PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-W01OUT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-W02OUT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
*
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
*** 運用日付
|
||||
03 WRK-U06 PIC 9(008).
|
||||
*** 読込フラグ
|
||||
03 WRK-R01EOF PIC X(001).
|
||||
*** 前レコード保持
|
||||
03 WRK-PREV-REC.
|
||||
05 WRK-PREV-APPL-ID PIC X(008).
|
||||
05 WRK-PREV-EMP-ID PIC 9(008).
|
||||
05 WRK-PREV-APPL-DATE PIC 9(008).
|
||||
05 WRK-PREV-START-TIME PIC 9(004).
|
||||
05 WRK-PREV-END-TIME PIC 9(004).
|
||||
05 WRK-PREV-STATUS PIC X(001).
|
||||
05 WRK-PREV-OVT-TYPE PIC X(001).
|
||||
05 WRK-PREV-FILLER PIC X(046).
|
||||
*** 初回読込フラグ
|
||||
03 WRK-FIRST-FLG PIC X(001).
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
*** 運用日付取得
|
||||
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.
|
||||
MOVE '1' TO WRK-FIRST-FLG.
|
||||
*
|
||||
*** 運用日付取得
|
||||
INITIALIZE D01UBSPAR.
|
||||
CALL 'SUB01DAT' USING D01UBSPAR.
|
||||
IF D01FKICOD = ZERO
|
||||
MOVE D01UBSUDATE TO WRK-U06
|
||||
ELSE
|
||||
INITIALIZE M00MHOPAR
|
||||
MOVE CNS-MSGSUBEEK TO M00MSGCOD
|
||||
MOVE 'SUB01DAT' TO M00UMKDATS22-01
|
||||
MOVE D01FKICOD TO M00UMKDATS22-02
|
||||
PERFORM 4000MSGOUTSOR
|
||||
PERFORM 9999ABDSOR
|
||||
END-IF.
|
||||
*
|
||||
*** 入出力ファイルOPEN
|
||||
OPEN INPUT R01INNFIL
|
||||
OUTPUT W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
*** #R01#を読み込み
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
*** 1件目W01出力(前レコード初期化)
|
||||
IF WRK-R01EOF NOT = '1'
|
||||
MOVE R01INNREC TO WRK-PREV-REC
|
||||
MOVE R01INNREC TO W01OUTREC
|
||||
WRITE W01OUTREC
|
||||
ADD 1 TO CUN-W01OUT
|
||||
PERFORM 1100R01INNSOR
|
||||
END-IF.
|
||||
*
|
||||
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) *
|
||||
* サブモジュール名: 主処理 *
|
||||
* 処理概要 : 時間帯重複チェック処理 *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
IF WRK-R01EOF NOT = '1'
|
||||
*** 重複チェック
|
||||
PERFORM 2010CHECKDUPSOR
|
||||
*** 次のレコード読込
|
||||
PERFORM 1100R01INNSOR
|
||||
END-IF.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1) *
|
||||
* サブモジュール名: 重複チェック処理 *
|
||||
* 処理概要 : 前レコードとの重複判定 *
|
||||
*****************************************************************
|
||||
2010CHECKDUPSOR SECTION.
|
||||
*
|
||||
*** 同一社員番号かつ同一日付の判定
|
||||
IF WRK-PREV-EMP-ID = R01EMP-ID
|
||||
AND WRK-PREV-APPL-DATE = R01APPL-DATE
|
||||
*** 前終了時刻 > 現開始時刻 → 重複
|
||||
IF WRK-PREV-END-TIME > R01START-TIME
|
||||
PERFORM 2011OVERLAPERRSOR
|
||||
ELSE
|
||||
PERFORM 2012NORMALOUTSOR
|
||||
END-IF
|
||||
ELSE
|
||||
*** キーブレイク
|
||||
PERFORM 2013KEYBRSOR
|
||||
END-IF.
|
||||
*
|
||||
2010CHECKDUPSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1-1) *
|
||||
* サブモジュール名: 重複エラー処理 *
|
||||
* 処理概要 : エラーログW02出力 *
|
||||
*****************************************************************
|
||||
2011OVERLAPERRSOR SECTION.
|
||||
*
|
||||
INITIALIZE W02OUTREC.
|
||||
MOVE CNS-ERR-CAT02 TO W02ERR-CATEGORY.
|
||||
STRING 'OVERLAP: '
|
||||
WRK-PREV-EMP-ID ','
|
||||
WRK-PREV-APPL-DATE
|
||||
DELIMITED BY SIZE
|
||||
INTO W02ERR-DETAIL.
|
||||
WRITE W02OUTREC.
|
||||
ADD 1 TO CUN-W02OUT.
|
||||
*
|
||||
2011OVERLAPERRSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1-2) *
|
||||
* サブモジュール名: 通常出力処理 *
|
||||
* 処理概要 : W01ファイル出力 *
|
||||
*****************************************************************
|
||||
2012NORMALOUTSOR SECTION.
|
||||
*
|
||||
MOVE R01INNREC TO W01OUTREC.
|
||||
WRITE W01OUTREC.
|
||||
ADD 1 TO CUN-W01OUT.
|
||||
*
|
||||
*** 前レコード更新
|
||||
MOVE R01INNREC TO WRK-PREV-REC.
|
||||
*
|
||||
2012NORMALOUTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1-3) *
|
||||
* サブモジュール名: キーブレイク処理 *
|
||||
* 処理概要 : 前レコード更新 *
|
||||
*****************************************************************
|
||||
2013KEYBRSOR SECTION.
|
||||
*
|
||||
MOVE R01INNREC TO WRK-PREV-REC.
|
||||
PERFORM 2012NORMALOUTSOR.
|
||||
*
|
||||
2013KEYBRSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(3.0) *
|
||||
* サブモジュール名: 終了処理 *
|
||||
* 処理概要 : ファイルクローズ・件数と終了メッセージ出力 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
*** 入出力ファイルCLOSE
|
||||
CLOSE R01INNFIL
|
||||
W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
*** 入出力ファイル件数出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'ZAN02R01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'ZAN02W01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'ZAN02W02' 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.
|
||||
@@ -0,0 +1,478 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. ZAN03CHK.
|
||||
*****************************************************************
|
||||
* システム名 : 残業統計管理システム *
|
||||
* プログラムID : ZAN03CHK *
|
||||
* プログラム名 : 打刻時間照合処理 *
|
||||
* 作成日 : 2026-06-14 *
|
||||
* 処理概要 : OVT-NODUPとPUNCH-SORTEDを突合し申請時間帯の *
|
||||
* 照合を行う。 *
|
||||
* 申請時間帯が出勤〜退勤の範囲内かを確認する。*
|
||||
* 申請日が休日かを判定しOVT-TYPEを付加する。 *
|
||||
* *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 26-06-14 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R01INNFIL ASSIGN TO ZAN03R01.
|
||||
SELECT R02INNFIL ASSIGN TO ZAN03R02.
|
||||
SELECT R03INNFIL ASSIGN TO ZAN03R03.
|
||||
SELECT W01OUTFIL ASSIGN TO ZAN03W01.
|
||||
SELECT W02OUTFIL ASSIGN TO ZAN03W02.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* ##R01## *
|
||||
*****************************************************************
|
||||
FD R01INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R01INNREC.
|
||||
COPY ZAN01REC REPLACING ==(A)== BY ==R01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* ##R02## *
|
||||
*****************************************************************
|
||||
FD R02INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R02INNREC.
|
||||
03 R02EMP-ID PIC 9(008).
|
||||
03 R02DATE PIC 9(008).
|
||||
03 R02TIME-IN PIC 9(004).
|
||||
03 R02TIME-OUT PIC 9(004).
|
||||
03 R02FILLER PIC X(060).
|
||||
*
|
||||
*****************************************************************
|
||||
* ##R03## *
|
||||
*****************************************************************
|
||||
FD R03INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R03INNREC.
|
||||
03 R03HOLIDAY-DATE PIC 9(008).
|
||||
03 R03HOLIDAY-FLG PIC X(001).
|
||||
03 R03FILLER PIC X(071).
|
||||
*
|
||||
*****************************************************************
|
||||
* ##W01## *
|
||||
*****************************************************************
|
||||
FD W01OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 W01OUTREC.
|
||||
COPY ZAN01REC REPLACING ==(A)== BY ==W01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* ##W02## *
|
||||
*****************************************************************
|
||||
FD W02OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS V.
|
||||
01 W02OUTREC.
|
||||
COPY ZAN05REC REPLACING ==(A)== BY ==W02==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'ZAN03CHK'.
|
||||
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-CAT03 PIC 9(002) VALUE 03.
|
||||
03 CNS-OVT-W PIC X(001) VALUE 'W'.
|
||||
03 CNS-OVT-H PIC X(001) VALUE 'H'.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
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.
|
||||
03 CUN-W02OUT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
*
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
*** 読込フラグ(R01)
|
||||
03 WRK-R01EOF PIC X(001).
|
||||
*** 読込フラグ(R02)
|
||||
03 WRK-R02EOF PIC X(001).
|
||||
*** 読込フラグ(R03)
|
||||
03 WRK-R03EOF PIC X(001).
|
||||
*** R01キー
|
||||
03 WRK-R01KEY.
|
||||
05 WRK-R01KEY001 PIC 9(008).
|
||||
05 WRK-R01KEY002 PIC 9(008).
|
||||
*** R02キー
|
||||
03 WRK-R02KEY.
|
||||
05 WRK-R02KEY001 PIC 9(008).
|
||||
05 WRK-R02KEY002 PIC 9(008).
|
||||
*** OVT-TYPE設定用
|
||||
03 WRK-OVT-TYPE-SET PIC X(001).
|
||||
*** 休日テーブル
|
||||
03 WRK-HOLIDAY-CNT PIC 9(004) COMP.
|
||||
03 WRK-HOLIDAY-TABLE OCCURS 366 TIMES
|
||||
DEPENDING ON WRK-HOLIDAY-CNT
|
||||
ASCENDING KEY IS WRK-HD-DATE
|
||||
INDEXED BY WRK-HD-IDX.
|
||||
05 WRK-HD-DATE PIC 9(008).
|
||||
05 WRK-HD-FLG PIC X(001).
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
*** メッセージ編集出力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.
|
||||
*
|
||||
*** 現在日付取得(FUNCTION CURRENT-DATE)
|
||||
MOVE FUNCTION CURRENT-DATE TO WRK-HOLIDAY-CNT.
|
||||
*
|
||||
*** 入出力ファイルOPEN
|
||||
OPEN INPUT R01INNFIL
|
||||
R02INNFIL
|
||||
R03INNFIL
|
||||
OUTPUT W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
*** 休日ファイル読込
|
||||
PERFORM 1300HOLIDAYSOR.
|
||||
*
|
||||
*** #R01#を読み込み
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
*** #R02#を読み込み
|
||||
PERFORM 1200R02INNSOR.
|
||||
*
|
||||
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
|
||||
MOVE R01EMP-ID TO WRK-R01KEY001
|
||||
MOVE R01APPL-DATE TO WRK-R01KEY002
|
||||
END-READ.
|
||||
*
|
||||
1100R01INNSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(1.2) *
|
||||
* サブモジュール名:##R02##読込処理 *
|
||||
* 処理概要 : レコード読込・EOF判定処理 *
|
||||
*****************************************************************
|
||||
1200R02INNSOR SECTION.
|
||||
*
|
||||
READ R02INNFIL
|
||||
AT END
|
||||
MOVE '1' TO WRK-R02EOF
|
||||
NOT AT END
|
||||
ADD 1 TO CUN-R02INN
|
||||
MOVE R02EMP-ID TO WRK-R02KEY001
|
||||
MOVE R02DATE TO WRK-R02KEY002
|
||||
END-READ.
|
||||
*
|
||||
1200R02INNSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(1.3) *
|
||||
* サブモジュール名:##R03##読込処理 *
|
||||
* 処理概要 : 休日ファイル読込・HOLIDAY-TABLE設定 *
|
||||
*****************************************************************
|
||||
1300HOLIDAYSOR SECTION.
|
||||
*
|
||||
INITIALIZE WRK-HOLIDAY-CNT.
|
||||
*
|
||||
PERFORM UNTIL WRK-R03EOF = '1'
|
||||
READ R03INNFIL
|
||||
AT END
|
||||
MOVE '1' TO WRK-R03EOF
|
||||
NOT AT END
|
||||
ADD 1 TO WRK-HOLIDAY-CNT
|
||||
ADD 1 TO CUN-R03INN
|
||||
MOVE R03HOLIDAY-DATE TO
|
||||
WRK-HD-DATE(WRK-HOLIDAY-CNT)
|
||||
MOVE R03HOLIDAY-FLG TO
|
||||
WRK-HD-FLG(WRK-HOLIDAY-CNT)
|
||||
END-READ
|
||||
END-PERFORM.
|
||||
*
|
||||
1300HOLIDAYSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.0) *
|
||||
* サブモジュール名: 主処理 *
|
||||
* 処理概要 : R01とR02のキー比較・時間範囲チェック *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
*** R01とR02のキー比較
|
||||
EVALUATE TRUE
|
||||
WHEN WRK-R01KEY < WRK-R02KEY
|
||||
*** R01キー < R02キー(打刻データなし)
|
||||
PERFORM 2010NOMATCHSOR
|
||||
WHEN WRK-R01KEY = WRK-R02KEY
|
||||
*** R01キー = R02キー(マッチ)
|
||||
PERFORM 2020MATCHSOR
|
||||
WHEN WRK-R01KEY > WRK-R02KEY
|
||||
*** R01キー > R02キー(R02スキップ)
|
||||
PERFORM 1200R02INNSOR
|
||||
END-EVALUATE.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1) *
|
||||
* サブモジュール名: 不一致処理 *
|
||||
* 処理概要 : 打刻データなしエラー出力 *
|
||||
*****************************************************************
|
||||
2010NOMATCHSOR SECTION.
|
||||
*
|
||||
*** W02レコード初期化
|
||||
INITIALIZE W02OUTREC.
|
||||
*
|
||||
*** ERROR-LOGに出力
|
||||
MOVE CNS-ERR-CAT03 TO W02ERR-CATEGORY.
|
||||
STRING R01EMP-ID DELIMITED BY SIZE
|
||||
'/' DELIMITED BY SIZE
|
||||
R01APPL-DATE DELIMITED BY SIZE
|
||||
INTO W02ERR-DETAIL
|
||||
END-STRING.
|
||||
WRITE W02OUTREC.
|
||||
ADD 1 TO CUN-W02OUT.
|
||||
*
|
||||
*** #R01#を読み込む
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
2010NOMATCHSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.2) *
|
||||
* サブモジュール名: 一致処理 *
|
||||
* 処理概要 : 時間範囲チェック *
|
||||
*****************************************************************
|
||||
2020MATCHSOR SECTION.
|
||||
*
|
||||
*** 時間範囲チェック
|
||||
IF R01START-TIME >= R02TIME-IN
|
||||
AND R01END-TIME <= R02TIME-OUT
|
||||
*** 通過→OVT-TYPE設定+W01出力
|
||||
PERFORM 2200SETOVTSOR
|
||||
WRITE W01OUTREC
|
||||
ADD 1 TO CUN-W01OUT
|
||||
ELSE
|
||||
*** エラー→W02出力
|
||||
INITIALIZE W02OUTREC
|
||||
MOVE CNS-ERR-CAT03 TO W02ERR-CATEGORY
|
||||
STRING R01EMP-ID DELIMITED BY SIZE
|
||||
'/' DELIMITED BY SIZE
|
||||
R01APPL-DATE DELIMITED BY SIZE
|
||||
'/' DELIMITED BY SIZE
|
||||
R01START-TIME DELIMITED BY SIZE
|
||||
'-' DELIMITED BY SIZE
|
||||
R01END-TIME DELIMITED BY SIZE
|
||||
INTO W02ERR-DETAIL
|
||||
END-STRING
|
||||
WRITE W02OUTREC
|
||||
ADD 1 TO CUN-W02OUT
|
||||
END-IF.
|
||||
*
|
||||
*** #R01#を読み込む
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
2020MATCHSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.3) *
|
||||
* サブモジュール名: OVT-TYPE設定処理 *
|
||||
* 処理概要 : 申請日が休日か判定しOVT-TYPEを設定 *
|
||||
*****************************************************************
|
||||
2200SETOVTSOR SECTION.
|
||||
*
|
||||
*** 初期設定(平日)
|
||||
MOVE CNS-OVT-W TO WRK-OVT-TYPE-SET.
|
||||
*** 休日判定(SEARCH ALL)
|
||||
SET WRK-HD-IDX TO 1.
|
||||
SEARCH ALL WRK-HOLIDAY-TABLE
|
||||
AT END
|
||||
CONTINUE
|
||||
WHEN WRK-HD-DATE(WRK-HD-IDX) = R01APPL-DATE
|
||||
IF WRK-HD-FLG(WRK-HD-IDX) = '1'
|
||||
MOVE CNS-OVT-H TO WRK-OVT-TYPE-SET
|
||||
END-IF
|
||||
END-SEARCH.
|
||||
*
|
||||
*** レコード編集
|
||||
MOVE R01INNREC TO W01OUTREC.
|
||||
MOVE WRK-OVT-TYPE-SET TO W01OVT-TYPE.
|
||||
*
|
||||
2200SETOVTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(3.0) *
|
||||
* サブモジュール名: 終了処理 *
|
||||
* 処理概要 : ファイルクローズ・件数出力 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
*** 入出力ファイルCLOSE
|
||||
CLOSE R01INNFIL
|
||||
R02INNFIL
|
||||
R03INNFIL
|
||||
W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
*** 入力件数メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'ZAN03R01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 入力件数メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'ZAN03R02' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R02INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 入力件数メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'ZAN03R03' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R03INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 出力件数メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'ZAN03W01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 出力件数メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'ZAN03W02' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W02OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 終了メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
3000STPSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(4.0) *
|
||||
* サブモジュール名: メッセージ出力処理 *
|
||||
* 処理概要 : メッセージ編集・出力 *
|
||||
*****************************************************************
|
||||
4000MSGOUTSOR SECTION.
|
||||
*
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
|
||||
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
|
||||
CALL 'SUB02MSG' USING M00MHOPAR.
|
||||
*
|
||||
4000MSGOUTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(9.9) *
|
||||
* サブモジュール名: 異常終了処理 *
|
||||
* 処理概要 : ABEND処理 *
|
||||
*****************************************************************
|
||||
9999ABDSOR SECTION.
|
||||
*
|
||||
MOVE CNS-ABD999 TO E01ABDCOD.
|
||||
CALL 'SUB03END' USING E01ABDPAR.
|
||||
*
|
||||
9999ABDSOR-EXT.
|
||||
EXIT.
|
||||
Reference in New Issue
Block a user