Subsystem A KIN04-07追加、KIN02UPD/KIN03EXP更新(APPLICATION_ID対応+br_get_colバグ修正)、テスト済み全シナリオPASS
This commit is contained in:
+111
-94
@@ -1,22 +1,22 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. KIN02UPD.
|
||||
*****************************************************************
|
||||
* システム名 : 勤怠休暇管理システム *
|
||||
* プログラムID : KIN02UPD *
|
||||
* プログラム名 : 休暇申請DB更新処理 *
|
||||
* 作成日 : 2026-06-17 *
|
||||
* 処理概要 : WORK-LEAVEの各レコードをDB2テーブル *
|
||||
* LEAVE_RECORDSに反映する。 *
|
||||
* ステータスに応じて新規登録(INSERT)、 *
|
||||
* システム名 : 勤怠休暇管理システム *
|
||||
* プログラムID : KIN02UPD *
|
||||
* プログラム名 : 休暇申請DB更新処理 *
|
||||
* 作成日 : 2026-06-17 *
|
||||
* 処理概要 : WORK-LEAVEの各レコードをDB2テーブル *
|
||||
* LEAVE_RECORDSに反映する。 *
|
||||
* ステータスに応じて新規登録(INSERT)、 *
|
||||
* 変更(DELETE+INSERT)、取消(DELETE)を行う。 *
|
||||
* *
|
||||
* *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 26-06-17 @@@ 新規作成 *
|
||||
* *
|
||||
* 26-06-17 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
@@ -32,7 +32,7 @@
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* R01 (WORK-LEAVE) 80B FB *
|
||||
* R01 (WORK-LEAVE) 80B FB *
|
||||
*****************************************************************
|
||||
FD R01INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
@@ -43,7 +43,7 @@
|
||||
*
|
||||
*
|
||||
*****************************************************************
|
||||
* W01 (ERROR-LOG) 200B VB *
|
||||
* W01 (ERROR-LOG) 200B VB *
|
||||
*****************************************************************
|
||||
FD W01OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
@@ -55,12 +55,12 @@
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* SQLCA *
|
||||
* SQLCA *
|
||||
*****************************************************************
|
||||
EXEC SQL INCLUDE SQLCA END-EXEC.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'KIN02UPD'.
|
||||
@@ -74,7 +74,7 @@
|
||||
03 CNS-KN0002 PIC 9(001) VALUE 2.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
01 CUNARA.
|
||||
03 CUN-R01INN PIC S9(009) COMP-3
|
||||
@@ -89,15 +89,16 @@
|
||||
VALUE ZERO.
|
||||
*
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
*** EOF判定
|
||||
03 WRK-R01EOF PIC X(001).
|
||||
88 WRK-R01-EOF VALUE '1'.
|
||||
*** SQL用ホスト変数
|
||||
03 WS-APPL-ID PIC 9(009).
|
||||
03 WS-EMP-ID PIC X(008).
|
||||
03 WS-APPL-ID PIC 9(009).
|
||||
03 WS-NEXT-APPL-ID PIC 9(009).
|
||||
03 WS-EMP-ID PIC X(008).
|
||||
03 WS-LEAVE-TYPE PIC X(002).
|
||||
03 WS-START-DATE PIC X(008).
|
||||
03 WS-START-TIME PIC X(004).
|
||||
@@ -111,7 +112,7 @@
|
||||
03 WRK-ERR-DETAIL PIC X(198).
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
*** メッセージ編集出力SR用
|
||||
COPY ZANMSGAC.
|
||||
@@ -120,9 +121,9 @@
|
||||
*
|
||||
PROCEDURE DIVISION.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
* 処理概要 : メインコントロール処理 *
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
* 処理概要 : メインコントロール処理 *
|
||||
*****************************************************************
|
||||
0000MAJCOLSOR SECTION.
|
||||
*
|
||||
@@ -139,9 +140,9 @@
|
||||
0000MAJCOLSOR-EXT.
|
||||
GOBACK.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.0) *
|
||||
* サブモジュール名: 初期処理 *
|
||||
* 処理概要 : 開始メッセージ出力・各種初期化処理 *
|
||||
* サブモジュールNO: (1.0) *
|
||||
* サブモジュール名: 初期処理 *
|
||||
* 処理概要 : 開始メッセージ出力・各種初期化処理 *
|
||||
*****************************************************************
|
||||
1000ITTSOR SECTION.
|
||||
*
|
||||
@@ -164,19 +165,30 @@
|
||||
EXEC SQL CONNECT TO 'data/kin.db' END-EXEC.
|
||||
*
|
||||
*** R01ファイルOPEN
|
||||
OPEN INPUT R01INNFIL.
|
||||
OPEN INPUT R01INNFIL.
|
||||
*** 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を初回読込
|
||||
PERFORM 1100R01INNSOR.
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(1.1) *
|
||||
* サブモジュール名:R01読込処理 *
|
||||
* 処理概要 : WORK-LEAVE読込 *
|
||||
* サブモジュールNO:(1.1) *
|
||||
* サブモジュール名:R01読込処理 *
|
||||
* 処理概要 : WORK-LEAVE読込 *
|
||||
*****************************************************************
|
||||
1100R01INNSOR SECTION.
|
||||
*
|
||||
@@ -190,9 +202,9 @@
|
||||
1100R01INNSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.0) *
|
||||
* サブモジュール名:主処理 *
|
||||
* 処理概要 : R01(WORK-LEAVE)→DB更新処理 *
|
||||
* サブモジュールNO:(2.0) *
|
||||
* サブモジュール名:主処理 *
|
||||
* 処理概要 : R01(WORK-LEAVE)→DB更新処理 *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
@@ -205,9 +217,9 @@
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1) *
|
||||
* サブモジュール名:レコード判定処理 *
|
||||
* 処理概要 : ステータス判定→各DB更新処理分岐 *
|
||||
* サブモジュールNO:(2.1) *
|
||||
* サブモジュール名:レコード判定処理 *
|
||||
* 処理概要 : ステータス判定→各DB更新処理分岐 *
|
||||
*****************************************************************
|
||||
2100PROCSOR SECTION.
|
||||
*
|
||||
@@ -236,36 +248,39 @@
|
||||
2100PROCSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1.1) *
|
||||
* サブモジュール名:INSERT処理(新規登録) *
|
||||
* 処理概要 : LEAVE_RECORDSに新規レコード追加 *
|
||||
* サブモジュールNO:(2.1.1) *
|
||||
* サブモジュール名:INSERT処理(新規登録) *
|
||||
* 処理概要 : LEAVE_RECORDSに新規レコード追加 *
|
||||
*****************************************************************
|
||||
2110INSERTSOR SECTION.
|
||||
2110INSERTSOR SECTION.
|
||||
*
|
||||
EXEC SQL
|
||||
INSERT INTO LEAVE_RECORDS
|
||||
(EMP_ID, LEAVE_TYPE,
|
||||
START_DATE, START_TIME,
|
||||
END_DATE, END_TIME,
|
||||
STATUS)
|
||||
VALUES
|
||||
(:WS-EMP-ID, :WS-LEAVE-TYPE,
|
||||
:WS-START-DATE, :WS-START-TIME,
|
||||
:WS-END-DATE, :WS-END-TIME,
|
||||
:WS-STATUS)
|
||||
END-EXEC.
|
||||
EXEC SQL
|
||||
INSERT INTO LEAVE_RECORDS
|
||||
(APPLICATION_ID,
|
||||
EMP_ID, LEAVE_TYPE,
|
||||
START_DATE, START_TIME,
|
||||
END_DATE, END_TIME,
|
||||
STATUS)
|
||||
VALUES
|
||||
(:WS-NEXT-APPL-ID,
|
||||
:WS-EMP-ID, :WS-LEAVE-TYPE,
|
||||
:WS-START-DATE, :WS-START-TIME,
|
||||
:WS-END-DATE, :WS-END-TIME,
|
||||
:WS-STATUS)
|
||||
END-EXEC.
|
||||
*
|
||||
IF SQLCODE NOT = 0
|
||||
PERFORM 9100DBERRSOR
|
||||
END-IF.
|
||||
IF SQLCODE NOT = 0
|
||||
PERFORM 9100DBERRSOR
|
||||
END-IF.
|
||||
*
|
||||
ADD 1 TO CUN-DBXINS.
|
||||
ADD 1 TO WS-NEXT-APPL-ID.
|
||||
ADD 1 TO CUN-DBXINS.
|
||||
*
|
||||
2110INSERTSOR-EXT.
|
||||
EXIT.
|
||||
2110INSERTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1.2) *
|
||||
* サブモジュール名:UPDATE処理(変更) *
|
||||
* サブモジュールNO:(2.1.2) *
|
||||
* サブモジュール名:UPDATE処理(変更) *
|
||||
* 処理概要 : DELETE(旧レコード)→INSERT(新レコード) *
|
||||
*****************************************************************
|
||||
2120UPDATESOR SECTION.
|
||||
@@ -279,31 +294,33 @@
|
||||
PERFORM 9100DBERRSOR
|
||||
END-IF.
|
||||
*
|
||||
EXEC SQL
|
||||
INSERT INTO LEAVE_RECORDS
|
||||
(EMP_ID, LEAVE_TYPE,
|
||||
START_DATE, START_TIME,
|
||||
END_DATE, END_TIME,
|
||||
STATUS)
|
||||
VALUES
|
||||
(:WS-EMP-ID, :WS-LEAVE-TYPE,
|
||||
:WS-START-DATE, :WS-START-TIME,
|
||||
:WS-END-DATE, :WS-END-TIME,
|
||||
:WS-STATUS)
|
||||
END-EXEC.
|
||||
EXEC SQL
|
||||
INSERT INTO LEAVE_RECORDS
|
||||
(APPLICATION_ID,
|
||||
EMP_ID, LEAVE_TYPE,
|
||||
START_DATE, START_TIME,
|
||||
END_DATE, END_TIME,
|
||||
STATUS)
|
||||
VALUES
|
||||
(:WS-APPL-ID,
|
||||
:WS-EMP-ID, :WS-LEAVE-TYPE,
|
||||
:WS-START-DATE, :WS-START-TIME,
|
||||
:WS-END-DATE, :WS-END-TIME,
|
||||
:WS-STATUS)
|
||||
END-EXEC.
|
||||
*
|
||||
IF SQLCODE NOT = 0
|
||||
PERFORM 9100DBERRSOR
|
||||
END-IF.
|
||||
IF SQLCODE NOT = 0
|
||||
PERFORM 9100DBERRSOR
|
||||
END-IF.
|
||||
*
|
||||
ADD 1 TO CUN-DBXUPD.
|
||||
ADD 1 TO CUN-DBXUPD.
|
||||
*
|
||||
2120UPDATESOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1.3) *
|
||||
* サブモジュール名:DELETE処理(取消) *
|
||||
* 処理概要 : APPL-ID一致レコードをDELETE *
|
||||
* サブモジュールNO:(2.1.3) *
|
||||
* サブモジュール名:DELETE処理(取消) *
|
||||
* 処理概要 : APPL-ID一致レコードをDELETE *
|
||||
*****************************************************************
|
||||
2130DELETESOR SECTION.
|
||||
*
|
||||
@@ -321,9 +338,9 @@
|
||||
2130DELETESOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(3.0) *
|
||||
* サブモジュール名:終了処理 *
|
||||
* 処理概要 : COMMIT・ファイルクローズ・件数出力 *
|
||||
* サブモジュールNO:(3.0) *
|
||||
* サブモジュール名:終了処理 *
|
||||
* 処理概要 : COMMIT・ファイルクローズ・件数出力 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
@@ -375,9 +392,9 @@
|
||||
3000STPSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(4.0) *
|
||||
* サブモジュール名:メッセージ編集出力処理 *
|
||||
* 処理概要 : メッセージ編集出力サブPGM呼出 *
|
||||
* サブモジュールNO:(4.0) *
|
||||
* サブモジュール名:メッセージ編集出力処理 *
|
||||
* 処理概要 : メッセージ編集出力サブPGM呼出 *
|
||||
*****************************************************************
|
||||
4000MSGOUTSOR SECTION.
|
||||
*
|
||||
@@ -389,8 +406,8 @@
|
||||
4000MSGOUTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(9.1) *
|
||||
* サブモジュール名:DBエラー処理 *
|
||||
* サブモジュールNO:(9.1) *
|
||||
* サブモジュール名:DBエラー処理 *
|
||||
* 処理概要 : SQLエラー→ROLLBACK+メッセージ出力+ABEND *
|
||||
*****************************************************************
|
||||
9100DBERRSOR SECTION.
|
||||
@@ -426,9 +443,9 @@
|
||||
9100DBERRSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(9.9) *
|
||||
* サブモジュール名:ABEND処理 *
|
||||
* 処理概要 : ABENDサブPGM呼出 *
|
||||
* サブモジュールNO:(9.9) *
|
||||
* サブモジュール名:ABEND処理 *
|
||||
* 処理概要 : ABENDサブPGM呼出 *
|
||||
*****************************************************************
|
||||
9999ABDSOR SECTION.
|
||||
*
|
||||
|
||||
+13
-4
@@ -1,4 +1,4 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. KIN03EXP.
|
||||
*****************************************************************
|
||||
* システム名 : 勤怠休暇管理システム *
|
||||
@@ -24,7 +24,8 @@
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT W01OUTFIL ASSIGN TO "KIN02W01.DAT".
|
||||
SELECT W01OUTFIL ASSIGN TO "KIN02W01.DAT"
|
||||
FILE STATUS IS WS-W01-STATUS.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
@@ -85,7 +86,9 @@
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
01 WRKARA.
|
||||
*** ファイルステータス
|
||||
03 WS-W01-STATUS PIC X(002).
|
||||
*** EOF判定
|
||||
03 WRK-R01EOF PIC X(001).
|
||||
88 WRK-R01-EOF VALUE '1'.
|
||||
@@ -191,7 +194,13 @@
|
||||
PERFORM 1200HDINNSOR.
|
||||
*
|
||||
*** 出力ファイル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)
|
||||
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.
|
||||
Reference in New Issue
Block a user