Add KIN08DBU (勤怠DB更新処理) and KIN09CSV (CSV出力処理)
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,693 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. KIN08DBU.
|
||||
*****************************************************************
|
||||
* システム名 : 勤怠休暇管理システム *
|
||||
* プログラムID : KIN08DBU *
|
||||
* プログラム名 : 勤怠DB更新処理 *
|
||||
* 作成日 : 2026-06-28 *
|
||||
* 処理概要 : DAILY-RECORDを読込み、DAILY_RECORDSにINSERT、*
|
||||
* 社員別月次集計後MONTHLY_ABSENCEにUPSERT、 *
|
||||
* 集計結果をABSENCE_SUMMARYファイルに出力する。*
|
||||
* SYSIN制御カード(T/P/M)をGO TO DEPENDING ON *
|
||||
* で分岐処理する。 *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 26-06-28 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R01INNFIL ASSIGN TO "KIN08R01".
|
||||
SELECT SYSINFILE ASSIGN TO "KIN08S01".
|
||||
SELECT W01OUTFIL ASSIGN TO "KIN08W01".
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* R01 (DAILY-RECORD) 200B FB *
|
||||
*****************************************************************
|
||||
FD R01INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R01INNREC.
|
||||
COPY KIN07REC REPLACING ==(A)== BY ==R01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* SYSIN 80B FB *
|
||||
*****************************************************************
|
||||
FD SYSINFILE
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 SYSINREC PIC X(080).
|
||||
*
|
||||
*****************************************************************
|
||||
* W01 (ABSENCE-SUMMARY) 80B FB *
|
||||
*****************************************************************
|
||||
FD W01OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 W01OUTREC.
|
||||
COPY KIN08REC REPLACING ==(A)== BY ==W01==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* SQLCA *
|
||||
*****************************************************************
|
||||
EXEC SQL INCLUDE SQLCA END-EXEC.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'KIN08DBU'.
|
||||
03 CNS-MSGSTR PIC 9(003) VALUE 001.
|
||||
03 CNS-MSGFIN PIC 9(003) VALUE 002.
|
||||
03 CNS-MSGSUBEEK PIC 9(003) VALUE 005.
|
||||
03 CNS-MSGIINKES PIC 9(003) VALUE 006.
|
||||
03 CNS-MSGOUTKES PIC 9(003) VALUE 007.
|
||||
03 CNS-MSGKEYINF PIC 9(003) VALUE 033.
|
||||
03 CNS-KN0002 PIC 9(001) VALUE 2.
|
||||
03 CNS-ABD999 PIC 9(003) VALUE 999.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
01 CUNARA.
|
||||
03 CUN-R01INN PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-DBXINS PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-DBXUPD PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-DBXDEL PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-W01OUT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
*
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
*** EOF判定
|
||||
03 WRK-R01EOF PIC X(001).
|
||||
88 WRK-R01-EOF VALUE '1'.
|
||||
03 WRK-SYSIN-EOF PIC X(001).
|
||||
88 WRK-SYSIN-EOF-Y VALUE '1'.
|
||||
*** SYSINカード種別
|
||||
03 WRK-CARD-TYPE PIC X(001).
|
||||
03 WRK-DISP-IDX PIC 9(001).
|
||||
*** SYSIN解析値
|
||||
03 WRK-YEAR-MONTH PIC X(006).
|
||||
03 WRK-MODE-VALUE PIC X(010).
|
||||
88 RESET-MODE VALUE 'RESET'.
|
||||
88 NORMAL-MODE VALUE 'NORMAL'.
|
||||
03 WRK-PERIOD-FOUND PIC X(001).
|
||||
88 WRK-PERIOD-OK VALUE '1'.
|
||||
03 WRK-ALL-TARGETS PIC X(001).
|
||||
88 WRK-ALL-EMP VALUE '1'.
|
||||
*** SYSIN解析作業変数
|
||||
03 WS-PARM-NAME PIC X(020).
|
||||
03 WS-PARM-VALUE PIC X(020).
|
||||
*** SQLホスト変数
|
||||
03 HV-EMP-ID PIC X(008).
|
||||
03 HV-TARGET-DATE PIC X(008).
|
||||
03 HV-TIME-IN PIC X(004).
|
||||
03 HV-TIME-OUT PIC X(004).
|
||||
03 HV-ANNUAL-H PIC 9(004)V9(001).
|
||||
03 HV-PERSONAL-H PIC 9(004)V9(001).
|
||||
03 HV-OFFICIAL-H PIC 9(004)V9(001).
|
||||
03 HV-SICK-H PIC 9(004)V9(001).
|
||||
03 HV-ABSENT-H PIC 9(004)V9(001).
|
||||
03 HV-YEAR-MONTH PIC X(006).
|
||||
03 HV-CNT PIC 9(009).
|
||||
*** SYSINレコード退避
|
||||
03 WS-SYSIN-REC PIC X(080).
|
||||
*** 日付→年月抽出
|
||||
03 WRK-DATE-STR PIC X(008).
|
||||
*** INSPECT TALLYING用
|
||||
03 WS-ZERO-CNT PIC 9(002).
|
||||
*** 集計テーブル索引
|
||||
03 WS-AGG-IDX PIC 9(003).
|
||||
03 WS-FOUND-IDX PIC 9(003).
|
||||
*** SQLCODE表示用
|
||||
03 WRK-SQLCODE-DISP PIC +9(009).
|
||||
*
|
||||
*****************************************************************
|
||||
* 集計テーブル(社員別月次集計) *
|
||||
*****************************************************************
|
||||
01 AGGREGATION-TABLE.
|
||||
03 AGG-ENTRIES OCCURS 100 TIMES.
|
||||
05 AGG-EMP-ID PIC X(008).
|
||||
05 AGG-YEAR-MONTH PIC X(006).
|
||||
05 AGG-ANNUAL-H PIC 9(004)V9(001).
|
||||
05 AGG-PERSONAL-H PIC 9(004)V9(001).
|
||||
05 AGG-OFFICIAL-H PIC 9(004)V9(001).
|
||||
05 AGG-SICK-H PIC 9(004)V9(001).
|
||||
05 AGG-ABSENT-H PIC 9(004)V9(001).
|
||||
03 AGG-COUNT PIC 9(003).
|
||||
*
|
||||
*****************************************************************
|
||||
* 対象社員テーブル(Tカード指定用) *
|
||||
*****************************************************************
|
||||
01 TARGET-TABLE.
|
||||
03 TARGET-EMP OCCURS 100 TIMES
|
||||
PIC X(008).
|
||||
03 TARGET-COUNT PIC 9(003).
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
*** メッセージ編集出力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) *
|
||||
* サブモジュール名: 初期処理 *
|
||||
* 処理概要 : 開始メッセージ出力・SYSIN読込・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
|
||||
AGGREGATION-TABLE.
|
||||
SET NORMAL-MODE TO TRUE.
|
||||
SET WRK-ALL-EMP TO TRUE.
|
||||
*
|
||||
*** DB接続
|
||||
EXEC SQL
|
||||
CONNECT TO 'data/kin.db'
|
||||
END-EXEC.
|
||||
*
|
||||
*** SYSINファイルOPEN+読込ループ
|
||||
OPEN INPUT SYSINFILE.
|
||||
MOVE '0' TO WRK-SYSIN-EOF.
|
||||
PERFORM 1199-SYSIN-LOOP
|
||||
THRU 1199-SYSIN-EXIT
|
||||
UNTIL WRK-SYSIN-EOF-Y.
|
||||
CLOSE SYSINFILE.
|
||||
*
|
||||
*** 必須パラメータ未設定チェック
|
||||
IF NOT WRK-PERIOD-OK
|
||||
MOVE CNS-ABD999 TO E01ABDCOD
|
||||
CALL 'SUB03END' USING E01ABDPAR
|
||||
END-IF.
|
||||
*
|
||||
*** 入出力ファイルOPEN
|
||||
OPEN INPUT R01INNFIL
|
||||
OUTPUT W01OUTFIL.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(1.1) *
|
||||
* サブモジュール名:SYSIN読込制御 *
|
||||
* 処理概要 : SYSINを1行読込み、カード種別でGO TO分岐 *
|
||||
*****************************************************************
|
||||
1199-SYSIN-LOOP SECTION.
|
||||
*
|
||||
READ SYSINFILE INTO WS-SYSIN-REC
|
||||
AT END
|
||||
SET WRK-SYSIN-EOF-Y TO TRUE
|
||||
NOT AT END
|
||||
CONTINUE
|
||||
END-READ.
|
||||
*
|
||||
IF NOT WRK-SYSIN-EOF-Y
|
||||
MOVE WS-SYSIN-REC(1:1) TO WRK-CARD-TYPE
|
||||
MOVE 0 TO WRK-DISP-IDX
|
||||
IF WRK-CARD-TYPE = 'T'
|
||||
MOVE 1 TO WRK-DISP-IDX
|
||||
END-IF
|
||||
IF WRK-CARD-TYPE = 'P'
|
||||
MOVE 2 TO WRK-DISP-IDX
|
||||
END-IF
|
||||
IF WRK-CARD-TYPE = 'M'
|
||||
MOVE 3 TO WRK-DISP-IDX
|
||||
END-IF
|
||||
IF WRK-DISP-IDX > 0
|
||||
GO TO 1110-TARGETSOR
|
||||
1120-PERIODSOR
|
||||
1130-MODESOR
|
||||
DEPENDING ON WRK-DISP-IDX
|
||||
ELSE
|
||||
IF WRK-CARD-TYPE = '*'
|
||||
DISPLAY 'COMMENT: ' WS-SYSIN-REC
|
||||
ELSE
|
||||
DISPLAY 'WARNING: Unknown card type ['
|
||||
WRK-CARD-TYPE ']'
|
||||
END-IF
|
||||
END-IF
|
||||
END-IF.
|
||||
*
|
||||
GO TO 1199-SYSIN-EXIT.
|
||||
*
|
||||
1110-TARGETSOR.
|
||||
*** Tカード: 対象社員一覧
|
||||
INITIALIZE TARGET-TABLE.
|
||||
UNSTRING WS-SYSIN-REC(3:78)
|
||||
DELIMITED BY ','
|
||||
INTO TARGET-EMP(1)
|
||||
TARGET-EMP(2)
|
||||
TARGET-EMP(3)
|
||||
TARGET-EMP(4)
|
||||
TARGET-EMP(5)
|
||||
TARGET-EMP(6)
|
||||
TARGET-EMP(7)
|
||||
TARGET-EMP(8)
|
||||
TARGET-EMP(9)
|
||||
TARGET-EMP(10)
|
||||
TALLYING IN TARGET-COUNT
|
||||
END-UNSTRING.
|
||||
DISPLAY 'TARGET: ' TARGET-COUNT ' employees'.
|
||||
MOVE 0 TO WRK-ALL-TARGETS.
|
||||
GO TO 1199-SYSIN-EXIT.
|
||||
*
|
||||
1120-PERIODSOR.
|
||||
*** Pカード: 処理対象年月
|
||||
UNSTRING WS-SYSIN-REC(3:78)
|
||||
DELIMITED BY '='
|
||||
INTO WS-PARM-NAME
|
||||
WS-PARM-VALUE
|
||||
END-UNSTRING.
|
||||
MOVE WS-PARM-VALUE(1:6) TO WRK-YEAR-MONTH.
|
||||
MOVE '1' TO WRK-PERIOD-FOUND.
|
||||
DISPLAY 'PERIOD: ' WRK-YEAR-MONTH.
|
||||
GO TO 1199-SYSIN-EXIT.
|
||||
*
|
||||
1130-MODESOR.
|
||||
*** Mカード: モード指定
|
||||
MOVE WS-SYSIN-REC(3:78) TO WRK-MODE-VALUE.
|
||||
INSPECT WRK-MODE-VALUE
|
||||
REPLACING ALL 'MODE=' BY SPACES.
|
||||
IF FUNCTION TRIM(WRK-MODE-VALUE) = 'RESET'
|
||||
SET RESET-MODE TO TRUE
|
||||
ELSE
|
||||
SET NORMAL-MODE TO TRUE
|
||||
END-IF.
|
||||
DISPLAY 'MODE: ' FUNCTION TRIM(WRK-MODE-VALUE).
|
||||
GO TO 1199-SYSIN-EXIT.
|
||||
*
|
||||
1199-SYSIN-EXIT.
|
||||
EXIT.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.0) *
|
||||
* サブモジュール名:主処理 *
|
||||
* 処理概要 : DAILY-RECORD読込→INSERT→集計 *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
*** R01(DAILY-RECORD)読込
|
||||
READ R01INNFIL
|
||||
AT END
|
||||
MOVE '1' TO WRK-R01EOF
|
||||
NOT AT END
|
||||
ADD 1 TO CUN-R01INN
|
||||
END-READ.
|
||||
*
|
||||
IF WRK-R01-EOF
|
||||
EXIT SECTION
|
||||
END-IF.
|
||||
*
|
||||
*** 社員番号有効性チェック(INSPECT TALLYING)
|
||||
MOVE ZERO TO WS-ZERO-CNT.
|
||||
INSPECT R01EMP-ID TALLYING WS-ZERO-CNT
|
||||
FOR LEADING '0'.
|
||||
IF R01EMP-ID = SPACE
|
||||
OR R01EMP-ID = LOW-VALUES
|
||||
DISPLAY 'WARNING: Empty EMP-ID record '
|
||||
CUN-R01INN
|
||||
EXIT SECTION
|
||||
END-IF.
|
||||
*
|
||||
*** ホスト変数設定
|
||||
MOVE R01EMP-ID TO HV-EMP-ID.
|
||||
MOVE R01DATE TO HV-TARGET-DATE.
|
||||
MOVE R01TIME-IN TO HV-TIME-IN.
|
||||
MOVE R01TIME-OUT TO HV-TIME-OUT.
|
||||
MOVE R01ANNUAL-H TO HV-ANNUAL-H.
|
||||
MOVE R01PERSONAL-H TO HV-PERSONAL-H.
|
||||
MOVE R01OFFICIAL-H TO HV-OFFICIAL-H.
|
||||
MOVE R01SICK-H TO HV-SICK-H.
|
||||
MOVE R01ABSENT-H TO HV-ABSENT-H.
|
||||
*
|
||||
*** DAILY_RECORDS INSERT
|
||||
EXEC SQL
|
||||
INSERT INTO DAILY_RECORDS
|
||||
(EMP_ID, TARGET_DATE, TIME_IN, TIME_OUT,
|
||||
ANNUAL_LEAVE_H, PERSONAL_LEAVE_H,
|
||||
OFFICIAL_LEAVE_H, SICK_LEAVE_H,
|
||||
UNAPPROVED_ABSENT_H, UPDATED_AT)
|
||||
VALUES
|
||||
(:HV-EMP-ID, :HV-TARGET-DATE,
|
||||
:HV-TIME-IN, :HV-TIME-OUT,
|
||||
:HV-ANNUAL-H, :HV-PERSONAL-H,
|
||||
:HV-OFFICIAL-H, :HV-SICK-H,
|
||||
:HV-ABSENT-H, CURRENT_TIMESTAMP)
|
||||
END-EXEC.
|
||||
*
|
||||
IF SQLCODE NOT = 0
|
||||
DISPLAY 'WARNING: INSERT failed SQLCODE='
|
||||
SQLCODE ' EMP=' HV-EMP-ID
|
||||
' DATE=' HV-TARGET-DATE
|
||||
PERFORM 9100DBERRSOR
|
||||
ELSE
|
||||
ADD 1 TO CUN-DBXINS
|
||||
END-IF.
|
||||
*
|
||||
*** 対象社員フィルタリング(Tカード指定時)
|
||||
IF NOT WRK-ALL-EMP
|
||||
MOVE ZERO TO WS-FOUND-IDX
|
||||
PERFORM VARYING WS-AGG-IDX FROM 1 BY 1
|
||||
UNTIL WS-AGG-IDX > TARGET-COUNT
|
||||
IF TARGET-EMP(WS-AGG-IDX) = HV-EMP-ID
|
||||
MOVE WS-AGG-IDX TO WS-FOUND-IDX
|
||||
EXIT PERFORM
|
||||
END-IF
|
||||
END-PERFORM
|
||||
IF WS-FOUND-IDX = 0
|
||||
EXIT SECTION
|
||||
END-IF
|
||||
END-IF.
|
||||
*
|
||||
*** 年月抽出(YYYYMMDD→YYYYMM)
|
||||
MOVE HV-TARGET-DATE TO WRK-DATE-STR.
|
||||
MOVE WRK-DATE-STR(1:6) TO HV-YEAR-MONTH.
|
||||
*
|
||||
*** 集計テーブルに加算(線形探索)
|
||||
MOVE ZERO TO WS-FOUND-IDX.
|
||||
PERFORM VARYING WS-AGG-IDX FROM 1 BY 1
|
||||
UNTIL WS-AGG-IDX > AGG-COUNT
|
||||
IF AGG-EMP-ID(WS-AGG-IDX) = HV-EMP-ID
|
||||
AND AGG-YEAR-MONTH(WS-AGG-IDX) = HV-YEAR-MONTH
|
||||
MOVE WS-AGG-IDX TO WS-FOUND-IDX
|
||||
EXIT PERFORM
|
||||
END-IF
|
||||
END-PERFORM.
|
||||
*
|
||||
IF WS-FOUND-IDX > 0
|
||||
COMPUTE AGG-ANNUAL-H(WS-FOUND-IDX)
|
||||
ROUNDED =
|
||||
AGG-ANNUAL-H(WS-FOUND-IDX) + HV-ANNUAL-H
|
||||
ON SIZE ERROR
|
||||
DISPLAY 'WARNING: Annual-H overflow '
|
||||
HV-EMP-ID
|
||||
MOVE ZERO TO
|
||||
AGG-ANNUAL-H(WS-FOUND-IDX)
|
||||
END-COMPUTE
|
||||
ADD HV-PERSONAL-H TO
|
||||
AGG-PERSONAL-H(WS-FOUND-IDX)
|
||||
ADD HV-OFFICIAL-H TO
|
||||
AGG-OFFICIAL-H(WS-FOUND-IDX)
|
||||
ADD HV-SICK-H TO
|
||||
AGG-SICK-H(WS-FOUND-IDX)
|
||||
ADD HV-ABSENT-H TO
|
||||
AGG-ABSENT-H(WS-FOUND-IDX)
|
||||
ELSE
|
||||
IF AGG-COUNT < 100
|
||||
ADD 1 TO AGG-COUNT
|
||||
MOVE HV-EMP-ID TO
|
||||
AGG-EMP-ID(AGG-COUNT)
|
||||
MOVE HV-YEAR-MONTH TO
|
||||
AGG-YEAR-MONTH(AGG-COUNT)
|
||||
MOVE HV-ANNUAL-H TO
|
||||
AGG-ANNUAL-H(AGG-COUNT)
|
||||
MOVE HV-PERSONAL-H TO
|
||||
AGG-PERSONAL-H(AGG-COUNT)
|
||||
MOVE HV-OFFICIAL-H TO
|
||||
AGG-OFFICIAL-H(AGG-COUNT)
|
||||
MOVE HV-SICK-H TO
|
||||
AGG-SICK-H(AGG-COUNT)
|
||||
MOVE HV-ABSENT-H TO
|
||||
AGG-ABSENT-H(AGG-COUNT)
|
||||
ELSE
|
||||
DISPLAY 'WARNING: Agg table full '
|
||||
HV-EMP-ID
|
||||
END-IF
|
||||
END-IF.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(3.0) *
|
||||
* サブモジュール名:終了処理 *
|
||||
* 処理概要 : RESET→DELETE、UPSERT、ファイル出力、COMMIT *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
*** MODE=RESET: 既存レコード削除
|
||||
IF RESET-MODE
|
||||
EXEC SQL
|
||||
DELETE FROM MONTHLY_ABSENCE
|
||||
WHERE YEAR_MONTH = :WRK-YEAR-MONTH
|
||||
END-EXEC
|
||||
IF SQLCODE NOT = 0
|
||||
PERFORM 9100DBERRSOR
|
||||
ELSE
|
||||
ADD 1 TO CUN-DBXDEL
|
||||
END-IF
|
||||
END-IF.
|
||||
*
|
||||
*** 集計結果→MONTHLY_ABSENCE UPSERT
|
||||
PERFORM VARYING WS-AGG-IDX FROM 1 BY 1
|
||||
UNTIL WS-AGG-IDX > AGG-COUNT
|
||||
MOVE AGG-EMP-ID(WS-AGG-IDX)
|
||||
TO HV-EMP-ID
|
||||
MOVE AGG-YEAR-MONTH(WS-AGG-IDX)
|
||||
TO HV-YEAR-MONTH
|
||||
MOVE AGG-ANNUAL-H(WS-AGG-IDX)
|
||||
TO HV-ANNUAL-H
|
||||
MOVE AGG-PERSONAL-H(WS-AGG-IDX)
|
||||
TO HV-PERSONAL-H
|
||||
MOVE AGG-OFFICIAL-H(WS-AGG-IDX)
|
||||
TO HV-OFFICIAL-H
|
||||
MOVE AGG-SICK-H(WS-AGG-IDX)
|
||||
TO HV-SICK-H
|
||||
MOVE AGG-ABSENT-H(WS-AGG-IDX)
|
||||
TO HV-ABSENT-H
|
||||
*
|
||||
EXEC SQL
|
||||
SELECT COUNT(*) INTO :HV-CNT
|
||||
FROM MONTHLY_ABSENCE
|
||||
WHERE EMP_ID = :HV-EMP-ID
|
||||
AND YEAR_MONTH = :HV-YEAR-MONTH
|
||||
END-EXEC
|
||||
*
|
||||
IF SQLCODE = 0
|
||||
IF HV-CNT > 0
|
||||
EXEC SQL
|
||||
UPDATE MONTHLY_ABSENCE SET
|
||||
ANNUAL_LEAVE_H =
|
||||
:HV-ANNUAL-H
|
||||
, PERSONAL_LEAVE_H =
|
||||
:HV-PERSONAL-H
|
||||
, OFFICIAL_LEAVE_H =
|
||||
:HV-OFFICIAL-H
|
||||
, SICK_LEAVE_H =
|
||||
:HV-SICK-H
|
||||
, UNAPPROVED_ABSENT_H =
|
||||
:HV-ABSENT-H
|
||||
, UPDATED_AT =
|
||||
CURRENT_TIMESTAMP
|
||||
WHERE EMP_ID = :HV-EMP-ID
|
||||
AND YEAR_MONTH =
|
||||
:HV-YEAR-MONTH
|
||||
END-EXEC
|
||||
IF SQLCODE NOT = 0
|
||||
PERFORM 9100DBERRSOR
|
||||
ELSE
|
||||
ADD 1 TO CUN-DBXUPD
|
||||
END-IF
|
||||
ELSE
|
||||
EXEC SQL
|
||||
INSERT INTO MONTHLY_ABSENCE
|
||||
(EMP_ID, YEAR_MONTH,
|
||||
ANNUAL_LEAVE_H,
|
||||
PERSONAL_LEAVE_H,
|
||||
OFFICIAL_LEAVE_H,
|
||||
SICK_LEAVE_H,
|
||||
UNAPPROVED_ABSENT_H,
|
||||
UPDATED_AT)
|
||||
VALUES
|
||||
(:HV-EMP-ID,
|
||||
:HV-YEAR-MONTH,
|
||||
:HV-ANNUAL-H,
|
||||
:HV-PERSONAL-H,
|
||||
:HV-OFFICIAL-H,
|
||||
:HV-SICK-H,
|
||||
:HV-ABSENT-H,
|
||||
CURRENT_TIMESTAMP)
|
||||
END-EXEC
|
||||
IF SQLCODE NOT = 0
|
||||
PERFORM 9100DBERRSOR
|
||||
ELSE
|
||||
ADD 1 TO CUN-DBXINS
|
||||
END-IF
|
||||
END-IF
|
||||
ELSE
|
||||
DISPLAY 'WARNING: SELECT COUNT failed '
|
||||
HV-EMP-ID
|
||||
END-IF
|
||||
END-PERFORM.
|
||||
*
|
||||
*** ABSENCE_SUMMARYファイル出力
|
||||
PERFORM VARYING WS-AGG-IDX FROM 1 BY 1
|
||||
UNTIL WS-AGG-IDX > AGG-COUNT
|
||||
INITIALIZE W01OUTREC
|
||||
MOVE AGG-EMP-ID(WS-AGG-IDX)
|
||||
TO W01EMP-ID
|
||||
MOVE AGG-YEAR-MONTH(WS-AGG-IDX)
|
||||
TO W01YEAR-MONTH
|
||||
MOVE AGG-ANNUAL-H(WS-AGG-IDX)
|
||||
TO W01ANNUAL-LEAVE-H
|
||||
MOVE AGG-PERSONAL-H(WS-AGG-IDX)
|
||||
TO W01PERSONAL-LEAVE-H
|
||||
MOVE AGG-OFFICIAL-H(WS-AGG-IDX)
|
||||
TO W01OFFICIAL-LEAVE-H
|
||||
MOVE AGG-SICK-H(WS-AGG-IDX)
|
||||
TO W01SICK-LEAVE-H
|
||||
MOVE AGG-ABSENT-H(WS-AGG-IDX)
|
||||
TO W01ABSENT-H
|
||||
WRITE W01OUTREC
|
||||
ADD 1 TO CUN-W01OUT
|
||||
END-PERFORM.
|
||||
*
|
||||
*** COMMIT
|
||||
EXEC SQL
|
||||
COMMIT WORK
|
||||
END-EXEC.
|
||||
*
|
||||
*** 入出力ファイルCLOSE
|
||||
CLOSE R01INNFIL
|
||||
W01OUTFIL.
|
||||
*
|
||||
*** 件数メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'KIN08R01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'INS' TO M00UMKDATS22-01.
|
||||
MOVE CUN-DBXINS TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'UPD' TO M00UMKDATS22-01.
|
||||
MOVE CUN-DBXUPD TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
IF CUN-DBXDEL > 0
|
||||
INITIALIZE M00MHOPAR
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD
|
||||
MOVE 'DEL' TO M00UMKDATS22-01
|
||||
MOVE CUN-DBXDEL TO M00UMKDATS22-02
|
||||
PERFORM 4000MSGOUTSOR
|
||||
END-IF.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KIN08W01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 終了メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
3000STPSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブプログラムNO:(4.0) *
|
||||
* サブプログラム名:メッセージ編集出力処理 *
|
||||
* 処理概要 : メッセージ編集出力サブPGM呼出 *
|
||||
*****************************************************************
|
||||
4000MSGOUTSOR SECTION.
|
||||
*
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
|
||||
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
|
||||
CALL 'SUB02MSG' USING M00MHOPAR.
|
||||
*
|
||||
4000MSGOUTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブプログラムNO:(9.1) *
|
||||
* サブプログラム名:DBエラー処理 *
|
||||
* 処理概要 : ROLLBACK+DISPLAY+ABEND *
|
||||
*****************************************************************
|
||||
9100DBERRSOR SECTION.
|
||||
*
|
||||
MOVE SQLCODE TO WRK-SQLCODE-DISP.
|
||||
DISPLAY 'SQL ERROR: ' WRK-SQLCODE-DISP
|
||||
' PGM=KIN08DBU'.
|
||||
EXEC SQL
|
||||
ROLLBACK WORK
|
||||
END-EXEC.
|
||||
PERFORM 9999ABDSOR.
|
||||
*
|
||||
9100DBERRSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブプログラムNO:(9.9) *
|
||||
* サブプログラム名:ABEND処理 *
|
||||
* 処理概要 : ABENDサブPGM呼出 *
|
||||
*****************************************************************
|
||||
9999ABDSOR SECTION.
|
||||
*
|
||||
MOVE CNS-ABD999 TO E01ABDCOD.
|
||||
CALL 'SUB03END' USING E01ABDPAR.
|
||||
*
|
||||
9999ABDSOR-EXT.
|
||||
EXIT.
|
||||
@@ -0,0 +1,608 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. KIN09CSV.
|
||||
*****************************************************************
|
||||
* システム名 : 勤怠休暇管理システム *
|
||||
* プログラムID : KIN09CSV *
|
||||
* プログラム名 : 勤怠CSV出力処理 *
|
||||
* 作成日 : 2026-06-28 *
|
||||
* 処理概要 : DAILY_RECORDSをDBからSELECTし、STRING WITH *
|
||||
* POINTERでCSV行を編集、WRITE AFTER ADVANCING *
|
||||
* (PAGE/2LINES/1LINE)で出力する。 *
|
||||
* INSPECT REPLACINGでCSV危険文字をサニタイズ。*
|
||||
* MODE=FULL/SHORTで出力範囲を制御。 *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 26-06-28 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT CSVOUTFIL ASSIGN TO KIN09W01.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* W01 (CSV-OUTPUT) 200B FB *
|
||||
*****************************************************************
|
||||
FD CSVOUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 CSVOUTREC.
|
||||
COPY KIN09REC REPLACING ==(A)== BY ==OUT==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* SQLCA *
|
||||
*****************************************************************
|
||||
EXEC SQL INCLUDE SQLCA END-EXEC.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'KIN09CSV'.
|
||||
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.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
01 CUNARA.
|
||||
03 CUN-W01OUT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
*
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
*** 日付範囲
|
||||
03 WS-YEARMONTH PIC X(006).
|
||||
03 WS-DATE-FROM PIC X(008).
|
||||
03 WS-DATE-TO PIC X(008).
|
||||
*** モード
|
||||
03 WS-MODE PIC X(005).
|
||||
88 MODE-FULL VALUE 'FULL'.
|
||||
88 MODE-SHORT VALUE 'SHORT'.
|
||||
*** PARM解析
|
||||
03 WS-CMDLINE PIC X(200).
|
||||
03 WS-COMMA-CNT PIC 9(002).
|
||||
03 WS-PARM1 PIC X(100).
|
||||
03 WS-PARM2 PIC X(100).
|
||||
03 WS-KEY1 PIC X(020).
|
||||
03 WS-VALUE1 PIC X(080).
|
||||
03 WS-KEY2 PIC X(020).
|
||||
03 WS-VALUE2 PIC X(080).
|
||||
*** ホスト変数
|
||||
03 HV-EMP-ID PIC X(008).
|
||||
03 HV-TARGET-DATE PIC X(008).
|
||||
03 HV-TIME-IN PIC X(004).
|
||||
03 HV-TIME-OUT PIC X(004).
|
||||
03 HV-ANNUAL-H PIC 9(004)V9(001).
|
||||
03 HV-PERSONAL-H PIC 9(004)V9(001).
|
||||
03 HV-OFFICIAL-H PIC 9(004)V9(001).
|
||||
03 HV-SICK-H PIC 9(004)V9(001).
|
||||
03 HV-ABSENT-H PIC 9(004)V9(001).
|
||||
03 HV-MTH-EMP-ID PIC X(008).
|
||||
03 HV-MTH-YEAR-MONTH PIC X(006).
|
||||
03 HV-MTH-ANNUAL-H PIC 9(004)V9(001).
|
||||
03 HV-MTH-PERSONAL-H PIC 9(004)V9(001).
|
||||
03 HV-MTH-OFFICIAL-H PIC 9(004)V9(001).
|
||||
03 HV-MTH-SICK-H PIC 9(004)V9(001).
|
||||
03 HV-MTH-ABSENT-H PIC 9(004)V9(001).
|
||||
*** CSV編集
|
||||
03 WS-CSV-LINE PIC X(200).
|
||||
03 WS-PTR PIC 9(003).
|
||||
03 WS-SAFE-FIELD PIC X(080).
|
||||
03 WS-LEAVE-TYPE PIC X(002).
|
||||
*** CSV時間編集(Z(3)9.9→"xxx.x"形式)
|
||||
03 WS-EDIT-ANNUAL PIC Z(3)9.9.
|
||||
03 WS-EDIT-PERSONAL PIC Z(3)9.9.
|
||||
03 WS-EDIT-OFFICIAL PIC Z(3)9.9.
|
||||
03 WS-EDIT-SICK PIC Z(3)9.9.
|
||||
03 WS-EDIT-ABSENT PIC Z(3)9.9.
|
||||
03 WS-EDIT-MTH-ANNUAL PIC Z(3)9.9.
|
||||
03 WS-EDIT-MTH-PERSONAL PIC Z(3)9.9.
|
||||
03 WS-EDIT-MTH-OFFICIAL PIC Z(3)9.9.
|
||||
03 WS-EDIT-MTH-SICK PIC Z(3)9.9.
|
||||
03 WS-EDIT-MTH-ABSENT PIC Z(3)9.9.
|
||||
*** 行数カウンタ(ヘッダー再出力用)
|
||||
03 WS-LINE-COUNT PIC 9(004).
|
||||
*** FETCH EOF
|
||||
03 WS-DAILY-EOF PIC X(001).
|
||||
88 WS-DAILY-EOF-Y VALUE '1'.
|
||||
03 WS-CNT PIC 9(009).
|
||||
*** SQLCODE表示
|
||||
03 WRK-SQLCODE-DISP PIC +9(009).
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
*** メッセージ編集出力SR用
|
||||
COPY ZANMSGAC.
|
||||
*** ABEND処理SR用
|
||||
COPY ZANENDAC.
|
||||
*
|
||||
PROCEDURE DIVISION.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
* 処理概要 : メインコントロール処理 *
|
||||
*****************************************************************
|
||||
0000MAJCOLSOR SECTION.
|
||||
*
|
||||
*** 初期処理
|
||||
PERFORM 1000ITTSOR.
|
||||
*
|
||||
*** 主処理
|
||||
PERFORM 2000MAJSOR
|
||||
UNTIL WS-DAILY-EOF-Y.
|
||||
*
|
||||
*** MODE=SHORT時追加処理
|
||||
IF MODE-SHORT
|
||||
PERFORM 2500-SHORT-MODE
|
||||
END-IF.
|
||||
*
|
||||
*** 終了処理
|
||||
PERFORM 3000STPSOR.
|
||||
*
|
||||
0000MAJCOLSOR-EXT.
|
||||
GOBACK.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.0) *
|
||||
* サブモジュール名: 初期処理 *
|
||||
* 処理概要 : 開始メッセージ・PARM解析・DB接続・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.
|
||||
*
|
||||
*** PARM解析(ACCEPT FROM COMMAND-LINE)
|
||||
PERFORM 1100PARMSOR.
|
||||
*
|
||||
*** ワークエリア初期化
|
||||
INITIALIZE WRKARA.
|
||||
*
|
||||
*** DB接続
|
||||
EXEC SQL
|
||||
CONNECT TO 'data/kin.db'
|
||||
END-EXEC.
|
||||
*
|
||||
*** 出力ファイルOPEN
|
||||
OPEN OUTPUT CSVOUTFIL.
|
||||
*
|
||||
*** ヘッダー行書出(PAGE)
|
||||
MOVE '社員番号,日付,出勤時刻'
|
||||
TO WS-CSV-LINE(1:28)
|
||||
MOVE ',退勤時刻,休暇種別,年休時間'
|
||||
TO WS-CSV-LINE(29:28)
|
||||
MOVE ',事假時間,因公特批假時間'
|
||||
TO WS-CSV-LINE(57:24)
|
||||
MOVE ',病欠時間,未申請欠勤時間'
|
||||
TO WS-CSV-LINE(81:24)
|
||||
WRITE CSVOUTREC FROM WS-CSV-LINE
|
||||
AFTER ADVANCING PAGE.
|
||||
ADD 1 TO CUN-W01OUT.
|
||||
MOVE ZERO TO WS-LINE-COUNT.
|
||||
*
|
||||
*** CURSOR OPEN + 初回FETCH
|
||||
PERFORM 1200-DAILY-OPEN.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(1.1) *
|
||||
* サブモジュール名:PARM解析 *
|
||||
* 処理概要 : コマンドライン引数を解析 *
|
||||
*****************************************************************
|
||||
1100PARMSOR SECTION.
|
||||
*
|
||||
ACCEPT WS-CMDLINE FROM COMMAND-LINE.
|
||||
*
|
||||
*** カンマ区切り数チェック
|
||||
MOVE ZERO TO WS-COMMA-CNT.
|
||||
INSPECT WS-CMDLINE TALLYING WS-COMMA-CNT
|
||||
FOR ALL ','.
|
||||
*
|
||||
IF WS-COMMA-CNT < 1
|
||||
DISPLAY 'WARNING: Missing MODE, using FULL'
|
||||
END-IF.
|
||||
*
|
||||
*** UNSTRINGでPARM分解
|
||||
UNSTRING WS-CMDLINE
|
||||
DELIMITED BY ','
|
||||
INTO WS-PARM1
|
||||
WS-PARM2
|
||||
END-UNSTRING.
|
||||
*
|
||||
UNSTRING WS-PARM1
|
||||
DELIMITED BY '='
|
||||
INTO WS-KEY1
|
||||
WS-VALUE1
|
||||
END-UNSTRING.
|
||||
*
|
||||
UNSTRING WS-PARM2
|
||||
DELIMITED BY '='
|
||||
INTO WS-KEY2
|
||||
WS-VALUE2
|
||||
END-UNSTRING.
|
||||
*
|
||||
*** YEARMONTH設定
|
||||
IF WS-KEY1 = 'YEARMONTH'
|
||||
MOVE WS-VALUE1(1:6) TO WS-YEARMONTH
|
||||
ELSE
|
||||
IF WS-KEY2 = 'YEARMONTH'
|
||||
MOVE WS-VALUE2(1:6) TO WS-YEARMONTH
|
||||
END-IF
|
||||
END-IF.
|
||||
*
|
||||
*** 必須チェック
|
||||
IF WS-YEARMONTH = SPACE
|
||||
MOVE CNS-ABD999 TO E01ABDCOD
|
||||
CALL 'SUB03END' USING E01ABDPAR
|
||||
END-IF.
|
||||
*
|
||||
*** 日付範囲設定(YYYYMM01〜YYYYMM31)
|
||||
MOVE WS-YEARMONTH TO WS-DATE-FROM(1:6).
|
||||
MOVE '01' TO WS-DATE-FROM(7:2).
|
||||
MOVE WS-YEARMONTH TO WS-DATE-TO(1:6).
|
||||
MOVE '31' TO WS-DATE-TO(7:2).
|
||||
*
|
||||
*** MODE設定
|
||||
MOVE 'FULL' TO WS-MODE.
|
||||
IF WS-KEY1 = 'MODE'
|
||||
MOVE WS-VALUE1(1:5) TO WS-MODE
|
||||
ELSE
|
||||
IF WS-KEY2 = 'MODE'
|
||||
MOVE WS-VALUE2(1:5) TO WS-MODE
|
||||
END-IF
|
||||
END-IF.
|
||||
*
|
||||
1100PARMSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(1.2) *
|
||||
* サブモジュール名:DAILY_RECORDS CURSOR OPEN + 初回FETCH *
|
||||
* 処理概要 : 該当月の全レコードをSELECT *
|
||||
*****************************************************************
|
||||
1200-DAILY-OPEN SECTION.
|
||||
*
|
||||
EXEC SQL
|
||||
DECLARE C_DAILY CURSOR FOR
|
||||
SELECT EMP_ID, TARGET_DATE,
|
||||
TIME_IN, TIME_OUT,
|
||||
ANNUAL_LEAVE_H, PERSONAL_LEAVE_H,
|
||||
OFFICIAL_LEAVE_H, SICK_LEAVE_H,
|
||||
UNAPPROVED_ABSENT_H
|
||||
FROM DAILY_RECORDS
|
||||
WHERE TARGET_DATE >= :WS-DATE-FROM
|
||||
AND TARGET_DATE <= :WS-DATE-TO
|
||||
ORDER BY EMP_ID, TARGET_DATE
|
||||
END-EXEC.
|
||||
*
|
||||
EXEC SQL
|
||||
OPEN C_DAILY
|
||||
END-EXEC.
|
||||
*
|
||||
EXEC SQL
|
||||
FETCH C_DAILY
|
||||
INTO :HV-EMP-ID,
|
||||
:HV-TARGET-DATE,
|
||||
:HV-TIME-IN,
|
||||
:HV-TIME-OUT,
|
||||
:HV-ANNUAL-H,
|
||||
:HV-PERSONAL-H,
|
||||
:HV-OFFICIAL-H,
|
||||
:HV-SICK-H,
|
||||
:HV-ABSENT-H
|
||||
END-EXEC.
|
||||
*
|
||||
IF SQLCODE NOT = 0
|
||||
MOVE '1' TO WS-DAILY-EOF
|
||||
END-IF.
|
||||
*
|
||||
1200-DAILY-OPEN-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.0) *
|
||||
* サブモジュール名:主処理(CSV行出力) *
|
||||
* 処理概要 : DAILY_RECORDS→CSV行編集→WRITE *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
*** 休暇種別判定(99=なし)
|
||||
MOVE '99' TO WS-LEAVE-TYPE.
|
||||
IF HV-ANNUAL-H > 0
|
||||
MOVE '01' TO WS-LEAVE-TYPE
|
||||
ELSE
|
||||
IF HV-PERSONAL-H > 0
|
||||
MOVE '02' TO WS-LEAVE-TYPE
|
||||
ELSE
|
||||
IF HV-OFFICIAL-H > 0
|
||||
MOVE '03' TO WS-LEAVE-TYPE
|
||||
ELSE
|
||||
IF HV-SICK-H > 0
|
||||
MOVE '04' TO WS-LEAVE-TYPE
|
||||
END-IF
|
||||
END-IF
|
||||
END-IF
|
||||
END-IF.
|
||||
*
|
||||
*** CSV危険文字サニタイズ(INSPECT REPLACING)
|
||||
MOVE HV-EMP-ID TO WS-SAFE-FIELD.
|
||||
INSPECT WS-SAFE-FIELD
|
||||
REPLACING ALL ',' BY ';'
|
||||
ALL X"0D" BY SPACE
|
||||
ALL X"0A" BY SPACE.
|
||||
MOVE WS-SAFE-FIELD TO HV-EMP-ID.
|
||||
*
|
||||
*** 時間編集(小数点付き表示に変換)
|
||||
MOVE HV-ANNUAL-H TO WS-EDIT-ANNUAL.
|
||||
MOVE HV-PERSONAL-H TO WS-EDIT-PERSONAL.
|
||||
MOVE HV-OFFICIAL-H TO WS-EDIT-OFFICIAL.
|
||||
MOVE HV-SICK-H TO WS-EDIT-SICK.
|
||||
MOVE HV-ABSENT-H TO WS-EDIT-ABSENT.
|
||||
*** CSV行編集(STRING WITH POINTER)
|
||||
MOVE 1 TO WS-PTR.
|
||||
STRING
|
||||
HV-EMP-ID DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
HV-TARGET-DATE DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
HV-TIME-IN DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
HV-TIME-OUT DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-LEAVE-TYPE DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-EDIT-ANNUAL DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-EDIT-PERSONAL DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-EDIT-OFFICIAL DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-EDIT-SICK DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-EDIT-ABSENT DELIMITED BY SIZE
|
||||
INTO WS-CSV-LINE
|
||||
WITH POINTER WS-PTR
|
||||
END-STRING.
|
||||
*
|
||||
*** 100行ごとにヘッダー再出力
|
||||
ADD 1 TO WS-LINE-COUNT.
|
||||
IF WS-LINE-COUNT > 100
|
||||
WRITE CSVOUTREC FROM WS-CSV-LINE
|
||||
AFTER ADVANCING 2 LINES
|
||||
MOVE '社員番号,日付,出勤時刻'
|
||||
TO WS-CSV-LINE(1:28)
|
||||
MOVE ',退勤時刻,休暇種別,年休時間'
|
||||
TO WS-CSV-LINE(29:28)
|
||||
MOVE ',事假時間,因公特批假時間'
|
||||
TO WS-CSV-LINE(57:24)
|
||||
MOVE ',病欠時間,未申請欠勤時間'
|
||||
TO WS-CSV-LINE(81:24)
|
||||
WRITE CSVOUTREC FROM WS-CSV-LINE
|
||||
AFTER ADVANCING 1 LINE
|
||||
ADD 1 TO CUN-W01OUT
|
||||
MOVE ZERO TO WS-LINE-COUNT
|
||||
END-IF.
|
||||
*
|
||||
*** データ行出力
|
||||
WRITE CSVOUTREC FROM WS-CSV-LINE
|
||||
AFTER ADVANCING 1 LINE.
|
||||
ADD 1 TO CUN-W01OUT.
|
||||
*
|
||||
*** 次FETCH
|
||||
EXEC SQL
|
||||
FETCH C_DAILY
|
||||
INTO :HV-EMP-ID,
|
||||
:HV-TARGET-DATE,
|
||||
:HV-TIME-IN,
|
||||
:HV-TIME-OUT,
|
||||
:HV-ANNUAL-H,
|
||||
:HV-PERSONAL-H,
|
||||
:HV-OFFICIAL-H,
|
||||
:HV-SICK-H,
|
||||
:HV-ABSENT-H
|
||||
END-EXEC.
|
||||
*
|
||||
IF SQLCODE NOT = 0
|
||||
MOVE '1' TO WS-DAILY-EOF
|
||||
END-IF.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.5) *
|
||||
* サブモジュール名:MODE=SHORT集計行出力 *
|
||||
* 処理概要 : MONTHLY_ABSENCEをSELECTしてCSVに追加 *
|
||||
*****************************************************************
|
||||
2500-SHORT-MODE SECTION.
|
||||
*
|
||||
*** セクション区切り
|
||||
MOVE SPACE TO WS-CSV-LINE.
|
||||
WRITE CSVOUTREC FROM WS-CSV-LINE
|
||||
AFTER ADVANCING 2 LINES.
|
||||
*
|
||||
*** 集計行ヘッダー
|
||||
MOVE '社員番号,年月,年休計,事假計'
|
||||
TO WS-CSV-LINE(1:24)
|
||||
MOVE ',因公特批假計,病欠計,未申請欠勤計'
|
||||
TO WS-CSV-LINE(25:32)
|
||||
WRITE CSVOUTREC FROM WS-CSV-LINE
|
||||
AFTER ADVANCING 1 LINE.
|
||||
ADD 1 TO CUN-W01OUT.
|
||||
*
|
||||
*** MONTHLY_ABSENCE CURSOR
|
||||
EXEC SQL
|
||||
DECLARE C_MONTHLY CURSOR FOR
|
||||
SELECT EMP_ID, YEAR_MONTH,
|
||||
ANNUAL_LEAVE_H, PERSONAL_LEAVE_H,
|
||||
OFFICIAL_LEAVE_H, SICK_LEAVE_H,
|
||||
UNAPPROVED_ABSENT_H
|
||||
FROM MONTHLY_ABSENCE
|
||||
WHERE YEAR_MONTH = :WS-YEARMONTH
|
||||
ORDER BY EMP_ID
|
||||
END-EXEC.
|
||||
*
|
||||
EXEC SQL
|
||||
OPEN C_MONTHLY
|
||||
END-EXEC.
|
||||
*
|
||||
EXEC SQL
|
||||
FETCH C_MONTHLY
|
||||
INTO :HV-MTH-EMP-ID,
|
||||
:HV-MTH-YEAR-MONTH,
|
||||
:HV-MTH-ANNUAL-H,
|
||||
:HV-MTH-PERSONAL-H,
|
||||
:HV-MTH-OFFICIAL-H,
|
||||
:HV-MTH-SICK-H,
|
||||
:HV-MTH-ABSENT-H
|
||||
END-EXEC.
|
||||
*
|
||||
PERFORM UNTIL SQLCODE NOT = 0
|
||||
MOVE HV-MTH-ANNUAL-H TO WS-EDIT-MTH-ANNUAL
|
||||
MOVE HV-MTH-PERSONAL-H TO WS-EDIT-MTH-PERSONAL
|
||||
MOVE HV-MTH-OFFICIAL-H TO WS-EDIT-MTH-OFFICIAL
|
||||
MOVE HV-MTH-SICK-H TO WS-EDIT-MTH-SICK
|
||||
MOVE HV-MTH-ABSENT-H TO WS-EDIT-MTH-ABSENT
|
||||
MOVE 1 TO WS-PTR
|
||||
STRING
|
||||
HV-MTH-EMP-ID DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
HV-MTH-YEAR-MONTH DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-EDIT-MTH-ANNUAL
|
||||
DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-EDIT-MTH-PERSONAL
|
||||
DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-EDIT-MTH-OFFICIAL
|
||||
DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-EDIT-MTH-SICK DELIMITED BY SIZE
|
||||
',' DELIMITED BY SIZE
|
||||
WS-EDIT-MTH-ABSENT
|
||||
DELIMITED BY SIZE
|
||||
INTO WS-CSV-LINE
|
||||
WITH POINTER WS-PTR
|
||||
END-STRING
|
||||
WRITE CSVOUTREC FROM WS-CSV-LINE
|
||||
AFTER ADVANCING 1 LINE
|
||||
ADD 1 TO CUN-W01OUT
|
||||
EXEC SQL
|
||||
FETCH C_MONTHLY
|
||||
INTO :HV-MTH-EMP-ID,
|
||||
:HV-MTH-YEAR-MONTH,
|
||||
:HV-MTH-ANNUAL-H,
|
||||
:HV-MTH-PERSONAL-H,
|
||||
:HV-MTH-OFFICIAL-H,
|
||||
:HV-MTH-SICK-H,
|
||||
:HV-MTH-ABSENT-H
|
||||
END-EXEC
|
||||
END-PERFORM.
|
||||
*
|
||||
EXEC SQL
|
||||
CLOSE C_MONTHLY
|
||||
END-EXEC.
|
||||
*
|
||||
2500-SHORT-MODE-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(3.0) *
|
||||
* サブモジュール名:終了処理 *
|
||||
* 処理概要 : CURSOR CLOSE・ファイルCLOSE・件数出力 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
*** CURSOR CLOSE
|
||||
EXEC SQL
|
||||
CLOSE C_DAILY
|
||||
END-EXEC.
|
||||
*
|
||||
*** 出力ファイルCLOSE
|
||||
CLOSE CSVOUTFIL.
|
||||
*
|
||||
*** 出力件数メッセージ
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KIN09W01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 終了メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
3000STPSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブプログラムNO:(4.0) *
|
||||
* サブプログラム名:メッセージ編集出力処理 *
|
||||
* 処理概要 : メッセージ編集出力サブPGM呼出 *
|
||||
*****************************************************************
|
||||
4000MSGOUTSOR SECTION.
|
||||
*
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
|
||||
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
|
||||
CALL 'SUB02MSG' USING M00MHOPAR.
|
||||
*
|
||||
4000MSGOUTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブプログラムNO:(9.1) *
|
||||
* サブプログラム名:DBエラー処理 *
|
||||
* 処理概要 : ROLLBACK+DISPLAY+ABEND *
|
||||
*****************************************************************
|
||||
9100DBERRSOR SECTION.
|
||||
*
|
||||
MOVE SQLCODE TO WRK-SQLCODE-DISP.
|
||||
DISPLAY 'SQL ERROR: ' WRK-SQLCODE-DISP
|
||||
' PGM=KIN09CSV'.
|
||||
EXEC SQL
|
||||
ROLLBACK WORK
|
||||
END-EXEC.
|
||||
PERFORM 9999ABDSOR.
|
||||
*
|
||||
9100DBERRSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブプログラムNO:(9.9) *
|
||||
* サブプログラム名:ABEND処理 *
|
||||
* 処理概要 : ABENDサブPGM呼出 *
|
||||
*****************************************************************
|
||||
9999ABDSOR SECTION.
|
||||
*
|
||||
MOVE CNS-ABD999 TO E01ABDCOD.
|
||||
CALL 'SUB03END' USING E01ABDPAR.
|
||||
*
|
||||
9999ABDSOR-EXT.
|
||||
EXIT.
|
||||
@@ -0,0 +1,60 @@
|
||||
# KIN08DBU 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: KIN08DBU
|
||||
- **プログラム名**: 月次集計更新処理
|
||||
- **処理概要**: SYSIN制御カード(T/P/M)で処理対象を指定し、DAILY_RECORDSテーブルをDELETE/INSERT(日別→月次集計)し、MONTHLY_ABSENCEテーブルにUPSERT。ABSENCE_SUMMARYファイル(80B)に出力する。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | 定義参照先 |
|
||||
|------|---------------|------|-------------|-----------|--------|-----------|
|
||||
| KIN08R01 | SYSIN | 順編成 | F (固定長) | 80B | - | JCL DD定義 |
|
||||
| KIN08W01 | ABSENCE-SUMMARY | 順編成 | F (固定長) | 80B | KIN08REC | COPY句定義書.md |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| KIN07REC | DAILY-RECORD(INSERT用ホスト変数参照) | FILE SECTION(SQL宿主) |
|
||||
| KIN08REC | W01出力レコード定義(ABSENCE-SUMMARY-REC) | FILE SECTION |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
| テーブル名 | 操作種別 | 使用箇所 | SQL種別 |
|
||||
|-----------|---------|---------|--------|
|
||||
| DAILY_RECORDS | DELETE/INSERT | 1000PROCSOR | DELETE / INSERT |
|
||||
| MONTHLY_ABSENCE | SELECT/INSERT/UPDATE | 2000MAJSOR | SELECT COUNT / INSERT / UPDATE |
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→OPEN SYSIN→SYSIN読込ループ)
|
||||
2. SYSINカード解析: GO TO DEPENDING ON でT/P/M分岐
|
||||
- Tカード(1110-TARGETSOR): UNSTRINGで対象社員一覧を内部表に格納
|
||||
- Pカード(1120-PERIODSOR): 年月範囲を設定
|
||||
- Mカード(1130-MODESOR): RESET(DELETE)/ UPDATEモード切替
|
||||
3. 主処理(2000MAJSOR): DAILY_RECORDSのSELECT→INSERT→集計テーブルに累積
|
||||
4. 月次UPDATE処理(3000UPDSOR): MONTHLY_ABSENCEにSELECT COUNT/INSERT/UPDATE
|
||||
5. 終了処理(4000MSGOUTSOR): 件数出力→CLOSE→終了メッセージ
|
||||
|
||||
## 使用構文(特記事項)
|
||||
|
||||
| 構文 | 使用箇所 | 備考 |
|
||||
|------|---------|------|
|
||||
| GO TO DEPENDING ON | 1100PARMSOR/1199-SYSIN-LOOP | T/P/Mカードパラグラフ分岐 |
|
||||
| UNSTRING | 1110-TARGETSOR/1120-PERIODSOR/1130-MODESOR | カンマ/区切り/代入符でカード分割 |
|
||||
| INSPECT TALLYING | 1110-TARGETSOR | UNSTRING後のtarget句末尾ゼロ数 |
|
||||
| COMPUTE ROUNDED ON SIZE ERROR | 2000MAJSOR | 丸め+サイズエラー検出 |
|
||||
| DELETE | 2100-DELETE-SQL | SQL: DAILY_RECORDS DELETE |
|
||||
| UPSERT(SELECT COUNT→INSERT/UPDATE) | 3000UPDSOR | 月次集計行の存在確認後分岐 |
|
||||
| OCCURS | WORKING-STORAGE | TARGET-EMP(100), 内部集計表(9999) |
|
||||
| INITIALIZE REPLACING | 1110-TARGETSOR | TARGET-TABLEの初期化 |
|
||||
| EXEC SQL INCLUDE | WORKING-STORAGE | SQLCA |
|
||||
@@ -0,0 +1,57 @@
|
||||
# KIN09CSV 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: KIN09CSV
|
||||
- **プログラム名**: CSV出力処理
|
||||
- **処理概要**: DAILY_RECORDSテーブルをCURSORで読込み、CSV形式に編集して出力。MODE=FULLで日別明細+月次サマリ、MODE=SHORTで月次サマリのみ。100行ごとにヘッダー再出力。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 | 定義参照先 |
|
||||
|------|---------------|------|-------------|-----------|--------|-----------|
|
||||
| KIN09W01 | CSV-OUTPUT | 順編成 | F (固定長) | 200B | KIN09REC | COPY句定義書.md |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| KIN09REC | W01出力レコード定義(CSV-OUTPUT-REC) | FILE SECTION |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
| テーブル名 | 操作種別 | 使用箇所 | SQL種別 |
|
||||
|-----------|---------|---------|--------|
|
||||
| DAILY_RECORDS | SELECT | 1200-DAILY-OPEN | DECLARE CURSOR / OPEN / FETCH / CLOSE |
|
||||
| MONTHLY_ABSENCE | SELECT | 2500-SHORT-MODE | DECLARE CURSOR / OPEN / FETCH / CLOSE |
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→COMMAND-LINE解析→OPEN出力)
|
||||
2. ヘッダー出力(SHIFT JIS CSVヘッダー行)
|
||||
3. 日別明細ループ:DAILY_RECORDS CURSOR OPEN→FETCH→CSV編集(STRING WITH POINTER)→WRITE AFTER ADVANCING 1 LINE
|
||||
4. 100行ごとにヘッダー再出力(WRITE AFTER ADVANCING PAGE)
|
||||
5. MODE=SHORT: MONTHLY_ABSENCE CURSOR OPEN→FETCH→月次サマリCSV出力
|
||||
6. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||
|
||||
## 使用構文(特記事項)
|
||||
|
||||
| 構文 | 使用箇所 | 備考 |
|
||||
|------|---------|------|
|
||||
| ACCEPT FROM COMMAND-LINE | 1100PARMSOR | "YEARMONTH=202605 MODE=FULL"解析 |
|
||||
| STRING DELIMITED BY | 2000MAJSOR/2500-SHORT-MODE | CSV行編集(WITH POINTER) |
|
||||
| WRITE AFTER ADVANCING PAGE | 2000MAJSOR | 改ページ+ヘッダー再出力 |
|
||||
| WRITE AFTER ADVANCING 2 LINES | 2500-SHORT-MODE | ヘッダー後改行 |
|
||||
| WRITE AFTER ADVANCING 1 LINE | 2000MAJSOR/2500-SHORT-MODE | データ行改行 |
|
||||
| INSPECT REPLACING | 2000MAJSOR | CSVカンマ・改行サニタイズ |
|
||||
| DECLARE CURSOR / OPEN / FETCH / CLOSE | 1200-DAILY-OPEN/2500-SHORT-MODE | 2重CURSOR(DAILY→MONTHLY) |
|
||||
| OCCURS | WORKING-STORAGE | TARGET-EMP(100) |
|
||||
| INITIALIZE | 1100PARMSOR/1200-DAILY-OPEN | 変数初期化 |
|
||||
| MOVE CORRESPONDING | 2000MAJSOR | HV → CSV行項目編集 |
|
||||
+303
@@ -0,0 +1,303 @@
|
||||
# カバレッジ統計
|
||||
|
||||
> 本ファイルは全コードベース(KIN + ZAN + SUB)を統合したカバレッジ状況を集計する。
|
||||
> 定義ファイル(COBOLキーワード網羅定義書.md)の Part 1(予約語一覧)・Part 3.1(カテゴリ定義)を参照して集計する。
|
||||
> 凡例:◎=使用済、○=使用あり(一部構文のみ)、×=未使用、△=調査中
|
||||
|
||||
---
|
||||
|
||||
## 1. プログラムタイプカバレッジ
|
||||
|
||||
### 1.1 全35タイプ内訳
|
||||
|
||||
| No. | 名称 | 分類 | 対応プログラム | 状態 |
|
||||
|:---:|------|:----:|:-------------:|:----:|
|
||||
| 01 | マッチング(1:1) | 匹配 | ZAN04MAT | ◎ |
|
||||
| 02 | マッチング(1:N) | 匹配 | KIN05MAT, KIN03EXP | ◎ |
|
||||
| 03 | マッチング(N:1) | 匹配 | ZAN03CHK | ◎ |
|
||||
| 04 | レイアウト編集のみ(GETPUT) | 编辑 | KIN06CLD | ◎ |
|
||||
| 05 | 振り分け(IF文) | 分支 | 全メインプログラム(12本) | ◎ |
|
||||
| 06 | 振り分け(EVALUATE文) | 分支 | 12本中11本(KIN04/KIN06以外) | ◎ |
|
||||
| 07 | キーブレイク(集計) | key切 | ZAN05CAL | ◎ |
|
||||
| 08 | キーブレイク(集約) | key切 | ZAN05CAL | ○ |
|
||||
| 09 | DB更新 | 数据库 | KIN02UPD, ZAN06UPD | ◎ |
|
||||
| 10 | 50分割 | 分割 | — | × |
|
||||
| 11 | 25分割 | 分割 | — | × |
|
||||
| 12 | 100分割 | 分割 | — | × |
|
||||
| 13 | 項目チェック(重複含まず) | 校验 | ZAN01CHK, ZAN03CHK, KIN01INP, KIN04CHK, SUB04CHK | ◎ |
|
||||
| 14 | オンラインPGM | online | — | × |
|
||||
| 15 | CSV→FB変換(改行なし) | 文件转换 | ZAN01CHK(UNSTRING), KIN01INP(UNSTRING) | ◎ |
|
||||
| 16 | 2段階マッチング(1:1⇒1:1) | 匹配 | — | × |
|
||||
| 17 | 2段階マッチング(N:1⇒N:1) | 匹配 | — | × |
|
||||
| 18 | マッチングM:N⇒出力M件 | 匹配 | — | × |
|
||||
| 19 | マッチングM:N⇒出力N件 | 匹配 | — | × |
|
||||
| 20 | マッチングM:N⇒出力M×N件 | 匹配 | — | × |
|
||||
| 21 | CSV→FB変換(改行あり) | 文件转换 | — | × |
|
||||
| 22 | 2段階マッチング(M:N⇒M:N) | 匹配 | — | × |
|
||||
| 23 | SELECT条件 | 数据库 | — | × |
|
||||
| 24 | 内部テーブル検索 | 内部处理 | KIN01INP(SEARCH), KIN03EXP(SEARCH ALL), ZAN03CHK(SEARCH ALL) | ◎ |
|
||||
| 25 | サブプログラム使用 | 内部处理 | SUB01DAT~SUB05TIM | ◎ |
|
||||
| 26 | DB検索 | 数据库 | KIN03EXP, KIN06CLD | ◎ |
|
||||
| 27 | 項目チェック(半角20桁/4桁) | 校验 | — | × |
|
||||
| 28 | SYSIN読込 | 内部处理 | KIN08DBU | ◎ |
|
||||
| 29 | ASCII→EBCDIC変換 | 文件转换 | — | × |
|
||||
| 30 | キーブレイク(集計集約以外) | key切 | KIN03EXP(社員小計), ZAN02CHK(重複検出), KIN05MAT(N:1ループ) | ◎ |
|
||||
| 31 | 項目チェック(重複含む) | 校验 | ZAN02CHK(時間帯重複) | ◎ |
|
||||
| 32 | 1:N+キーブレイク(同キー) | 混合 | — | × |
|
||||
| 33 | 1:N+キーブレイク(異キー) | 混合 | — | × |
|
||||
| 34 | SORT(INPUT/OUTPUT PROCEDURE) | 排序 | — | × |
|
||||
| 35 | MERGE(複数ファイル結合) | 排序 | — | × |
|
||||
|
||||
### 1.2 集計
|
||||
|
||||
| 指標 | 値 |
|
||||
|------|:----:|
|
||||
| 全タイプ数 | 35 |
|
||||
| ◎(使用済) | 15 |
|
||||
| ○(一部使用) | 1 |
|
||||
| △(調査中) | 0 |
|
||||
| ×(未使用) | 19 |
|
||||
| カバレッジ率(◎/35) | 42.9% |
|
||||
| カバレッジ率(◎+○/35) | 45.7% |
|
||||
|
||||
---
|
||||
|
||||
## 2. カテゴリカバレッジ
|
||||
|
||||
### 2.1 カテゴリ別使用状況
|
||||
|
||||
| カテゴリ | 全文数 | 使用文数 | 使用文一覧 | 未使用文 | カバレッジ率 |
|
||||
|---------|:-----:|:-------:|-----------|---------|:----------:|
|
||||
| 入出力(ファイル) | 7 | 6 | READ, WRITE, OPEN, CLOSE, WRITE FROM, WRITE ADVANCING | DELETE(SEQ), REWRITE, START | 85.7% |
|
||||
| 入出力(ソート) | 4 | 0 | — | SORT, MERGE, RELEASE, RETURN | 0.0% |
|
||||
| 入出力(画面/システム) | 3 | 2 | ACCEPT, DISPLAY | STOP RUN(SUB03END使用), STOP literal | 66.7% |
|
||||
| 算術演算 | 5 | 5 | ADD, SUBTRACT, MULTIPLY, DIVIDE, COMPUTE | —(CORRESPONDING/REMAINDERは一部使用) | 100% |
|
||||
| 制御(条件分岐) | 4 | 4 | IF, EVALUATE, SEARCH, CONTINUE | — | 100% |
|
||||
| 制御(繰返し) | 1 | 1 | PERFORM(UNTIL/VARYING/THRU/TEST AFTER) | — | 100% |
|
||||
| 制御(分岐/呼出) | 7 | 4 | CALL, GOBACK, EXIT, GO TO | CANCEL, ENTRY, ALTER, EXIT PROGRAM | 57.1% |
|
||||
| 文字操作 | 4 | 4 | STRING, UNSTRING, INSPECT, INITIALIZE | —(MOVE含む) | 100% |
|
||||
| 埋込み言語 | 1 | 1 | EXEC SQL ... END-EXEC | —(EXEC CICS未使用) | 100% |
|
||||
| **合計** | **38** | **27** | **(上記参照)** | **11件(ALTER,CANCEL,ENTRY,EXEC CICS,EXIT PROGRAM,MERGE,RELEASE,RETURN,REWRITE,SORT,START)** | **71.1%** |
|
||||
|
||||
### 2.2 未カバーカテゴリ
|
||||
|
||||
| カテゴリ | 未使用文 | 備考 |
|
||||
|---------|---------|------|
|
||||
| 入出力(ソート) | SORT, MERGE, RELEASE, RETURN | JCL PGM=SORTに委譲。COBOL SORT不使用 |
|
||||
| 制御(分岐/呼出) | CANCEL, ENTRY, ALTER, EXIT PROGRAM | GOBACKで代用。ALTERは非推奨 |
|
||||
| 入出力(ファイル) | REWRITE, START | VSAM/INDEXED非対応。DELETEはEXEC SQLのみ |
|
||||
|
||||
---
|
||||
|
||||
## 3. 予約語・構文パターンカバレッジ
|
||||
|
||||
> 定義ファイル(COBOLキーワード網羅定義書.md Part 1)の「対応するCOBOL節/文」列に基づき、各構文パターンの使用状況を記録する。
|
||||
> 優先度:高=当該プログラムタイプで必須、中=使用頻度高い、低=特殊用途
|
||||
> 凡例:◎=使用済(複数PGM)、○=使用あり(単一PGM)、×=未使用
|
||||
|
||||
### 3.1 入出力(ファイル)
|
||||
|
||||
#### READ
|
||||
|
||||
| 構文パターン | 説明 | 使用状況 | 優先度 | 備考 |
|
||||
|-------------|------|:-------:|:------:|------|
|
||||
| READ INTO | レコード読込+データ移動 | ◎ | 高 | 全ファイル読込PGM(KIN03EXP/KIN06CLDを除く) |
|
||||
| READ KEY IS | キー指定読込 | × | 高 | 逐次読込のみ、キー指定不要 |
|
||||
| READ AT END | 終了条件処理 | ◎ | 高 | READ AT END / NOT AT END / END-READ |
|
||||
| READ NEXT | 順次読込 | ◎ | 高 | 全READ文は順次読込 |
|
||||
| READ PREVIOUS | 逆方向読込 | × | 低 | 動的アクセス時のみ |
|
||||
| READ NOT AT END | 終了条件否定処理 | ○ | 中 | ZAN01CHKなど |
|
||||
| READ WITH WAIT | ファイル解放待ち | × | 低 | |
|
||||
| READ LOCK/IGNORE LOCK | ロック制御 | × | 低 | |
|
||||
|
||||
#### WRITE
|
||||
|
||||
| 構文パターン | 説明 | 使用状況 | 優先度 | 備考 |
|
||||
|-------------|------|:-------:|:------:|------|
|
||||
| WRITE FROM | 転記書出 | ○ | 高 | KIN04CHK(2050NORMSOR)のみ |
|
||||
| WRITE ADVANCING | 改行・改ページ制御 | ○ | 中 | KIN09CSV(PAGE/2 LINES/1 LINE) |
|
||||
| WRITE END-OF-PAGE | ページ終了処理 | × | 低 | |
|
||||
| WRITE INVALID KEY | キー異常処理 | × | 中 | 索引ファイル時 |
|
||||
|
||||
#### OPEN
|
||||
|
||||
| 構文パターン | 説明 | 使用状況 | 優先度 | 備考 |
|
||||
|-------------|------|:-------:|:------:|------|
|
||||
| OPEN INPUT | 入力オープン | ◎ | 高 | 全ファイル入力PGM |
|
||||
| OPEN OUTPUT | 出力オープン | ◎ | 高 | 全ファイル出力PGM |
|
||||
| OPEN I-O | 入出力オープン | × | 高 | VSAM非対応 |
|
||||
| OPEN EXTEND | 追加オープン | × | 中 | |
|
||||
| OPEN WITH NO REWIND | 巻戻しなし | × | 低 | テープ時のみ |
|
||||
|
||||
#### CLOSE
|
||||
|
||||
| 構文パターン | 説明 | 使用状況 | 優先度 | 備考 |
|
||||
|-------------|------|:-------:|:------:|------|
|
||||
| CLOSE WITH LOCK | ロック付きクローズ | × | 低 | |
|
||||
| CLOSE FOR REMOVAL | テープリール取外し | × | 低 | |
|
||||
|
||||
#### DELETE, REWRITE, START
|
||||
|
||||
| 構文パターン | 説明 | 使用状況 | 優先度 | 備考 |
|
||||
|-------------|------|:-------:|:------:|------|
|
||||
| DELETE(SEQ FILE) | 逐次ファイル削除 | × | 中 | EXEC SQL DELETEはKIN02UPDで使用 |
|
||||
| REWRITE FROM | 書換え+転記 | × | 中 | |
|
||||
| REWRITE INVALID KEY | 書換え+キー異常処理 | × | 中 | |
|
||||
| START KEY IS | 開始位置指定 | × | 中 | |
|
||||
| START INVALID KEY | 位置指定+異常処理 | × | 中 | |
|
||||
|
||||
### 3.2 入出力(ソート)
|
||||
|
||||
| 構文パターン | 説明 | 使用状況 | 優先度 | 備考 |
|
||||
|-------------|------|:-------:|:------:|------|
|
||||
| SORT ON KEY | 整列キー指定 | × | 低 | 現状未使用 |
|
||||
| SORT USING | 入力ファイル指定 | × | 低 | |
|
||||
| SORT GIVING | 出力ファイル指定 | × | 低 | |
|
||||
| SORT INPUT PROCEDURE | 入力手続き | × | 低 | |
|
||||
| SORT OUTPUT PROCEDURE | 出力手続き | × | 低 | |
|
||||
| MERGE ON KEY | 結合キー指定 | × | 低 | |
|
||||
| RELEASE FROM | SORTへの引渡し | × | 低 | |
|
||||
| RETURN INTO | SORTからの受取り | × | 低 | |
|
||||
|
||||
### 3.3 入出力(画面/システム)
|
||||
|
||||
| 構文パターン | 説明 | 使用状況 | 優先度 | 備考 |
|
||||
|-------------|------|:-------:|:------:|------|
|
||||
| ACCEPT FROM DATE/DAY/TIME | システム日付時刻取得 | ○ | 高 | KIN06CLDでACCEPT FROM COMMAND-LINE使用(DATE系はSUB01DAT委譲) |
|
||||
| DISPLAY UPON | 出力先指定表示 | × | 高 | DISPLAYはあるがUPON句不使用 |
|
||||
| DISPLAY WITH NO ADVANCING | 改行なし表示 | × | 中 | |
|
||||
| STOP RUN | プログラム終了 | ○ | 高 | SUB03ENDのみ(STOP RUN RETURN-CODE) |
|
||||
| STOP literal | 一時停止 | × | 低 | |
|
||||
|
||||
### 3.4 算術演算
|
||||
|
||||
| 構文パターン | 説明 | 使用状況 | 優先度 | 備考 |
|
||||
|-------------|------|:-------:|:------:|------|
|
||||
| ADD TO/GIVING | 加算 | ◎ | 高 | ADD 1 TO CUN-xxx(全メインプログラム) |
|
||||
| ADD CORRESPONDING | 対応項目加算 | × | 中 | 未使用 |
|
||||
| SUBTRACT FROM/GIVING | 減算 | ◎ | 高 | KIN07DAI(6100/6300)、ZAN06UPD |
|
||||
| SUBTRACT CORRESPONDING | 対応項目減算 | × | 中 | 未使用 |
|
||||
| MULTIPLY BY/GIVING | 乗算 | ◎ | 中 | KIN07DAI、ZAN06UPD(時間→分変換) |
|
||||
| DIVIDE INTO/BY | 除算 | ◎ | 中 | ZAN01CHK、ZAN05CAL、SUB05TIM、KIN07DAI |
|
||||
| DIVIDE REMAINDER | 商と余り | ◎ | 中 | DIVIDE...GIVING...REMAINDER(ZAN01, ZAN05, SUB05, KIN07) |
|
||||
| COMPUTE | 計算代入 | ◎ | 高 | ZAN01, ZAN03, ZAN05, KIN03, KIN06, SUB05 |
|
||||
| ROUNDED | 丸め指定 | ◎ | 中 | COMPUTE ROUNDED(上記PGM) |
|
||||
| SIZE ERROR | サイズ異常処理 | ○ | 中 | COMPUTE ON SIZE ERROR(ZAN01, ZAN03) |
|
||||
|
||||
### 3.5 制御(条件分岐)
|
||||
|
||||
| 構文パターン | 説明 | 使用状況 | 優先度 | 備考 |
|
||||
|-------------|------|:-------:|:------:|------|
|
||||
| IF THEN/ELSE/END-IF | 条件分岐 | ◎ | 高 | 全メインプログラム + SUB04CHK, SUB05TIM |
|
||||
| EVALUATE ALSO/WHEN/OTHER | 多分岐 | ◎ | 高 | 12本中11本(KIN04/KIN06以外) |
|
||||
| SEARCH ALL | バイナリサーチ | ◎ | 中 | KIN03EXP(休日), ZAN03CHK(休日) |
|
||||
| SEARCH VARYING | 変数変化付探索 | × | 中 | SEARCH(非ALL)はKIN01INPのみ |
|
||||
| CONTINUE | 無操作 | ◎ | 低 | SEARCH ALL AT END, EVALUATE WHEN OTHER |
|
||||
|
||||
### 3.6 制御(繰返し)
|
||||
|
||||
| 構文パターン | 説明 | 使用状況 | 優先度 | 備考 |
|
||||
|-------------|------|:-------:|:------:|------|
|
||||
| PERFORM 外部段落 | 段落呼出 | ◎ | 高 | 全メインプログラム |
|
||||
| PERFORM THRU | 段落範囲呼出 | ○ | 中 | KIN03EXP(2100 THRU ...-EXIT) |
|
||||
| PERFORM TIMES | 回数指定 | × | 中 | 未使用 |
|
||||
| PERFORM UNTIL | 条件指定 | ◎ | 高 | 全メインプログラム |
|
||||
| PERFORM VARYING/AFTER | 変数変化付 | ◎ | 高 | ZAN06UPD, KIN06CLD(線形探索) |
|
||||
| PERFORM インライン | インライン記述 | × | 高 | 全PERFORMは外部段落呼出し |
|
||||
| PERFORM TEST BEFORE/AFTER | 判定タイミング指定 | ○ | 中 | ZAN06UPD(PERFORM TEST AFTER VARYING) |
|
||||
|
||||
### 3.7 制御(分岐/呼出)
|
||||
|
||||
| 構文パターン | 説明 | 使用状況 | 優先度 | 備考 |
|
||||
|-------------|------|:-------:|:------:|------|
|
||||
| CALL USING | 引数付呼出 | ◎ | 高 | 全メインプログラム(CALL SUB01-05) |
|
||||
| CALL RETURNING | 戻値付呼出 | × | 中 | RETURN-CODEは使用するがCALL RETURNING不使用 |
|
||||
| CALL ON EXCEPTION | 呼出異常処理 | × | 中 | |
|
||||
| GOBACK | プログラム終了 | ◎ | 高 | 全14プログラム |
|
||||
| EXIT(plain) | 段落・節の共通終点 | ◎ | 中 | 全14プログラム(xxx-EXT. EXIT.) |
|
||||
| EXIT PROGRAM | 呼出元復帰 | × | 高 | GOBACKで代用 |
|
||||
| EXIT PARAGRAPH/SECTION | 段落・節終了 | × | 低 | |
|
||||
| EXIT PERFORM/CYCLE | PERFORM脱出 | × | 低 | |
|
||||
| GO TO | 制御移行 | ○ | 中 | ZAN01CHK, KIN01INP, KIN04CHK, SUB04CHK, KIN08DBU(DEPENDING ON) |
|
||||
| CANCEL ON EXCEPTION | プログラム解放 | × | 低 | |
|
||||
| ALTER TO PROCEED TO | 分岐先変更 | × | 低 | 廃止予定 |
|
||||
| ENTRY USING | 別エントリポイント | × | 低 | |
|
||||
|
||||
### 3.8 文字操作
|
||||
|
||||
| 構文パターン | 説明 | 使用状況 | 優先度 | 備考 |
|
||||
|-------------|------|:-------:|:------:|------|
|
||||
| STRING DELIMITED BY/INTO | 文字列連結 | ◎ | 高 | KIN01,02,04,06, ZAN01-04,06, SUB02MSG |
|
||||
| STRING WITH POINTER | 位置指定連結 | ○ | 中 | KIN09CSV(2000MAJSOR/2500-SHORT-MODE) | |
|
||||
| UNSTRING DELIMITED BY/INTO | 文字列分解 | ◎ | 高 | KIN01INP, KIN04CHK, ZAN01CHK |
|
||||
| UNSTRING WITH POINTER | 位置指定分解 | × | 中 | |
|
||||
| UNSTRING TALLYING | 分解数計数 | ○ | 中 | KIN01INP, KIN04CHK, ZAN01CHK(TALLYING IN CNT) |
|
||||
| INSPECT TALLYING | 文字計数 | ◎ | 中 | ZAN01CHK, KIN04CHK, SUB04CHK |
|
||||
| INSPECT REPLACING | 文字置換 | ○ | 中 | KIN09CSV(CSVカンマ・改行サニタイズ) | |
|
||||
| INSPECT CONVERTING | 文字変換 | × | 中 | |
|
||||
| INITIALIZE REPLACING | カテゴリ別初期化 | ○ | 中 | KIN08DBU(1110-TARGETSOR) |
|
||||
| MOVE TO | 基本代入 | ◎ | 高 | 全14プログラム |
|
||||
| MOVE CORRESPONDING | 対応項目代入 | × | 中 | |
|
||||
|
||||
### 3.9 埋込み言語
|
||||
|
||||
| 構文パターン | 説明 | 使用状況 | 優先度 | 備考 |
|
||||
|-------------|------|:-------:|:------:|------|
|
||||
| EXEC SQL ... END-EXEC | DB2アクセス | ◎ | 高 | KIN02UPD, KIN03EXP, ZAN06UPD |
|
||||
| EXEC CICS ... END-EXEC | CICSコマンド | × | 低 | 現状バッチのみ |
|
||||
|
||||
---
|
||||
|
||||
## 4. 全体サマリ
|
||||
|
||||
| 指標 | 値 |
|
||||
|------|:----:|
|
||||
| **プログラムタイプカバレッジ(35タイプ)** | |
|
||||
| ◎(使用済) | 14 / 35 |
|
||||
| ○(一部使用) | 1 / 35 |
|
||||
| ×(未使用) | 20 / 35 |
|
||||
| △(調査中) | 0 / 35 |
|
||||
| カバレッジ率(◎/35) | 40.0% |
|
||||
| カバレッジ率(◎+○/35) | 42.9% |
|
||||
| 実装対象限定(1-9,13-15,24-26,28,30-31)= 20種中 | 16件 = 80.0% |
|
||||
| **カテゴリカバレッジ(9カテゴリ)** | |
|
||||
| 全カテゴリ数 | 9 |
|
||||
| カバー済カテゴリ(使用文あり) | 8 / 9 |
|
||||
| 未カバーカテゴリ | 入出力(ソート)(4文すべて未使用) |
|
||||
| カテゴリカバレッジ率 | 88.9% |
|
||||
| **ステートメントカバレッジ(45ユニーク)** | |
|
||||
| 全ステートメント数 | 45 |
|
||||
| 使用済ステートメント | 37 |
|
||||
| 未使用ステートメント | 8 |
|
||||
| カバレッジ率 | 82.2% |
|
||||
| **予約語カバレッジ** | |
|
||||
| 全予約語数(COBOLキーワード網羅定義書.md準拠) | 193 |
|
||||
| 使用予約語数 | 137 |
|
||||
| カバレッジ率 | 71.0% |
|
||||
| **TYPE定義カバレッジ(11種)** | |
|
||||
| 全TYPE定義数 | 11 |
|
||||
| 使用済TYPE | 7(X, 9, 9V9, S9V9, S9V9 COMP-3, S9 COMP-3, S9 COMP) |
|
||||
| 特殊形式(補足) | 3(9(004).9(001), S9 DISPLAY, +9(009)) |
|
||||
| 未使用TYPE | 4(G, N, BINARY, ZZZ9) |
|
||||
| TYPEカバレッジ率 | 63.6%(特殊含め90.9%) |
|
||||
|
||||
## 5. サブシステムA プログラム実装状況
|
||||
|
||||
| No. | プログラムID | プログラム名 | プログラムタイプ | 実装 | 備考 |
|
||||
|:---:|:-----------:|:------------|:----------------:|:----:|------|
|
||||
| 1 | KIN01INP | 休暇申請CSV取込・検証処理 | 振り分け(IF) + CSV→FB | ◎ | 実装済 |
|
||||
| 2 | KIN02UPD | 休暇申請DB更新処理 | DB更新(INSERT/DELETE/SELECT) | ◎ | 実装済 |
|
||||
| 3 | KIN03EXP | 休暇日別展開処理 | キーブレイク + DB検索 | ◎ | 実装済 |
|
||||
| 4 | KIN04CHK | 打刻項目チェック処理 | 項目チェック(重複無) | ◎ | 実装済 |
|
||||
| 5 | KIN05MAT | 打刻休暇照合処理 | マッチング(1:N) + キーブレイク | ◎ | 実装済 |
|
||||
| 6 | KIN06CLD | 出勤日カレンダー生成処理 | GETPUT + DB検索 | ◎ | 実装済 |
|
||||
| 7 | KIN07DAI | 日別勤怠計算処理 | マッチング(1:N) + EVALUATE分岐 | ◎ | 実装済 |
|
||||
| 8 | KIN08DBU | 勤怠DB更新処理 | DB更新 + SYSIN読込 | ◎ | 実装済 |
|
||||
| 9 | KIN09CSV | 勤怠CSV出力処理 | 編集出力(WRITE AFTER ADVANCING) | ◎ | 実装済 |
|
||||
|
||||
**サブシステムA全9プログラム実装完了**
|
||||
|
||||
---
|
||||
|
||||
> 本ファイルは全コードベース(KIN01-09 + ZAN01-06 + SUB01-05 = 20プログラム)を統合したカバレッジ状況。
|
||||
> サブシステムA 全9プログラム実装済。定義ファイル(COBOLキーワード網羅定義書.md)と合わせて参照すること。
|
||||
Reference in New Issue
Block a user