Subsystem A KIN04-07追加、KIN02UPD/KIN03EXP更新(APPLICATION_ID対応+br_get_colバグ修正)、テスト済み全シナリオPASS
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.
@@ -0,0 +1,10 @@
|
|||||||
|
*
|
||||||
|
* 勤怠: 打刻編集レコード EDITED-PUNCH 80B
|
||||||
|
*
|
||||||
|
03 (A)EMP-ID PIC X(008).
|
||||||
|
03 (A)WORK-DATE PIC 9(008).
|
||||||
|
03 (A)STR-TIME PIC 9(004).
|
||||||
|
03 (A)END-TIME PIC 9(004).
|
||||||
|
03 (A)DEPT-ID PIC X(004).
|
||||||
|
03 (A)TERMINAL PIC X(006).
|
||||||
|
03 (A)FILLER PIC X(046).
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
*
|
||||||
|
* 勤怠: エラーログレコード KERR-LOG VB可変長
|
||||||
|
*
|
||||||
|
03 (A)ERR-CATEGORY PIC 9(002).
|
||||||
|
03 (A)ERR-DETAIL PIC X(198).
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
*
|
||||||
|
* 勤怠: 出勤日カレンダーレコード WORK-DAY-FILE 80B
|
||||||
|
*
|
||||||
|
03 (A)EMP-ID PIC X(008).
|
||||||
|
03 (A)DATE PIC 9(008).
|
||||||
|
03 (A)DAY-OF-WEEK PIC 9(001).
|
||||||
|
03 (A)FILLER PIC X(063).
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
*
|
||||||
|
* 勤怠: 日別勤怠計算レコード DAILY-RECORD 200B
|
||||||
|
*
|
||||||
|
03 (A)EMP-ID PIC 9(008).
|
||||||
|
03 (A)DATE PIC 9(008).
|
||||||
|
03 (A)TIME-IN PIC 9(004).
|
||||||
|
03 (A)TIME-OUT PIC 9(004).
|
||||||
|
03 (A)ANNUAL-H PIC 9(004)V9(001).
|
||||||
|
03 (A)PERSONAL-H PIC 9(004)V9(001).
|
||||||
|
03 (A)OFFICIAL-H PIC 9(004)V9(001).
|
||||||
|
03 (A)SICK-H PIC 9(004)V9(001).
|
||||||
|
03 (A)ABSENT-H PIC 9(004)V9(001).
|
||||||
|
03 (A)FILLER PIC X(151).
|
||||||
+22
-5
@@ -97,6 +97,7 @@
|
|||||||
88 WRK-R01-EOF VALUE '1'.
|
88 WRK-R01-EOF VALUE '1'.
|
||||||
*** SQL用ホスト変数
|
*** SQL用ホスト変数
|
||||||
03 WS-APPL-ID PIC 9(009).
|
03 WS-APPL-ID PIC 9(009).
|
||||||
|
03 WS-NEXT-APPL-ID PIC 9(009).
|
||||||
03 WS-EMP-ID PIC X(008).
|
03 WS-EMP-ID PIC X(008).
|
||||||
03 WS-LEAVE-TYPE PIC X(002).
|
03 WS-LEAVE-TYPE PIC X(002).
|
||||||
03 WS-START-DATE PIC X(008).
|
03 WS-START-DATE PIC X(008).
|
||||||
@@ -167,7 +168,18 @@
|
|||||||
OPEN INPUT R01INNFIL.
|
OPEN INPUT R01INNFIL.
|
||||||
*** W01ファイルOPEN
|
*** W01ファイルOPEN
|
||||||
OPEN OUTPUT W01OUTFIL.
|
OPEN OUTPUT W01OUTFIL.
|
||||||
*
|
|
||||||
|
*** 最大APPLICATION_ID取得(新規ID生成用)
|
||||||
|
MOVE ZERO TO WS-NEXT-APPL-ID.
|
||||||
|
EXEC SQL
|
||||||
|
SELECT COALESCE(MAX(APPLICATION_ID), 0) + 1
|
||||||
|
FROM LEAVE_RECORDS
|
||||||
|
INTO :WS-NEXT-APPL-ID
|
||||||
|
END-EXEC.
|
||||||
|
IF SQLCODE NOT = 0
|
||||||
|
MOVE ZERO TO WS-NEXT-APPL-ID
|
||||||
|
END-IF.
|
||||||
|
|
||||||
*** R01を初回読込
|
*** R01を初回読込
|
||||||
PERFORM 1100R01INNSOR.
|
PERFORM 1100R01INNSOR.
|
||||||
*
|
*
|
||||||
@@ -244,12 +256,14 @@
|
|||||||
*
|
*
|
||||||
EXEC SQL
|
EXEC SQL
|
||||||
INSERT INTO LEAVE_RECORDS
|
INSERT INTO LEAVE_RECORDS
|
||||||
(EMP_ID, LEAVE_TYPE,
|
(APPLICATION_ID,
|
||||||
|
EMP_ID, LEAVE_TYPE,
|
||||||
START_DATE, START_TIME,
|
START_DATE, START_TIME,
|
||||||
END_DATE, END_TIME,
|
END_DATE, END_TIME,
|
||||||
STATUS)
|
STATUS)
|
||||||
VALUES
|
VALUES
|
||||||
(:WS-EMP-ID, :WS-LEAVE-TYPE,
|
(:WS-NEXT-APPL-ID,
|
||||||
|
:WS-EMP-ID, :WS-LEAVE-TYPE,
|
||||||
:WS-START-DATE, :WS-START-TIME,
|
:WS-START-DATE, :WS-START-TIME,
|
||||||
:WS-END-DATE, :WS-END-TIME,
|
:WS-END-DATE, :WS-END-TIME,
|
||||||
:WS-STATUS)
|
:WS-STATUS)
|
||||||
@@ -259,6 +273,7 @@
|
|||||||
PERFORM 9100DBERRSOR
|
PERFORM 9100DBERRSOR
|
||||||
END-IF.
|
END-IF.
|
||||||
*
|
*
|
||||||
|
ADD 1 TO WS-NEXT-APPL-ID.
|
||||||
ADD 1 TO CUN-DBXINS.
|
ADD 1 TO CUN-DBXINS.
|
||||||
*
|
*
|
||||||
2110INSERTSOR-EXT.
|
2110INSERTSOR-EXT.
|
||||||
@@ -281,12 +296,14 @@
|
|||||||
*
|
*
|
||||||
EXEC SQL
|
EXEC SQL
|
||||||
INSERT INTO LEAVE_RECORDS
|
INSERT INTO LEAVE_RECORDS
|
||||||
(EMP_ID, LEAVE_TYPE,
|
(APPLICATION_ID,
|
||||||
|
EMP_ID, LEAVE_TYPE,
|
||||||
START_DATE, START_TIME,
|
START_DATE, START_TIME,
|
||||||
END_DATE, END_TIME,
|
END_DATE, END_TIME,
|
||||||
STATUS)
|
STATUS)
|
||||||
VALUES
|
VALUES
|
||||||
(:WS-EMP-ID, :WS-LEAVE-TYPE,
|
(:WS-APPL-ID,
|
||||||
|
:WS-EMP-ID, :WS-LEAVE-TYPE,
|
||||||
:WS-START-DATE, :WS-START-TIME,
|
:WS-START-DATE, :WS-START-TIME,
|
||||||
:WS-END-DATE, :WS-END-TIME,
|
:WS-END-DATE, :WS-END-TIME,
|
||||||
:WS-STATUS)
|
:WS-STATUS)
|
||||||
|
|||||||
+11
-2
@@ -1,4 +1,4 @@
|
|||||||
IDENTIFICATION DIVISION.
|
IDENTIFICATION DIVISION.
|
||||||
PROGRAM-ID. KIN03EXP.
|
PROGRAM-ID. KIN03EXP.
|
||||||
*****************************************************************
|
*****************************************************************
|
||||||
* システム名 : 勤怠休暇管理システム *
|
* システム名 : 勤怠休暇管理システム *
|
||||||
@@ -24,7 +24,8 @@
|
|||||||
*
|
*
|
||||||
INPUT-OUTPUT SECTION.
|
INPUT-OUTPUT SECTION.
|
||||||
FILE-CONTROL.
|
FILE-CONTROL.
|
||||||
SELECT W01OUTFIL ASSIGN TO "KIN02W01.DAT".
|
SELECT W01OUTFIL ASSIGN TO "KIN02W01.DAT"
|
||||||
|
FILE STATUS IS WS-W01-STATUS.
|
||||||
*
|
*
|
||||||
DATA DIVISION.
|
DATA DIVISION.
|
||||||
FILE SECTION.
|
FILE SECTION.
|
||||||
@@ -86,6 +87,8 @@
|
|||||||
* 作業領域 *
|
* 作業領域 *
|
||||||
*****************************************************************
|
*****************************************************************
|
||||||
01 WRKARA.
|
01 WRKARA.
|
||||||
|
*** ファイルステータス
|
||||||
|
03 WS-W01-STATUS PIC X(002).
|
||||||
*** EOF判定
|
*** EOF判定
|
||||||
03 WRK-R01EOF PIC X(001).
|
03 WRK-R01EOF PIC X(001).
|
||||||
88 WRK-R01-EOF VALUE '1'.
|
88 WRK-R01-EOF VALUE '1'.
|
||||||
@@ -193,6 +196,12 @@
|
|||||||
*** 出力ファイルOPEN
|
*** 出力ファイルOPEN
|
||||||
OPEN OUTPUT W01OUTFIL.
|
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)
|
*** C1カーソル初回FETCH(SELECT INTO)
|
||||||
PERFORM 1100C1INITSOR.
|
PERFORM 1100C1INITSOR.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -0,0 +1,472 @@
|
|||||||
|
IDENTIFICATION DIVISION.
|
||||||
|
PROGRAM-ID. KIN04CHK.
|
||||||
|
*****************************************************************
|
||||||
|
* システム名 : 勤怠休暇管理システム *
|
||||||
|
* プログラムID : KIN04CHK *
|
||||||
|
* プログラム名 : 打刻項目チェック処理 *
|
||||||
|
* 作成日 : 2026-06-19 *
|
||||||
|
* 処理概要 : CSV形式の打刻データファイルを読み込み、 *
|
||||||
|
* IF多重ネスト(句)で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.
|
||||||
|
SELECT W01OUTFIL ASSIGN TO KIN04W01.
|
||||||
|
SELECT W02OUTFIL ASSIGN TO KIN04W02.
|
||||||
|
*
|
||||||
|
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 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.
|
||||||
|
*
|
||||||
|
*** 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多重ネスト(句)で4段階チェック *
|
||||||
|
*****************************************************************
|
||||||
|
2000MAJSOR SECTION.
|
||||||
|
*
|
||||||
|
*** CSV分解
|
||||||
|
PERFORM 2010CSVSOR.
|
||||||
|
*
|
||||||
|
*** 社員番号チェック
|
||||||
|
PERFORM 2021EMPIDSOR.
|
||||||
|
*
|
||||||
|
*** 項目チェック(IF多重ネスト 句)
|
||||||
|
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多重ネスト 句) *
|
||||||
|
* 処理概要 : フィールド数→社員番号→日付→時刻→時刻順の *
|
||||||
|
* 4段階ネストチェックを句で記述 *
|
||||||
|
*****************************************************************
|
||||||
|
2020VALIDATESOR SECTION.
|
||||||
|
*
|
||||||
|
*** IF多重ネスト 句 (4段階)
|
||||||
|
*** 第1段階: フィールド数 + 社員番号必須
|
||||||
|
IF WRK-COMMA-CNT = CNS-FIELD-COUNT-6
|
||||||
|
AND WRK-EMPID-IS-OK
|
||||||
|
|
||||||
|
*** 第2段階: 日付チェック(SUB04CHK)
|
||||||
|
INITIALIZE C01CHKPAR
|
||||||
|
MOVE WRK-CSV-DATE TO C01CHKDAT
|
||||||
|
MOVE 'DATE' TO C01CHKTYP
|
||||||
|
CALL 'SUB04CHK' USING C01CHKPAR
|
||||||
|
IF C01CHKRRC = ZERO
|
||||||
|
|
||||||
|
*** 第3段階: 出勤時刻チェック(SUB04CHK)
|
||||||
|
INITIALIZE C01CHKPAR
|
||||||
|
MOVE WRK-CSV-TIME-IN TO C01CHKDAT
|
||||||
|
MOVE 'TIME' TO C01CHKTYP
|
||||||
|
CALL 'SUB04CHK' USING C01CHKPAR
|
||||||
|
IF C01CHKRRC = ZERO
|
||||||
|
|
||||||
|
*** 第3段階: 退勤時刻チェック(SUB04CHK)
|
||||||
|
INITIALIZE C01CHKPAR
|
||||||
|
MOVE WRK-CSV-TIME-OUT
|
||||||
|
TO C01CHKDAT
|
||||||
|
MOVE 'TIME' TO C01CHKTYP
|
||||||
|
CALL 'SUB04CHK' USING C01CHKPAR
|
||||||
|
IF C01CHKRRC = ZERO
|
||||||
|
|
||||||
|
*** 第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
|
||||||
|
|
||||||
|
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.
|
||||||
@@ -0,0 +1,488 @@
|
|||||||
|
IDENTIFICATION DIVISION.
|
||||||
|
PROGRAM-ID. KIN05MAT.
|
||||||
|
*****************************************************************
|
||||||
|
* システム名 : 勤怠休暇管理システム *
|
||||||
|
* プログラムID : KIN05MAT *
|
||||||
|
* プログラム名 : 打刻休暇照合処理 *
|
||||||
|
* 作成日 : 2026-06-20 *
|
||||||
|
* 処理概要 : EDITED-PUNCH(打刻側,R01)とLEAVE-DAILY *
|
||||||
|
* (休暇側,R02)を社員番号+日付キーで照合し、 *
|
||||||
|
* 1:Nマッチング結果をKIN-LEAVEに出力。 *
|
||||||
|
*****************************************************************
|
||||||
|
* 更新履歴 *
|
||||||
|
*---------------------------------------------------------------*
|
||||||
|
* 更新日付 担当者 更新内容 *
|
||||||
|
*---------------------------------------------------------------*
|
||||||
|
* 26-06-20 @@@ 新規作成 *
|
||||||
|
*****************************************************************
|
||||||
|
ENVIRONMENT DIVISION.
|
||||||
|
CONFIGURATION SECTION.
|
||||||
|
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||||
|
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||||
|
*
|
||||||
|
INPUT-OUTPUT SECTION.
|
||||||
|
FILE-CONTROL.
|
||||||
|
SELECT R01INNFIL ASSIGN TO KIN04W01
|
||||||
|
FILE STATUS IS WS-R01-STATUS.
|
||||||
|
SELECT R02INNFIL ASSIGN TO KIN02W01
|
||||||
|
FILE STATUS IS WS-R02-STATUS.
|
||||||
|
SELECT W01OUTFIL ASSIGN TO KIN05W01
|
||||||
|
FILE STATUS IS WS-W01-STATUS.
|
||||||
|
*
|
||||||
|
DATA DIVISION.
|
||||||
|
FILE SECTION.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* ##R01## EDITED-PUNCH *
|
||||||
|
*****************************************************************
|
||||||
|
FD R01INNFIL
|
||||||
|
LABEL RECORD IS STANDARD
|
||||||
|
BLOCK CONTAINS 0
|
||||||
|
RECORDING MODE IS F.
|
||||||
|
01 R01INNREC.
|
||||||
|
COPY KIN04REC REPLACING ==(A)== BY ==R01==.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* ##R02## LEAVE-DAILY *
|
||||||
|
*****************************************************************
|
||||||
|
FD R02INNFIL
|
||||||
|
LABEL RECORD IS STANDARD
|
||||||
|
BLOCK CONTAINS 0
|
||||||
|
RECORDING MODE IS F.
|
||||||
|
01 R02OUTREC.
|
||||||
|
COPY KIN02REC REPLACING ==(A)== BY ==R02==.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* ##W01## KIN-LEAVE *
|
||||||
|
*****************************************************************
|
||||||
|
FD W01OUTFIL
|
||||||
|
LABEL RECORD IS STANDARD
|
||||||
|
BLOCK CONTAINS 0
|
||||||
|
RECORDING MODE IS F.
|
||||||
|
01 W01OUTREC.
|
||||||
|
COPY KIN03REC REPLACING ==(A)== BY ==W01==.
|
||||||
|
*
|
||||||
|
WORKING-STORAGE SECTION.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* コンスタント領域 *
|
||||||
|
*****************************************************************
|
||||||
|
01 CNSARA.
|
||||||
|
03 CNS-PRGIDX PIC X(008) VALUE 'KIN05MAT'.
|
||||||
|
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-NO-LEAVE PIC X(002) VALUE '99'.
|
||||||
|
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-R02INN 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-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-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-BEST-TYPE PIC X(002).
|
||||||
|
03 WRK-BEST-STR-TIME PIC 9(004).
|
||||||
|
03 WRK-BEST-END-TIME PIC 9(004).
|
||||||
|
03 WRK-BEST-APPL-ID PIC 9(009).
|
||||||
|
03 WRK-BEST-FOUND PIC X(001).
|
||||||
|
88 WRK-BEST-IS-FOUND VALUE '1'.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* サブプログラム連絡領域 *
|
||||||
|
*****************************************************************
|
||||||
|
*** メッセージ編集出力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.
|
||||||
|
*** BEST領域初期化(R01のみ出力時に使用)
|
||||||
|
MOVE CNS-NO-LEAVE TO WRK-BEST-TYPE.
|
||||||
|
MOVE ZERO TO WRK-BEST-STR-TIME
|
||||||
|
WRK-BEST-END-TIME
|
||||||
|
WRK-BEST-APPL-ID.
|
||||||
|
*
|
||||||
|
*** 入出力ファイルOPEN
|
||||||
|
OPEN INPUT R01INNFIL
|
||||||
|
R02INNFIL
|
||||||
|
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-W01-STATUS NOT = '00'
|
||||||
|
MOVE CNS-ABD999 TO E01ABDCOD
|
||||||
|
CALL 'SUB03END' USING E01ABDPAR
|
||||||
|
END-IF.
|
||||||
|
*
|
||||||
|
*** R01/R02を読み込み
|
||||||
|
PERFORM 1100R01INNSOR.
|
||||||
|
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
|
||||||
|
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
|
||||||
|
END-READ.
|
||||||
|
*
|
||||||
|
1200R02INNSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(2.0) *
|
||||||
|
* サブモジュール名: 主処理(マッチング制御) *
|
||||||
|
* 処理概要 : EVALUATE TRUEで3分岐マッチング制御 *
|
||||||
|
*****************************************************************
|
||||||
|
2000MAJSOR SECTION.
|
||||||
|
*
|
||||||
|
*** R01キー設定
|
||||||
|
MOVE R01EMP-ID TO WRK-R01K-EMP-ID.
|
||||||
|
MOVE R01WORK-DATE TO WRK-R01K-DATE.
|
||||||
|
*
|
||||||
|
*** R02キー設定(有効な場合)
|
||||||
|
IF NOT WRK-R02-EOF
|
||||||
|
MOVE R02EMP-ID TO WRK-R02K-EMP-ID
|
||||||
|
MOVE R02DATE TO WRK-R02K-DATE
|
||||||
|
END-IF.
|
||||||
|
*
|
||||||
|
*** EVALUATE TRUE マッチング3分岐
|
||||||
|
EVALUATE TRUE
|
||||||
|
WHEN WRK-R02-EOF
|
||||||
|
PERFORM 2100R01ONLYSOR
|
||||||
|
PERFORM 1100R01INNSOR
|
||||||
|
WHEN WRK-R01KEY < WRK-R02KEY
|
||||||
|
PERFORM 2100R01ONLYSOR
|
||||||
|
PERFORM 1100R01INNSOR
|
||||||
|
WHEN WRK-R01KEY = WRK-R02KEY
|
||||||
|
PERFORM 2020MATCHSOR
|
||||||
|
PERFORM 1100R01INNSOR
|
||||||
|
WHEN WRK-R01KEY > WRK-R02KEY
|
||||||
|
PERFORM 2200R02ONLYSOR
|
||||||
|
PERFORM 1200R02INNSOR
|
||||||
|
END-EVALUATE.
|
||||||
|
*
|
||||||
|
2000MAJSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(2.2) *
|
||||||
|
* サブモジュール名: マッチング処理(N:1ループ) *
|
||||||
|
* 処理概要 : 一致キーの全R02を読込み、最適休暇を選定 *
|
||||||
|
*****************************************************************
|
||||||
|
2020MATCHSOR SECTION.
|
||||||
|
*
|
||||||
|
*** 選定領域初期化
|
||||||
|
MOVE '0' TO WRK-BEST-FOUND.
|
||||||
|
MOVE CNS-NO-LEAVE TO WRK-BEST-TYPE.
|
||||||
|
MOVE ZERO TO WRK-BEST-STR-TIME
|
||||||
|
WRK-BEST-END-TIME
|
||||||
|
WRK-BEST-APPL-ID.
|
||||||
|
*
|
||||||
|
*** N:1ループ 一致するR02を全件処理
|
||||||
|
PERFORM UNTIL WRK-R02-EOF
|
||||||
|
OR WRK-R01KEY < WRK-R02KEY
|
||||||
|
OR WRK-R01KEY > WRK-R02KEY
|
||||||
|
*
|
||||||
|
*** ベスト選定
|
||||||
|
IF NOT WRK-BEST-IS-FOUND
|
||||||
|
MOVE '1' TO WRK-BEST-FOUND
|
||||||
|
MOVE R02LEAVE-TYPE TO WRK-BEST-TYPE
|
||||||
|
MOVE R02START-TIME TO WRK-BEST-STR-TIME
|
||||||
|
MOVE R02END-TIME TO WRK-BEST-END-TIME
|
||||||
|
MOVE R02APPL-ID TO WRK-BEST-APPL-ID
|
||||||
|
ELSE
|
||||||
|
PERFORM 2030PRIOSOR
|
||||||
|
END-IF
|
||||||
|
*
|
||||||
|
*** R02次読込
|
||||||
|
PERFORM 1200R02INNSOR
|
||||||
|
*
|
||||||
|
*** R02キー再設定(有効な場合)
|
||||||
|
IF NOT WRK-R02-EOF
|
||||||
|
MOVE R02EMP-ID TO WRK-R02K-EMP-ID
|
||||||
|
MOVE R02DATE TO WRK-R02K-DATE
|
||||||
|
END-IF
|
||||||
|
END-PERFORM.
|
||||||
|
*
|
||||||
|
*** KIN-LEAVE出力
|
||||||
|
PERFORM 2100R01ONLYSOR.
|
||||||
|
*
|
||||||
|
2020MATCHSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(2.3) *
|
||||||
|
* サブモジュール名: 優先順位判定 *
|
||||||
|
* 処理概要 : 現在のR02レコードとベストを比較し、 *
|
||||||
|
* より優先度の高いものを保持 *
|
||||||
|
*****************************************************************
|
||||||
|
2030PRIOSOR SECTION.
|
||||||
|
*
|
||||||
|
*** 優先順位: 01 > 02 > 03 > 04
|
||||||
|
*** 同種別はAPPL-IDの小さい方を採用
|
||||||
|
EVALUATE TRUE
|
||||||
|
WHEN R02LEAVE-TYPE = CNS-LEAVE-01
|
||||||
|
IF WRK-BEST-TYPE NOT = CNS-LEAVE-01
|
||||||
|
MOVE R02LEAVE-TYPE TO WRK-BEST-TYPE
|
||||||
|
MOVE R02START-TIME TO WRK-BEST-STR-TIME
|
||||||
|
MOVE R02END-TIME TO WRK-BEST-END-TIME
|
||||||
|
MOVE R02APPL-ID TO WRK-BEST-APPL-ID
|
||||||
|
ELSE IF R02APPL-ID < WRK-BEST-APPL-ID
|
||||||
|
MOVE R02START-TIME TO WRK-BEST-STR-TIME
|
||||||
|
MOVE R02END-TIME TO WRK-BEST-END-TIME
|
||||||
|
MOVE R02APPL-ID TO WRK-BEST-APPL-ID
|
||||||
|
END-IF
|
||||||
|
WHEN R02LEAVE-TYPE = CNS-LEAVE-02
|
||||||
|
IF WRK-BEST-TYPE = CNS-LEAVE-01
|
||||||
|
CONTINUE
|
||||||
|
ELSE IF WRK-BEST-TYPE = CNS-LEAVE-02
|
||||||
|
IF R02APPL-ID < WRK-BEST-APPL-ID
|
||||||
|
MOVE R02START-TIME TO WRK-BEST-STR-TIME
|
||||||
|
MOVE R02END-TIME TO WRK-BEST-END-TIME
|
||||||
|
MOVE R02APPL-ID TO WRK-BEST-APPL-ID
|
||||||
|
END-IF
|
||||||
|
ELSE
|
||||||
|
MOVE R02LEAVE-TYPE TO WRK-BEST-TYPE
|
||||||
|
MOVE R02START-TIME TO WRK-BEST-STR-TIME
|
||||||
|
MOVE R02END-TIME TO WRK-BEST-END-TIME
|
||||||
|
MOVE R02APPL-ID TO WRK-BEST-APPL-ID
|
||||||
|
END-IF
|
||||||
|
WHEN R02LEAVE-TYPE = CNS-LEAVE-03
|
||||||
|
IF WRK-BEST-TYPE = CNS-LEAVE-01
|
||||||
|
CONTINUE
|
||||||
|
ELSE IF WRK-BEST-TYPE = CNS-LEAVE-02
|
||||||
|
CONTINUE
|
||||||
|
ELSE IF WRK-BEST-TYPE = CNS-LEAVE-03
|
||||||
|
IF R02APPL-ID < WRK-BEST-APPL-ID
|
||||||
|
MOVE R02START-TIME TO WRK-BEST-STR-TIME
|
||||||
|
MOVE R02END-TIME TO WRK-BEST-END-TIME
|
||||||
|
MOVE R02APPL-ID TO WRK-BEST-APPL-ID
|
||||||
|
END-IF
|
||||||
|
ELSE
|
||||||
|
MOVE R02LEAVE-TYPE TO WRK-BEST-TYPE
|
||||||
|
MOVE R02START-TIME TO WRK-BEST-STR-TIME
|
||||||
|
MOVE R02END-TIME TO WRK-BEST-END-TIME
|
||||||
|
MOVE R02APPL-ID TO WRK-BEST-APPL-ID
|
||||||
|
END-IF
|
||||||
|
WHEN R02LEAVE-TYPE = CNS-LEAVE-04
|
||||||
|
IF WRK-BEST-TYPE = CNS-LEAVE-01
|
||||||
|
CONTINUE
|
||||||
|
ELSE IF WRK-BEST-TYPE = CNS-LEAVE-02
|
||||||
|
CONTINUE
|
||||||
|
ELSE IF WRK-BEST-TYPE = CNS-LEAVE-03
|
||||||
|
CONTINUE
|
||||||
|
ELSE IF WRK-BEST-TYPE = CNS-LEAVE-04
|
||||||
|
IF R02APPL-ID < WRK-BEST-APPL-ID
|
||||||
|
MOVE R02START-TIME TO WRK-BEST-STR-TIME
|
||||||
|
MOVE R02END-TIME TO WRK-BEST-END-TIME
|
||||||
|
MOVE R02APPL-ID TO WRK-BEST-APPL-ID
|
||||||
|
END-IF
|
||||||
|
ELSE
|
||||||
|
MOVE R02LEAVE-TYPE TO WRK-BEST-TYPE
|
||||||
|
MOVE R02START-TIME TO WRK-BEST-STR-TIME
|
||||||
|
MOVE R02END-TIME TO WRK-BEST-END-TIME
|
||||||
|
MOVE R02APPL-ID TO WRK-BEST-APPL-ID
|
||||||
|
END-IF
|
||||||
|
WHEN OTHER
|
||||||
|
CONTINUE
|
||||||
|
END-EVALUATE.
|
||||||
|
*
|
||||||
|
2030PRIOSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(2.1) *
|
||||||
|
* サブモジュール名: R01のみ出力 *
|
||||||
|
* 処理概要 : 打刻のみ(休暇なし)またはマッチ結果を出力 *
|
||||||
|
*****************************************************************
|
||||||
|
2100R01ONLYSOR SECTION.
|
||||||
|
*
|
||||||
|
*** KIN-LEAVEレコード編集
|
||||||
|
INITIALIZE W01OUTREC.
|
||||||
|
*** 打刻情報(1-80B)
|
||||||
|
MOVE R01EMP-ID TO W01EMP-ID.
|
||||||
|
MOVE R01WORK-DATE TO W01WORK-DATE.
|
||||||
|
MOVE R01STR-TIME TO W01STR-TIME.
|
||||||
|
MOVE R01END-TIME TO W01END-TIME.
|
||||||
|
MOVE R01DEPT-ID TO W01DEPT-ID.
|
||||||
|
MOVE R01TERMINAL TO W01TERMINAL.
|
||||||
|
*** 休暇情報(81-160B)
|
||||||
|
MOVE WRK-BEST-TYPE TO W01LEAVE-TYPE.
|
||||||
|
MOVE WRK-BEST-STR-TIME TO W01LEAVE-STR-TIME.
|
||||||
|
MOVE WRK-BEST-END-TIME TO W01LEAVE-END-TIME.
|
||||||
|
MOVE ZERO TO W01LEAVE-HOURS.
|
||||||
|
MOVE WRK-BEST-APPL-ID TO W01APPLICATION-ID.
|
||||||
|
*
|
||||||
|
WRITE W01OUTREC.
|
||||||
|
ADD 1 TO CUN-W01OUT.
|
||||||
|
*
|
||||||
|
2100R01ONLYSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(2.2) *
|
||||||
|
* サブモジュール名: R02のみスキップ *
|
||||||
|
* 処理概要 : 該当打刻のない休暇レコードはスキップ *
|
||||||
|
*****************************************************************
|
||||||
|
2200R02ONLYSOR SECTION.
|
||||||
|
*
|
||||||
|
*** R02のみは出力なし(スキップ)
|
||||||
|
CONTINUE.
|
||||||
|
*
|
||||||
|
2200R02ONLYSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(3.0) *
|
||||||
|
* サブモジュール名: 終了処理 *
|
||||||
|
* 処理概要 : ファイルクローズ・件数と終了メッセージ出力 *
|
||||||
|
*****************************************************************
|
||||||
|
3000STPSOR SECTION.
|
||||||
|
*
|
||||||
|
*** 入出力ファイルCLOSE
|
||||||
|
CLOSE R01INNFIL
|
||||||
|
R02INNFIL
|
||||||
|
W01OUTFIL.
|
||||||
|
*
|
||||||
|
*** 入出力ファイル件数出力
|
||||||
|
INITIALIZE M00MHOPAR.
|
||||||
|
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||||
|
MOVE 'KIN04W01' TO M00UMKDATS22-01.
|
||||||
|
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||||
|
PERFORM 4000MSGOUTSOR.
|
||||||
|
*
|
||||||
|
INITIALIZE M00MHOPAR.
|
||||||
|
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||||
|
MOVE 'KIN02W01' TO M00UMKDATS22-01.
|
||||||
|
MOVE CUN-R02INN TO M00UMKDATS22-02.
|
||||||
|
PERFORM 4000MSGOUTSOR.
|
||||||
|
*
|
||||||
|
INITIALIZE M00MHOPAR.
|
||||||
|
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||||
|
MOVE 'KIN05W01' 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.
|
||||||
|
*****************************************************************
|
||||||
|
|
||||||
@@ -0,0 +1,437 @@
|
|||||||
|
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".
|
||||||
|
*
|
||||||
|
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.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* SQLCA *
|
||||||
|
*****************************************************************
|
||||||
|
EXEC SQL INCLUDE SQLCA END-EXEC.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* コンスタント領域 *
|
||||||
|
*****************************************************************
|
||||||
|
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.
|
||||||
|
* 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で追加変数生成)
|
||||||
|
EXEC SQL
|
||||||
|
CONNECT TO 'data/kin.db'
|
||||||
|
END-EXEC.
|
||||||
|
*
|
||||||
|
* 休日データ読込(bridge直接→EXEC SQL変換回避)
|
||||||
|
PERFORM 1200HOLIDAYSOR.
|
||||||
|
*
|
||||||
|
* 出力ファイルOPEN
|
||||||
|
OPEN OUTPUT OUTRECFIL.
|
||||||
|
*
|
||||||
|
* 社員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(カーソル)
|
||||||
|
EXEC SQL
|
||||||
|
DECLARE C_HOL CURSOR FOR
|
||||||
|
SELECT HOLIDAY_DATE
|
||||||
|
FROM HOLIDAY_CALENDAR
|
||||||
|
ORDER BY HOLIDAY_DATE
|
||||||
|
END-EXEC.
|
||||||
|
*
|
||||||
|
EXEC SQL
|
||||||
|
OPEN C_HOL
|
||||||
|
END-EXEC.
|
||||||
|
*
|
||||||
|
EXEC SQL
|
||||||
|
FETCH C_HOL INTO :HV-HOLIDAY-DATE
|
||||||
|
END-EXEC.
|
||||||
|
*
|
||||||
|
* 休日テーブルに全件読込
|
||||||
|
PERFORM UNTIL SQLCODE NOT = 0
|
||||||
|
IF HOLIDAY-COUNT < 50
|
||||||
|
ADD 1 TO HOLIDAY-COUNT
|
||||||
|
MOVE HV-HOLIDAY-DATE TO
|
||||||
|
HOLIDAY-DATE-ENT(HOLIDAY-COUNT)
|
||||||
|
END-IF
|
||||||
|
EXEC SQL
|
||||||
|
FETCH C_HOL INTO :HV-HOLIDAY-DATE
|
||||||
|
END-EXEC
|
||||||
|
END-PERFORM.
|
||||||
|
*
|
||||||
|
EXEC SQL
|
||||||
|
CLOSE C_HOL
|
||||||
|
END-EXEC.
|
||||||
|
*
|
||||||
|
1200HOLIDAYSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(1.3) *
|
||||||
|
* サブモジュール名: 社員CURSOR OPEN *
|
||||||
|
* 処理概要 : EMP_MASTERから在籍社員一覧を取得 *
|
||||||
|
*****************************************************************
|
||||||
|
1300EMPOPNSOR SECTION.
|
||||||
|
*
|
||||||
|
EXEC SQL
|
||||||
|
DECLARE C_EMP CURSOR FOR
|
||||||
|
SELECT EMP_ID
|
||||||
|
FROM EMP_MASTER
|
||||||
|
WHERE STATUS = '1'
|
||||||
|
ORDER BY EMP_ID
|
||||||
|
END-EXEC.
|
||||||
|
*
|
||||||
|
EXEC SQL
|
||||||
|
OPEN C_EMP
|
||||||
|
END-EXEC.
|
||||||
|
*
|
||||||
|
EXEC SQL
|
||||||
|
FETCH C_EMP 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(カーソル)
|
||||||
|
EXEC SQL
|
||||||
|
FETCH C_EMP INTO :HV-EMP-ID
|
||||||
|
END-EXEC.
|
||||||
|
*
|
||||||
|
IF SQLCODE = 0
|
||||||
|
CONTINUE
|
||||||
|
ELSE
|
||||||
|
MOVE '1' TO WRK-EMP-EOF
|
||||||
|
END-IF.
|
||||||
|
*
|
||||||
|
2000MAJSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(3.0) *
|
||||||
|
* サブモジュール名: 終了処理 *
|
||||||
|
* 処理概要 : ファイルCLOSE・件数出力 *
|
||||||
|
*****************************************************************
|
||||||
|
3000STPSOR SECTION.
|
||||||
|
*
|
||||||
|
* カーソルCLOSE
|
||||||
|
EXEC SQL
|
||||||
|
CLOSE C_EMP
|
||||||
|
END-EXEC.
|
||||||
|
*
|
||||||
|
* 出力ファイル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.
|
||||||
@@ -0,0 +1,608 @@
|
|||||||
|
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.
|
||||||
|
SELECT R02INNFIL ASSIGN TO KIN07R02.
|
||||||
|
SELECT R03INNFIL ASSIGN TO KIN07R03.
|
||||||
|
SELECT W01OUTFIL ASSIGN TO KIN07W01.
|
||||||
|
*
|
||||||
|
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 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.
|
||||||
|
*
|
||||||
|
*** 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.
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
# KIN04CHK 使用資源一覧
|
||||||
|
|
||||||
|
## プログラム概要
|
||||||
|
- **プログラムID**: KIN04CHK
|
||||||
|
- **プログラム名**: 打刻項目チェック処理
|
||||||
|
- **処理概要**: CSV形式の打刻データファイルを読み込み、IF多重ネスト(THEN句)による項目チェックを行い、正常レコードをEDITED-PUNCHへ、異常レコードをERROR-LOGへ振り分ける。
|
||||||
|
|
||||||
|
## 使用ファイル
|
||||||
|
|
||||||
|
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||||
|
|------|---------------|------|-------------|-----------|--------|
|
||||||
|
| KIN04R01 | RAW-PUNCH | 順編成 | F (固定長) | 80B | なし(自前定義) |
|
||||||
|
| KIN04W01 | EDITED-PUNCH | 順編成 | F (固定長) | 80B | KIN04REC |
|
||||||
|
| KIN04W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | KIN05REC |
|
||||||
|
|
||||||
|
## 使用COPY句
|
||||||
|
|
||||||
|
| COPY句 | 用途 | 使用箇所 |
|
||||||
|
|--------|------|---------|
|
||||||
|
| KIN04REC | レコード定義(W01出力ファイル) | FILE SECTION / WORKING-STORAGE(WRITE FROM用) |
|
||||||
|
| KIN05REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION |
|
||||||
|
| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
|
||||||
|
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||||
|
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||||
|
| ZANCHKAC | 項目チェックサブPGM連絡領域 | WORKING-STORAGE |
|
||||||
|
|
||||||
|
## 使用サブプログラム
|
||||||
|
|
||||||
|
| サブPGM | 役割 | CALL箇所 |
|
||||||
|
|---------|------|---------|
|
||||||
|
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
|
||||||
|
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||||
|
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||||
|
| SUB04CHK | 日付/時刻/社員番号妥当性チェック | 2020VALIDATESOR |
|
||||||
|
|
||||||
|
## 使用DB2テーブル
|
||||||
|
|
||||||
|
なし(DB操作なし)
|
||||||
|
|
||||||
|
## 処理フロー
|
||||||
|
1. 初期処理(開始メッセージ→運用日付取得→OPEN→初回読込)
|
||||||
|
2. CSV分解(UNSTRINGで6項目に分解)
|
||||||
|
3. IF多重ネスト(THEN句)で4段階チェック
|
||||||
|
- フィールド数=6 AND 社員番号 NOT = SPACE
|
||||||
|
- SUB04CHK日付チェック
|
||||||
|
- SUB04CHK時刻チェック(出勤/退勤)
|
||||||
|
- 出勤時刻 < 退勤時刻
|
||||||
|
4. 正常→WRITE FROMでW01出力
|
||||||
|
5. 異常→W02出力(エラー区分='02')
|
||||||
|
6. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
# KIN05MAT 使用資源一覧
|
||||||
|
|
||||||
|
## プログラム概要
|
||||||
|
- **プログラムID**: KIN05MAT
|
||||||
|
- **プログラム名**: 打刻休暇照合処理
|
||||||
|
- **処理概要**: EDITED-PUNCH(打刻側)とLEAVE-DAILY(休暇側)を社員番号+日付キーで照合し、1:Nマッチング結果をKIN-LEAVE(160B)に出力する。
|
||||||
|
|
||||||
|
## 使用ファイル
|
||||||
|
|
||||||
|
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||||
|
|------|---------------|------|-------------|-----------|--------|
|
||||||
|
| KIN04W01 | EDITED-PUNCH | 順編成 | F (固定長) | 80B | KIN04REC |
|
||||||
|
| KIN02W01 | LEAVE-DAILY | 順編成 | F (固定長) | 80B | KIN02REC |
|
||||||
|
| KIN05W01 | KIN-LEAVE | 順編成 | F (固定長) | 160B | KIN03REC |
|
||||||
|
|
||||||
|
## 使用COPY句
|
||||||
|
|
||||||
|
| COPY句 | 用途 | 使用箇所 |
|
||||||
|
|--------|------|---------|
|
||||||
|
| KIN04REC | R01入力レコード定義 | FILE SECTION |
|
||||||
|
| KIN02REC | R02入力レコード定義 | FILE SECTION |
|
||||||
|
| KIN03REC | W01出力レコード定義 | FILE SECTION |
|
||||||
|
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||||
|
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||||
|
|
||||||
|
## 使用サブプログラム
|
||||||
|
|
||||||
|
| サブPGM | 役割 | CALL箇所 |
|
||||||
|
|---------|------|---------|
|
||||||
|
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||||
|
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||||
|
|
||||||
|
## 使用DB2テーブル
|
||||||
|
|
||||||
|
なし(ファイルマッチングのみ)
|
||||||
|
|
||||||
|
## 処理フロー
|
||||||
|
1. 初期処理(開始メッセージ→OPEN→R01/R02初回読込)
|
||||||
|
2. EVALUATE TRUE マッチング3分岐制御
|
||||||
|
- R01key < R02key OR R02-EOF:打刻のみ出力(LEAVE-TYPE='99')
|
||||||
|
- R01key = R02key:マッチング(N:1ループ)、休暇種別優先順位で選定
|
||||||
|
- R01key > R02key:R02のみスキップ
|
||||||
|
3. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
# KIN06CLD 使用資源一覧
|
||||||
|
|
||||||
|
## プログラム概要
|
||||||
|
- **プログラムID**: KIN06CLD
|
||||||
|
- **プログラム名**: 出勤日カレンダー生成処理
|
||||||
|
- **処理概要**: PARM指定年月の出勤日カレンダーを生成。在籍社員全員 × 当月全日をループし、休日判定を行って出勤日のみ出力。
|
||||||
|
|
||||||
|
## 使用ファイル
|
||||||
|
|
||||||
|
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||||
|
|------|---------------|------|-------------|-----------|--------|
|
||||||
|
| KIN06W01 | WORK-DAY-FILE | 順編成 | F (固定長) | 80B | KIN06REC |
|
||||||
|
|
||||||
|
## 使用COPY句
|
||||||
|
|
||||||
|
| COPY句 | 用途 | 使用箇所 |
|
||||||
|
|--------|------|---------|
|
||||||
|
| KIN06REC | OUTREC出力レコード定義 | FILE SECTION |
|
||||||
|
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||||
|
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||||
|
|
||||||
|
> 注: DBブリッジ変数(WS-SQL-STR, SQLCODE, WS-COL-IDX, WS-COL-LEN)はCOPY句`DB-COMMON`ではなく、プリプロセッサ`convert-sql.mjs`によりWORKING-STORAGEに注入される。`cpy/DB-COMMON.cpy`は存在しない。
|
||||||
|
|
||||||
|
## 使用DBテーブル
|
||||||
|
|
||||||
|
| テーブル名 | 種別 | 操作 | 備考 |
|
||||||
|
|-----------|------|------|------|
|
||||||
|
| EMP_MASTER | 参照 | SELECT (CURSOR) | 在籍社員一覧(STATUS='1') |
|
||||||
|
| HOLIDAY_CALENDAR | 参照 | SELECT | 対象月の休日一覧 |
|
||||||
|
|
||||||
|
## 使用サブプログラム
|
||||||
|
|
||||||
|
| サブPGM | 役割 | CALL箇所 |
|
||||||
|
|---------|------|---------|
|
||||||
|
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||||
|
| SUB03END | ABEND処理 | 1100PARMSOR (直接CALL、9999ABDSORセクション廃止) |
|
||||||
|
|
||||||
|
## 処理フロー
|
||||||
|
1. PARM解析(YEARMONTH取得)
|
||||||
|
2. DB接続 → 休日データ読込 → 社員CURSOR OPEN
|
||||||
|
3. 社員ループ(PERFORM UNTIL EOF)
|
||||||
|
- 日付ループ(PERFORM VARYING 当月1日〜月末日)
|
||||||
|
- PERFORM VARYING 線形探索で休日判定 + 曜日判定(部分埋めテーブルのためSEARCH ALL不使用)
|
||||||
|
- 出勤日 → WRITE FROM出力
|
||||||
|
4. CURSOR CLOSE → DB切断 → 終了処理
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
# KIN07DAI 使用資源一覧
|
||||||
|
|
||||||
|
## プログラム概要
|
||||||
|
- **プログラムID**: KIN07DAI
|
||||||
|
- **プログラム名**: 日別勤怠計算処理
|
||||||
|
- **処理概要**: WORK-DAY-FILE(出勤日カレンダー)を主駆動とし、社員番号+日付キーでKIN-LEAVE(打刻+休暇)と照合。4パターン(A/B/C/D)のEVALUATE分岐で休暇時間計算を実行し、DAILY-RECORD(200B)に出力する。
|
||||||
|
|
||||||
|
## 使用ファイル
|
||||||
|
|
||||||
|
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | 定義参照先 |
|
||||||
|
|------|---------------|------|-------------|-----------|--------|-----------|
|
||||||
|
| KIN07R01 | WORK-DAY-FILE | 順編成 | F (固定長) | 80B | KIN06REC | COPY句定義書.md |
|
||||||
|
| KIN07R02 | KIN-LEAVE | 順編成 | F (固定長) | 160B | KIN03REC | COPY句定義書.md |
|
||||||
|
| KIN07R03 | LEAVE-DAILY | 順編成 | F (固定長) | 80B | KIN02REC | COPY句定義書.md |
|
||||||
|
| KIN07W01 | DAILY-RECORD | 順編成 | F (固定長) | 200B | KIN07REC | COPY句定義書.md |
|
||||||
|
|
||||||
|
## 使用COPY句
|
||||||
|
|
||||||
|
| COPY句 | 用途 | 使用箇所 |
|
||||||
|
|--------|------|---------|
|
||||||
|
| KIN06REC | R01入力レコード定義(WORK-DAY-REC) | FILE SECTION |
|
||||||
|
| KIN03REC | R02入力レコード定義(KIN-LEAVE-REC) | FILE SECTION |
|
||||||
|
| KIN02REC | R03入力レコード定義(LEAVE-DAILY-REC) | FILE SECTION |
|
||||||
|
| KIN07REC | W01出力レコード定義(DAILY-REC) | FILE SECTION |
|
||||||
|
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||||
|
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||||
|
| ZANTIMAC | 丸めサブPGM連絡領域 | WORKING-STORAGE |
|
||||||
|
|
||||||
|
## 使用サブプログラム
|
||||||
|
|
||||||
|
| サブPGM | 役割 | CALL箇所 |
|
||||||
|
|---------|------|---------|
|
||||||
|
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||||
|
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||||
|
| SUB05TIM | 休暇時間丸め(0.1h切上) | 6100PATTERNASOR / 6300PATTERNSOR |
|
||||||
|
|
||||||
|
## 使用DB2テーブル
|
||||||
|
|
||||||
|
なし(ファイル処理のみ)
|
||||||
|
|
||||||
|
## 処理フロー
|
||||||
|
1. 初期処理(開始メッセージ→OPEN→R01/R02/R03初回読込)
|
||||||
|
2. メインループ:R01(主駆動)を基準にEVALUATEで4パターン分岐
|
||||||
|
- PATTERN-A (1): R01+R02+R03全てあり → 打刻+休暇時間計算
|
||||||
|
- PATTERN-B (2): R01+R02あり、R03なし → 打刻のみ(休暇=0)
|
||||||
|
- PATTERN-C (3): R01+R03あり、R02なし → 休暇時間計算(打刻=0000)
|
||||||
|
- PATTERN-D (4): R01のみ → 未申請欠勤=8.0h
|
||||||
|
3. 各パターン内でMULTIPLY/SUBTRACT/COMPUTE併用による時間計算、CALL SUB05TIM丸め
|
||||||
|
4. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||||
|
|
||||||
|
## 使用構文(特記事項)
|
||||||
|
|
||||||
|
| 構文 | 使用箇所 | 備考 |
|
||||||
|
|------|---------|------|
|
||||||
|
| EVALUATE | 5000PROCESS | 4パターン分岐(GO TO DEPENDING ONから変更) |
|
||||||
|
| MULTIPLY | 6100PATTERNASOR/6300PATTERNSOR | 時間→分変換 |
|
||||||
|
| SUBTRACT | 6100PATTERNASOR/6300PATTERNSOR | ランチ時間除外 |
|
||||||
|
| DIVIDE | 6100PATTERNASOR/6300PATTERNSOR | 分→時間変換 |
|
||||||
|
| COMPUTE | 6100PATTERNASOR/6300PATTERNSOR | 休暇時間端数処理 |
|
||||||
|
| CALL SUB05TIM | 6100PATTERNASOR/6300PATTERNSOR | 0.1h単位切上丸め |
|
||||||
@@ -0,0 +1,155 @@
|
|||||||
|
# 詳細設計書
|
||||||
|
|
||||||
|
## 基本情報
|
||||||
|
|
||||||
|
| # | 項目 | 内容 |
|
||||||
|
|---|------|------|
|
||||||
|
| 1 | システム名 | 勤怠休暇管理システム |
|
||||||
|
| 2 | プログラムID | KIN04CHK |
|
||||||
|
| 3 | プログラム名 | 打刻項目チェック処理 |
|
||||||
|
| 4 | PGMタイプ | メイン |
|
||||||
|
| 5 | PGMパターン | 項目チェック(重複なし) |
|
||||||
|
| 6 | 機能概要 | CSV形式の打刻データファイルを読み込み、項目チェックを行い、正常レコードをEDITED-PUNCHへ、異常レコードをERROR-LOGへ振り分ける。 |
|
||||||
|
| 7 | | チェックはIF多重ネスト(THEN句)で4段階:社員番号必須→日付妥当性→時刻妥当性→出勤<退勤 |
|
||||||
|
| 8 | | 正常出力はWRITE FROMを使用する(新規カバレッジ) |
|
||||||
|
|
||||||
|
### 前提条件
|
||||||
|
|
||||||
|
| NO | 対象ファイル | 条件 |
|
||||||
|
|----|-------------|------|
|
||||||
|
| 1 | KIN04R01(CSV) | ソート不要。CSV形式(カンマ区切り、6項目) |
|
||||||
|
|
||||||
|
### 使用ファイル一覧
|
||||||
|
|
||||||
|
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||||
|
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||||
|
| 1 | RAW-PUNCH | R01 | KIN04R01 | I | 自前(80B) | F | | 80 | PS | CSV形式 |
|
||||||
|
| 2 | EDITED-PUNCH | W01 | KIN04W01 | O | KIN04REC | FB | | 80 | PS | WRITE FROM使用 |
|
||||||
|
| 3 | ERROR-LOG | W02 | KIN04W02 | O | KIN05REC | VB | | 200 | PS | |
|
||||||
|
|
||||||
|
### キー項目一覧
|
||||||
|
|
||||||
|
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||||
|
|----|-----------|---------------------|-------------------------------------------|
|
||||||
|
| 1 | RAW-PUNCH | なし | なし |
|
||||||
|
|
||||||
|
### 使用モジュール一覧
|
||||||
|
|
||||||
|
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||||
|
|----|------|-------------|-----------|
|
||||||
|
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||||
|
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||||
|
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||||
|
| 4 | 項目チェックSUB | SUB04CHK | ZANCHKAC |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 処理詳細
|
||||||
|
|
||||||
|
```
|
||||||
|
1.初期処理(1000ITTSOR)
|
||||||
|
1-1.開始メッセージ出力
|
||||||
|
【メッセージ編集】
|
||||||
|
メッセージ番号:1(開始メッセージ)
|
||||||
|
1-2.コンパイル日時出力
|
||||||
|
【メッセージ編集】
|
||||||
|
メッセージ番号:33(コンパイル日時)
|
||||||
|
PARM1:コンパイル日時
|
||||||
|
PARM2:'COMPILED'
|
||||||
|
1-3.ワークエリアの初期化
|
||||||
|
1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||||
|
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||||
|
【メッセージ編集】
|
||||||
|
メッセージ番号:5(サブエラー)
|
||||||
|
PARM1:'SUB01DAT'
|
||||||
|
PARM2:復帰コード
|
||||||
|
【ABEND処理SUB】
|
||||||
|
ABENDコード:999
|
||||||
|
1-5.使用ファイルのオープン(R01:入力、W01/W02:出力)
|
||||||
|
1-6.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||||
|
|
||||||
|
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||||
|
2-1.CSVの分解(2010CSVSOR)
|
||||||
|
UNSTRINGでカンマ区切りのCSVを6項目に分解する。
|
||||||
|
(EMP-ID, DATE, TIME-IN, TIME-OUT, DEPT-ID, TERMINAL)
|
||||||
|
2.1.5.社員番号チェック(2021EMPIDSOR)
|
||||||
|
SUB04CHK('EMPID')により社員番号のフォーマットチェックを実施する。
|
||||||
|
SUB04CHKの復帰コードにより正常/異常を判定する。
|
||||||
|
2-2.IF多重ネストチェック(2020VALIDATESOR)
|
||||||
|
第1段階: フィールド数チェック + 社員番号チェック(2021EMPIDSOR)
|
||||||
|
IF フィールド数=6 THEN
|
||||||
|
2021EMPIDSORを実行
|
||||||
|
IF 社員番号正常 THEN
|
||||||
|
SUB04CHK('DATE')で日付チェック
|
||||||
|
IF 正常 THEN
|
||||||
|
SUB04CHK('TIME')で時刻チェック(出勤)
|
||||||
|
IF 正常 THEN
|
||||||
|
SUB04CHK('TIME')で時刻チェック(退勤)
|
||||||
|
IF 正常 THEN
|
||||||
|
IF 出勤時刻 < 退勤時刻 THEN
|
||||||
|
WRITE FROMでW01出力(2050NORMSOR)
|
||||||
|
ELSE
|
||||||
|
エラー区分='02'でW02出力(2090ERRORSOR)
|
||||||
|
END-IF
|
||||||
|
ELSE
|
||||||
|
エラー区分='02'でW02出力(2090ERRORSOR)
|
||||||
|
END-IF
|
||||||
|
ELSE
|
||||||
|
エラー区分='02'でW02出力(2090ERRORSOR)
|
||||||
|
END-IF
|
||||||
|
ELSE
|
||||||
|
エラー区分='02'でW02出力(2090ERRORSOR)
|
||||||
|
END-IF
|
||||||
|
ELSE
|
||||||
|
エラー区分='02'でW02出力(2090ERRORSOR)
|
||||||
|
END-IF
|
||||||
|
ELSE
|
||||||
|
エラー区分='02'でW02出力(2090ERRORSOR)
|
||||||
|
END-IF
|
||||||
|
|
||||||
|
2021EMPIDSOR (社員番号チェック)
|
||||||
|
本Paragraphは2020VALIDATESORの第1段階(フィールド数OK時)に
|
||||||
|
PERFORMされる。
|
||||||
|
SUB04CHK('EMPID')により社員番号のフォーマットチェックを実施する。
|
||||||
|
復帰コード=ZEROなら正常、≠ZEROなら異常として呼び出し元に戻る。
|
||||||
|
|
||||||
|
2-3.R01を読み込む。(1100R01INNSOR)(2件目以降)
|
||||||
|
|
||||||
|
3.終了処理(3000STPSOR)
|
||||||
|
3-1.入出力ファイルのクローズ
|
||||||
|
3-2.入出力件数出力メッセージ出力
|
||||||
|
【入力メッセージ編集】
|
||||||
|
メッセージ番号:6(入力件数メッセージ)
|
||||||
|
PARM1:'KIN04R01'
|
||||||
|
PARM2:当該入力ファイルの件数
|
||||||
|
【出力メッセージ編集】
|
||||||
|
メッセージ番号:7(出力件数メッセージ)
|
||||||
|
PARM1:'KIN04W01'、'KIN04W02'
|
||||||
|
PARM2:当該出力ファイルの件数
|
||||||
|
3-3.終了メッセージ出力
|
||||||
|
【メッセージ編集】
|
||||||
|
メッセージ番号:2(終了メッセージ)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 出力レコード定義
|
||||||
|
|
||||||
|
### 出力ファイル1(W01/EDITED-PUNCH) KIN04REC 80B FB
|
||||||
|
|
||||||
|
| No | 項目名 | 設定元 | 備考 |
|
||||||
|
|----|--------|--------|------|
|
||||||
|
| 1 | EMP-ID | WRK-CSV-EMP-ID | 社員番号 |
|
||||||
|
| 2 | WORK-DATE | WRK-CSV-DATE | YYYYMMDD |
|
||||||
|
| 3 | STR-TIME | WRK-CSV-TIME-IN | HHMM |
|
||||||
|
| 4 | END-TIME | WRK-CSV-TIME-OUT | HHMM |
|
||||||
|
| 5 | DEPT-ID | WRK-CSV-DEPT-ID | 部署ID |
|
||||||
|
| 6 | TERMINAL | WRK-CSV-TERMINAL | 端末ID |
|
||||||
|
| 7 | FILLER | SPACE | 46B |
|
||||||
|
|
||||||
|
### 出力ファイル2(W02/ERROR-LOG) KIN05REC 200B VB
|
||||||
|
|
||||||
|
| No | 項目名 | 設定元 | 備考 |
|
||||||
|
|----|--------|--------|------|
|
||||||
|
| 1 | ERR-CATEGORY | '02'固定 | 打刻エラー |
|
||||||
|
| 2 | ERR-DETAIL | STRING編集 | エラー内容(198B) |
|
||||||
@@ -0,0 +1,128 @@
|
|||||||
|
# 詳細設計書
|
||||||
|
|
||||||
|
## 基本情報
|
||||||
|
|
||||||
|
| # | 項目 | 内容 |
|
||||||
|
|---|------|------|
|
||||||
|
| 1 | システム名 | 勤怠休暇管理システム |
|
||||||
|
| 2 | プログラムID | KIN05MAT |
|
||||||
|
| 3 | プログラム名 | 打刻休暇照合処理 |
|
||||||
|
| 4 | PGMタイプ | メイン |
|
||||||
|
| 5 | PGMパターン | マッチング(1:N) |
|
||||||
|
| 6 | 機能概要 | EDITED-PUNCH(打刻側、R01)とLEAVE-DAILY(休暇側、R02)を社員番号+日付キーで照合し、KIN-LEAVE(160B)に出力する。R01側が主駆動で、1件の打刻に対してN件の休暇レコードが存在しうる(1:N)。 |
|
||||||
|
| 7 | | マッチング制御はEVALUATE TRUEで3分岐:R01key<R02key(打刻のみ)、R01key=R02key(マッチ)、R01key>R02key(休暇のみスキップ)。 |
|
||||||
|
| 8 | | マッチ時は休暇種別優先順位(01>02>03>04)で最適な1件を選定し、KIN-LEAVEに出力する。 |
|
||||||
|
|
||||||
|
### 前提条件
|
||||||
|
|
||||||
|
| NO | 対象ファイル | 条件 |
|
||||||
|
|----|-------------|------|
|
||||||
|
| 1 | KIN04W01(R01) | 社員番号+日付で昇順ソート済み(JCL SORT KINJ022) |
|
||||||
|
| 2 | KIN02W01(R02) | 社員番号+日付で昇順ソート済み(KIN03EXP出力保証) |
|
||||||
|
|
||||||
|
### 使用ファイル一覧
|
||||||
|
|
||||||
|
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||||
|
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||||
|
| 1 | EDITED-PUNCH | R01 | KIN04W01 | I | KIN04REC | FB | | 80 | PS | 打刻側、主駆動 |
|
||||||
|
| 2 | LEAVE-DAILY | R02 | KIN02W01 | I | KIN02REC | FB | | 80 | PS | 休暇側、N件あり |
|
||||||
|
| 3 | KIN-LEAVE | W01 | KIN05W01 | O | KIN03REC | FB | | 160 | PS | 照合結果 |
|
||||||
|
|
||||||
|
### ファイルステータス
|
||||||
|
|
||||||
|
| ファイル | DD名 | ファイルステータス項目 |
|
||||||
|
|---------|------|---------------------|
|
||||||
|
| EDITED-PUNCH(R01) | KIN04W01 | WS-R01-STATUS |
|
||||||
|
| LEAVE-DAILY(R02) | KIN02W01 | WS-R02-STATUS |
|
||||||
|
| KIN-LEAVE(W01) | KIN05W01 | WS-W01-STATUS |
|
||||||
|
|
||||||
|
### キー項目一覧
|
||||||
|
|
||||||
|
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||||
|
|----|-----------|---------------------|-------------------------------------------|
|
||||||
|
| 1 | EDITED-PUNCH | 社員番号(1-8B)+日付(9-16B) | 主キー(R01) |
|
||||||
|
| 2 | LEAVE-DAILY | 社員番号(1-8B)+日付(9-16B) | 従キー(R02)、N件あり |
|
||||||
|
|
||||||
|
### 使用モジュール一覧
|
||||||
|
|
||||||
|
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||||
|
|----|------|-------------|-----------|
|
||||||
|
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||||
|
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 処理詳細
|
||||||
|
|
||||||
|
```
|
||||||
|
1.初期処理(1000ITTSOR)
|
||||||
|
1-1.開始メッセージ出力
|
||||||
|
【メッセージ編集】
|
||||||
|
メッセージ番号:1(開始メッセージ)
|
||||||
|
1-2.コンパイル日時出力
|
||||||
|
【メッセージ編集】
|
||||||
|
メッセージ番号:33(コンパイル日時)
|
||||||
|
PARM1:コンパイル日時
|
||||||
|
PARM2:'COMPILED'
|
||||||
|
1-3.ワークエリアの初期化
|
||||||
|
1-4.使用ファイルのオープン(R01/R02:入力、W01:出力)
|
||||||
|
1-4-1.OPENチェック
|
||||||
|
各ファイルのFILE STATUS(WS-R01-STATUS/WS-R02-STATUS/WS-W01-STATUS)を確認
|
||||||
|
ステータス≠00の場合、SUB03END(ZANENDAC)で異常終了
|
||||||
|
1-5.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||||
|
1-6.R02を読み込む。(1200R02INNSOR)(1回目)
|
||||||
|
|
||||||
|
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||||
|
2-1.R02キー設定
|
||||||
|
R02が有効な場合、R02レコードからWRK-R02KEYを設定。
|
||||||
|
2-2.EVALUATE TRUE マッチング制御
|
||||||
|
WHEN R01key < R02key OR R02-EOF:
|
||||||
|
打刻のみ(休暇なし)→ KIN-LEAVE出力(LEAVE-TYPE='99', HOURS=0)
|
||||||
|
R01を次へ読み込み
|
||||||
|
WHEN R01key = R02key:
|
||||||
|
マッチング処理実行(2020MATCHSOR)
|
||||||
|
R01を次へ読み込み
|
||||||
|
R02も次へ読み込み(N:1の場合はループ内で全R02処理)
|
||||||
|
WHEN R01key > R02key:
|
||||||
|
R02のみ(該当打刻なし)→ スキップ
|
||||||
|
R02を次へ読み込み
|
||||||
|
2-3.上記をR01終了まで繰り返す。
|
||||||
|
|
||||||
|
3.マッチング処理(2020MATCHSOR)
|
||||||
|
R02がEOFになるか、キーが変わるまで、以下のループを実行:
|
||||||
|
3-1.現在のR02レコードから休暇種別・時刻・申請IDを取得
|
||||||
|
3-2.選定ロジック:
|
||||||
|
- 初回 → ベストとして保持
|
||||||
|
- 既にベストあり → 優先順位で比較(01>02>03>04)
|
||||||
|
- 同種別 → 申請IDの小さい方を採用
|
||||||
|
3-3.R02を次へ読み込み
|
||||||
|
3-4.キーが一致しなくなるかR02-EOFまで3-1〜3-3を繰り返す
|
||||||
|
3-5.ベストの休暇情報をKIN-LEAVEに出力
|
||||||
|
ベストがない場合は'99'として出力
|
||||||
|
|
||||||
|
4.終了処理(3000STPSOR)
|
||||||
|
4-1.入出力ファイルのクローズ
|
||||||
|
4-2.入出力件数出力メッセージ出力
|
||||||
|
4-3.終了メッセージ出力
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 出力レコード定義
|
||||||
|
|
||||||
|
### 出力ファイル(W01/KIN-LEAVE) KIN03REC 160B FB
|
||||||
|
|
||||||
|
| No | 項目名 | 設定元 | 備考 |
|
||||||
|
|----|--------|--------|------|
|
||||||
|
| 1 | EMP-ID | R01EMP-ID | 打刻情報(1-80BはEDITED-PUNCHと同一) |
|
||||||
|
| 2 | WORK-DATE | R01WORK-DATE | |
|
||||||
|
| 3 | STR-TIME | R01STR-TIME | |
|
||||||
|
| 4 | END-TIME | R01END-TIME | |
|
||||||
|
| 5 | DEPT-ID | R01DEPT-ID | |
|
||||||
|
| 6 | TERMINAL | R01TERMINAL | |
|
||||||
|
| 7-13 | 休暇情報 | マッチ結果 | 81-160B |
|
||||||
|
| 7 | LEAVE-TYPE | 選定結果 | '01'〜'04' or '99' |
|
||||||
|
| 8 | LEAVE-STR-TIME | 選定したR02START-TIME | |
|
||||||
|
| 9 | LEAVE-END-TIME | 選定したR02END-TIME | |
|
||||||
|
| 10 | LEAVE-HOURS | ZERO | KIN07DAIで後に計算 |
|
||||||
|
| 11 | APPLICATION-ID | 選定したR02APPL-ID | 該当なしはZERO |
|
||||||
@@ -0,0 +1,116 @@
|
|||||||
|
# 詳細設計書
|
||||||
|
|
||||||
|
## 基本情報
|
||||||
|
|
||||||
|
| # | 項目 | 内容 |
|
||||||
|
|---|------|------|
|
||||||
|
| 1 | システム名 | 勤怠休暇管理システム |
|
||||||
|
| 2 | プログラムID | KIN06CLD |
|
||||||
|
| 3 | プログラム名 | 出勤日カレンダー生成処理 |
|
||||||
|
| 4 | PGMタイプ | メイン |
|
||||||
|
| 5 | PGMパターン | レイアウト編集のみ(GETPUT) |
|
||||||
|
| 6 | 機能概要 | PARMで指定された年月の出勤日カレンダーを生成する。在籍社員一覧をDBから取得し、各社員について当月1日〜月末日をPERFORM VARYINGでループ。休日判定(PERFORM VARYING線形探索 + 曜日判定)を行い、出勤日のみWORK-DAY-FILEに出力する。 |
|
||||||
|
|
||||||
|
### 前提条件
|
||||||
|
|
||||||
|
| NO | 対象ファイル/DB | 条件 |
|
||||||
|
|----|----------------|------|
|
||||||
|
| 1 | EMP_MASTER | 在籍社員(STATUS='1')が登録済みであること |
|
||||||
|
| 2 | HOLIDAY_CALENDAR | 対象年月の休日が登録済みであること |
|
||||||
|
|
||||||
|
### PARM引数
|
||||||
|
|
||||||
|
コマンドラインで `YEARMONTH=YYYYMM` 形式で指定。必須。
|
||||||
|
|
||||||
|
### 使用ファイル一覧
|
||||||
|
|
||||||
|
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 |
|
||||||
|
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|
|
||||||
|
| 1 | WORK-DAY-FILE | OUTREC | KIN06W01 | O | KIN06REC | FB | | 80 | PS |
|
||||||
|
|
||||||
|
### 使用DBテーブル
|
||||||
|
|
||||||
|
| NO | テーブル名 | 処理内容 |
|
||||||
|
|----|-----------|---------|
|
||||||
|
| 1 | EMP_MASTER | SELECT EMP_ID WHERE STATUS='1' ORDER BY EMP_ID (CURSOR) |
|
||||||
|
| 2 | HOLIDAY_CALENDAR | SELECT HOLIDAY_DATE WHERE HOLIDAY_DATE LIKE 'YYYYMM%' → WORKING-STORAGE格納 |
|
||||||
|
|
||||||
|
### 使用モジュール一覧
|
||||||
|
|
||||||
|
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||||
|
|----|------|-------------|-----------|
|
||||||
|
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||||
|
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 処理詳細
|
||||||
|
|
||||||
|
```
|
||||||
|
1.初期処理(1000ITTSOR)
|
||||||
|
1-1.開始メッセージ出力
|
||||||
|
【メッセージ編集】
|
||||||
|
メッセージ番号:1(開始メッセージ)
|
||||||
|
1-2.コンパイル日時出力
|
||||||
|
【メッセージ編集】
|
||||||
|
メッセージ番号:33(コンパイル日時)
|
||||||
|
PARM1:コンパイル日時
|
||||||
|
PARM2:'COMPILED'
|
||||||
|
1-3.PARM解析(YEARMONTH=YYYYMM から対象年月を抽出)
|
||||||
|
必須チェック:PARMなし→ABEND
|
||||||
|
形式チェック:YEARMONTH= から始まること
|
||||||
|
値範囲:XXXX01〜XXXX12
|
||||||
|
月チェック(1-12): WRK-MONTH < 1 OR > 12 → ABEND(CALL SUB03END)
|
||||||
|
1-4.ワークエリア初期化
|
||||||
|
1-5.DB接続(EXEC SQL CONNECT TO 'data/kin.db')
|
||||||
|
1-6.休日データ読込(HOLIDAY_CALENDARから対象月の祝日をSELECT)
|
||||||
|
テーブルに格納(PERFORM VARYING線形探索用)
|
||||||
|
【ガード】HOLIDAY-COUNTが50未満の場合のみADD+参照を行う(テーブル溢れ防止)
|
||||||
|
ループ条件で HOLIDAY-COUNT < 50 をチェック(HOLIDAY-COUNT PIC 9(2)対応)
|
||||||
|
1-7.出力ファイルOPEN
|
||||||
|
1-8.社員一覧取得(EMP_MASTER CURSOR OPEN→初回FETCH)
|
||||||
|
|
||||||
|
2.主処理(2000MAJSOR)(社員EOFまで下記を繰り返す)
|
||||||
|
2-1.当月1日〜月末日をループ(PERFORM VARYING)
|
||||||
|
2-1-1.日付文字列構築(YYYYMMDD)
|
||||||
|
2-1-2.曜日計算(INTEGER-OF-DATE)
|
||||||
|
- INTEGER-OF-DATE('YYYYMMDD') で通算日数を取得
|
||||||
|
- MOD(通算日数, 7) で曜日:0=日, 1=月, 2=火, …, 6=土
|
||||||
|
2-1-3.休日判定(PERFORM VARYING線形探索)
|
||||||
|
祝日テーブルを先頭から線形探索(部分埋めテーブル対応のためSEARCH ALL不使用)
|
||||||
|
2-1-4.曜日判定
|
||||||
|
土曜(0) または 日曜(6)→休日としてスキップ(CONTINUE)
|
||||||
|
2-1-5.出勤日 → WRITE FROMで出力(社員番号+日付+曜日)
|
||||||
|
2-2.次の社員をFETCH
|
||||||
|
|
||||||
|
3.終了処理(3000STPSOR)
|
||||||
|
3-1.CURSOR CLOSE
|
||||||
|
3-2.DB切断
|
||||||
|
3-3.出力ファイルCLOSE
|
||||||
|
3-4.出力件数メッセージ出力
|
||||||
|
3-5.終了メッセージ出力
|
||||||
|
```
|
||||||
|
|
||||||
|
### 曜日計算
|
||||||
|
|
||||||
|
INTEGER-OF-DATE('YYYYMMDD') は1601-01-01からの通算日数を返す。
|
||||||
|
- 1601-01-01 = Monday → MOD(x,7):0=Sun, 1=Mon, 2=Tue, 3=Wed, 4=Thu, 5=Fri, 6=Sat
|
||||||
|
|
||||||
|
### 休日判定ロジック
|
||||||
|
|
||||||
|
1. HOLIDAY_CALENDARに日付が存在する → 休日(PERFORM VARYING線形探索)
|
||||||
|
2. 曜日が土曜(6)または日曜(0) → 休日
|
||||||
|
3. 上記以外 → 出勤日
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 出力レコード定義
|
||||||
|
|
||||||
|
### 出力ファイル(OUTREC/WORK-DAY-FILE)KIN06REC 80B FB
|
||||||
|
|
||||||
|
| No | 項目名 | 設定元 | 属性 | 備考 |
|
||||||
|
|----|--------|--------|------|------|
|
||||||
|
| 1 | EMP-ID | 社員マスタのEMP_ID | X(8) | 社員番号 |
|
||||||
|
| 2 | DATE | ループ変数 | 9(8) | YYYYMMDD |
|
||||||
|
| 3 | DAY-OF-WEEK | 曜日計算結果 | 9(1) | 1=月…7=日 |
|
||||||
|
| 4 | FILLER | SPACE | X(63) | |
|
||||||
@@ -0,0 +1,167 @@
|
|||||||
|
# 詳細設計書
|
||||||
|
|
||||||
|
## 基本情報
|
||||||
|
|
||||||
|
| # | 項目 | 内容 |
|
||||||
|
|---|------|------|
|
||||||
|
| 1 | システム名 | 勤怠休暇管理システム |
|
||||||
|
| 2 | プログラムID | KIN07DAI |
|
||||||
|
| 3 | プログラム名 | 日別勤怠計算処理 |
|
||||||
|
| 4 | PGMタイプ | メイン |
|
||||||
|
| 5 | PGMパターン | マッチング(1:N) + EVALUATE 4パターン分岐 |
|
||||||
|
| 6 | 機能概要 | WORK-DAY-FILE(主駆動)とKIN-LEAVE/LEAVE-DAILYを社員番号+日付で照合し、 |
|
||||||
|
| 7 | | 4パターンに分岐して日別勤怠記録(DAILY-RECORD)を出力する。 |
|
||||||
|
| 8 | | パターンA: 打刻+休暇あり / B: 打刻のみ / C: 休暇のみ / D: 欠勤 |
|
||||||
|
| 9 | | 休暇時間はランチ除外+0.1h切上丸め。MULTIPLY/SUBTRACT時間計算。 |
|
||||||
|
|
||||||
|
### 前提条件
|
||||||
|
|
||||||
|
| NO | 対象ファイル | 条件 |
|
||||||
|
|----|-------------|------|
|
||||||
|
| 1 | R01(WORK-DAY-FILE) | 社員番号+日付の昇順でソートされていること |
|
||||||
|
| 2 | R02(KIN-LEAVE) | 社員番号+日付の昇順でソートされていること |
|
||||||
|
| 3 | R03(LEAVE-DAILY) | 社員番号+日付の昇順でソートされていること |
|
||||||
|
|
||||||
|
### 使用ファイル一覧
|
||||||
|
|
||||||
|
| NO | 使用ファイル名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||||
|
|----|---------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||||
|
| 1 | WORK-DAY-FILE | R01 | KIN07R01 | I | KIN06REC | FB | | 80 | PS | 出勤日カレンダー(COPY句定義書.md参照) |
|
||||||
|
| 2 | KIN-LEAVE | R02 | KIN07R02 | I | KIN03REC | FB | | 160 | PS | 打刻+休暇照合結果(COPY句定義書.md参照) |
|
||||||
|
| 3 | LEAVE-DAILY | R03 | KIN07R03 | I | KIN02REC | FB | | 80 | PS | 日別展開休暇(COPY句定義書.md参照) |
|
||||||
|
| 4 | DAILY-RECORD | W01 | KIN07W01 | O | KIN07REC | FB | | 200 | PS | 日別勤怠計算結果(COPY句定義書.md参照) |
|
||||||
|
| 5 | ERROR-LOG | W02 | KIN07E01 | O | KIN05REC | VB | | 200 | PS | エラーログ(COPY句定義書.md参照) |
|
||||||
|
|
||||||
|
### キー項目一覧
|
||||||
|
|
||||||
|
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||||
|
|----|-----------|---------------------|-------------------------------------------|
|
||||||
|
| 1 | ファイルR01 | 社員番号>日付(昇順) | 社員番号+日付(マッチングキー) |
|
||||||
|
| 2 | ファイルR02 | 社員番号>日付(昇順) | 社員番号+日付(マッチングキー) |
|
||||||
|
| 3 | ファイルR03 | 社員番号>日付(昇順) | 社員番号+日付(マッチングキー) |
|
||||||
|
|
||||||
|
### 使用モジュール一覧
|
||||||
|
|
||||||
|
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||||
|
|----|------|-------------|-----------|
|
||||||
|
| 1 | メッセージ編集出力 | SUB02MSG | ZANMSGAC |
|
||||||
|
| 2 | ABEND処理 | SUB03END | ZANENDAC |
|
||||||
|
| 3 | 時刻丸め計算(0.1h切上) | SUB05TIM | ZANTIMAC |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 処理詳細
|
||||||
|
|
||||||
|
```
|
||||||
|
1.初期処理 (1000ITTSOR)
|
||||||
|
1-1.開始メッセージ出力
|
||||||
|
【メッセージ編集】
|
||||||
|
メッセージ番号:1(開始メッセージ)
|
||||||
|
1-2.コンパイル日時出力
|
||||||
|
【メッセージ編集】
|
||||||
|
メッセージ番号:33(コンパイル日時)
|
||||||
|
PARM1:コンパイル日時
|
||||||
|
PARM2:'COMPILED'
|
||||||
|
1-3.ワークエリアの初期化(INITIALIZE WRKARA)
|
||||||
|
1-4.入出力ファイルOPEN
|
||||||
|
INPUT: R01INNFIL, R02INNFIL, R03INNFIL
|
||||||
|
OUTPUT: W01OUTFIL, W02OUTFIL
|
||||||
|
1-5.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||||
|
1-6.R02を読み込む。(1200R02INNSOR)(1回目)
|
||||||
|
1-7.R03を読み込む。(1300R03INNSOR)(1回目)
|
||||||
|
|
||||||
|
2.主処理 (2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||||
|
2-1.キー比較:R01とR02/R03のキーを比較し、PATTERN-NUMを設定
|
||||||
|
【MULTIPLY使用】時間→分換算時にMULTIPLY文を使用
|
||||||
|
【SUBTRACT使用】ランチ除外時にSUBTRACT文を使用
|
||||||
|
2-2.パターン判定(EVALUATE)
|
||||||
|
EVALUATE PATTERN-NUM
|
||||||
|
WHEN 1 → PERFORM 6100PATTERNASOR (打刻+休暇)
|
||||||
|
WHEN 2 → PERFORM 6200PATTERNSOR (打刻のみ)
|
||||||
|
WHEN 3 → PERFORM 6300PATTERNSOR (休暇のみ)
|
||||||
|
WHEN 4 → PERFORM 6400PATTERNSOR (欠勤)
|
||||||
|
END-EVALUATE
|
||||||
|
|
||||||
|
2-3.【パターンA(6100PATTERNASOR)】:R01+R02+R03(打刻+休暇)
|
||||||
|
2-3-1.打刻情報設定:R02の出勤時刻/退勤時刻をDAILY-RECORDに設定
|
||||||
|
2-3-2.休暇時間計算:R03の開始時刻/終了時刻からランチ除外+丸め計算
|
||||||
|
MULTIPLY: WRK-START-HOUR × 60 GIVING WRK-START-MIN(時→分変換)
|
||||||
|
SUBTRACT: ランチ時間(60分)をWRK-START-MINから除外
|
||||||
|
2-3-3.SUB05TIM呼出(モード1:0.1h切上)
|
||||||
|
【CALL 'SUB05TIM'】
|
||||||
|
CALL 'SUB05TIM' USING T01TIMPAR
|
||||||
|
T01TIMHRS=WRK-LEAVE-HOURS, T01TIMRRC=1(0.1h切上モード)
|
||||||
|
T01TIMOUTをWRK-LEAVE-HOURSに退避
|
||||||
|
2-3-4.DAILY-RECORD出力
|
||||||
|
2-3-5.R01/R02/R03次読込
|
||||||
|
|
||||||
|
2-4.【パターンB(6200PATTERNSOR)】:R01+R02のみ(打刻のみ)
|
||||||
|
2-4-1.打刻情報設定:R02の出勤時刻/退勤時刻をDAILY-RECORDに設定
|
||||||
|
2-4-2.休暇時間=0, 欠勤=0
|
||||||
|
2-4-3.DAILY-RECORD出力
|
||||||
|
2-4-4.R01/R02次読込(R03はキー不一致のため読込済み)
|
||||||
|
|
||||||
|
2-5.【パターンC(6300PATTERNSOR)】:R01+R03のみ(休暇のみ)
|
||||||
|
2-5-1.打刻情報=0000
|
||||||
|
2-5-2.休暇時間計算:ランチ除外+丸め(所定労働時間8h上限)
|
||||||
|
MULTIPLY/SUBTRACT使用(パターンAと同様)
|
||||||
|
WRK-LEAVE-HOURS > 8.0 → 8.0に制限
|
||||||
|
2-5-3.SUB05TIM呼出(モード1:0.1h切上)
|
||||||
|
2-5-4.DAILY-RECORD出力
|
||||||
|
2-5-5.R01/R03次読込(R02はキー不一致のため読込済み)
|
||||||
|
|
||||||
|
2-6.【パターンD(6400PATTERNSOR)】:R01のみ(欠勤)
|
||||||
|
2-6-1.打刻情報=0000, 休暇=0
|
||||||
|
2-6-2.未申請欠勤=8.0h
|
||||||
|
2-6-3.DAILY-RECORD出力
|
||||||
|
2-6-4.R01次読込(R02/R03はキー不一致のため読込済み)
|
||||||
|
|
||||||
|
2-7.各パターンセクションはPERFORMで呼び出され、EXITで自動復帰
|
||||||
|
主処理ループ(2000MAJSOR)に戻り、次のR01レコードを処理する。
|
||||||
|
|
||||||
|
3.終了処理(3000STPSOR)
|
||||||
|
3-1.入出力ファイルのクローズ
|
||||||
|
3-2.入出力件数出力
|
||||||
|
【メッセージ編集】
|
||||||
|
メッセージ番号:6(入力件数)
|
||||||
|
PARM1:該当ファイルDD名
|
||||||
|
PARM2:該当ファイル件数
|
||||||
|
メッセージ番号:7(出力件数)
|
||||||
|
PARM1:該当ファイルDD名
|
||||||
|
PARM2:該当ファイル件数
|
||||||
|
3-3.終了メッセージ出力
|
||||||
|
【メッセージ編集】
|
||||||
|
メッセージ番号:2(終了メッセージ)
|
||||||
|
|
||||||
|
4.メッセージ出力(4000MSGOUTSOR)
|
||||||
|
SUB02MSG呼出し
|
||||||
|
|
||||||
|
9.ABEND処理(9999ABDSOR)
|
||||||
|
SUB03END呼出し
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 出力レコード定義
|
||||||
|
|
||||||
|
### 出力ファイル1(W01: DAILY-RECORD)
|
||||||
|
|
||||||
|
| No | 項目名 | 設定元 | 備考 |
|
||||||
|
|----|--------|--------|------|
|
||||||
|
| 1 | SD-EMP-ID | SW-EMP-ID(R01) | 社員番号 |
|
||||||
|
| 2 | SD-DATE | SW-DATE(R01) | YYYYMMDD |
|
||||||
|
| 3 | SD-TIME-IN | SR-STR-TIME(R02) or '0000' | 出勤時刻(パターンC/Dは0000) |
|
||||||
|
| 4 | SD-TIME-OUT | SR-END-TIME(R02) or '0000' | 退勤時刻(パターンC/Dは0000) |
|
||||||
|
| 5 | SD-ANNUAL-H | R03(LEAVE-TYPE='01')より計算 | 年休使用時間(ランチ除外+丸め) |
|
||||||
|
| 6 | SD-PERSONAL-H | R03(LEAVE-TYPE='02')より計算 | 事假時間 |
|
||||||
|
| 7 | SD-OFFICIAL-H | R03(LEAVE-TYPE='03')より計算 | 因公特批假時間 |
|
||||||
|
| 8 | SD-SICK-H | R03(LEAVE-TYPE='04')より計算 | 病欠時間 |
|
||||||
|
| 9 | SD-ABSENT-H | パターンDのみ8.0固定 | 未申請欠勤時間 |
|
||||||
|
| 10 | SD-FILLER | SPACE | 予備領域 |
|
||||||
|
|
||||||
|
### 出力ファイル2(W02: ERROR-LOG)
|
||||||
|
|
||||||
|
| No | 項目名 | 設定元 | 備考 |
|
||||||
|
|----|--------|--------|------|
|
||||||
|
| 1 | WEERR-CATEGORY | '99'固定 | エラー区分(未使用だが予約) |
|
||||||
|
| 2 | WEERR-DETAIL | STRING編集 | エラー詳細(SUB05TIM異常時等) |
|
||||||
Reference in New Issue
Block a user