- 全6プログラム(ZAN01CHK~ZAN06UPD)ソース・実行ファイル - 5サブプログラム(SUB01DAT~SUB05TIM)ソース・DLL - 10 COPY書式ファイル - 詳細設計書12ファイル - サブシステムB全体設計書 - bin/配下の実行ファイル资産
400 lines
18 KiB
COBOL
400 lines
18 KiB
COBOL
IDENTIFICATION DIVISION.
|
||
PROGRAM-ID. ZAN05CAL.
|
||
*****************************************************************
|
||
* システム名 : 残業統計管理システム *
|
||
* プログラムID : ZAN05CAL *
|
||
* プログラム名 : 残業時間集計処理 *
|
||
* 作成日 : 2026-06-15 *
|
||
* 処理概要 : OVT-SORTED2(申請番号+処理番号昇順)を *
|
||
* キーブレイク集計し、同一APPL-ID内の全明細の *
|
||
* 加班時間を積算してOVT-SUMMARYに1レコード出力。*
|
||
* *
|
||
*****************************************************************
|
||
* 更新履歴 *
|
||
*---------------------------------------------------------------*
|
||
* 更新日付 担当者 更新内容 *
|
||
*---------------------------------------------------------------*
|
||
* 26-06-15 @@@ 新規作成 *
|
||
* *
|
||
*****************************************************************
|
||
ENVIRONMENT DIVISION.
|
||
CONFIGURATION SECTION.
|
||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||
*
|
||
INPUT-OUTPUT SECTION.
|
||
FILE-CONTROL.
|
||
SELECT R01INNFIL ASSIGN TO ZAN05R01.
|
||
SELECT W01OUTFIL ASSIGN TO ZAN05W01.
|
||
*
|
||
DATA DIVISION.
|
||
FILE SECTION.
|
||
*
|
||
*****************************************************************
|
||
* R01 (OVT-SORTED2) *
|
||
*****************************************************************
|
||
FD R01INNFIL
|
||
LABEL RECORD IS STANDARD
|
||
BLOCK CONTAINS 0
|
||
RECORDING MODE IS F.
|
||
01 R01INNREC.
|
||
COPY ZAN02REC REPLACING ==(A)== BY ==R01==.
|
||
*
|
||
*****************************************************************
|
||
* W01 (OVT-SUMMARY) *
|
||
*****************************************************************
|
||
FD W01OUTFIL
|
||
LABEL RECORD IS STANDARD
|
||
BLOCK CONTAINS 0
|
||
RECORDING MODE IS F.
|
||
01 W01OUTREC.
|
||
COPY ZAN03REC REPLACING ==(A)== BY ==W01==.
|
||
*
|
||
WORKING-STORAGE SECTION.
|
||
*
|
||
*****************************************************************
|
||
* コンスタント領域 *
|
||
*****************************************************************
|
||
01 CNSARA.
|
||
03 CNS-PRGIDX PIC X(008) VALUE 'ZAN05CAL'.
|
||
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-TIMMODE02 PIC 9(001) VALUE 2.
|
||
03 CNS-ABD999 PIC 9(003) VALUE 999.
|
||
*
|
||
*****************************************************************
|
||
* カウンタ領域 *
|
||
*****************************************************************
|
||
01 CUNARA.
|
||
03 CUN-R01INN PIC S9(009) COMP-3
|
||
VALUE ZERO.
|
||
03 CUN-W01OUT PIC S9(009) COMP-3
|
||
VALUE ZERO.
|
||
*
|
||
*****************************************************************
|
||
* 作業領域 *
|
||
*****************************************************************
|
||
01 WRKARA.
|
||
*** 処理日付(ACCEPT FROM DATE用)
|
||
03 WRK-DATE-8 PIC 9(008).
|
||
*** 運用日付
|
||
03 WRK-U06 PIC 9(008).
|
||
*** キーブレイク制御
|
||
03 WRK-R01KEY PIC X(008).
|
||
03 WRK-PREV-APPL-ID PIC X(008).
|
||
03 WRK-GROUP-ACTIVE PIC X(001).
|
||
88 WRK-GROUP-IS-ACTIVE VALUE '1'.
|
||
88 WRK-GROUP-NOT-ACTIVE VALUE '0'.
|
||
*** 集約用最終レコード保持
|
||
03 WRK-LAST-REC PIC X(080).
|
||
03 WRK-LAST-REC-REDEF REDEFINES WRK-LAST-REC.
|
||
05 WRK-LAST-APPL-ID PIC X(008).
|
||
05 WRK-LAST-EMP-ID PIC 9(008).
|
||
05 WRK-LAST-APPL-DATE PIC 9(008).
|
||
05 WRK-LAST-START PIC 9(004).
|
||
05 WRK-LAST-END PIC 9(004).
|
||
05 WRK-LAST-STATUS PIC X(001).
|
||
05 WRK-LAST-OVT-TYPE PIC X(001).
|
||
05 WRK-LAST-PROC-SEQ PIC 9(002).
|
||
05 WRK-LAST-FILLER PIC X(044).
|
||
*** 集計用グループ先頭START保持
|
||
03 WRK-GROUP-START PIC 9(004).
|
||
*** 集計用積算分領域
|
||
03 WRK-ACCUM-MIN PIC S9(009) COMP-3.
|
||
*** 時刻計算領域
|
||
03 WRK-START-HOUR PIC 9(004).
|
||
03 WRK-START-MIN PIC 9(004).
|
||
03 WRK-END-HOUR PIC 9(004).
|
||
03 WRK-END-MIN PIC 9(004).
|
||
03 WRK-START-TOTAL PIC 9(005).
|
||
03 WRK-END-TOTAL PIC 9(005).
|
||
03 WRK-DIFF-MIN PIC 9(005).
|
||
03 WRK-INT-HOURS PIC 9(004).
|
||
03 WRK-REMAIN-MIN PIC 9(004).
|
||
03 WRK-OVT-HOURS PIC 9(004)V9(001).
|
||
03 WRK-TEMP-HOURS PIC 9(004)V9(001).
|
||
*
|
||
*****************************************************************
|
||
* サブプログラム連絡領域 *
|
||
*****************************************************************
|
||
*** 運用日付取得
|
||
COPY ZANDATAC.
|
||
*** メッセージ編集出力SR用
|
||
COPY ZANMSGAC.
|
||
*** ABEND処理SR用
|
||
COPY ZANENDAC.
|
||
*** 時刻丸め計算SR用
|
||
COPY ZANTIMAC.
|
||
*
|
||
PROCEDURE DIVISION.
|
||
*****************************************************************
|
||
* サブモジュールNO: (0.0) *
|
||
* サブモジュール名: 制御処理 *
|
||
* 処理概要 : メインコントロール処理 *
|
||
*****************************************************************
|
||
0000MAJCOLSOR SECTION.
|
||
*
|
||
*** 初期処理
|
||
PERFORM 1000ITTSOR.
|
||
*
|
||
*** メイン処理
|
||
PERFORM 2000MAJSOR
|
||
UNTIL WRK-R01KEY = HIGH-VALUE
|
||
AND WRK-GROUP-NOT-ACTIVE.
|
||
*
|
||
*** 終了処理
|
||
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.
|
||
*
|
||
*** 処理日付取得(ACCEPT FROM DATE)
|
||
ACCEPT WRK-DATE-8 FROM DATE YYYYMMDD.
|
||
*
|
||
*** ワークエリア初期化
|
||
INITIALIZE WRKARA.
|
||
MOVE '0' TO WRK-GROUP-ACTIVE.
|
||
*
|
||
*** 運用日付取得
|
||
INITIALIZE D01UBSPAR.
|
||
CALL 'SUB01DAT' USING D01UBSPAR.
|
||
IF D01FKICOD = ZERO
|
||
MOVE D01UBSUDATE TO WRK-U06
|
||
ELSE
|
||
INITIALIZE M00MHOPAR
|
||
MOVE CNS-MSGSUBEEK TO M00MSGCOD
|
||
MOVE 'SUB01DAT' TO M00UMKDATS22-01
|
||
MOVE D01FKICOD TO M00UMKDATS22-02
|
||
PERFORM 4000MSGOUTSOR
|
||
PERFORM 9999ABDSOR
|
||
END-IF.
|
||
*
|
||
*** 入出力ファイルOPEN
|
||
OPEN INPUT R01INNFIL
|
||
OUTPUT W01OUTFIL.
|
||
*
|
||
*** R01を読み込み
|
||
PERFORM 1100R01INNSOR.
|
||
*
|
||
*** 初回レコード設定
|
||
IF WRK-R01KEY NOT = HIGH-VALUE
|
||
MOVE R01APPL-ID TO WRK-PREV-APPL-ID
|
||
MOVE R01INNREC TO WRK-LAST-REC
|
||
MOVE R01START-TIME TO WRK-GROUP-START
|
||
SET WRK-GROUP-IS-ACTIVE TO TRUE
|
||
END-IF.
|
||
*
|
||
1000ITTSOR-EXT.
|
||
EXIT.
|
||
*****************************************************************
|
||
* サブモジュールNO:(1.1) *
|
||
* サブモジュール名:R01読込処理 *
|
||
* 処理概要 : レコード読込・キー設定 *
|
||
*****************************************************************
|
||
1100R01INNSOR SECTION.
|
||
*
|
||
READ R01INNFIL
|
||
AT END
|
||
MOVE HIGH-VALUE TO WRK-R01KEY
|
||
NOT AT END
|
||
ADD 1 TO CUN-R01INN
|
||
MOVE R01APPL-ID TO WRK-R01KEY
|
||
END-READ.
|
||
*
|
||
1100R01INNSOR-EXT.
|
||
EXIT.
|
||
*****************************************************************
|
||
* サブモジュールNO:(2.0) *
|
||
* サブモジュール名:主処理 *
|
||
* 処理概要 : キーブレイク集計制御を行う *
|
||
*****************************************************************
|
||
2000MAJSOR SECTION.
|
||
*
|
||
EVALUATE TRUE
|
||
*** EOF時:最終グループを出力
|
||
WHEN WRK-R01KEY = HIGH-VALUE
|
||
IF WRK-GROUP-IS-ACTIVE
|
||
PERFORM 2100OUTSOR
|
||
SET WRK-GROUP-NOT-ACTIVE TO TRUE
|
||
END-IF
|
||
*** キーブレイク:前グループ出力→新グループ開始
|
||
WHEN WRK-R01KEY NOT = WRK-PREV-APPL-ID
|
||
IF WRK-GROUP-IS-ACTIVE
|
||
PERFORM 2100OUTSOR
|
||
END-IF
|
||
MOVE R01APPL-ID TO WRK-PREV-APPL-ID
|
||
MOVE R01INNREC TO WRK-LAST-REC
|
||
MOVE R01START-TIME TO WRK-GROUP-START
|
||
SET WRK-GROUP-IS-ACTIVE TO TRUE
|
||
PERFORM 2200ACCUMSOR
|
||
PERFORM 1100R01INNSOR
|
||
*** 同一グループ:現レコード積算→最新レコードで上書き保持
|
||
WHEN OTHER
|
||
PERFORM 2200ACCUMSOR
|
||
MOVE R01INNREC TO WRK-LAST-REC
|
||
CONTINUE
|
||
PERFORM 1100R01INNSOR
|
||
END-EVALUATE.
|
||
*
|
||
2000MAJSOR-EXT.
|
||
EXIT.
|
||
*****************************************************************
|
||
* サブモジュールNO:(2.1) *
|
||
* サブモジュール名:集計計算出力処理 *
|
||
* 処理概要 : WRK-ACCUM-MIN→SUB05TIM丸め・OVT-SUMMARY出力*
|
||
*****************************************************************
|
||
2100OUTSOR SECTION.
|
||
*
|
||
*** 累積分→時間変換(DIVIDE REMAINDER)
|
||
DIVIDE WRK-ACCUM-MIN BY 60
|
||
GIVING WRK-INT-HOURS
|
||
REMAINDER WRK-REMAIN-MIN.
|
||
*
|
||
*** COMPUTE ROUNDED ON SIZE ERROR(カバレッジ用)
|
||
COMPUTE WRK-OVT-HOURS ROUNDED =
|
||
WRK-ACCUM-MIN / 60
|
||
ON SIZE ERROR
|
||
CONTINUE
|
||
MOVE ZERO TO WRK-OVT-HOURS
|
||
END-COMPUTE.
|
||
*
|
||
*** SUB05TIM呼出(mode 2:0.1h単位切捨)
|
||
COMPUTE WRK-TEMP-HOURS =
|
||
WRK-ACCUM-MIN / 60
|
||
END-COMPUTE.
|
||
MOVE WRK-TEMP-HOURS TO T01TIMHRS.
|
||
MOVE CNS-TIMMODE02 TO T01TIMRRC.
|
||
CALL 'SUB05TIM' USING T01TIMPAR.
|
||
*
|
||
*** OVT-SUMMARY出力
|
||
INITIALIZE W01OUTREC.
|
||
MOVE WRK-LAST-APPL-ID TO W01APPL-ID.
|
||
MOVE WRK-LAST-EMP-ID TO W01EMP-ID.
|
||
MOVE WRK-LAST-APPL-DATE TO W01APPL-DATE.
|
||
MOVE WRK-GROUP-START TO W01START-TIME.
|
||
MOVE WRK-LAST-END TO W01END-TIME.
|
||
MOVE T01TIMOUT TO W01OVT-HOURS.
|
||
MOVE WRK-LAST-OVT-TYPE TO W01OVT-TYPE.
|
||
WRITE W01OUTREC.
|
||
ADD 1 TO CUN-W01OUT.
|
||
*
|
||
*** 累積分リセット(次グループ用)
|
||
MOVE ZERO TO WRK-ACCUM-MIN.
|
||
*
|
||
2100OUTSOR-EXT.
|
||
EXIT.
|
||
*****************************************************************
|
||
* サブモジュールNO:(2.2) *
|
||
* サブモジュール名:積算処理 *
|
||
* 処理概要 : 現レコードの時間差分をWRK-ACCUM-MINに加算 *
|
||
*****************************************************************
|
||
2200ACCUMSOR SECTION.
|
||
*
|
||
*** 開始時刻→分変換
|
||
DIVIDE R01START-TIME BY 100
|
||
GIVING WRK-START-HOUR
|
||
REMAINDER WRK-START-MIN.
|
||
COMPUTE WRK-START-TOTAL =
|
||
WRK-START-HOUR * 60 + WRK-START-MIN
|
||
END-COMPUTE.
|
||
*
|
||
*** 終了時刻→分変換
|
||
DIVIDE R01END-TIME BY 100
|
||
GIVING WRK-END-HOUR
|
||
REMAINDER WRK-END-MIN.
|
||
COMPUTE WRK-END-TOTAL =
|
||
WRK-END-HOUR * 60 + WRK-END-MIN
|
||
END-COMPUTE.
|
||
*
|
||
*** 差分計算
|
||
COMPUTE WRK-DIFF-MIN =
|
||
WRK-END-TOTAL - WRK-START-TOTAL
|
||
END-COMPUTE.
|
||
*
|
||
*** 積算
|
||
COMPUTE WRK-ACCUM-MIN =
|
||
WRK-ACCUM-MIN + WRK-DIFF-MIN
|
||
END-COMPUTE.
|
||
*
|
||
2200ACCUMSOR-EXT.
|
||
EXIT.
|
||
*****************************************************************
|
||
* サブモジュールNO:(3.0) *
|
||
* サブモジュール名:終了処理 *
|
||
* 処理概要 : ファイルクローズ・件数と終了メッセージ出力 *
|
||
*****************************************************************
|
||
3000STPSOR SECTION.
|
||
*
|
||
*** 入出力ファイルCLOSE
|
||
CLOSE R01INNFIL
|
||
W01OUTFIL.
|
||
*
|
||
*** 入出力ファイル件数出力
|
||
INITIALIZE M00MHOPAR.
|
||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||
MOVE 'ZAN05R01' TO M00UMKDATS22-01.
|
||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||
PERFORM 4000MSGOUTSOR.
|
||
*
|
||
INITIALIZE M00MHOPAR.
|
||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||
MOVE 'ZAN05W01' 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. |