Add Subsystem A (KIN01INP/KIN02UPD/KIN03EXP) to production/
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
# バックアップディレクトリ(push対象外)
|
||||
old/
|
||||
|
||||
# コンパイル中間ファイル
|
||||
*.o
|
||||
*.obj
|
||||
|
||||
# データ・ログファイル
|
||||
*.log
|
||||
*.DAT
|
||||
*.dat
|
||||
@@ -0,0 +1,56 @@
|
||||
# 勤怠管理システム - 生产环境资源
|
||||
|
||||
本リポジトリは勤怠管理システム(サブシステムA:勤怠休暇管理、サブシステムB:残業統計管理、サブシステムC:給与計算)の生产环境リソースを管理する。
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
production/
|
||||
├── src/ # 主プログラムソース(COBOL)
|
||||
├── sub/ # 共通サブプログラム
|
||||
├── cpy/ # COPY書式ファイル(レコード定義・連絡領域)
|
||||
├── bin/ # 実行ファイル(.exe)+サブプログラムDLL(.dll)
|
||||
├── ddl/ # DB2スキーマ定義(DDL)
|
||||
├── design/ # サブシステム全体設計書
|
||||
├── 詳細設計書/ # 詳細設計ドキュメント
|
||||
└── 使用資源一覧/ # 使用資源一覧(COPY・CALL・I/Oファイル・DBテーブル)
|
||||
```
|
||||
|
||||
## サブシステム構成
|
||||
|
||||
| サブシステム | 役割 | COBOLプログラム |
|
||||
|-------------|------|----------------|
|
||||
| A: 勤怠休暇管理 | 休暇申請取込・打刻照合・DB更新・エクスポート | KIN01INP/KIN02UPD/KIN03EXP(3本) |
|
||||
| B: 残業統計管理 | 加班申請取込・重複チェック・照合・集計・DB更新 | ZAN01CHK~ZAN06UPD(6本) |
|
||||
| C: 給与計算 | 欠勤統計取込・給与計算・明細出力 | 後続追加予定 |
|
||||
|
||||
## 构建与运行
|
||||
|
||||
### 编译
|
||||
|
||||
ソースコードはCOBOL + DB2向けに実装されている。
|
||||
開発環境(Windows + GnuCOBOL 3.2.0)にはDB2がないため、プリプロセッサ`convert-sql.mjs`が`EXEC SQL`をSQLite3用の`CALL 'br_exec'`に変換し、SQLite3で動作させる。
|
||||
|
||||
```batch
|
||||
rem プロジェクトルートで実行
|
||||
tools\build.bat src\<program>.cbl
|
||||
```
|
||||
|
||||
### 実行
|
||||
|
||||
```batch
|
||||
set COB_CONFIG_DIR=C:\mingw64\share\gnucobol\config
|
||||
set COB_LIBRARY_PATH=bin
|
||||
cd <project_root>
|
||||
bin\<program>.exe
|
||||
```
|
||||
|
||||
### サブシステムB テスト実行順序
|
||||
|
||||
```batch
|
||||
ZAN01CHK → ZAN02CHK → ZAN03CHK → ZAN04MAT → ZAN05CAL → ZAN06UPD
|
||||
```
|
||||
|
||||
## 编码
|
||||
|
||||
源文件使用 ASCII/JIS 编码保存。COPYファイルは元の命名を維持する。
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,11 @@
|
||||
*
|
||||
* 加班申請レコード 80B
|
||||
*
|
||||
03 (A)APPL-ID PIC X(008).
|
||||
03 (A)EMP-ID PIC 9(008).
|
||||
03 (A)APPL-DATE PIC 9(008).
|
||||
03 (A)START-TIME PIC 9(004).
|
||||
03 (A)END-TIME PIC 9(004).
|
||||
03 (A)STATUS PIC X(001).
|
||||
03 (A)OVT-TYPE PIC X(001).
|
||||
03 (A)FILLER PIC X(046).
|
||||
@@ -0,0 +1,12 @@
|
||||
*
|
||||
* マッチング結果レコード 80B
|
||||
*
|
||||
03 (A)APPL-ID PIC X(008).
|
||||
03 (A)EMP-ID PIC 9(008).
|
||||
03 (A)APPL-DATE PIC 9(008).
|
||||
03 (A)START-TIME PIC 9(004).
|
||||
03 (A)END-TIME PIC 9(004).
|
||||
03 (A)STATUS PIC X(001).
|
||||
03 (A)OVT-TYPE PIC X(001).
|
||||
03 (A)PROC-SEQ PIC 9(002).
|
||||
03 (A)FILLER PIC X(044).
|
||||
@@ -0,0 +1,11 @@
|
||||
*
|
||||
* 集約結果レコード 80B
|
||||
*
|
||||
03 (A)APPL-ID PIC X(008).
|
||||
03 (A)EMP-ID PIC 9(008).
|
||||
03 (A)APPL-DATE PIC 9(008).
|
||||
03 (A)START-TIME PIC 9(004).
|
||||
03 (A)END-TIME PIC 9(004).
|
||||
03 (A)OVT-HOURS PIC 9(004)V9(001).
|
||||
03 (A)OVT-TYPE PIC X(001).
|
||||
03 (A)FILLER PIC X(042).
|
||||
@@ -0,0 +1,5 @@
|
||||
*
|
||||
* DBCLEAN対象レコード 80B
|
||||
*
|
||||
03 (A)APPL-ID PIC X(008).
|
||||
03 (A)FILLER PIC X(072).
|
||||
@@ -0,0 +1,5 @@
|
||||
*
|
||||
* エラーログレコード VB可変長
|
||||
*
|
||||
03 (A)ERR-CATEGORY PIC 9(002).
|
||||
03 (A)ERR-DETAIL PIC X(198).
|
||||
@@ -0,0 +1,5 @@
|
||||
* SUB04CHK 項目チェック用連絡領域
|
||||
01 C01CHKPAR.
|
||||
03 C01CHKTYP PIC X(008).
|
||||
03 C01CHKDAT PIC X(080).
|
||||
03 C01CHKRRC PIC 9(004).
|
||||
@@ -0,0 +1,4 @@
|
||||
* SUB01DAT 運用日付取得用連絡領域
|
||||
01 D01UBSPAR.
|
||||
03 D01FKICOD PIC S9(004) COMP.
|
||||
03 D01UBSUDATE PIC 9(008).
|
||||
@@ -0,0 +1,3 @@
|
||||
* SUB03END ABEND処理用連絡領域
|
||||
01 E01ABDPAR.
|
||||
03 E01ABDCOD PIC 9(003).
|
||||
@@ -0,0 +1,13 @@
|
||||
* SUB02MSG メッセージ出力用連絡領域
|
||||
01 M00MHOPAR.
|
||||
03 M00MSGCOD PIC 9(003).
|
||||
03 M00UMKDATS22-01 PIC X(030).
|
||||
03 M00UMKDATS22-02 PIC X(030).
|
||||
03 M00UMKDATS22-03 PIC X(030).
|
||||
03 M00UMKDATS22-04 PIC X(030).
|
||||
03 M00UMKDATS22-05 PIC X(030).
|
||||
03 M00UMKDATS22-06 PIC X(030).
|
||||
03 M00UMKDATS22-07 PIC X(030).
|
||||
03 M00UMKDATS22-08 PIC X(030).
|
||||
03 M00UMKDATS22-09 PIC X(030).
|
||||
03 M00UMKDATS22-10 PIC X(030).
|
||||
@@ -0,0 +1,5 @@
|
||||
* SUB05TIM 時刻丸め用連絡領域
|
||||
01 T01TIMPAR.
|
||||
03 T01TIMHRS PIC 9(004)V9(001).
|
||||
03 T01TIMOUT PIC 9(004)V9(001).
|
||||
03 T01TIMRRC PIC 9(004).
|
||||
@@ -0,0 +1,97 @@
|
||||
-- =============================================================================
|
||||
-- 勤怠休暇管理システム(サブシステムA)DBスキーマ
|
||||
-- 対象DB2: DB2 for z/OS
|
||||
-- ローカル開発: SQLite(型宣言はDB2準拠、SQLiteが許容する範囲で記述)
|
||||
-- =============================================================================
|
||||
|
||||
-- 1. EMP_MASTER(社員マスタ)
|
||||
-- 全社員の基本情報。サブシステムAでは参照のみ。
|
||||
CREATE TABLE EMP_MASTER (
|
||||
EMP_ID CHAR(8) NOT NULL PRIMARY KEY,
|
||||
DEPT_ID CHAR(4) NOT NULL,
|
||||
EMP_NAME VARCHAR(50) NOT NULL,
|
||||
STATUS CHAR(1) NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO EMP_MASTER VALUES ('EMP00001', 'D001', '山田太郎', '1');
|
||||
INSERT INTO EMP_MASTER VALUES ('EMP00002', 'D002', '鈴木花子', '1');
|
||||
INSERT INTO EMP_MASTER VALUES ('EMP00009', 'D003', '佐藤健一', '9');
|
||||
INSERT INTO EMP_MASTER VALUES ('EMP00010', 'D001', '田中実', '1');
|
||||
|
||||
-- 2. LEAVE_RECORDS(休暇申請記録)
|
||||
-- 休暇申請の生データ。取消はDELETEで物理削除。
|
||||
CREATE TABLE LEAVE_RECORDS (
|
||||
APPLICATION_ID INTEGER NOT NULL PRIMARY KEY,
|
||||
EMP_ID CHAR(8) NOT NULL,
|
||||
LEAVE_TYPE CHAR(2) NOT NULL,
|
||||
START_DATE CHAR(8) NOT NULL,
|
||||
START_TIME CHAR(4) NOT NULL,
|
||||
END_DATE CHAR(8) NOT NULL,
|
||||
END_TIME CHAR(4) NOT NULL,
|
||||
STATUS CHAR(1) NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO LEAVE_RECORDS VALUES (1, 'EMP00001', '01', '20260615', '0900', '20260616', '1800', '1');
|
||||
INSERT INTO LEAVE_RECORDS VALUES (2, 'EMP00002', '02', '20260617', '0900', '20260617', '1200', '1');
|
||||
INSERT INTO LEAVE_RECORDS VALUES (3, 'EMP00001', '04', '20260620', '0900', '20260620', '1800', '9');
|
||||
|
||||
-- 3. HOLIDAY_CALENDAR(休日カレンダー)
|
||||
-- 祝日のみ列挙。土日は曜日判定で処理。
|
||||
CREATE TABLE HOLIDAY_CALENDAR (
|
||||
HOLIDAY_DATE CHAR(8) NOT NULL PRIMARY KEY,
|
||||
DESCRIPTION VARCHAR(50)
|
||||
);
|
||||
|
||||
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260101', '元日');
|
||||
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260112', '成人の日');
|
||||
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260211', '建国記念の日');
|
||||
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260320', '春分の日');
|
||||
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260429', '昭和の日');
|
||||
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260503', '憲法記念日');
|
||||
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260504', 'みどりの日');
|
||||
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260505', 'こどもの日');
|
||||
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260720', '海の日');
|
||||
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260811', '山の日');
|
||||
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260921', '敬老の日');
|
||||
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260922', '国民の休日');
|
||||
INSERT INTO HOLIDAY_CALENDAR VALUES ('20260923', '秋分の日');
|
||||
INSERT INTO HOLIDAY_CALENDAR VALUES ('20261012', '体育の日');
|
||||
INSERT INTO HOLIDAY_CALENDAR VALUES ('20261103', '文化の日');
|
||||
INSERT INTO HOLIDAY_CALENDAR VALUES ('20261123', '勤労感謝の日');
|
||||
|
||||
-- 4. SICK_LEAVE_RATE(病欠控除率)
|
||||
-- 全社員共通の病欠控除率。
|
||||
CREATE TABLE SICK_LEAVE_RATE (
|
||||
LEAVE_TYPE CHAR(2) NOT NULL PRIMARY KEY,
|
||||
DEDUCTION_RATE DECIMAL(3,2) NOT NULL
|
||||
);
|
||||
|
||||
-- 5. DAILY_RECORDS(日別勤怠記録)
|
||||
-- 1社員1日の勤怠情報。出勤日のみレコード存在。
|
||||
CREATE TABLE DAILY_RECORDS (
|
||||
EMP_ID CHAR(8) NOT NULL,
|
||||
TARGET_DATE CHAR(8) NOT NULL,
|
||||
TIME_IN CHAR(4) NOT NULL,
|
||||
TIME_OUT CHAR(4) NOT NULL,
|
||||
ANNUAL_LEAVE_H DECIMAL(6,1) NOT NULL,
|
||||
PERSONAL_LEAVE_H DECIMAL(6,1) NOT NULL,
|
||||
OFFICIAL_LEAVE_H DECIMAL(6,1) NOT NULL,
|
||||
SICK_LEAVE_H DECIMAL(6,1) NOT NULL,
|
||||
UNAPPROVED_ABSENT_H DECIMAL(6,1) NOT NULL,
|
||||
UPDATED_AT TIMESTAMP NOT NULL,
|
||||
PRIMARY KEY (EMP_ID, TARGET_DATE)
|
||||
);
|
||||
|
||||
-- 6. MONTHLY_ABSENCE(月次統計)
|
||||
-- DAILY_RECORDSの月次集計サマリ。
|
||||
CREATE TABLE MONTHLY_ABSENCE (
|
||||
EMP_ID CHAR(8) NOT NULL,
|
||||
YEAR_MONTH CHAR(6) NOT NULL,
|
||||
ANNUAL_LEAVE_H DECIMAL(6,1) NOT NULL,
|
||||
PERSONAL_LEAVE_H DECIMAL(6,1) NOT NULL,
|
||||
OFFICIAL_LEAVE_H DECIMAL(6,1) NOT NULL,
|
||||
SICK_LEAVE_H DECIMAL(6,1) NOT NULL,
|
||||
UNAPPROVED_ABSENT_H DECIMAL(6,1) NOT NULL,
|
||||
UPDATED_AT TIMESTAMP NOT NULL,
|
||||
PRIMARY KEY (EMP_ID, YEAR_MONTH)
|
||||
);
|
||||
@@ -0,0 +1,31 @@
|
||||
-- =============================================================================
|
||||
-- 残業統計管理システム(サブシステムB)DBスキーマ
|
||||
-- 対象DB2: DB2 for z/OS
|
||||
-- ローカル開発: SQLite(型宣言はDB2準拠、SQLiteが許容する範囲で記述)
|
||||
-- =============================================================================
|
||||
|
||||
-- 1. OVT_APPLICATIONS(個別加班申請テーブル)
|
||||
-- 1件=1回の残業申請。STATUS=9で取消。
|
||||
CREATE TABLE OVT_APPLICATIONS (
|
||||
APPL_ID CHAR(8) NOT NULL PRIMARY KEY,
|
||||
EMP_ID CHAR(8) NOT NULL,
|
||||
APPL_DATE CHAR(8) NOT NULL,
|
||||
OVT_TYPE CHAR(1) NOT NULL,
|
||||
START_TIME CHAR(4) NOT NULL,
|
||||
END_TIME CHAR(4) NOT NULL,
|
||||
OVT_HOURS DECIMAL(4,1) NOT NULL,
|
||||
STATUS CHAR(1) NOT NULL,
|
||||
UPDATED_AT TIMESTAMP NOT NULL
|
||||
);
|
||||
|
||||
-- 2. OVT_MONTHLY(月次集計テーブル)
|
||||
-- 社員別・年月別・種別別の残業時間集計。
|
||||
CREATE TABLE OVT_MONTHLY (
|
||||
EMP_ID CHAR(8) NOT NULL,
|
||||
YEAR_MONTH CHAR(6) NOT NULL,
|
||||
OVT_TYPE CHAR(1) NOT NULL,
|
||||
OVT_HOURS DECIMAL(6,1) NOT NULL,
|
||||
OVT_COUNT INTEGER NOT NULL,
|
||||
UPDATED_AT TIMESTAMP NOT NULL,
|
||||
PRIMARY KEY (EMP_ID, YEAR_MONTH, OVT_TYPE)
|
||||
);
|
||||
@@ -0,0 +1,787 @@
|
||||
# 勤怠休暇管理システム 設計書(サブシステムA)
|
||||
|
||||
## 概要
|
||||
|
||||
休暇申請データと打刻データを処理し、日別勤怠記録(DAILY_RECORDS)および月次統計(MONTHLY_ABSENCE)を生成する。
|
||||
|
||||
9本のCOBOLプログラムで構成される。
|
||||
|
||||
拠点間SORTやCSV変換などはCOBOLではなくJCL SORTで処理する方針とし、COBOLプログラムは純粋なビジネスロジックに専念する。
|
||||
|
||||
### 設計方針(カバレッジ拡大)
|
||||
|
||||
本設計は、サブシステムBで未カバーのプログラムタイプ・ステートメントを積極的にカバーするため、以下の方針でプログラム分割・構文選定を行う。
|
||||
|
||||
| 項目 | Bの状況 | Aで狙う追加カバレッジ |
|
||||
|------|---------|---------------------|
|
||||
| プログラムタイプ | 6パターン◎ | 未カバー5パターン + **SYSIN(P28)** を追加 |
|
||||
| ステートメント | 主要構文は網羅済 | SEARCH非ALL, DELETE, EVALUATE(4分岐), PERFORM THRU, WRITE FROM, WRITE AFTER ADVANCING, **MULTIPLY, SUBTRACT, ACCEPT, DISPLAY, INSPECT** |
|
||||
| DB操作 | INSERT/UPDATE/SELECT/COMMIT/ROLLBACK | 上記に加え **DELETE FROM** を追加 |
|
||||
|
||||
---
|
||||
|
||||
## システム定数
|
||||
|
||||
全てのプログラムで共通の前提値。COBOLのCNS-定数として保持する(DBは持たない)。
|
||||
|
||||
| 定数 | 値 | 説明 |
|
||||
|------|-----|------|
|
||||
| WORK-START | 0900 | 所定労働開始時刻 |
|
||||
| WORK-END | 1800 | 所定労働終了時刻 |
|
||||
| LUNCH-START | 1200 | ランチ開始時刻 |
|
||||
| LUNCH-END | 1300 | ランチ終了時刻 |
|
||||
| DAILY-HOURS | 8.0 | 1日の所定労働時間(9h実働 − 1hランチ) |
|
||||
|
||||
---
|
||||
|
||||
## 休暇種別
|
||||
|
||||
| コード | 名称 | 給与への影響 | 備考 |
|
||||
|--------|------|------------|------|
|
||||
| 01 | 年休(年假) | 控除なし | 有給年次休暇 |
|
||||
| 02 | 事假(事假) | 全額控除 | 私事欠勤 |
|
||||
| 03 | 因公特批假(因公特批假) | 控除なし | 公務特認欠勤 |
|
||||
| 04 | 病欠(病欠) | 一部控除 | 控除率はSICK_LEAVE_RATEテーブル参照 |
|
||||
|
||||
**休暇種別は上記4種で固定。勤怠ルールはこの4種を基準とする。**
|
||||
|
||||
---
|
||||
|
||||
## DBテーブル一覧
|
||||
|
||||
全テーブルはDB2で管理する。COBOLからは埋め込みSQL(`EXEC SQL`)で直接アクセスする。
|
||||
|
||||
### 1. EMP_MASTER(社員マスタ)
|
||||
|
||||
全社員の基本情報を保持する。サブシステムAでは参照のみ。
|
||||
|
||||
| No | カラム名 | 型 | 長さ | NULL | PK | 備考 |
|
||||
|----|---------|---|------|------|----|------|
|
||||
| 1 | EMP_ID | CHAR | 8 | NOT NULL | ✓ | 社員番号 |
|
||||
| 2 | DEPT_ID | CHAR | 4 | NOT NULL | — | 部署ID |
|
||||
| 3 | EMP_NAME | VARCHAR | 50 | NOT NULL | — | 氏名 |
|
||||
| 4 | STATUS | CHAR | 1 | NOT NULL | — | '1'=在籍, '9'=退職 |
|
||||
|
||||
### 2. ABSENCE_SUMMARY(欠勤集計中間ファイル)
|
||||
|
||||
サブシステムA→Cの連携用。KIN08DBUが月次集計後に出力する。
|
||||
|
||||
| No | カラム名 | 型 | 長さ | NULL | PK | 備考 |
|
||||
|----|---------|---|------|------|----|------|
|
||||
| 1 | EMP_ID | CHAR | 8 | NOT NULL | ✓ | 社員番号 |
|
||||
| 2 | YEAR_MONTH | CHAR | 6 | NOT NULL | ✓ | YYYYMM |
|
||||
| 3 | ANNUAL_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 年休使用合計 |
|
||||
| 4 | PERSONAL_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 事假合計 |
|
||||
| 5 | OFFICIAL_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 因公特批假合計 |
|
||||
| 6 | SICK_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 病欠合計 |
|
||||
| 7 | UNAPPROVED_ABSENT_H | DECIMAL | 6,1 | NOT NULL | — | 未申請欠勤合計 |
|
||||
|
||||
### 3. HOLIDAY_CALENDAR(休日カレンダー)
|
||||
|
||||
祝日(曜日判定で休日にならない日)のみを列挙する。
|
||||
土曜・日曜は曜日判定で休日とするため、このテーブルには含めない。
|
||||
|
||||
| No | カラム名 | 型 | 長さ | NULL | PK | 備考 |
|
||||
|----|---------|---|------|------|----|------|
|
||||
| 1 | HOLIDAY_DATE | CHAR | 8 | NOT NULL | ✓ | YYYYMMDD |
|
||||
| 2 | DESCRIPTION | VARCHAR | 50 | OK | — | 任意(例:「建国記念の日」) |
|
||||
|
||||
**出勤日判定ロジック(全PGM共通):**
|
||||
```
|
||||
1. HOLIDAY_CALENDARに日付が存在する → 休日
|
||||
2. 曜日が土曜(6)または日曜(INTEGER-OF-DATE MOD 7 = 0) → 休日
|
||||
3. 上記以外 → 出勤日(WORK-START=0900, WORK-END=1800)
|
||||
```
|
||||
|
||||
### 4. SICK_LEAVE_RATE(病欠控除率)
|
||||
|
||||
全社員共通の病欠控除率を保持する。
|
||||
|
||||
| No | カラム名 | 型 | 長さ | NULL | PK | 備考 |
|
||||
|----|---------|---|------|------|----|------|
|
||||
| 1 | LEAVE_TYPE | CHAR | 2 | NOT NULL | ✓ | '04'固定 |
|
||||
| 2 | DEDUCTION_RATE | DECIMAL | 3,2 | NOT NULL | — | 例:0.50(50%控除) |
|
||||
|
||||
### 5. LEAVE_RECORDS(休暇申請記録)
|
||||
|
||||
休暇申請の生データを保持する。取消は**DELETE FROM**で行い、レコードを物理削除する。
|
||||
期間は開始日〜終了日で表現され、日別展開は行わない。
|
||||
|
||||
| No | カラム名 | 型 | 長さ | NULL | PK | 備考 |
|
||||
|----|---------|---|------|------|----|------|
|
||||
| 1 | APPLICATION_ID | INTEGER | — | NOT NULL | ✓ | 自動採番 |
|
||||
| 2 | EMP_ID | CHAR | 8 | NOT NULL | — | 社員番号 |
|
||||
| 3 | LEAVE_TYPE | CHAR | 2 | NOT NULL | — | '01'〜'04' |
|
||||
| 4 | START_DATE | CHAR | 8 | NOT NULL | — | YYYYMMDD(出勤日) |
|
||||
| 5 | START_TIME | CHAR | 4 | NOT NULL | — | HHMM(所定労働時間内) |
|
||||
| 6 | END_DATE | CHAR | 8 | NOT NULL | — | YYYYMMDD(出勤日) |
|
||||
| 7 | END_TIME | CHAR | 4 | NOT NULL | — | HHMM(所定労働時間内) |
|
||||
| 8 | STATUS | CHAR | 1 | NOT NULL | — | '1'=有効, '9'=取消 |
|
||||
|
||||
### 6. DAILY_RECORDS(日別勤怠記録)
|
||||
|
||||
1社員1日の勤怠情報。出勤日のみレコードが存在する。
|
||||
打刻がない日でも休暇または未申請欠勤の情報を持つ。
|
||||
|
||||
| No | カラム名 | 型 | 長さ | NULL | PK | 備考 |
|
||||
|----|---------|---|------|------|----|------|
|
||||
| 1 | EMP_ID | CHAR | 8 | NOT NULL | ✓ | |
|
||||
| 2 | TARGET_DATE | CHAR | 8 | NOT NULL | ✓ | YYYYMMDD |
|
||||
| 3 | TIME_IN | CHAR | 4 | NOT NULL | — | 出勤時刻、'0000'=打刻なし |
|
||||
| 4 | TIME_OUT | CHAR | 4 | NOT NULL | — | 退勤時刻、'0000'=打刻なし |
|
||||
| 5 | ANNUAL_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 年休使用時間 |
|
||||
| 6 | PERSONAL_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 事假時間 |
|
||||
| 7 | OFFICIAL_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 因公特批假時間 |
|
||||
| 8 | SICK_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 病欠時間 |
|
||||
| 9 | UNAPPROVED_ABSENT_H | DECIMAL | 6,1 | NOT NULL | — | 未申請欠勤時間 |
|
||||
| 10 | UPDATED_AT | TIMESTAMP | — | NOT NULL | — | DEFAULT CURRENT_TIMESTAMP |
|
||||
|
||||
### 7. MONTHLY_ABSENCE(月次統計)
|
||||
|
||||
DAILY_RECORDSを月次で集計したサマリ。
|
||||
|
||||
| No | カラム名 | 型 | 長さ | NULL | PK | 備考 |
|
||||
|----|---------|---|------|------|----|------|
|
||||
| 1 | EMP_ID | CHAR | 8 | NOT NULL | ✓ | |
|
||||
| 2 | YEAR_MONTH | CHAR | 6 | NOT NULL | ✓ | YYYYMM |
|
||||
| 3 | ANNUAL_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 年休使用合計 |
|
||||
| 4 | PERSONAL_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 事假合計 |
|
||||
| 5 | OFFICIAL_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 因公特批假合計 |
|
||||
| 6 | SICK_LEAVE_H | DECIMAL | 6,1 | NOT NULL | — | 病欠合計 |
|
||||
| 7 | UNAPPROVED_ABSENT_H | DECIMAL | 6,1 | NOT NULL | — | 未申請欠勤合計 |
|
||||
| 8 | UPDATED_AT | TIMESTAMP | — | NOT NULL | — | DEFAULT CURRENT_TIMESTAMP |
|
||||
|
||||
---
|
||||
|
||||
## ファイル一覧
|
||||
|
||||
| # | ファイル名 | DD名 | 編成 | RECM | サイズ | 生成元 | 消費先 | 備考 |
|
||||
|---|-----------|------|------|------|--------|--------|--------|------|
|
||||
| 1 | RAW-LEAVE | KIN01R01 | SEQUENTIAL | FB | 80 | 外部システム | KIN01INP | 休暇申請CSV |
|
||||
| 2 | WORK-LEAVE | KIN01W01 | SEQUENTIAL | FB | 80 | KIN01INP | SORT→KIN02UPD | 検証済休暇申請(中間) |
|
||||
| 3 | RAW-PUNCH | KIN04R01 | SEQUENTIAL | FB | 80 | 打刻システム | KIN04CHK | 生打刻データ |
|
||||
| 4 | EDITED-PUNCH | KIN04W01 | SEQUENTIAL | FB | 80 | KIN04CHK | KIN05MAT/B-サブシステム | 項目チェック通過打刻 |
|
||||
| 5 | LEAVE-DAILY | KIN02W01 | SEQUENTIAL | FB | 80 | KIN03EXP | KIN05MAT / KIN07DAI | 日別展開済休暇 |
|
||||
| 6 | KIN-LEAVE | KIN05W01 | SEQUENTIAL | FB | 160 | KIN05MAT | KIN07DAI | 打刻+休暇照合結果 |
|
||||
| 7 | WORK-DAY-FILE | KIN06W01 | SEQUENTIAL | FB | 80 | KIN06CLD | KIN07DAI | 出勤日カレンダー |
|
||||
| 8 | DAILY-RECORD | KIN07W01 | SEQUENTIAL | FB | 200 | KIN07DAI | KIN08DBU | 日別勤怠計算結果 |
|
||||
| 9 | ERROR-LOG | KIN01E01 | SEQUENTIAL | VB | 200 | KIN01INP / KIN04CHK | — | エラーレコード退避 |
|
||||
| 10 | ABSENCE-SUMMARY | KIN08W01 | SEQUENTIAL | FB | 80 | KIN08DBU | C-サブシステム | 月次欠勤集計(Cへ連携) |
|
||||
| 11 | CSV-OUTPUT | KIN09W01 | SEQUENTIAL | FB | 200 | KIN09CSV | — | 社員確認用CSV |
|
||||
|
||||
---
|
||||
|
||||
## 処理フロー
|
||||
|
||||
```
|
||||
休暇申請(RAW-LEAVE / CSV)
|
||||
│
|
||||
│ [KINJ010] KIN01INP — 休暇申請CSV取込・検証処理
|
||||
│ UNSTRINGでCSV分解 → IF/ELSE chain(新規/取消/変更)
|
||||
│ SEARCH(非ALL)で休暇種別テーブル検索
|
||||
│ SUB04CHKで日付/時刻/数値チェック
|
||||
├──正常 → WORK-LEAVE-file
|
||||
└──異常 → ERROR-LOG
|
||||
│
|
||||
│ [KINJ011] SORT(WORK-LEAVE → APPLICATION_ID昇順)
|
||||
│
|
||||
│ [KINJ012] KIN02UPD — 休暇申請DB更新処理
|
||||
│ 新規: EXEC SQL INSERT
|
||||
│ 取消: EXEC SQL DELETE FROM ← 新カバレッジ
|
||||
│ 変更: EXEC SQL DELETE + INSERT
|
||||
│ → DB:LEAVE_RECORDS
|
||||
│
|
||||
│ [KINJ015] KIN03EXP — 休暇日別展開処理
|
||||
│ DB(SELECT/CURSOR) → PERFORM THRU(日付範囲)
|
||||
│ キーブレイク(社員番号切替) → HEADER処理
|
||||
│ 休日除外 → CONTINUE
|
||||
│ → LEAVE-DAILY-file
|
||||
▼
|
||||
LEAVE-DAILY-file(日別休暇)
|
||||
│
|
||||
|
||||
打刻生データ(RAW-PUNCH / CSV)
|
||||
│
|
||||
│ [KINJ020] KIN04CHK — 打刻項目チェック処理
|
||||
│ UNSTRING + SUB04CHK(日付/時刻/数値)
|
||||
│ IF多重ネスト(必須→日付→時刻→数値の4段階)
|
||||
├──正常 → EDITED-PUNCH
|
||||
└──異常 → ERROR-LOG
|
||||
│
|
||||
│ [KINJ022] SORT(EDITED-PUNCH → 社員番号+日付昇順)
|
||||
│
|
||||
│ [KINJ025] KIN05MAT — 打刻休暇照合処理
|
||||
│ マッチング(1:N) EDITED-PUNCH × LEAVE-DAILY
|
||||
│ 休暇種別優先順位(01/02連動, 03/04独立)
|
||||
│ → KIN-LEAVE
|
||||
▼
|
||||
KIN-LEAVE(照合結果)
|
||||
│
|
||||
│ [KINJ030] KIN06CLD — 出勤日カレンダー生成処理
|
||||
│ DB SELECT(CURSOR) + PERFORM VARYING
|
||||
│ SEARCH ALL(休日判定) / WRITE FROM ← 新カバレッジ
|
||||
│ → WORK-DAY-FILE
|
||||
▼
|
||||
WORK-DAY-FILE(出勤日カレンダー)
|
||||
│
|
||||
│ [KINJ033] KIN07DAI — 日別勤怠計算処理
|
||||
│ マッチング(1:N) + EVALUATE分岐 ← MULTIPLY/SUBTRACT新カバレッジ
|
||||
│ WORK-DAY(主駆動) × KIN-LEAVE(N側)
|
||||
│ 4パターン(A/B/C/D)をEVALUATE + PERFORMで分岐
|
||||
│ 休暇時間計算(ランチ除外) + SUB05TIM丸め(0.1h切上)
|
||||
│ → DAILY-RECORD
|
||||
▼
|
||||
DAILY-RECORD(日別計算結果)
|
||||
│
|
||||
│ [KINJ036] KIN08DBU — 勤怠DB更新処理
|
||||
│ DAILY-RECORD → DAILY_RECORDS INSERT
|
||||
│ 社員別月次集計 → MONTHLY_ABSENCE UPSERT
|
||||
│ ABSENCE_SUMMARYファイル出力(Cへ連携)
|
||||
▼
|
||||
DB: DAILY_RECORDS + DB: MONTHLY_ABSENCE
|
||||
│ ABSENCE-SUMMARY-file
|
||||
▼
|
||||
C:給与計算システム(KYU01CAL)
|
||||
│
|
||||
│ [KINJ040] KIN09CSV — 勤怠CSV出力処理
|
||||
│ DB SELECT → STRING → WRITE AFTER ADVANCING ← 新カバレッジ
|
||||
▼
|
||||
CSV(社員確認用)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## プログラム詳細
|
||||
|
||||
### STEP010: KIN01INP — 休暇申請CSV取込・検証処理
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **PGMパターン** | **振り分け** |
|
||||
| **JCL前処理** | なし |
|
||||
| **入力** | RAW-LEAVE(80B / CSV形式)|
|
||||
| **出力** | WORK-LEAVE(80B)/ ERROR-LOG(VB)|
|
||||
|
||||
**機能:**
|
||||
|
||||
1. READ RAW-LEAVE → CSVレコード1行を取得
|
||||
2. **UNSTRING** でCSV分解(申請番号,社員番号,日付,開始時刻,終了時刻,休暇種別,ステータス)+ **TALLYING** でフィールド数カウント(項目数チェック)
|
||||
4. **SEARCH(非ALL)** でWORKING-STORAGE上の休暇種別テーブルを線形探索 → 該当種別の存在確認 ← **新カバレッジ**
|
||||
5. **IF/ELSE chain** でステータス判定(新規/取消/変更) ← **新カバレッジ(振り分けIF文)**
|
||||
6. SUB04CHKで日付・時刻・数値の各項目検証
|
||||
- IF多重ネスト:必須チェック → 日付形式 → 時刻範囲 → 数値
|
||||
7. 通過 → WORK-LEAVEに出力(検証済みレコード)
|
||||
8. エラー → ERROR-LOGに出力
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| UNSTRING | CSVレコードの項目分解 |
|
||||
| INSPECT TALLYING | カンマ区切り数カウント |
|
||||
| **SEARCH(非ALL)** | 休暇種別テーブル線形探索 ← 新規 |
|
||||
| IF/ELSE chain | ステータス別の振り分け処理(EVALUATE不使用) |
|
||||
|
||||
---
|
||||
|
||||
### STEP020: KIN02UPD — 休暇申請DB更新処理
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **PGMパターン** | **DB更新** |
|
||||
| **JCL前処理** | WORK-LEAVE → APPLICATION_ID昇順SORT |
|
||||
| **入力** | WORK-LEAVE(80B)|
|
||||
| **出力** | LEAVE_RECORDS(DB2)|
|
||||
|
||||
**機能:**
|
||||
|
||||
1. READ WORK-LEAVE → 検証済みレコード1件
|
||||
2. レコード種別に応じたDB操作:
|
||||
- 新規申請(ステータス='1') → **EXEC SQL INSERT**
|
||||
- 取消申請(ステータス='9') → **EXEC SQL DELETE FROM** WHERE APPLICATION_ID = :id ← **新カバレッジ**
|
||||
- 変更申請(ステータス='1', APPLICATION_ID指定済) → **DELETE + INSERT**
|
||||
3. IF SQLCODE NOT = 0 → エラーハンドリング
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| EXEC SQL INSERT | DB登録 |
|
||||
| **EXEC SQL DELETE FROM** | DB削除(物理削除による取消)← 新規 |
|
||||
| IF | SQLCODE判定 |
|
||||
|
||||
---
|
||||
|
||||
### STEP030: KIN03EXP — 休暇日別展開処理
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **PGMパターン** | **キーブレイク** |
|
||||
| **JCL前処理** | なし |
|
||||
| **入力** | LEAVE_RECORDS(DB2 SELECT / CURSOR) |
|
||||
| **出力** | LEAVE-DAILY-file(80B)|
|
||||
|
||||
**機能:**
|
||||
|
||||
1. LEAVE_RECORDSからSTATUS='1'(有効)の全レコードをCURSOR SELECTする(ORDER BY EMP_ID, START_DATE)。
|
||||
2. **PERFORM THRU** で処理範囲を指定 ← **新カバレッジ**
|
||||
- 2100-PROCESS-EMP THRU 2100-PROCESS-EMP-EXIT:1社員分の処理
|
||||
- 2200-EXPAND-DATE THRU 2200-EXPAND-DATE-EXIT:日付展開処理
|
||||
3. キーブレイク(社員番号切替)時に社員別小計を出力 ← **キーブレイク(その他)**
|
||||
4. 各申請の開始日〜終了日をループ(PERFORM VARYING):
|
||||
- 休日判定:HOLIDAY_CALENDARに存在 or 土日 → **CONTINUE** でスキップ
|
||||
- 出勤日 → LEAVE-DAILY-fileに出力
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| **PERFORM THRU** | 段落範囲指定による構造化処理 ← 新規 |
|
||||
| PERFORM UNTIL | 日付ループ(開始日〜終了日)|
|
||||
| CONTINUE | 休日スキップ時の空処理 |
|
||||
| EXEC SQL SELECT(CURSOR) | DB読込(FETCH) |
|
||||
| SET | キーブレイクフラグ操作 |
|
||||
|
||||
---
|
||||
|
||||
### STEP040: KIN04CHK — 打刻項目チェック処理
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **PGMパターン** | 項目チェック(重複なし) |
|
||||
| **JCL前処理** | なし |
|
||||
| **入力** | RAW-PUNCH(80B / CSV形式)|
|
||||
| **出力** | EDITED-PUNCH(80B)/ ERROR-LOG(VB)|
|
||||
|
||||
**機能:**
|
||||
|
||||
1. READ RAW-PUNCH → CSVレコード
|
||||
2. **UNSTRING** で分解
|
||||
3. **IF多重ネスト** で4段階チェック:
|
||||
```
|
||||
IF 社員番号 NOT = SPACE THEN
|
||||
IF 日付が有効形式 THEN
|
||||
IF 時刻が有効範囲 THEN
|
||||
IF 出勤 < 退勤 THEN
|
||||
正常出力
|
||||
ELSE → エラー
|
||||
ELSE → エラー
|
||||
ELSE → エラー
|
||||
ELSE → エラー
|
||||
END-IF
|
||||
```
|
||||
4. 各チェックは SUB04CHK を呼出
|
||||
5. 正常 → EDITED-PUNCHに出力(**WRITE FROM** 使用)
|
||||
6. 異常 → ERROR-LOGに出力(**STRING** で編集)
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| UNSTRING | CSV分解 |
|
||||
| **IF多重ネスト(THEN句)** | 必須→日付→時刻→数値の4段階チェック ← 新規(深度) |
|
||||
| WRITE FROM | 出力レコードの一括書出 |
|
||||
| STRING | エラーメッセージ編集 |
|
||||
|
||||
---
|
||||
|
||||
### STEP050: KIN05MAT — 打刻休暇照合処理
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **PGMパターン** | **マッチング(1:N)** |
|
||||
| **JCL前処理** | EDITED-PUNCH → 社員番号+日付昇順SORT(KINJ022)|
|
||||
| **入力R01** | EDITED-PUNCH(80B、打刻側)|
|
||||
| **入力R02** | LEAVE-DAILY-file(80B、休暇側、N件あり得る)|
|
||||
| **出力** | KIN-LEAVE(160B)|
|
||||
|
||||
**機能:**
|
||||
|
||||
EDITED-PUNCH(打刻)とLEAVE-DAILY-file(日別休暇)を社員番号+日付で照合する。
|
||||
|
||||
1. **マッチング制御**(EVALUATE TRUE):
|
||||
- R01キー < R02キー → 打刻のみ(休暇なし)→ 休暇='99'+0hで出力
|
||||
- R01キー = R02キー → マッチ → 休暇情報マージ
|
||||
- 同一キーにN件のR02がある場合は全件読み、休暇種別優先順位で1件選定
|
||||
- R01キー > R02キー → R02次へ(R01側に該当なしの休暇 → この後のR01読込で拾う)
|
||||
|
||||
2. **休暇種別優先順位**:
|
||||
- 01(年休)と02(事假)は連動:年休残あり→01, なし→02
|
||||
- 03(因公特批假)と04(病欠)は独立
|
||||
- 複数種別混在時はAPPLICATION_ID基準で時刻範囲判定
|
||||
|
||||
3. 出力:打刻情報(80B)+休暇情報(80B)=160BのKIN-LEAVE
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| EVALUATE TRUE | マッチング3分岐制御 |
|
||||
| STRING | 出力レコード編集 |
|
||||
| CONTINUE | 空分岐処理 |
|
||||
|
||||
---
|
||||
|
||||
### STEP060: KIN06CLD — 出勤日カレンダー生成処理
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **PGMパターン** | **GETPUT** |
|
||||
| **JCL前処理** | なし |
|
||||
| **入力** | EMP_MASTER(DB2 SELECT / CURSOR)、HOLIDAY_CALENDAR(DB2 SELECT) |
|
||||
| **出力** | WORK-DAY-FILE(80B FB)|
|
||||
|
||||
**PARM解析:**
|
||||
- `YEARMONTH=202605` — 必須。対象年月。
|
||||
|
||||
**機能:**
|
||||
|
||||
1. PARMから対象年月を取得
|
||||
2. EMP_MASTERテーブルからSTATUS='1'(在籍)の社員一覧をSELECT(CURSOR, ORDER BY EMP_ID)
|
||||
3. HOLIDAY_CALENDARテーブルから該当月の祝日一覧をSELECT(WORKING-STORAGEのテーブルに格納)
|
||||
4. 各社員について、当月1日〜月末日まで **PERFORM VARYING** でループ:
|
||||
- **SEARCH ALL** でHOLIDAY-CALENDARテーブルを二分探索
|
||||
- 土曜(6) or 日曜(7) → 休日
|
||||
- その他 → 出勤日として **WRITE FROM** で出力 ← **新カバレッジ**
|
||||
5. 出力レコードは社員番号+日付の昇順に保証(ORDER BY + ループ順)
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| **WRITE FROM** | MOVE + WRITEを1文で記述 ← 新規 |
|
||||
| PERFORM VARYING | 日付ループ |
|
||||
| SEARCH ALL | 休日テーブル二分探索 |
|
||||
| EXEC SQL SELECT(CURSOR) | DB読込 |
|
||||
|
||||
---
|
||||
|
||||
### STEP070: KIN07DAI — 日別勤怠計算処理
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **PGMパターン** | **マッチング(1:N)** |
|
||||
| **JCL前処理** | なし(WORK-DAY-FILE / KIN-LEAVE / LEAVE-DAILYともソート済み前提) |
|
||||
| **入力R01** | WORK-DAY-FILE(80B、主駆動、1社員1日=1件) |
|
||||
| **入力R02** | KIN-LEAVE(160B、N側、1日0〜N件) |
|
||||
| **副参照** | LEAVE-DAILY-file(80B、ファイル併走読込) |
|
||||
| **出力** | DAILY-RECORD(200B FB)|
|
||||
|
||||
**機能:**
|
||||
|
||||
WORK-DAY-FILE(出勤日カレンダー)を主駆動とし、社員番号+日付をキーにKIN-LEAVE(打刻+休暇)とLEAVE-DAILY-file(日別休暇)を照合する。
|
||||
|
||||
**EVALUATEによる4パターン分岐:**
|
||||
|
||||
マッチング結果に応じてPATTERN-NUM(1〜4)を設定し、**EVALUATE** で処理分岐(実装時にGO TO DEPENDING ONのフォールスルー問題を確認したため、EVALUATE + PERFORMに変更):
|
||||
|
||||
```
|
||||
01 PATTERN-NUM PIC 9(1).
|
||||
88 PATTERN-A VALUE 1.
|
||||
88 PATTERN-B VALUE 2.
|
||||
88 PATTERN-C VALUE 3.
|
||||
88 PATTERN-D VALUE 4.
|
||||
|
||||
EVALUATE PATTERN-NUM
|
||||
WHEN 1 PERFORM 6100-PATTERN-A
|
||||
WHEN 2 PERFORM 6200-PATTERN-B
|
||||
WHEN 3 PERFORM 6300-PATTERN-C
|
||||
WHEN 4 PERFORM 6400-PATTERN-D
|
||||
END-EVALUATE.
|
||||
```
|
||||
|
||||
| パターン | R01(WORK-DAY) | R02(KIN-LEAVE) | LEAVE-DAILY | 処理 |
|
||||
|---------|--------------|----------------|-------------|------|
|
||||
| A=1 | あり | あり | あり | 打刻情報設定+休暇時間計算(ランチ除外、0.1h切上丸め) |
|
||||
| B=2 | あり | あり | なし | 打刻情報設定のみ、休暇=0 |
|
||||
| C=3 | あり | なし | あり | 打刻=0000、休暇時間計算(所定労働時間8h上限、ランチ除外) |
|
||||
| D=4 | あり | なし | なし | 打刻=0000、休暇=0、未申請欠勤=8.0h |
|
||||
|
||||
**休暇時間計算(ランチ考慮):**
|
||||
|
||||
```
|
||||
例:終日休暇申請 0900〜1800
|
||||
0900-1200 = 3h(午前)
|
||||
1200-1300 = ランチ(除外)
|
||||
1300-1800 = 5h(午後)
|
||||
合計休暇時間 = 8h
|
||||
|
||||
例:午後休暇申請 1300〜1800
|
||||
1300-1800 = 5h(午後、ランチ除外済み)
|
||||
合計休暇時間 = 5h
|
||||
```
|
||||
|
||||
丸め:SUB05TIM(0.1h単位切上)を呼出。
|
||||
|
||||
**バリエーション構文(MULTIPLY / SUBTRACT):**
|
||||
|
||||
COMPUTEのみに依存せず、MULTIPLYとSUBTRACTも併用して時間計算のバリエーションを確保する。
|
||||
|
||||
```
|
||||
* 例:時間(hhmm)を分(minutes)に変換 → ランチ除外
|
||||
MULTIPLY WRK-HOURS BY 60 GIVING WRK-MINUTES ← MULTIPLY
|
||||
SUBTRACT LUNCH-MINUTES FROM WRK-MINUTES ← SUBTRACT
|
||||
```
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| **GO TO ... DEPENDING ON** | 4パターンの処理分岐 ← 新規 |
|
||||
| **PERFORM THRU** | 各パターン内の段落範囲処理 |
|
||||
| COMPUTE ROUNDED ON SIZE ERROR | 時間計算のエラー処理 |
|
||||
| **MULTIPLY** | 時間→分単位変換 ← 新規 |
|
||||
| **SUBTRACT** | ランチ時間除外 ← 新規 |
|
||||
| STRING | エラーメッセージ編集 |
|
||||
| CALL 'SUB05TIM' | 時刻丸め計算 |
|
||||
|
||||
---
|
||||
|
||||
### STEP080: KIN08DBU — 勤怠DB更新処理
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **PGMパターン** | DB更新 + **SYSIN読込(P28)** |
|
||||
| **JCL前処理** | なし |
|
||||
| **入力** | DAILY-RECORD(200B)、**SYSIN(集計対象社員指定)** |
|
||||
| **出力** | DAILY_RECORDS / MONTHLY_ABSENCE(DB2)、ABSENCE_SUMMARY(80B)|
|
||||
|
||||
**機能:**
|
||||
|
||||
1. **SYSIN読込(パターン28)**:集計対象の社員番号一覧をSYSINから読み込む(省略時は全社員が対象)。
|
||||
2. DAILY-RECORDを1レコードずつ読込み、DAILY_RECORDSに**EXEC SQL INSERT**
|
||||
3. 社員別・月別の集計値を**PERFORM VARYING**で積算(全社員ループ)
|
||||
4. 全件処理後、MONTHLY_ABSENCEを**EXEC SQL UPDATE / INSERT**(UPSERT)
|
||||
5. **INSPECT TALLYING**で社員番号の有効性チェック → 空または無効値は**DISPLAY**で警告表示
|
||||
6. 病欠時間はSICK_LEAVE_RATEテーブルを参照し、控除前時間として保持
|
||||
7. 集計後データをABSENCE_SUMMARYファイルに出力
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| **READ SYSIN**(パターン28) | 対象社員一覧の読込 ← 新規パターン |
|
||||
| DISPLAY | 警告メッセージ表示 ← 新規 |
|
||||
| INSPECT TALLYING | 社員番号の空チェック ← 新規 |
|
||||
| PERFORM VARYING | 社員別月次集計ループ |
|
||||
| EXEC SQL INSERT / UPDATE | DB更新(INSERT+UPDATEでUPSERT) |
|
||||
|
||||
---
|
||||
|
||||
### STEP090: KIN09CSV — 勤怠CSV出力処理
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **PGMパターン** | GETPUT |
|
||||
| **JCL前処理** | なし |
|
||||
| **入力** | DAILY_RECORDS / MONTHLY_ABSENCE(DB2)、**COMMAND-LINE PARM** |
|
||||
| **出力** | CSVファイル(社員確認用)|
|
||||
|
||||
**PARM解析:**
|
||||
- `YEARMONTH=202605` — 必須。対象年月。
|
||||
- `MODE=FULL` — オプション。`FULL`=全項目出力, `SUMMARY`=集計のみ。
|
||||
|
||||
**機能:**
|
||||
|
||||
1. **ACCEPT FROM COMMAND-LINE** でPARM解析(対象年月・出力モード)
|
||||
2. DAILY_RECORDSから当月の全レコードをCURSOR SELECT
|
||||
3. **STRING** でCSV行を編集(DELIMITED BY SIZE)
|
||||
4. **WRITE AFTER ADVANCING PAGE** でページヘッダー制御 ← **新カバレッジ**
|
||||
- 100行ごとにヘッダー行を出力
|
||||
- WRITE header-record AFTER ADVANCING PAGE
|
||||
5. CSVフォーマット:
|
||||
|
||||
```
|
||||
社員番号,日付,出勤時刻,退勤時刻,休暇種別,年休時間,事假時間,因公特批假時間,病欠時間,未申請欠勤時間
|
||||
00000101,20260501,0900,1800,99,0.0,0.0,0.0,0.0,0.0
|
||||
00000101,20260502,0900,1300,02,0.0,4.0,0.0,0.0,4.0
|
||||
00000101,20260503,0000,0000,01,8.0,0.0,0.0,0.0,0.0
|
||||
00000101,20260504,0000,0000,99,0.0,0.0,0.0,0.0,8.0
|
||||
```
|
||||
|
||||
6. 休暇種別は該当日に休暇がある場合は最初に該当した休暇種別コード、ない場合は'99'
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| **ACCEPT FROM COMMAND-LINE** | PARM解析(対象年月・出力モード)← 新規 |
|
||||
| **WRITE AFTER ADVANCING PAGE** | ページ制御出力 ← 新規 |
|
||||
| STRING | CSV行編集(DELIMITED BY SIZE) |
|
||||
| EXEC SQL SELECT(CURSOR) | DB読込 |
|
||||
|
||||
---
|
||||
|
||||
## 共通関数(サブプログラム)
|
||||
|
||||
サブシステムAの全プログラムで使用する共通関数。SUB06DBUは使用せず、全DB操作はEXEC SQLで直接記述する。
|
||||
|
||||
| サブプログラム | I/Fコピー句 | 用途 | 使用プログラム |
|
||||
|---|---|---|---|
|
||||
| SUB01DAT | D01010AC | 運用日付取得 | KIN01INP, KIN04CHK, KIN08DBU, KIN09CSV |
|
||||
| SUB02MSG | MSG000AC | メッセージ編集出力 | 全プログラム |
|
||||
| SUB03END | MSG000AC | ABEND終了 | KIN02UPD, KIN04CHK, KIN07DAI |
|
||||
| SUB04CHK | SUB04CHK | 項目チェック(日付/時刻/数値) | KIN01INP, KIN04CHK |
|
||||
| SUB05TIM | TIME010AC | 時刻丸め計算(分→時間) | KIN07DAI |
|
||||
|
||||
---
|
||||
|
||||
## JCL構成概要
|
||||
|
||||
9本のJOB。拠点間ソートはJCL SORTで処理し、COBOLプログラムはビジネスロジックに専念する。
|
||||
|
||||
| JOB名 | 実行PGM | 処理概要 | SORT |
|
||||
|-------|--------|---------|------|
|
||||
| KINJ010 | KIN01INP | 休暇申請CSV取込・検証 | 不要 |
|
||||
| KINJ011 | SORT | WORK-LEAVE → APPLICATION_ID昇順 | 必須 |
|
||||
| KINJ012 | KIN02UPD | 休暇申請DB更新(INSERT/DELETE) | 不要 |
|
||||
| KINJ015 | KIN03EXP | 休暇日別展開(キーブレイク) | 不要 |
|
||||
| KINJ020 | KIN04CHK | 打刻項目チェック | 不要 |
|
||||
| KINJ022 | SORT | EDITED-PUNCH → 社員番号+日付昇順 | 必須 |
|
||||
| KINJ025 | KIN05MAT | 打刻休暇照合(1:N) | 不要 |
|
||||
| KINJ030 | KIN06CLD | 出勤日カレンダー生成(GETPUT) | 不要 |
|
||||
| KINJ033 | KIN07DAI | 日別計算(EVALUATE / MULTIPLY / SUBTRACT) | 不要 |
|
||||
| KINJ036 | KIN08DBU | 勤怠DB更新(集計) | 不要 |
|
||||
| KINJ040 | KIN09CSV | 勤怠CSV出力 | 不要 |
|
||||
|
||||
---
|
||||
|
||||
## 丸めルール一覧
|
||||
|
||||
| 項目 | 最小単位 | 超過後丸め | 適用プログラム |
|
||||
|------|---------|-----------|--------------|
|
||||
| 休暇時間(全種別) | 1.0h | 0.1h単位切上 | KIN07DAI(SUB05TIM) |
|
||||
| 未申請欠勤時間 | 8.0h/日 | 切捨 | KIN07DAI |
|
||||
|
||||
サブシステムB(残業計算)の丸めルールとは独立して管理する。
|
||||
|
||||
---
|
||||
|
||||
## 期待される新規カバレッジ
|
||||
|
||||
### プログラムタイプ(未カバー → Aで追加)
|
||||
|
||||
| No | パターン | 状態 | A該当プログラム | A状態 |
|
||||
|----|----------|:----:|----------------|:-----:|
|
||||
| 2 | マッチング処理(1:N) | × | KIN05MAT | ◎ |
|
||||
| 11 | キーブレイク処理(その他) | × | KIN03EXP | ◎ |
|
||||
| 12 | レイアウト編集のみ(GETPUT) | × | KIN06CLD | ◎ |
|
||||
| 15 | 振り分け(IF文) | × | KIN01INP | ◎ |
|
||||
| 17 | 内部テーブル検索 | ○ | KIN01INP(SEARCH非ALL) | ◎ |
|
||||
| 19 | CSV→FB変換(改行なし) | ○ | KIN01INP | ◎ |
|
||||
| **28** | **SYSIN読込・チェック** | **×** | **KIN08DBU** | **新規◎** |
|
||||
|
||||
### ステートメント(未カバー → Aで追加)
|
||||
|
||||
| ステートメント | 状態 | A該当プログラム |
|
||||
|---------------|:----:|----------------|
|
||||
| SEARCH(非ALL) | × | KIN01INP |
|
||||
| DELETE FROM(DB2) | × | KIN02UPD |
|
||||
| GO TO DEPENDING ON | × | — (KIN07DAIはフォールスルー問題のためEVALUATE+PERFORMに変更) |
|
||||
| PERFORM THRU | × | KIN03EXP |
|
||||
| WRITE FROM | × | KIN04CHK, KIN06CLD |
|
||||
| WRITE AFTER ADVANCING PAGE | × | KIN09CSV |
|
||||
| **MULTIPLY** | **○(ZAN06UPDのみ)** | **KIN07DAI** |
|
||||
| **SUBTRACT** | **○(ZAN06UPDのみ)** | **KIN07DAI** |
|
||||
| **ACCEPT FROM COMMAND-LINE** | **◎(ZAN05CAL,KIN06CLD)** | **KIN09CSV** |
|
||||
| **DISPLAY** | **△(SUB02MSG,SUB03ENDのみ)** | **KIN08DBU** |
|
||||
| **INSPECT** | **◎** | **KIN08DBU** |
|
||||
|
||||
---
|
||||
|
||||
## レコード構成
|
||||
|
||||
EDITED-PUNCHはBサブシステムのZAN03CHKが入力として使用するため、互換性を維持する。
|
||||
|
||||
### EDITED-PUNCH(80B)
|
||||
|
||||
Bサブシステムとの連携インターフェース。
|
||||
|
||||
| # | 項目 | 名称 | 属性 | 開始 | 備考 |
|
||||
|---|------|------|------|------|------|
|
||||
| 1 | 社員番号 | SI-EMP-ID | 9(8) | 1 | |
|
||||
| 2 | 日付 | SI-DATE | 9(8) | 9 | YYYYMMDD |
|
||||
| 3 | 出勤時刻 | SI-TIME-IN | 9(4) | 17 | HHMM |
|
||||
| 4 | 退勤時刻 | SI-TIME-OUT | 9(4) | 21 | HHMM |
|
||||
| 5 | 部署ID | SI-DEPT-ID | 9(4) | 25 | |
|
||||
| 6 | 端末ID | SI-TERMINAL | X(6) | 29 | |
|
||||
| 7 | 予備 | FILLER | X(46) | 35 | |
|
||||
|
||||
### WORK-LEAVE(80B) — 新規(KIN01INP→KIN02UPD中間)
|
||||
|
||||
| # | 項目 | 名称 | 属性 | 開始 | 備考 |
|
||||
|---|------|------|------|------|------|
|
||||
| 1 | 申請ID | WL-APPLICATION-ID | 9(9) | 1 | 新規=0, 取消/変更=APPLICATION_ID |
|
||||
| 2 | 社員番号 | WL-EMP-ID | X(8) | 10 | |
|
||||
| 3 | 休暇種別 | WL-LEAVE-TYPE | X(2) | 18 | '01'〜'04' |
|
||||
| 4 | 開始日 | WL-START-DATE | 9(8) | 20 | YYYYMMDD |
|
||||
| 5 | 開始時刻 | WL-START-TIME | 9(4) | 28 | HHMM |
|
||||
| 6 | 終了日 | WL-END-DATE | 9(8) | 32 | YYYYMMDD |
|
||||
| 7 | 終了時刻 | WL-END-TIME | 9(4) | 40 | HHMM |
|
||||
| 8 | ステータス | WL-STATUS | X(1) | 44 | '1'=新規/変更, '9'=取消 |
|
||||
| 9 | 予備 | FILLER | X(36) | 45 | |
|
||||
|
||||
### LEAVE-DAILY(80B)
|
||||
|
||||
| # | 項目 | 名称 | 属性 | 開始 | 備考 |
|
||||
|---|------|------|------|------|------|
|
||||
| 1 | 社員番号 | SL-EMP-ID | X(8) | 1 | |
|
||||
| 2 | 日付 | SL-DATE | 9(8) | 9 | YYYYMMDD |
|
||||
| 3 | 休暇種別 | SL-LEAVE-TYPE | X(2) | 17 | '01'〜'04' |
|
||||
| 4 | 開始時刻 | SL-START-TIME | 9(4) | 19 | HHMM(元申請の開始時刻) |
|
||||
| 5 | 終了時刻 | SL-END-TIME | 9(4) | 23 | HHMM(元申請の終了時刻) |
|
||||
| 6 | 申請ID | SL-APPLICATION-ID | 9(9) | 27 | LEAVE_RECORDSのAPPLICATION_ID |
|
||||
| 7 | 予備 | FILLER | X(45) | 36 | |
|
||||
|
||||
### KIN-LEAVE(160B) — EDITED-PUNCH(80B)+休暇情報(80B)
|
||||
|
||||
| # | 項目 | 名称 | 属性 | 開始 | 備考 |
|
||||
|---|------|------|------|------|------|
|
||||
| 1-7 | 打刻情報 | — | — | 1 | EDITED-PUNCHと同一 |
|
||||
| 8 | 休暇種別 | SR-LEAVE-TYPE | X(2) | 81 | '01'〜'04' or '99' |
|
||||
| 9 | 開始時刻 | SR-LEAVE-START-TIME | 9(4) | 83 | 該当休暇の申請開始時刻 |
|
||||
| 10 | 終了時刻 | SR-LEAVE-END-TIME | 9(4) | 87 | 該当休暇の申請終了時刻 |
|
||||
| 11 | 休暇時間 | SR-LEAVE-HOURS | 9(4)V9(1) | 91 | KIN07DAIが再計算(ランチ除外・丸め適用) |
|
||||
| 12 | 申請ID | SR-APPLICATION-ID | 9(9) | 96 | LEAVE_RECORDSのAPPLICATION_ID |
|
||||
| 13 | 予備 | FILLER | X(56) | 105 | |
|
||||
|
||||
### WORK-DAY-FILE(80B)
|
||||
|
||||
| # | 項目 | 名称 | 属性 | 開始 | 備考 |
|
||||
|---|------|------|------|------|------|
|
||||
| 1 | 社員番号 | SW-EMP-ID | 9(8) | 1 | |
|
||||
| 2 | 日付 | SW-DATE | 9(8) | 9 | YYYYMMDD |
|
||||
| 3 | 曜日 | SW-DAY-OF-WEEK | 9(1) | 17 | 1=月…7=日 |
|
||||
| 4 | 予備 | FILLER | X(63) | 18 | |
|
||||
|
||||
### DAILY-RECORD(200B)
|
||||
|
||||
| # | 項目 | 名称 | 属性 | 開始 | 備考 |
|
||||
|---|------|------|------|------|------|
|
||||
| 1 | 社員番号 | SD-EMP-ID | 9(8) | 1 | |
|
||||
| 2 | 日付 | SD-DATE | 9(8) | 9 | YYYYMMDD |
|
||||
| 3 | 出勤時刻 | SD-TIME-IN | 9(4) | 17 | '0000'=打刻なし |
|
||||
| 4 | 退勤時刻 | SD-TIME-OUT | 9(4) | 21 | '0000'=打刻なし |
|
||||
| 5 | 年休時間 | SD-ANNUAL-H | 9(4)V9(1) | 25 | |
|
||||
| 6 | 事假時間 | SD-PERSONAL-H | 9(4)V9(1) | 30 | |
|
||||
| 7 | 因公特批假時間 | SD-OFFICIAL-H | 9(4)V9(1) | 35 | |
|
||||
| 8 | 病欠時間 | SD-SICK-H | 9(4)V9(1) | 40 | |
|
||||
| 9 | 未申請欠勤時間 | SD-ABSENT-H | 9(4)V9(1) | 45 | |
|
||||
| 10 | 予備 | FILLER | X(151) | 50 | |
|
||||
|
||||
### CSV-OUTPUT(200B)
|
||||
|
||||
| # | 項目 | 名称 | 属性 | 開始 | 備考 |
|
||||
|---|------|------|------|------|------|
|
||||
| 1 | CSV行データ | SC-CSV-LINE | X(200) | 1 | STRING編集済みCSV1行 |
|
||||
|
||||
### ERROR-LOG(VB 200B)
|
||||
|
||||
| # | 項目 | 名称 | 属性 | 開始 | 備考 |
|
||||
|---|------|------|------|------|------|
|
||||
| 1 | エラー区分 | ER-CATEGORY | 9(2) | 1 | 01=休暇エラー, 02=打刻エラー |
|
||||
| 2 | 発生日時 | ER-DATETIME | X(16) | 3 | |
|
||||
| 3 | プログラムID | ER-PGM-ID | X(8) | 19 | |
|
||||
| 4 | エラー内容 | ER-MESSAGE | X(100) | 27 | |
|
||||
| 5 | 原データ | ER-RAW-DATA | X(80) | 127 | エラー原因となった入力レコード |
|
||||
|
||||
@@ -0,0 +1,817 @@
|
||||
# 残業統計管理システム 設計書(サブシステムB)
|
||||
|
||||
## システム概要
|
||||
|
||||
本サブシステムは、社員からの加班申請データを元に、振り分け・重複チェック・打刻照合・取消マッチング・キーブレイク集約を行い、月次の加班統計データをDBに保存する。
|
||||
|
||||
### サブシステム情報
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| サブシステムID | ZAN(残業→ZANgyo) |
|
||||
| COBOLプログラム数 | 6 |
|
||||
| JCL数 | 6 |
|
||||
| DB | 1(OVERTIME-DB / DB2、2テーブル) |
|
||||
|
||||
### システム定数
|
||||
|
||||
| 定数 | 値 | 説明 |
|
||||
|------|-----|------|
|
||||
| WORK-START | 0900 | 所定労働開始時刻 |
|
||||
| WORK-END | 1800 | 所定労働終了時刻 |
|
||||
| DINNER-START | 1830 | 食事時間開始(1830以前は加班不可) |
|
||||
| MIN-OVT-HOURS | 0.5 | 加班最小単位 |
|
||||
|
||||
### 入力CSV形式(OVT-APPLY)
|
||||
|
||||
各レコードはCSV形式。
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| フォーマット | `申請番号,社員番号,日付(YYYYMMDD),開始時刻(HHMM),終了時刻(HHMM),ステータス` |
|
||||
| ステータス 0 | 申請(新規) |
|
||||
| ステータス 1 | 承認済(後続処理で状態更新) |
|
||||
| ステータス 9 | 取消 |
|
||||
|
||||
---
|
||||
|
||||
## ファイル一覧
|
||||
|
||||
| # | ファイル名 | 編成 | RECM | サイズ | 用途 | 区分 |
|
||||
|---|-----------|------|------|-------|------|------|
|
||||
| 1 | OVT-APPLY | SEQUENTIAL | FB | 80 | 加班申請CSV(入力) | 新規 |
|
||||
| 2 | OVT-VALID | SEQUENTIAL | FB | 80 | 振り分け通過(有効申請) | 新規 |
|
||||
| 3 | OVT-CANCEL | SEQUENTIAL | FB | 80 | 振り分け通過(取消) | 新規 |
|
||||
| 4 | OVT-NODUP | SEQUENTIAL | FB | 80 | 重複チェック通過データ | 新規 |
|
||||
| 5 | OVT-CHECKED | SEQUENTIAL | FB | 80 | 打刻照合通過(OVT-TYPE付加) | 新規 |
|
||||
| 6 | OVT-MATCHED | SEQUENTIAL | FB | 80 | マッチング通過(処理番号付加) | 新規 |
|
||||
| 7 | OVT-DBCLEAN | SEQUENTIAL | FB | 80 | 孤立取消(DB削除対象) | 新規 |
|
||||
| 8 | OVT-SUMMARY | SEQUENTIAL | FB | 80 | 集約結果 | 新規 |
|
||||
| 9 | ERROR-LOG | SEQUENTIAL | VB | 200 | エラーレコード退避 | Aと共用 |
|
||||
| 10 | EDITED-PUNCH | SEQUENTIAL | FB | 80 | 打刻データ(Aシステム出力) | Aから連携 |
|
||||
| 11 | HOLIDAY-FILE | SEQUENTIAL | FB | 80 | 休日マスタファイル(Aシステム提供) | Aから連携 |
|
||||
|
||||
### DBテーブル管理方針
|
||||
|
||||
DB2インスタンスは全サブシステムで共有するが、テーブルはサブシステム別に機能分割する。
|
||||
BサブシステムのテーブルはOVT-APPLICATIONS, OVT-MONTHLYの2つであり、これらの管理・更新はBのみが行う。
|
||||
Aサブシステムのテーブル(DAILY_RECORDS, LEAVE_RECORDS等)は参照せず、A→Bの連携はEDITED-PUNCHファイル経由に限定する。
|
||||
HOLIDAY_CALENDARテーブルについては、Aサブシステムによって提供されるHOLIDAY-FILEを使用することで参照を代替する。
|
||||
|
||||
### DB二重対応
|
||||
|
||||
本サブシステムのDB操作はDB2の埋め込みSQL(`EXEC SQL`)で直接記述する。
|
||||
ただし、休日マスタに関するDBアクセスはファイルベースで処理するため、
|
||||
ZAN06UPD以外の全プログラムはDBアクセスを伴わない。
|
||||
各プログラム内でEXEC SQL INSERT/UPDATE/SELECTを発行する。
|
||||
|
||||
### 共通関数利用方針
|
||||
|
||||
Aサブシステムの共通関数のうち、安定した汎用API(SUB01DAT, SUB02MSG, SUB03END, SUB04CHK, SUB05TIM)はBでも利用する。
|
||||
SUB06DBUはサブシステムAで使用するDB更新用サブプログラムであり、Bでは使用しない(EXEC SQLを直接記述)。
|
||||
|
||||
---
|
||||
|
||||
## DB構成
|
||||
|
||||
### DB名称:残業統計データベース(OVERTIME-DB)
|
||||
|
||||
#### テーブル1:OVT-APPLICATIONS(個別加班申請テーブル)
|
||||
|
||||
| カラム | 型 | 内容 |
|
||||
|--------|---|------|
|
||||
| APPL-ID | CHAR(8) | 申請番号(PK) |
|
||||
| EMP-ID | CHAR(8) | 社員番号 |
|
||||
| APPL-DATE | CHAR(8) | 申請日 YYYYMMDD |
|
||||
| OVT-TYPE | CHAR(1) | W=平日 / H=休日 |
|
||||
| START-TIME | CHAR(4) | 開始時刻 HHMM |
|
||||
| END-TIME | CHAR(4) | 終了時刻 HHMM |
|
||||
| OVT-HOURS | DECIMAL(4,1) | 加班時間 |
|
||||
| STATUS | CHAR(1) | 0=有効 / 9=取消 |
|
||||
| UPDATED-AT | TIMESTAMP | 更新日時 |
|
||||
|
||||
#### テーブル2:OVT-MONTHLY(月次集計テーブル)
|
||||
|
||||
| カラム | 型 | 内容 |
|
||||
|--------|---|------|
|
||||
| EMP-ID | CHAR(8) | 社員番号(PK) |
|
||||
| YEAR-MONTH | CHAR(6) | 対象年月 YYYYMM(PK) |
|
||||
| OVT-TYPE | CHAR(1) | W=平日 / H=休日(PK) |
|
||||
| OVT-HOURS | DECIMAL(6,1) | 加班時間合計 |
|
||||
| OVT-COUNT | INTEGER | 加班回数 |
|
||||
| UPDATED-AT | TIMESTAMP | 更新日時 |
|
||||
|
||||
---
|
||||
|
||||
## 処理フロー
|
||||
|
||||
```
|
||||
OVT-APPLY(CSV、任意順)
|
||||
レコード: 申請番号,社員番号,日付,開始時刻,終了時刻,ステータス(0/1/9)
|
||||
│
|
||||
╞══ ZANJ010 ═══════════════════════════════════╡
|
||||
│ ZAN01CHK(残業申請振分処理)— 振り分け
|
||||
│ UNSTRINGでCSV分解 / EVALUATEでステータス判定
|
||||
│ SUB04CHKで日付/時刻/数値チェック / 0.5h未満チェック
|
||||
├── ステータス=0,1 → OVT-VALID
|
||||
├── ステータス=9 → OVT-CANCEL
|
||||
└── 異常 → ERROR-LOG
|
||||
│
|
||||
╞══ ZANJ012 ═══════════════════════════════════╡
|
||||
│ SORT(OVT-VALID → 社員番号+日付+開始時刻昇順)
|
||||
│
|
||||
│ ZAN02CHK(時間帯重複チェック処理)— 項目チェック
|
||||
│ 同社員+同日の前レコード終了時刻 > 現レコード開始時刻
|
||||
│ → 重複(境界接続は重複としない)
|
||||
├── 通過 → OVT-NODUP
|
||||
└── 重複 → ERROR-LOG
|
||||
│
|
||||
╞══ ZANJ013 ═══════════════════════════════════╡
|
||||
│ SORT(EDITED-PUNCH → 社員番号+日付昇順)
|
||||
│
|
||||
│ ZAN03CHK(打刻時間照合処理)— マッチング(N:1)
|
||||
│ OVT-NODUP + PUNCH-SORTED を社員番号+日付で突合
|
||||
│ 申請時間帯が出勤〜退勤の範囲内か確認
|
||||
│ HOLIDAY_CALENDAR検索+曜日関数で休日判定→OVT-TYPE(W/H)設定
|
||||
├── 通過 → OVT-CHECKED
|
||||
└── 異常 → ERROR-LOG
|
||||
│
|
||||
╞══ ZANJ015 ═══════════════════════════════════╡
|
||||
│ SORT(OVT-CHECKED → 申請番号昇順)
|
||||
│ SORT(OVT-CANCEL → 申請番号昇順)
|
||||
│
|
||||
│ ZAN04MAT(取消マッチング処理)— マッチング1:1
|
||||
│ キー=申請番号で VALID vs CANCEL を突合
|
||||
├── VALID有 + CANCEL無 → OVT-MATCHED
|
||||
├── VALID有 + CANCEL有 → 消滅
|
||||
└── VALID無 + CANCEL有 → OVT-DBCLEAN
|
||||
│
|
||||
╞══ ZANJ020 ═══════════════════════════════════╡
|
||||
│ SORT(OVT-MATCHED → 申請番号+処理番号昇順)
|
||||
│
|
||||
│ ZAN05CAL(残業時間集計処理)— キーブレイク集計
|
||||
│ 同一申請番号内の最終レコードを集計
|
||||
│ DIVIDE 分→時間変換 / SUB05TIMで丸め
|
||||
│ COMPUTE ROUNDED ON SIZE ERROR
|
||||
│ → OVT-SUMMARY
|
||||
│
|
||||
╞══ ZANJ025 ═══════════════════════════════════╡
|
||||
│ ZAN06UPD(残業統計DB更新処理)— DB更新
|
||||
├── OVT-SUMMARY → OVT-APPLICATIONS INSERT/UPDATE
|
||||
│ → OVT-MONTHLY UPSERT(平日/休日別)
|
||||
└── OVT-DBCLEAN → OVT-APPLICATIONS STATUS='9' UPDATE
|
||||
→ OVT-MONTHLY 減算UPDATE
|
||||
→ 該当なし → ERROR-LOG
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## JCL
|
||||
|
||||
### ZANJ010 — 残業申請振分
|
||||
|
||||
```jcl
|
||||
//ZANJ010 JOB (ACCT),'残業申請振分',CLASS=A
|
||||
//*
|
||||
//*--- パラメータ定義 ---
|
||||
//SETPARM SET YEARMONTH=202605
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP010: 振り分け(SORT不要)
|
||||
//* 注:YEARMONTH PARMは他プログラムとの一貫性のため渡すが、ZAN01CHK内では未使用
|
||||
//*=====================================================================
|
||||
//STEP010 EXEC PGM=ZAN01CHK
|
||||
//ZAN01R01 DD DSN=OVT-APPLY.DAT,DISP=SHR
|
||||
//ZAN01W01 DD DSN=OVT-VALID.DAT,DISP=(NEW,PASS)
|
||||
//ZAN01W02 DD DSN=OVT-CANCEL.DAT,DISP=(NEW,PASS)
|
||||
//ZAN01W03 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
|
||||
```
|
||||
|
||||
### ZANJ012 — 時間帯重複チェック
|
||||
|
||||
```jcl
|
||||
//ZANJ012 JOB (ACCT),'時間帯重複チェック',CLASS=A
|
||||
//*
|
||||
//*--- パラメータ定義 ---
|
||||
//SETPARM SET YEARMONTH=202605
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP012S: 有効申請 SORT
|
||||
//*=====================================================================
|
||||
//STEP012S EXEC PGM=SORT
|
||||
//SORTIN DD DSN=OVT-VALID.DAT,DISP=(OLD,DELETE)
|
||||
//SORTOUT DD DSN=OVT-VSORT.DAT,DISP=(NEW,PASS)
|
||||
//SYSIN DD *
|
||||
SORT FIELDS=(9,8,CH,A,17,8,CH,A,25,4,CH,A),EQUALS
|
||||
/*
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP012: 重複チェック
|
||||
//*=====================================================================
|
||||
//STEP012 EXEC PGM=ZAN02CHK,PARM='YEARMONTH=&YEARMONTH'
|
||||
//ZAN02R01 DD DSN=OVT-VSORT.DAT,DISP=(OLD,DELETE)
|
||||
//ZAN02W01 DD DSN=OVT-NODUP.DAT,DISP=(NEW,PASS)
|
||||
//ZAN02W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
|
||||
```
|
||||
|
||||
### ZANJ013 — 打刻時間照合
|
||||
|
||||
```jcl
|
||||
//ZANJ013 JOB (ACCT),'打刻時間照合',CLASS=A
|
||||
//*
|
||||
//*--- パラメータ定義 ---
|
||||
//SETPARM SET YEARMONTH=202605
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP013S: 打刻データ SORT
|
||||
//*=====================================================================
|
||||
//STEP013S EXEC PGM=SORT
|
||||
//SORTIN DD DSN=EDITED-PUNCH.DAT,DISP=SHR
|
||||
//SORTOUT DD DSN=PUNCH-SORTED.DAT,DISP=(NEW,PASS)
|
||||
//SYSIN DD *
|
||||
SORT FIELDS=(1,8,CH,A,9,8,CH,A),EQUALS
|
||||
/*
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP013: 打刻照合 + 曜日判定
|
||||
//*=====================================================================
|
||||
//STEP013 EXEC PGM=ZAN03CHK,PARM='YEARMONTH=&YEARMONTH'
|
||||
//ZAN03R01 DD DSN=OVT-NODUP.DAT,DISP=(OLD,DELETE)
|
||||
//ZAN03R02 DD DSN=PUNCH-SORTED.DAT,DISP=(OLD,DELETE)
|
||||
//ZAN03R03 DD DSN=HOLIDAY-FILE.DAT,DISP=SHR
|
||||
//ZAN03W01 DD DSN=OVT-CHECKED.DAT,DISP=(NEW,PASS)
|
||||
//ZAN03W02 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
|
||||
```
|
||||
|
||||
### ZANJ015 — 取消マッチング
|
||||
|
||||
```jcl
|
||||
//ZANJ015 JOB (ACCT),'取消マッチング',CLASS=A
|
||||
//*
|
||||
//*--- パラメータ定義 ---
|
||||
//SETPARM SET YEARMONTH=202605
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP015S1: チェック済データ SORT
|
||||
//*=====================================================================
|
||||
//STEP015SA EXEC PGM=SORT
|
||||
//SORTIN DD DSN=OVT-CHECKED.DAT,DISP=(OLD,DELETE)
|
||||
//SORTOUT DD DSN=OVT-SORTED.DAT,DISP=(NEW,PASS)
|
||||
//SYSIN DD *
|
||||
SORT FIELDS=(1,8,CH,A),EQUALS
|
||||
/*
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP015S2: 取消データ SORT
|
||||
//*=====================================================================
|
||||
//STEP015SB EXEC PGM=SORT
|
||||
//SORTIN DD DSN=OVT-CANCEL.DAT,DISP=(OLD,DELETE)
|
||||
//SORTOUT DD DSN=OVT-CSORT.DAT,DISP=(NEW,PASS)
|
||||
//SYSIN DD *
|
||||
SORT FIELDS=(1,8,CH,A),EQUALS
|
||||
/*
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP015: マッチング
|
||||
//*=====================================================================
|
||||
//STEP015 EXEC PGM=ZAN04MAT,PARM='YEARMONTH=&YEARMONTH'
|
||||
//ZAN04R01 DD DSN=OVT-SORTED.DAT,DISP=(OLD,DELETE)
|
||||
//ZAN04R02 DD DSN=OVT-CSORT.DAT,DISP=(OLD,DELETE)
|
||||
//ZAN04W01 DD DSN=OVT-MATCHED.DAT,DISP=(NEW,PASS)
|
||||
//ZAN04W02 DD DSN=OVT-DBCLEAN.DAT,DISP=(NEW,PASS)
|
||||
//ZAN04W03 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
|
||||
```
|
||||
|
||||
### ZANJ020 — 残業時間集計
|
||||
|
||||
```jcl
|
||||
//ZANJ020 JOB (ACCT),'残業時間集計',CLASS=A
|
||||
//*
|
||||
//*--- パラメータ定義 ---
|
||||
//SETPARM SET YEARMONTH=202605
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP020S: マッチング済データ SORT
|
||||
//*=====================================================================
|
||||
//STEP020S EXEC PGM=SORT
|
||||
//SORTIN DD DSN=OVT-MATCHED.DAT,DISP=(OLD,DELETE)
|
||||
//SORTOUT DD DSN=OVT-SORTED2.DAT,DISP=(NEW,PASS)
|
||||
//SYSIN DD *
|
||||
SORT FIELDS=(1,8,CH,A,35,2,CH,A),EQUALS
|
||||
/*
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP020: キーブレイク集計
|
||||
//*=====================================================================
|
||||
//STEP020 EXEC PGM=ZAN05CAL,PARM='YEARMONTH=&YEARMONTH'
|
||||
//ZAN05R01 DD DSN=OVT-SORTED2.DAT,DISP=(OLD,DELETE)
|
||||
//ZAN05W01 DD DSN=OVT-SUMMARY.DAT,DISP=(NEW,PASS)
|
||||
```
|
||||
|
||||
### ZANJ025 — 残業統計DB更新
|
||||
|
||||
```jcl
|
||||
//ZANJ025 JOB (ACCT),'残業統計DB更新',CLASS=A
|
||||
//*
|
||||
//*--- パラメータ定義 ---
|
||||
//SETPARM SET YEARMONTH=202605
|
||||
//*
|
||||
//*=====================================================================
|
||||
//* STEP025: DB更新(SORT不要)
|
||||
//*=====================================================================
|
||||
//STEP025 EXEC PGM=ZAN06UPD,PARM='YEARMONTH=&YEARMONTH'
|
||||
//ZAN06R01 DD DSN=OVT-SUMMARY.DAT,DISP=(OLD,DELETE)
|
||||
//ZAN06R02 DD DSN=OVT-DBCLEAN.DAT,DISP=(OLD,DELETE)
|
||||
//ZAN06W01 DD DSN=ERROR-LOG.DAT,DISP=(NEW,PASS)
|
||||
```
|
||||
|
||||
### 実行順序
|
||||
|
||||
BサブシステムのJOBは、AサブシステムのKINJ020(打刻チェック)出力を入力とする。
|
||||
そのためJCL起動時は以下の順序を保証すること。
|
||||
|
||||
1. Aサブシステム KINJ020(KIN03PCK)→ EDITED-PUNCH生成
|
||||
2. Bサブシステム ZANJ010〜ZANJ025(必要時順次実行)
|
||||
|
||||
KINJ030(日別計算)は各打刻確定後であればいつでも実行可能で、ZANJ系列との依存関係はない。
|
||||
|
||||
---
|
||||
|
||||
## プログラム詳細
|
||||
|
||||
### STEP010: ZAN01CHK(残業申請振分処理) — 振り分け
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **プログラム名称** | 残業申請振分処理 |
|
||||
| **PGMパターン** | 振り分け |
|
||||
| **SORT前処理** | 不要 |
|
||||
| **入力ファイル** | OVT-APPLY(80B / CSV形式) |
|
||||
| **出力ファイル** | OVT-VALID(80B)/ OVT-CANCEL(80B)/ ERROR-LOG(VB) |
|
||||
| **件数変化** | N件 → 有効M件 + 取消K件 + 異常L件(M+K+L=N) |
|
||||
| **使用共通関数** | SUB01DAT(運用日付), SUB02MSG(メッセージ), SUB03END(ABEND), SUB04CHK(項目チェック) |
|
||||
|
||||
**入力CSVレコード例:** `A001,EMP001,20260610,1800,2000,0`
|
||||
|
||||
**機能:**
|
||||
|
||||
1. READ OVT-APPLY
|
||||
2. **UNSTRING** でCSVレコードを各項目に分解
|
||||
3. **UNSTRING TALLYING** でカンマ区切り数をカウント(項目数妥当性確認)
|
||||
4. **EVALUATE** でステータスを判定
|
||||
- 0 or 1 → 有効申請として次へ
|
||||
- 9 → OVT-CANCEL に書出し
|
||||
- その他 → エラーとして処理
|
||||
5. SUB04CHK で日付(DATE8)・時刻(TIME4)・社員番号(NUMERIC)を検証
|
||||
6. 加班時間計算(時刻はHHMM形式のため分単位に変換してから減算)
|
||||
```
|
||||
開始分 = (開始時刻 / 100) * 60 + (開始時刻 - (開始時刻 / 100) * 100)
|
||||
終了分 = (終了時刻 / 100) * 60 + (終了時刻 - (終了時刻 / 100) * 100)
|
||||
加班時間(分) = 終了分 - 開始分
|
||||
```
|
||||
- 開始時刻 < DINNER-START(1830) → エラー(18:30以前は食事時間のため加班不可)
|
||||
- 加班時間 < 30分 → エラー(0.5h未満)
|
||||
- 開始時刻 ≧ 終了時刻 → エラー
|
||||
7. 通過 → OVT-VALID に書出し
|
||||
8. エラー → 該当レコードをERROR-LOG用01レコードにMOVEしてWRITE出力
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| UNSTRING | CSVレコードの項目分解(TALLYING句で区切り数カウント) |
|
||||
| STRING | エラーレコード編集 |
|
||||
|
||||
---
|
||||
|
||||
### STEP012: ZAN02CHK(時間帯重複チェック処理) — 項目チェック
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **プログラム名称** | 時間帯重複チェック処理 |
|
||||
| **PGMパターン** | 項目チェック |
|
||||
| **SORT前処理** | OVT-VALID → 社員番号+日付+開始時刻昇順 |
|
||||
| **入力ファイル** | OVT-VSORT(80B) |
|
||||
| **出力ファイル** | OVT-NODUP(80B)/ ERROR-LOG(VB) |
|
||||
| **件数変化** | M件 → 通過K件 + 重複エラー(M-K)件 |
|
||||
| **使用共通関数** | SUB01DAT(運用日付), SUB02MSG(メッセージ), SUB03END(ABEND) |
|
||||
|
||||
**機能:**
|
||||
|
||||
OVT-VSORT は既に社員番号+日付+開始時刻でソート済。順次READしながら直前レコードと比較する。
|
||||
|
||||
1. READ OVT-VSORT → 現レコード取得成功
|
||||
2. 直前レコードと同一社員番号+日付 かつ 前終了時刻 > 現開始時刻 の場合 → **時間帯重複**
|
||||
- 境界接続(前終了時刻 = 現開始時刻)は重複としない
|
||||
3. 重複 → ERROR-LOG へ
|
||||
4. 重複なし → OVT-NODUP へ書出し
|
||||
5. 社員番号 or 日付が変わったら直前レコードをリセット
|
||||
6. **SET** で重複有無フラグを設定
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| SET | 重複有無フラグ設定 |
|
||||
| CONTINUE | リセット時の空処理 |
|
||||
|
||||
---
|
||||
|
||||
### STEP013: ZAN03CHK(打刻時間照合処理) — マッチング(N:1)
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **プログラム名称** | 打刻時間照合処理 |
|
||||
| **PGMパターン** | マッチング(N:1) |
|
||||
| **SORT前処理** | EDITED-PUNCH → 社員番号+日付昇順 |
|
||||
| **入力ファイル** | OVT-NODUP(80B)/ PUNCH-SORTED(80B) |
|
||||
| **出力ファイル** | OVT-CHECKED(80B)/ ERROR-LOG(VB) |
|
||||
| **件数変化** | K件 → 通過P件 + エラー(K-P)件 |
|
||||
| **使用共通関数** | SUB02MSG(メッセージ) |
|
||||
|
||||
**機能:**
|
||||
|
||||
#### Step1:打刻時間内チェック
|
||||
|
||||
OVT-NODUP と PUNCH-SORTED を社員番号+日付で突合(共にソート済のため順次READで処理可)。
|
||||
|
||||
1. READ OVT-NODUP → 現レコード
|
||||
2. 該当社員番号+日付の打刻レコードを PUNCH-SORTED から READ
|
||||
3. 打刻データあり かつ 以下を両方満たすことを確認:
|
||||
- 申請開始時刻 ≧ 出勤時刻
|
||||
- 申請終了時刻 ≦ 退勤時刻
|
||||
4. 範囲外 または 打刻データなし → ERROR-LOG
|
||||
|
||||
#### Step2:曜日判定
|
||||
|
||||
**SEARCH ALL** で休日マスタファイル(WORKING-STORAGE)を検索し、申請日の種別を判定。
|
||||
Aサブシステムと同一の休日定義に従う(HOLIDAY-FILEファイル相当のデータを保持)。
|
||||
|
||||
##### 休日ファイル初期化手順
|
||||
|
||||
初期処理(1000ITTSOR)でHOLIDAY-FILEを全件READし、WORKING-STORAGEのHOLIDAY-TABLEに格納する。
|
||||
|
||||
```
|
||||
* 休日データ取得(ファイル読込み)
|
||||
OPEN INPUT HOLIDAY-FILE
|
||||
READ HOLIDAY-FILE
|
||||
... 逐次処理
|
||||
CLOSE HOLIDAY-FILE
|
||||
```
|
||||
|
||||
```
|
||||
01 HOLIDAY-TABLE.
|
||||
05 HOLIDAY-CNT PIC 9(004).
|
||||
05 HOLIDAY-DATA OCCURS 1 TO 366 TIMES
|
||||
DEPENDING ON HOLIDAY-CNT
|
||||
INDEXED BY HD-IDX.
|
||||
10 HD-DATE PIC 9(008).
|
||||
10 HD-TYPE PIC X(001).
|
||||
88 HD-HOLIDAY VALUE 'H'.
|
||||
```
|
||||
|
||||
```
|
||||
SET HD-IDX TO 1
|
||||
SEARCH ALL HOLIDAY-DATA
|
||||
AT END
|
||||
SET OVT-TYPE TO 'W'
|
||||
WHEN HD-DATE(HD-IDX) = APPL-DATE
|
||||
IF HD-HOLIDAY(HD-IDX)
|
||||
SET OVT-TYPE TO 'H'
|
||||
ELSE
|
||||
SET OVT-TYPE TO 'W'
|
||||
END-IF
|
||||
END-SEARCH
|
||||
```
|
||||
|
||||
- HOLIDAY-FILE該当 → OVT-TYPE='H'
|
||||
- 該当なし → OVT-TYPE='W'
|
||||
|
||||
**MOVE** で OVT-TYPE を設定。
|
||||
|
||||
全通過レコードは OVT-TYPE を付加して OVT-CHECKED に書出し。
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| SEARCH ALL | 休日マスタテーブル二分探索 |
|
||||
| SET | テーブル添字操作 |
|
||||
|
||||
---
|
||||
|
||||
### STEP015: ZAN04MAT(取消マッチング処理) — マッチング1:1
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **プログラム名称** | 取消マッチング処理 |
|
||||
| **PGMパターン** | マッチング(1:1) |
|
||||
| **SORT前処理** | OVT-CHECKED → 申請番号昇順 |
|
||||
| | OVT-CANCEL → 申請番号昇順 |
|
||||
| **入力ファイル** | OVT-SORTED(80B)/ OVT-CSORT(80B) |
|
||||
| **出力ファイル** | OVT-MATCHED(80B)/ OVT-DBCLEAN(80B)/ ERROR-LOG(VB) |
|
||||
| **件数変化** | 有効P件 + 取消R件 → 通過Q件 + 消滅S件 + DB削除T件(P=Q+S, R=S+T) |
|
||||
| **使用共通関数** | SUB01DAT(運用日付), SUB02MSG(メッセージ), SUB03END(ABEND) |
|
||||
|
||||
**機能:**
|
||||
|
||||
キー=**申請番号(APPL-ID)** で OVT-SORTED(有効申請)と OVT-CSORT(取消)をマッチング1:1。
|
||||
|
||||
マッチング制御の分岐:
|
||||
|
||||
| 条件 | 結果 | 処理 |
|
||||
|------|------|------|
|
||||
| SORTED.APPL-ID < CSORT.APPL-ID | 申請のみ(取消なし) | OVT-MATCHEDへ |
|
||||
| SORTED.APPL-ID = CSORT.APPL-ID | 両方あり(取消済) | 消滅(出力なし)。ただし監査のため取消情報をERROR-LOGに記録(エラー区分=03、取消申請番号+原本データ) |
|
||||
| SORTED.APPL-ID > CSORT.APPL-ID | 取消のみ(既DB登録済) | OVT-DBCLEANへ |
|
||||
|
||||
同一申請番号グループ内の出力順に **処理番号(OA-PROC-SEQ)** を1から付与する。
|
||||
|
||||
**STRING** で申請情報を編集して OVT-MATCHED に書出す。
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| STRING | 申請情報編集出力 |
|
||||
|
||||
---
|
||||
|
||||
### STEP020: ZAN05CAL(残業時間集計処理) — キーブレイク集計
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **プログラム名称** | 残業時間集計処理 |
|
||||
| **PGMパターン** | キーブレイク(集計) |
|
||||
| **SORT前処理** | OVT-MATCHED → 申請番号+処理番号昇順 |
|
||||
| **入力ファイル** | OVT-SORTED2(80B) |
|
||||
| **出力ファイル** | OVT-SUMMARY(80B) |
|
||||
| **件数変化** | Q件 → 申請番号ユニーク数(L件、L≦Q) |
|
||||
| **使用共通関数** | SUB01DAT(運用日付), SUB02MSG(メッセージ), SUB03END(ABEND), SUB05TIM(時刻丸め) |
|
||||
|
||||
**機能:**
|
||||
|
||||
#### Step1:キーブレイク制御
|
||||
|
||||
同一申請番号内に複数レコード(例:申請(0) + 承認済(1))がある場合、グループ内の**最終レコード**を集約結果として採用する。
|
||||
|
||||
```
|
||||
入力(申請番号+処理番号昇順):
|
||||
A001,EMP01,6/10,1800,2000,0 ← 申請(処理番号1)
|
||||
A001,EMP01,6/10,1800,2000,1 ← 承認済(処理番号2 → 最新)
|
||||
|
||||
集約結果: 承認済(1) を採用、申請(0) は捨てる
|
||||
```
|
||||
|
||||
- READ → 申請番号が変わるまで読み進める
|
||||
- ブレイク(申請番号切替)時に、**直前に保持していたレコード**を出力
|
||||
- グループ内の途中レコードは **CONTINUE** で読み飛ばす
|
||||
- **SET** で集約結果の有無フラグを設定
|
||||
|
||||
#### Step2:加班時間計算
|
||||
|
||||
終了時刻 - 開始時刻 を分数で計算 → **DIVIDE** で時間に変換。
|
||||
|
||||
```
|
||||
DIVIDE 分 BY 60 GIVING 時間 REMAINDER 剰余
|
||||
```
|
||||
|
||||
**SUB05TIM(mode 2:0.1h単位切捨)** を呼び出して丸め処理。加班の丸めは0.1h単位切捨が正となる。
|
||||
|
||||
**COMPUTE ROUNDED ON SIZE ERROR** で内部計算のエラー処理。
|
||||
|
||||
```
|
||||
COMPUTE WRK-OVT-HOURS ROUNDED = WRK-MINUTES / 60
|
||||
ON SIZE ERROR
|
||||
CONTINUE
|
||||
MOVE ZERO TO WRK-OVT-HOURS
|
||||
END-COMPUTE
|
||||
```
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| COMPUTE ROUNDED ON SIZE ERROR | 丸め計算+エラー処理 |
|
||||
| DIVIDE | 分→時間変換 |
|
||||
| CONTINUE | キーブレイク制御の空分岐 |
|
||||
| SET | 集計結果フラグ設定 |
|
||||
| ACCEPT FROM DATE | 処理日付取得 |
|
||||
|
||||
---
|
||||
|
||||
### STEP025: ZAN06UPD(残業統計DB更新処理) — DB更新
|
||||
|
||||
| 項目 | 内容 |
|
||||
|------|------|
|
||||
| **プログラム名称** | 残業統計DB更新処理 |
|
||||
| **PGMパターン** | DB更新 |
|
||||
| **SORT前処理** | 不要 |
|
||||
| **入力ファイル** | OVT-SUMMARY(80B)/ OVT-DBCLEAN(80B) |
|
||||
| **出力ファイル** | OVERTIME-DB(DB2)/ ERROR-LOG(VB) |
|
||||
| **使用共通関数** | SUB01DAT(運用日付), SUB02MSG(メッセージ), SUB03END(ABEND) |
|
||||
|
||||
**機能:**
|
||||
|
||||
全DB操作は埋め込みSQL(`EXEC SQL`)で直接記述する。
|
||||
|
||||
#### 処理1:OVT-SUMMARY → DB登録
|
||||
|
||||
**EXEC SQL** でDB2にINSERT/UPDATEを発行する。
|
||||
|
||||
```
|
||||
EXEC SQL
|
||||
INSERT INTO OVT-APPLICATIONS
|
||||
(APPL-ID, EMP-ID, APPL-DATE, OVT-TYPE,
|
||||
START-TIME, END-TIME, OVT-HOURS, STATUS)
|
||||
VALUES
|
||||
(:WRK-APPL-ID, :WRK-EMP-ID, :WRK-APPL-DATE,
|
||||
:WRK-OVT-TYPE, :WRK-START-TIME, :WRK-END-TIME,
|
||||
:WRK-OVT-HOURS, :WRK-STATUS)
|
||||
END-EXEC.
|
||||
|
||||
IF SQLCODE NOT = 0
|
||||
* 同一APPL-ID存在 → UPDATEに変更
|
||||
EXEC SQL
|
||||
UPDATE OVT-APPLICATIONS SET
|
||||
STATUS = :WRK-STATUS,
|
||||
UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE APPL-ID = :WRK-APPL-ID
|
||||
END-EXEC
|
||||
END-IF.
|
||||
```
|
||||
|
||||
OVT-MONTHLY のUPSERTも同様。
|
||||
|
||||
```
|
||||
EXEC SQL
|
||||
SELECT OVT-HOURS, OVT-COUNT
|
||||
INTO :DB-OVT-HOURS, :DB-OVT-COUNT
|
||||
FROM OVT-MONTHLY
|
||||
WHERE EMP-ID = :WRK-EMP-ID
|
||||
AND YEAR-MONTH = :WRK-YEAR-MONTH
|
||||
AND OVT-TYPE = :WRK-OVT-TYPE
|
||||
END-EXEC.
|
||||
|
||||
IF SQLCODE = 0
|
||||
* UPDATE(加算)
|
||||
EXEC SQL
|
||||
UPDATE OVT-MONTHLY SET
|
||||
OVT-HOURS = OVT-HOURS + :WRK-OVT-HOURS,
|
||||
OVT-COUNT = OVT-COUNT + 1,
|
||||
UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE EMP-ID = :WRK-EMP-ID
|
||||
AND YEAR-MONTH = :WRK-YEAR-MONTH
|
||||
AND OVT-TYPE = :WRK-OVT-TYPE
|
||||
END-EXEC
|
||||
ELSE
|
||||
* INSERT(新規)
|
||||
EXEC SQL
|
||||
INSERT INTO OVT-MONTHLY
|
||||
(EMP-ID, YEAR-MONTH, OVT-TYPE,
|
||||
OVT-HOURS, OVT-COUNT, UPDATED-AT)
|
||||
VALUES
|
||||
(:WRK-EMP-ID, :WRK-YEAR-MONTH, :WRK-OVT-TYPE,
|
||||
:WRK-OVT-HOURS, 1, CURRENT TIMESTAMP)
|
||||
END-EXEC
|
||||
END-IF.
|
||||
```
|
||||
|
||||
#### 処理2:OVT-DBCLEAN → DB取消
|
||||
|
||||
```
|
||||
EXEC SQL
|
||||
UPDATE OVT-APPLICATIONS SET
|
||||
STATUS = '9',
|
||||
UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE APPL-ID = :WRK-APPL-ID
|
||||
END-EXEC.
|
||||
|
||||
IF SQLCODE NOT = 0
|
||||
該当なし → ERROR-LOG に書出し
|
||||
PERFORM 9999ABDSOR
|
||||
END-IF.
|
||||
```
|
||||
|
||||
OVT-MONTHLY の減算UPDATE:
|
||||
|
||||
```
|
||||
EXEC SQL
|
||||
UPDATE OVT-MONTHLY SET
|
||||
OVT-HOURS = OVT-HOURS - :WRK-OVT-HOURS,
|
||||
OVT-COUNT = OVT-COUNT - 1,
|
||||
UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE EMP-ID = :WRK-EMP-ID
|
||||
AND YEAR-MONTH = :WRK-YEAR-MONTH
|
||||
AND OVT-TYPE = :WRK-OVT-TYPE
|
||||
END-EXEC.
|
||||
|
||||
IF SQLCODE NOT = 0
|
||||
* OVT-MONTHLYレコード不存在 → データ不整合の可能性
|
||||
該当エラー → ERROR-LOG に書出し
|
||||
PERFORM 9999ABDSOR
|
||||
END-IF.
|
||||
```
|
||||
|
||||
**注意**: OVT-MONTHLY減算UPDATEの失敗時は、OVT-MONTHLYに対応レコードが存在しないことを意味する。
|
||||
ファイルとDBの不整合としてエラーログに記録した上でABENDさせる。
|
||||
|
||||
**SQLCODE** でDB操作の成否を確認し、異常時は ERROR-LOG に出力。
|
||||
|
||||
**新規カバレッジ構文:**
|
||||
|
||||
| 構文 | 用途 |
|
||||
|------|------|
|
||||
| EXEC SQL | DB2埋め込みSQLによるDB操作 |
|
||||
| IF | SQLCODE判定による分岐 |
|
||||
| PERFORM VARYING | 月バリデーションループ(1〜12月) |
|
||||
| PERFORM TEST AFTER | OVT-MONTHLY減算リトライ制御 |
|
||||
| MULTIPLY | 時間→分変換(MULTIPLY BY 60 GIVING) |
|
||||
| SUBTRACT | 残容量検証(SUBTRACT FROM GIVING) |
|
||||
|
||||
---
|
||||
|
||||
## レコード構成
|
||||
|
||||
### OVT-VALID / OVT-CANCEL / OVT-NODUP / OVT-CHECKED(80B)
|
||||
|
||||
| # | 項目 | 名称 | 開始 | 長さ | 属性 | 備考 |
|
||||
|---|------|------|------|------|------|------|
|
||||
| 1 | 申請番号 | OA-APPL-ID | 1 | 8 | X(8) | |
|
||||
| 2 | 社員番号 | OA-EMP-ID | 9 | 8 | 9(8) | |
|
||||
| 3 | 申請日 | OA-APPL-DATE | 17 | 8 | 9(8) | YYYYMMDD |
|
||||
| 4 | 開始時刻 | OA-START-TIME | 25 | 4 | 9(4) | HHMM |
|
||||
| 5 | 終了時刻 | OA-END-TIME | 29 | 4 | 9(4) | HHMM |
|
||||
| 6 | ステータス | OA-STATUS | 33 | 1 | X(1) | 0/1/9 |
|
||||
| 7 | OVT-TYPE | OA-OVT-TYPE | 34 | 1 | X(1) | W/H(OVT-CHECKED以降のみ有効) |
|
||||
| 8 | 予備 | OA-FILLER | 35 | 46 | X(46) | |
|
||||
|
||||
### OVT-MATCHED(80B)
|
||||
|
||||
| # | 項目 | 名称 | 開始 | 長さ | 属性 | 備考 |
|
||||
|---|------|------|------|------|------|------|
|
||||
| 1 | 申請番号 | OA-APPL-ID | 1 | 8 | X(8) | |
|
||||
| 2 | 社員番号 | OA-EMP-ID | 9 | 8 | 9(8) | |
|
||||
| 3 | 申請日 | OA-APPL-DATE | 17 | 8 | 9(8) | YYYYMMDD |
|
||||
| 4 | 開始時刻 | OA-START-TIME | 25 | 4 | 9(4) | HHMM |
|
||||
| 5 | 終了時刻 | OA-END-TIME | 29 | 4 | 9(4) | HHMM |
|
||||
| 6 | ステータス | OA-STATUS | 33 | 1 | X(1) | 0/1 |
|
||||
| 7 | OVT-TYPE | OA-OVT-TYPE | 34 | 1 | X(1) | W/H |
|
||||
| 8 | 処理番号 | OA-PROC-SEQ | 35 | 2 | 9(2) | 同申請内連番 |
|
||||
| 9 | 予備 | OA-FILLER | 37 | 44 | X(44) | |
|
||||
|
||||
社員名・部署コードは DB2(OVT-APPLICATIONSテーブル)側で保持する。
|
||||
|
||||
### OVT-SUMMARY(80B)
|
||||
|
||||
| # | 項目 | 名称 | 開始 | 長さ | 属性 | 備考 |
|
||||
|---|------|------|------|------|------|------|
|
||||
| 1 | 申請番号 | OS-APPL-ID | 1 | 8 | X(8) | |
|
||||
| 2 | 社員番号 | OS-EMP-ID | 9 | 8 | 9(8) | |
|
||||
| 3 | 申請日 | OS-APPL-DATE | 17 | 8 | 9(8) | YYYYMMDD |
|
||||
| 4 | 開始時刻 | OS-START-TIME | 25 | 4 | 9(4) | HHMM |
|
||||
| 5 | 終了時刻 | OS-END-TIME | 29 | 4 | 9(4) | HHMM |
|
||||
| 6 | 加班時間 | OS-OVT-HOURS | 33 | 5 | 9(4)V9(1) | SUB05TIM丸め後 |
|
||||
| 7 | OVT-TYPE | OS-OVT-TYPE | 38 | 1 | X(1) | W/H |
|
||||
| 8 | 予備 | OS-FILLER | 39 | 42 | X(42) | |
|
||||
|
||||
### OVT-DBCLEAN(80B)
|
||||
|
||||
| # | 項目 | 名称 | 開始 | 長さ | 属性 |
|
||||
|---|------|------|------|------|------|
|
||||
| 1 | 申請番号 | OD-APPL-ID | 1 | 8 | X(8) |
|
||||
| 2 | 予備 | OD-FILLER | 9 | 72 | X(72) |
|
||||
|
||||
---
|
||||
|
||||
## 新規COBOL構文カバレッジ一覧(14種)
|
||||
|
||||
| # | 構文 | ZAN01CHK | ZAN02CHK | ZAN03CHK | ZAN04MAT | ZAN05CAL | ZAN06UPD |
|
||||
|---|------|:--------:|:--------:|:--------:|:--------:|:--------:|:--------:|
|
||||
| 1 | UNSTRING | ● | | | | | |
|
||||
| 2 | STRING | ● | | | ● | | |
|
||||
| 3 | SEARCH ALL | | | ● | | | |
|
||||
| 4 | SET | | ● | ● | | ● | |
|
||||
| 5 | COMPUTE ROUNDED ON SIZE ERROR | | | | | ● | |
|
||||
| 6 | DIVIDE | ● | | | | ● | |
|
||||
| 7 | CONTINUE | | ● | | | ● | |
|
||||
| 8 | ACCEPT FROM DATE | | | | | ● | |
|
||||
| 9 | EXEC SQL(INSERT/UPDATE/SELECT/COMMIT/ROLLBACK) | | | | | | ● |
|
||||
|10 | IF(SQLCODE分岐) | | | | | | ● |
|
||||
|11 | PERFORM VARYING | | | | | | ● |
|
||||
|12 | PERFORM TEST AFTER | | | | | | ● |
|
||||
|13 | MULTIPLY | | | | | | ● |
|
||||
|14 | SUBTRACT | | | | | | ● |
|
||||
|
||||
---
|
||||
|
||||
## 丸めルール
|
||||
|
||||
| 条件 | ルール |
|
||||
|------|--------|
|
||||
| 加班開始時刻 < DINNER-START(1830) | エラー(申請不可、食事時間のため) |
|
||||
| 加班時間 < 30分 | エラー(申請不可) |
|
||||
| 加班時間 ≧ 30分 かつ < 0.5h換算 | 0.5hに切上 |
|
||||
| 加班時間 ≧ 0.5h | 0.1h単位切捨(SUB05TIM mode 2) |
|
||||
|
||||
例:0.5h→0.5, 0.7h→0.7, 1.55h→1.5(切捨のため1.5、切上なら1.6)
|
||||
@@ -0,0 +1,594 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. KIN01INP.
|
||||
*****************************************************************
|
||||
* システム名 : 勤怠休暇管理システム *
|
||||
* プログラムID : KIN01INP *
|
||||
* プログラム名 : 休暇申請CSV取込・検証処理 *
|
||||
* 作成日 : 2026-06-17 *
|
||||
* 処理概要 : CSV形式の休暇申請ファイルを読み込み、 *
|
||||
* 休暇種別テーブル検索と項目チェックを行い、 *
|
||||
* ステータスによってWORK-LEAVEまたは *
|
||||
* ERROR-LOGへ振り分ける。 *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 26-06-17 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R01INNFIL ASSIGN TO KIN01R01.
|
||||
SELECT W01OUTFIL ASSIGN TO KIN01W01.
|
||||
SELECT W02OUTFIL ASSIGN TO KIN01W02.
|
||||
*
|
||||
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 KIN01REC 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 'KIN01INP'.
|
||||
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-STAT-1 PIC X(001) VALUE '1'.
|
||||
03 CNS-STAT-9 PIC X(001) VALUE '9'.
|
||||
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-W01OUT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-W02OUT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
*
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
*** 運用日付
|
||||
03 WRK-U06 PIC 9(008).
|
||||
*** 読込フラグ
|
||||
03 WRK-R01EOF PIC X(001).
|
||||
*** CSV分解用
|
||||
03 WRK-COMMA-CNT PIC 9(002) COMP.
|
||||
03 WRK-COMMA-DISP PIC 9(002).
|
||||
03 WRK-LT-FOUND PIC X(001).
|
||||
03 WRK-ERR-TYPE PIC X(001).
|
||||
03 WRK-CSV-APPL-ID PIC X(009).
|
||||
03 WRK-CSV-EMP-ID PIC X(008).
|
||||
03 WRK-CSV-START-DATE PIC X(008).
|
||||
03 WRK-CSV-START-TIME PIC X(004).
|
||||
03 WRK-CSV-END-DATE PIC X(008).
|
||||
03 WRK-CSV-END-TIME PIC X(004).
|
||||
03 WRK-CSV-LEAVE-TYPE PIC X(002).
|
||||
03 WRK-CSV-STATUS PIC X(001).
|
||||
*** ステータス再定義(数値+88条件)
|
||||
03 WRK-STATUS-NUM REDEFINES WRK-CSV-STATUS
|
||||
PIC 9(001).
|
||||
88 WRK-STATUS-ACTIVE VALUE 1.
|
||||
88 WRK-STATUS-CANCEL VALUE 9.
|
||||
*** 休暇種別内部テーブル(4件)
|
||||
03 WRK-LEAVE-TYPE-TABLE.
|
||||
05 WRK-LT-ENTRY OCCURS 4 TIMES
|
||||
INDEXED BY WRK-LT-IDX.
|
||||
07 WRK-LT-CODE PIC X(002).
|
||||
*** REDEFINESデモ(同一領域 複数型 来回代入)
|
||||
03 WRK-DEMO-AREA PIC 9(008).
|
||||
03 WRK-DEMO-ALPHA REDEFINES WRK-DEMO-AREA
|
||||
PIC X(008).
|
||||
03 WRK-DEMO-GRP REDEFINES WRK-DEMO-AREA.
|
||||
05 WRK-DEMO-TYPE PIC 9(004).
|
||||
05 WRK-DEMO-VALUE PIC 9(004).
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
*** 運用日付取得
|
||||
COPY ZANDATAC.
|
||||
*** メッセージ編集出力SR用
|
||||
COPY ZANMSGAC.
|
||||
*** ABEND処理SR用
|
||||
COPY ZANENDAC.
|
||||
*** 項目チェックSR用
|
||||
COPY ZANCHKAC.
|
||||
*
|
||||
PROCEDURE DIVISION.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
* 処理概要 : メインコントロール処理 *
|
||||
*****************************************************************
|
||||
0000MAJCOLSOR SECTION.
|
||||
*
|
||||
*** 初期処理
|
||||
PERFORM 1000ITTSOR.
|
||||
*
|
||||
*** メイン処理
|
||||
PERFORM 2000MAJSOR
|
||||
UNTIL WRK-R01EOF = '1'.
|
||||
*
|
||||
*** 終了処理
|
||||
PERFORM 3000STPSOR.
|
||||
*
|
||||
0000MAJCOLSOR-EXT.
|
||||
GOBACK.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.0) *
|
||||
* サブモジュール名: 初期処理 *
|
||||
* 処理概要 : 開始メッセージ出力・各種初期化処理 *
|
||||
*****************************************************************
|
||||
1000ITTSOR SECTION.
|
||||
*
|
||||
*** 開始メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGSTR TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** コンパイル日時出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGKEYINF TO M00MSGCOD.
|
||||
MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01.
|
||||
MOVE 'COMPILED' TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** ワークエリア初期化
|
||||
INITIALIZE WRKARA.
|
||||
*
|
||||
*** 休暇種別テーブル設定
|
||||
MOVE '01' TO WRK-LT-CODE(1).
|
||||
MOVE '02' TO WRK-LT-CODE(2).
|
||||
MOVE '03' TO WRK-LT-CODE(3).
|
||||
MOVE '04' TO WRK-LT-CODE(4).
|
||||
*
|
||||
*** 運用日付取得
|
||||
INITIALIZE D01UBSPAR.
|
||||
CALL 'SUB01DAT' USING D01UBSPAR.
|
||||
IF D01FKICOD = ZERO
|
||||
MOVE D01UBSUDATE TO WRK-U06
|
||||
ELSE
|
||||
INITIALIZE M00MHOPAR
|
||||
MOVE CNS-MSGSUBEEK TO M00MSGCOD
|
||||
MOVE 'SUB01DAT' TO M00UMKDATS22-01
|
||||
MOVE D01FKICOD TO M00UMKDATS22-02
|
||||
PERFORM 4000MSGOUTSOR
|
||||
PERFORM 9999ABDSOR
|
||||
END-IF.
|
||||
*
|
||||
*** 入出力ファイルOPEN
|
||||
OPEN INPUT R01INNFIL
|
||||
OUTPUT W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
*** #R01#を読み込み
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(1.1) *
|
||||
* サブモジュール名:##R01##読込処理 *
|
||||
* 処理概要 : レコード読込・EOF判定処理 *
|
||||
*****************************************************************
|
||||
1100R01INNSOR SECTION.
|
||||
*
|
||||
READ R01INNFIL
|
||||
AT END
|
||||
MOVE '1' TO WRK-R01EOF
|
||||
NOT AT END
|
||||
ADD 1 TO CUN-R01INN
|
||||
END-READ.
|
||||
*
|
||||
1100R01INNSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.0) *
|
||||
* サブモジュール名: 主処理 *
|
||||
* 処理概要 : CSV分解・休暇種別検索・ステータス振分 *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
*** CSV分解
|
||||
PERFORM 2010CSVSOR.
|
||||
*
|
||||
*** 休暇種別テーブル検索
|
||||
PERFORM 2020LEAVSERSOR.
|
||||
*
|
||||
*** エラー判定(フィールド数/休暇種別)
|
||||
IF WRK-COMMA-CNT NOT = 8
|
||||
MOVE 'F' TO WRK-ERR-TYPE
|
||||
PERFORM 2050ERRORSOR
|
||||
ELSE IF WRK-LT-FOUND NOT = '1'
|
||||
MOVE 'L' TO WRK-ERR-TYPE
|
||||
PERFORM 2050ERRORSOR
|
||||
ELSE
|
||||
*** ステータス判定(IF/ELSE連鎖)
|
||||
IF WRK-STATUS-ACTIVE
|
||||
PERFORM 2030VALIDATESOR
|
||||
ELSE IF WRK-STATUS-CANCEL
|
||||
PERFORM 2040CANCELSOR
|
||||
ELSE
|
||||
MOVE 'S' TO WRK-ERR-TYPE
|
||||
PERFORM 2050ERRORSOR
|
||||
END-IF
|
||||
END-IF.
|
||||
*
|
||||
*** 次のレコード読込
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1) *
|
||||
* サブモジュール名: CSV分解処理 *
|
||||
* 処理概要 : UNSTRINGでCSVを8項目に分解する *
|
||||
*****************************************************************
|
||||
2010CSVSOR SECTION.
|
||||
*
|
||||
MOVE ZERO TO WRK-COMMA-CNT.
|
||||
INITIALIZE WRK-CSV-APPL-ID
|
||||
WRK-CSV-EMP-ID
|
||||
WRK-CSV-START-DATE
|
||||
WRK-CSV-START-TIME
|
||||
WRK-CSV-END-DATE
|
||||
WRK-CSV-END-TIME
|
||||
WRK-CSV-LEAVE-TYPE
|
||||
WRK-CSV-STATUS.
|
||||
UNSTRING R01INNREC
|
||||
DELIMITED BY ','
|
||||
INTO WRK-CSV-APPL-ID
|
||||
WRK-CSV-EMP-ID
|
||||
WRK-CSV-START-DATE
|
||||
WRK-CSV-START-TIME
|
||||
WRK-CSV-END-DATE
|
||||
WRK-CSV-END-TIME
|
||||
WRK-CSV-LEAVE-TYPE
|
||||
WRK-CSV-STATUS
|
||||
TALLYING IN WRK-COMMA-CNT
|
||||
END-UNSTRING.
|
||||
*
|
||||
2010CSVSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.2) *
|
||||
* サブモジュール名: 休暇種別テーブル検索処理 *
|
||||
* 処理概要 : SEARCH(非ALL)で休暇種別の妥当性を検証 *
|
||||
*****************************************************************
|
||||
2020LEAVSERSOR SECTION.
|
||||
*
|
||||
MOVE '0' TO WRK-LT-FOUND.
|
||||
SET WRK-LT-IDX TO 1.
|
||||
SEARCH WRK-LT-ENTRY
|
||||
VARYING WRK-LT-IDX
|
||||
AT END
|
||||
CONTINUE
|
||||
WHEN WRK-LT-CODE(WRK-LT-IDX)
|
||||
= WRK-CSV-LEAVE-TYPE
|
||||
MOVE '1' TO WRK-LT-FOUND
|
||||
END-SEARCH.
|
||||
*
|
||||
2020LEAVSERSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.3) *
|
||||
* サブモジュール名: 有効申請処理 *
|
||||
* 処理概要 : SUB04CHKで日付/時刻チェックしW01出力 *
|
||||
*****************************************************************
|
||||
2030VALIDATESOR SECTION.
|
||||
*
|
||||
*** W01レコード初期化
|
||||
INITIALIZE W01OUTREC.
|
||||
*
|
||||
*** SUB04CHKで社員番号チェック
|
||||
INITIALIZE C01CHKPAR.
|
||||
MOVE WRK-CSV-EMP-ID TO C01CHKDAT.
|
||||
MOVE 'EMPID' TO C01CHKTYP.
|
||||
CALL 'SUB04CHK' USING C01CHKPAR.
|
||||
IF C01CHKRRC NOT = ZERO
|
||||
MOVE '01' TO W02ERR-CATEGORY
|
||||
STRING 'EMP-ID ERROR EMP='
|
||||
WRK-CSV-EMP-ID
|
||||
DELIMITED BY SIZE
|
||||
INTO W02ERR-DETAIL
|
||||
WRITE W02OUTREC
|
||||
ADD 1 TO CUN-W02OUT
|
||||
GO TO 2030VALIDATESOR-EXT
|
||||
END-IF.
|
||||
*
|
||||
*** SUB04CHKで開始日付チェック
|
||||
INITIALIZE C01CHKPAR.
|
||||
MOVE WRK-CSV-START-DATE TO C01CHKDAT.
|
||||
MOVE 'DATE' TO C01CHKTYP.
|
||||
CALL 'SUB04CHK' USING C01CHKPAR.
|
||||
IF C01CHKRRC NOT = ZERO
|
||||
MOVE '01' TO W02ERR-CATEGORY
|
||||
STRING 'START-DATE ERROR EMP='
|
||||
WRK-CSV-EMP-ID
|
||||
' DATE='
|
||||
WRK-CSV-START-DATE
|
||||
DELIMITED BY SIZE
|
||||
INTO W02ERR-DETAIL
|
||||
WRITE W02OUTREC
|
||||
ADD 1 TO CUN-W02OUT
|
||||
GO TO 2030VALIDATESOR-EXT
|
||||
END-IF.
|
||||
*
|
||||
*** SUB04CHKで開始時刻チェック
|
||||
INITIALIZE C01CHKPAR.
|
||||
MOVE WRK-CSV-START-TIME TO C01CHKDAT.
|
||||
MOVE 'TIME' TO C01CHKTYP.
|
||||
CALL 'SUB04CHK' USING C01CHKPAR.
|
||||
IF C01CHKRRC NOT = ZERO
|
||||
MOVE '01' TO W02ERR-CATEGORY
|
||||
STRING 'START-TIME ERROR EMP='
|
||||
WRK-CSV-EMP-ID
|
||||
' TIME='
|
||||
WRK-CSV-START-TIME
|
||||
DELIMITED BY SIZE
|
||||
INTO W02ERR-DETAIL
|
||||
WRITE W02OUTREC
|
||||
ADD 1 TO CUN-W02OUT
|
||||
GO TO 2030VALIDATESOR-EXT
|
||||
END-IF.
|
||||
*
|
||||
*** SUB04CHKで終了日付チェック
|
||||
INITIALIZE C01CHKPAR.
|
||||
MOVE WRK-CSV-END-DATE TO C01CHKDAT.
|
||||
MOVE 'DATE' TO C01CHKTYP.
|
||||
CALL 'SUB04CHK' USING C01CHKPAR.
|
||||
IF C01CHKRRC NOT = ZERO
|
||||
MOVE '01' TO W02ERR-CATEGORY
|
||||
STRING 'END-DATE ERROR EMP='
|
||||
WRK-CSV-EMP-ID
|
||||
' DATE='
|
||||
WRK-CSV-END-DATE
|
||||
DELIMITED BY SIZE
|
||||
INTO W02ERR-DETAIL
|
||||
WRITE W02OUTREC
|
||||
ADD 1 TO CUN-W02OUT
|
||||
GO TO 2030VALIDATESOR-EXT
|
||||
END-IF.
|
||||
*
|
||||
*** SUB04CHKで終了時刻チェック
|
||||
INITIALIZE C01CHKPAR.
|
||||
MOVE WRK-CSV-END-TIME TO C01CHKDAT.
|
||||
MOVE 'TIME' TO C01CHKTYP.
|
||||
CALL 'SUB04CHK' USING C01CHKPAR.
|
||||
IF C01CHKRRC NOT = ZERO
|
||||
MOVE '01' TO W02ERR-CATEGORY
|
||||
STRING 'END-TIME ERROR EMP='
|
||||
WRK-CSV-EMP-ID
|
||||
' TIME='
|
||||
WRK-CSV-END-TIME
|
||||
DELIMITED BY SIZE
|
||||
INTO W02ERR-DETAIL
|
||||
WRITE W02OUTREC
|
||||
ADD 1 TO CUN-W02OUT
|
||||
GO TO 2030VALIDATESOR-EXT
|
||||
END-IF.
|
||||
*
|
||||
*** 複合条件デモ(AND+OR+3段ネスト)
|
||||
IF W01START-DATE NOT = ZERO
|
||||
AND W01END-DATE NOT = ZERO
|
||||
AND W01START-TIME NOT = ZERO
|
||||
IF W01START-DATE > W01END-DATE
|
||||
OR (W01START-DATE = W01END-DATE
|
||||
AND W01START-TIME >= W01END-TIME)
|
||||
MOVE 10 TO WRK-DEMO-TYPE
|
||||
ELSE
|
||||
MOVE 20 TO WRK-DEMO-TYPE
|
||||
END-IF
|
||||
END-IF.
|
||||
*
|
||||
*** W01出力(新規/変更: APPL-ID=CSV値, STATUS='1')
|
||||
MOVE WRK-CSV-APPL-ID TO W01APPL-ID.
|
||||
MOVE WRK-CSV-EMP-ID TO W01EMP-ID.
|
||||
MOVE WRK-CSV-LEAVE-TYPE TO W01LEAVE-TYPE.
|
||||
MOVE WRK-CSV-START-DATE TO W01START-DATE.
|
||||
MOVE WRK-CSV-START-TIME TO W01START-TIME.
|
||||
MOVE WRK-CSV-END-DATE TO W01END-DATE.
|
||||
MOVE WRK-CSV-END-TIME TO W01END-TIME.
|
||||
MOVE WRK-CSV-STATUS TO W01STATUS.
|
||||
WRITE W01OUTREC.
|
||||
ADD 1 TO CUN-W01OUT.
|
||||
*
|
||||
2030VALIDATESOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.4) *
|
||||
* サブモジュール名: 取消申請処理 *
|
||||
* 処理概要 : 取消レコードをW01出力(検証は行わない) *
|
||||
*****************************************************************
|
||||
2040CANCELSOR SECTION.
|
||||
*
|
||||
*** W01レコード初期化
|
||||
INITIALIZE W01OUTREC.
|
||||
*
|
||||
*** W01出力(取消: APPL-ID=CSV値, STATUS='9')
|
||||
MOVE WRK-CSV-APPL-ID TO W01APPL-ID.
|
||||
MOVE WRK-CSV-EMP-ID TO W01EMP-ID.
|
||||
MOVE WRK-CSV-LEAVE-TYPE TO W01LEAVE-TYPE.
|
||||
MOVE WRK-CSV-START-DATE TO W01START-DATE.
|
||||
MOVE WRK-CSV-START-TIME TO W01START-TIME.
|
||||
MOVE WRK-CSV-END-DATE TO W01END-DATE.
|
||||
MOVE WRK-CSV-END-TIME TO W01END-TIME.
|
||||
MOVE WRK-CSV-STATUS TO W01STATUS.
|
||||
WRITE W01OUTREC.
|
||||
ADD 1 TO CUN-W01OUT.
|
||||
*
|
||||
2040CANCELSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.5) *
|
||||
* サブモジュール名: エラー処理 *
|
||||
* 処理概要 : エラーレコードをW02出力 *
|
||||
*****************************************************************
|
||||
2050ERRORSOR SECTION.
|
||||
*
|
||||
*** W02レコード初期化
|
||||
INITIALIZE W02OUTREC.
|
||||
MOVE '01' TO W02ERR-CATEGORY.
|
||||
*
|
||||
*** エラー種別判定
|
||||
EVALUATE WRK-ERR-TYPE
|
||||
WHEN 'F'
|
||||
MOVE 1 TO WRK-DEMO-TYPE
|
||||
MOVE WRK-COMMA-CNT TO WRK-DEMO-VALUE
|
||||
STRING 'FIELD COUNT ERROR CNT='
|
||||
WRK-DEMO-ALPHA
|
||||
DELIMITED BY SIZE
|
||||
INTO W02ERR-DETAIL
|
||||
WHEN 'L'
|
||||
MOVE 2 TO WRK-DEMO-TYPE
|
||||
MOVE 0 TO WRK-DEMO-VALUE
|
||||
STRING 'INVALID LEAVE TYPE='
|
||||
WRK-CSV-LEAVE-TYPE
|
||||
' EMP='
|
||||
WRK-CSV-EMP-ID
|
||||
' ERR='
|
||||
WRK-DEMO-ALPHA
|
||||
DELIMITED BY SIZE
|
||||
INTO W02ERR-DETAIL
|
||||
WHEN 'S'
|
||||
MOVE 3 TO WRK-DEMO-TYPE
|
||||
MOVE 0 TO WRK-DEMO-VALUE
|
||||
STRING 'INVALID STATUS='
|
||||
WRK-CSV-STATUS
|
||||
' EMP='
|
||||
WRK-CSV-EMP-ID
|
||||
' ERR='
|
||||
WRK-DEMO-ALPHA
|
||||
DELIMITED BY SIZE
|
||||
INTO W02ERR-DETAIL
|
||||
WHEN OTHER
|
||||
MOVE 9 TO WRK-DEMO-TYPE
|
||||
MOVE 0 TO WRK-DEMO-VALUE
|
||||
STRING 'UNKNOWN ERROR EMP='
|
||||
WRK-CSV-EMP-ID
|
||||
' ERR='
|
||||
WRK-DEMO-ALPHA
|
||||
DELIMITED BY SIZE
|
||||
INTO W02ERR-DETAIL
|
||||
END-EVALUATE.
|
||||
*
|
||||
WRITE W02OUTREC.
|
||||
ADD 1 TO CUN-W02OUT.
|
||||
*
|
||||
2050ERRORSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(3.0) *
|
||||
* サブモジュール名: 終了処理 *
|
||||
* 処理概要 : ファイルクローズ・件数と終了メッセージ出力 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
*** 入出力ファイルCLOSE
|
||||
CLOSE R01INNFIL
|
||||
W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
*** 入出力ファイル件数出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'KIN01R01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KIN01W01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KIN01W02' 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,439 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. KIN02UPD.
|
||||
*****************************************************************
|
||||
* システム名 : 勤怠休暇管理システム *
|
||||
* プログラムID : KIN02UPD *
|
||||
* プログラム名 : 休暇申請DB更新処理 *
|
||||
* 作成日 : 2026-06-17 *
|
||||
* 処理概要 : WORK-LEAVEの各レコードをDB2テーブル *
|
||||
* LEAVE_RECORDSに反映する。 *
|
||||
* ステータスに応じて新規登録(INSERT)、 *
|
||||
* 変更(DELETE+INSERT)、取消(DELETE)を行う。 *
|
||||
* *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 26-06-17 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R01INNFIL ASSIGN TO KIN01W01.
|
||||
SELECT W01OUTFIL ASSIGN TO KIN02W01.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* R01 (WORK-LEAVE) 80B FB *
|
||||
*****************************************************************
|
||||
FD R01INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R01INNREC.
|
||||
COPY KIN01REC REPLACING ==(A)== BY ==R01==.
|
||||
*
|
||||
*
|
||||
*****************************************************************
|
||||
* W01 (ERROR-LOG) 200B VB *
|
||||
*****************************************************************
|
||||
FD W01OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS V.
|
||||
01 W01OUTREC.
|
||||
COPY KIN05REC REPLACING ==(A)== BY ==W01==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* SQLCA *
|
||||
*****************************************************************
|
||||
EXEC SQL INCLUDE SQLCA END-EXEC.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'KIN02UPD'.
|
||||
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-ABD999 PIC 9(003) VALUE 999.
|
||||
03 CNS-KN0002 PIC 9(001) VALUE 2.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
01 CUNARA.
|
||||
03 CUN-R01INN PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-DBXINS PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-DBXDEL PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-DBXUPD 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'.
|
||||
*** SQL用ホスト変数
|
||||
03 WS-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).
|
||||
03 WS-END-DATE PIC X(008).
|
||||
03 WS-END-TIME PIC X(004).
|
||||
03 WS-STATUS PIC X(001).
|
||||
*** SQLCODE表示用
|
||||
03 WRK-SQLCODE-DISP PIC +9(009).
|
||||
*** エラーログ編集領域
|
||||
03 WRK-ERR-CATEGORY PIC 9(002).
|
||||
03 WRK-ERR-DETAIL PIC X(198).
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
*** メッセージ編集出力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.
|
||||
*
|
||||
*** DB接続
|
||||
EXEC SQL CONNECT TO 'data/kin.db' END-EXEC.
|
||||
*
|
||||
*** R01ファイルOPEN
|
||||
OPEN INPUT R01INNFIL.
|
||||
*** W01ファイルOPEN
|
||||
OPEN OUTPUT W01OUTFIL.
|
||||
*
|
||||
*** R01を初回読込
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(1.1) *
|
||||
* サブモジュール名:R01読込処理 *
|
||||
* 処理概要 : WORK-LEAVE読込 *
|
||||
*****************************************************************
|
||||
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) *
|
||||
* サブモジュール名:主処理 *
|
||||
* 処理概要 : R01(WORK-LEAVE)→DB更新処理 *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
*** レコード処理
|
||||
PERFORM 2100PROCSOR.
|
||||
*
|
||||
*** 次レコード読込
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1) *
|
||||
* サブモジュール名:レコード判定処理 *
|
||||
* 処理概要 : ステータス判定→各DB更新処理分岐 *
|
||||
*****************************************************************
|
||||
2100PROCSOR SECTION.
|
||||
*
|
||||
MOVE R01APPL-ID TO WS-APPL-ID.
|
||||
MOVE R01EMP-ID TO WS-EMP-ID.
|
||||
MOVE R01LEAVE-TYPE TO WS-LEAVE-TYPE.
|
||||
MOVE R01START-DATE TO WS-START-DATE.
|
||||
MOVE R01START-TIME TO WS-START-TIME.
|
||||
MOVE R01END-DATE TO WS-END-DATE.
|
||||
MOVE R01END-TIME TO WS-END-TIME.
|
||||
MOVE R01STATUS TO WS-STATUS.
|
||||
*
|
||||
EVALUATE TRUE
|
||||
WHEN WS-STATUS = '1'
|
||||
AND WS-APPL-ID = 0
|
||||
PERFORM 2110INSERTSOR
|
||||
WHEN WS-STATUS = '1'
|
||||
AND WS-APPL-ID > 0
|
||||
PERFORM 2120UPDATESOR
|
||||
WHEN WS-STATUS = '9'
|
||||
PERFORM 2130DELETESOR
|
||||
WHEN OTHER
|
||||
CONTINUE
|
||||
END-EVALUATE.
|
||||
*
|
||||
2100PROCSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1.1) *
|
||||
* サブモジュール名:INSERT処理(新規登録) *
|
||||
* 処理概要 : LEAVE_RECORDSに新規レコード追加 *
|
||||
*****************************************************************
|
||||
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.
|
||||
*
|
||||
IF SQLCODE NOT = 0
|
||||
PERFORM 9100DBERRSOR
|
||||
END-IF.
|
||||
*
|
||||
ADD 1 TO CUN-DBXINS.
|
||||
*
|
||||
2110INSERTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1.2) *
|
||||
* サブモジュール名:UPDATE処理(変更) *
|
||||
* 処理概要 : DELETE(旧レコード)→INSERT(新レコード) *
|
||||
*****************************************************************
|
||||
2120UPDATESOR SECTION.
|
||||
*
|
||||
EXEC SQL
|
||||
DELETE FROM LEAVE_RECORDS
|
||||
WHERE APPLICATION_ID = :WS-APPL-ID
|
||||
END-EXEC.
|
||||
*
|
||||
IF SQLCODE NOT = 0
|
||||
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.
|
||||
*
|
||||
IF SQLCODE NOT = 0
|
||||
PERFORM 9100DBERRSOR
|
||||
END-IF.
|
||||
*
|
||||
ADD 1 TO CUN-DBXUPD.
|
||||
*
|
||||
2120UPDATESOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1.3) *
|
||||
* サブモジュール名:DELETE処理(取消) *
|
||||
* 処理概要 : APPL-ID一致レコードをDELETE *
|
||||
*****************************************************************
|
||||
2130DELETESOR SECTION.
|
||||
*
|
||||
EXEC SQL
|
||||
DELETE FROM LEAVE_RECORDS
|
||||
WHERE APPLICATION_ID = :WS-APPL-ID
|
||||
END-EXEC.
|
||||
*
|
||||
IF SQLCODE NOT = 0
|
||||
PERFORM 9100DBERRSOR
|
||||
END-IF.
|
||||
*
|
||||
ADD 1 TO CUN-DBXDEL.
|
||||
*
|
||||
2130DELETESOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(3.0) *
|
||||
* サブモジュール名:終了処理 *
|
||||
* 処理概要 : COMMIT・ファイルクローズ・件数出力 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
*** COMMIT
|
||||
EXEC SQL
|
||||
COMMIT WORK
|
||||
END-EXEC.
|
||||
*
|
||||
*** 入出力ファイルCLOSE
|
||||
CLOSE R01INNFIL
|
||||
W01OUTFIL.
|
||||
*
|
||||
*** 件数メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'KIN01W01' 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.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'DEL' TO M00UMKDATS22-01.
|
||||
MOVE CUN-DBXDEL TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KIN02W01' 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エラー処理 *
|
||||
* 処理概要 : SQLエラー→ROLLBACK+メッセージ出力+ABEND *
|
||||
*****************************************************************
|
||||
9100DBERRSOR SECTION.
|
||||
*
|
||||
*** ROLLBACK
|
||||
EXEC SQL
|
||||
ROLLBACK WORK
|
||||
END-EXEC.
|
||||
*
|
||||
*** エラーログ出力
|
||||
INITIALIZE W01OUTREC.
|
||||
MOVE '01' TO W01ERR-CATEGORY.
|
||||
MOVE SQLCODE TO WRK-SQLCODE-DISP.
|
||||
STRING 'KIN02UPD SQLCODE='
|
||||
WRK-SQLCODE-DISP DELIMITED BY SIZE
|
||||
' APPL-ID='
|
||||
WS-APPL-ID DELIMITED BY SIZE
|
||||
INTO W01ERR-DETAIL
|
||||
END-STRING.
|
||||
WRITE W01OUTREC.
|
||||
ADD 1 TO CUN-W01OUT.
|
||||
*
|
||||
*** エラーメッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGSUBEEK TO M00MSGCOD.
|
||||
MOVE 'KIN02UPD SQL ERROR' TO M00UMKDATS22-01.
|
||||
MOVE WRK-SQLCODE-DISP TO M00UMKDATS22-02.
|
||||
MOVE WS-APPL-ID TO M00UMKDATS22-03.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
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,511 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. KIN03EXP.
|
||||
*****************************************************************
|
||||
* システム名 : 勤怠休暇管理システム *
|
||||
* プログラムID : KIN03EXP *
|
||||
* プログラム名 : 休暇日別展開処理 *
|
||||
* 作成日 : 2026-06-17 *
|
||||
* 処理概要 : LEAVE_RECORDS(DB2)より有効申請を読込み、 *
|
||||
* 開始日〜終了日の期間を日別に展開し、 *
|
||||
* 休日・週末を除外してLEAVE-DAILY-fileを出力 *
|
||||
* する。社員番号キーブレイクで小計出力を行う。*
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 26-06-17 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT W01OUTFIL ASSIGN TO "KIN02W01.DAT".
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* W01 (LEAVE-DAILY) 80B FB *
|
||||
*****************************************************************
|
||||
FD W01OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 W01OUTREC.
|
||||
COPY KIN02REC REPLACING ==(A)== BY ==W01==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* SQLCA *
|
||||
*****************************************************************
|
||||
EXEC SQL INCLUDE SQLCA END-EXEC.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'KIN03EXP'.
|
||||
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-W01OUT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
*
|
||||
*****************************************************************
|
||||
* DBホスト変数(DISPLAY形式:bridgeテキストI/F対応) *
|
||||
*****************************************************************
|
||||
01 SQL-HOST-VARS.
|
||||
03 SQL-APPL-ID PIC X(009).
|
||||
03 SQL-EMP-ID PIC X(008).
|
||||
03 SQL-LEAVE-TYPE PIC X(002).
|
||||
03 SQL-START-DATE PIC X(008).
|
||||
03 SQL-START-TIME PIC X(004).
|
||||
03 SQL-END-DATE PIC X(008).
|
||||
03 SQL-END-TIME PIC X(004).
|
||||
03 SQL-HD-DATE PIC X(008).
|
||||
*
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
*** EOF判定
|
||||
03 WRK-R01EOF PIC X(001).
|
||||
88 WRK-R01-EOF VALUE '1'.
|
||||
*** キーブレイク用
|
||||
03 WRK-BFR-EMP-ID PIC X(008).
|
||||
*** 社員別小計カウンタ
|
||||
03 CUN-EMP-SUB PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
*** 日付展開用
|
||||
03 WRK-DATE-CURRENT PIC 9(008).
|
||||
03 WRK-DATE-ALPHA REDEFINES WRK-DATE-CURRENT
|
||||
PIC X(008).
|
||||
03 WRK-DATE-NUM REDEFINES WRK-DATE-CURRENT.
|
||||
05 WRK-DATE-YEAR PIC 9(004).
|
||||
05 WRK-DATE-MONTH PIC 9(002).
|
||||
05 WRK-DATE-DAY PIC 9(002).
|
||||
03 WRK-DATE-END PIC 9(008).
|
||||
*** 曜日判定用
|
||||
03 WRK-DAY-OF-WEEK PIC 9(001).
|
||||
*** 休日テーブル件数(ODO前に定義)
|
||||
03 WRK-HD-COUNT PIC 9(004) COMP
|
||||
VALUE ZERO.
|
||||
*** 休日テーブル存在フラグ
|
||||
03 WRK-HD-FOUND PIC X(001).
|
||||
*** 休日テーブル(ODOは末尾に配置)
|
||||
03 WRK-HOLIDAY-TABLE.
|
||||
05 WRK-HD-ENTRY OCCURS 1 TO 366 TIMES
|
||||
DEPENDING ON WRK-HD-COUNT
|
||||
ASCENDING KEY IS WRK-HD-DATE
|
||||
INDEXED BY WRK-HD-IDX.
|
||||
07 WRK-HD-DATE PIC 9(008).
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
*** 運用日付取得
|
||||
COPY ZANDATAC.
|
||||
*** メッセージ編集出力SR用
|
||||
COPY ZANMSGAC.
|
||||
*** ABEND処理SR用
|
||||
COPY ZANENDAC.
|
||||
*
|
||||
PROCEDURE DIVISION.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
* 処理概要 : メインコントロール処理 *
|
||||
*****************************************************************
|
||||
0000MAJCOLSOR SECTION.
|
||||
*
|
||||
*** 初期処理
|
||||
PERFORM 1000ITTSOR.
|
||||
*
|
||||
*** メイン処理
|
||||
PERFORM 2000MAJSOR
|
||||
UNTIL WRK-R01EOF = '1'.
|
||||
*
|
||||
*** 終了処理
|
||||
PERFORM 3000STPSOR.
|
||||
*
|
||||
0000MAJCOLSOR-EXT.
|
||||
GOBACK.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.0) *
|
||||
* サブモジュール名: 初期処理 *
|
||||
* 処理概要 : 開始メッセージ出力・各種初期化処理 *
|
||||
*****************************************************************
|
||||
1000ITTSOR SECTION.
|
||||
*
|
||||
*** 開始メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGSTR TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** コンパイル日時出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGKEYINF TO M00MSGCOD.
|
||||
MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01.
|
||||
MOVE 'COMPILED' TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** ワークエリア初期化
|
||||
INITIALIZE WRKARA.
|
||||
*
|
||||
*** DB接続
|
||||
EXEC SQL CONNECT TO 'data/kin.db' END-EXEC.
|
||||
*
|
||||
*** 運用日付取得
|
||||
INITIALIZE D01UBSPAR.
|
||||
CALL 'SUB01DAT' USING D01UBSPAR.
|
||||
IF D01FKICOD = ZERO
|
||||
MOVE D01UBSUDATE TO WRK-DATE-CURRENT
|
||||
ELSE
|
||||
INITIALIZE M00MHOPAR
|
||||
MOVE CNS-MSGSUBEEK TO M00MSGCOD
|
||||
MOVE 'SUB01DAT' TO M00UMKDATS22-01
|
||||
MOVE D01FKICOD TO M00UMKDATS22-02
|
||||
PERFORM 4000MSGOUTSOR
|
||||
PERFORM 9999ABDSOR
|
||||
END-IF.
|
||||
*
|
||||
*** 休日カレンダーテーブル読込
|
||||
PERFORM 1200HDINNSOR.
|
||||
*
|
||||
*** 出力ファイルOPEN
|
||||
OPEN OUTPUT W01OUTFIL.
|
||||
*
|
||||
*** C1カーソル初回FETCH(SELECT INTO)
|
||||
PERFORM 1100C1INITSOR.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(1.1) *
|
||||
* サブモジュール名:C1初回FETCH処理 *
|
||||
* 処理概要 : LEAVE_RECORDSをSELECT INTO(初回のみ) *
|
||||
*****************************************************************
|
||||
1100C1INITSOR SECTION.
|
||||
*
|
||||
MOVE SPACES TO SQL-APPL-ID.
|
||||
EXEC SQL
|
||||
SELECT APPLICATION_ID, EMP_ID, LEAVE_TYPE,
|
||||
START_DATE, START_TIME,
|
||||
END_DATE, END_TIME
|
||||
FROM LEAVE_RECORDS
|
||||
WHERE STATUS = '1'
|
||||
ORDER BY EMP_ID, START_DATE
|
||||
INTO :SQL-APPL-ID, :SQL-EMP-ID, :SQL-LEAVE-TYPE,
|
||||
:SQL-START-DATE, :SQL-START-TIME,
|
||||
:SQL-END-DATE, :SQL-END-TIME
|
||||
END-EXEC.
|
||||
*
|
||||
IF SQLCODE = 0
|
||||
ADD 1 TO CUN-R01INN
|
||||
ELSE
|
||||
MOVE '1' TO WRK-R01EOF
|
||||
END-IF.
|
||||
*
|
||||
1100C1INITSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(1.2) *
|
||||
* サブモジュール名:C1次回FETCH処理 *
|
||||
* 処理概要 : br_fetch_nextで次行を読込(2回目以降) *
|
||||
*****************************************************************
|
||||
1100C1FETCHSOR SECTION.
|
||||
*
|
||||
CALL 'br_fetch_next' USING SQLCODE.
|
||||
*
|
||||
IF SQLCODE = 0
|
||||
MOVE SPACES TO SQL-APPL-ID
|
||||
MOVE 0 TO WS-COL-IDX
|
||||
MOVE 256 TO WS-COL-LEN
|
||||
CALL 'br_get_col' USING
|
||||
WS-COL-IDX, SQL-APPL-ID, WS-COL-LEN
|
||||
MOVE 1 TO WS-COL-IDX
|
||||
MOVE 256 TO WS-COL-LEN
|
||||
CALL 'br_get_col' USING
|
||||
WS-COL-IDX, SQL-EMP-ID, WS-COL-LEN
|
||||
MOVE 2 TO WS-COL-IDX
|
||||
MOVE 256 TO WS-COL-LEN
|
||||
CALL 'br_get_col' USING
|
||||
WS-COL-IDX, SQL-LEAVE-TYPE, WS-COL-LEN
|
||||
MOVE 3 TO WS-COL-IDX
|
||||
MOVE 256 TO WS-COL-LEN
|
||||
CALL 'br_get_col' USING
|
||||
WS-COL-IDX, SQL-START-DATE, WS-COL-LEN
|
||||
MOVE 4 TO WS-COL-IDX
|
||||
MOVE 256 TO WS-COL-LEN
|
||||
CALL 'br_get_col' USING
|
||||
WS-COL-IDX, SQL-START-TIME, WS-COL-LEN
|
||||
MOVE 5 TO WS-COL-IDX
|
||||
MOVE 256 TO WS-COL-LEN
|
||||
CALL 'br_get_col' USING
|
||||
WS-COL-IDX, SQL-END-DATE, WS-COL-LEN
|
||||
MOVE 6 TO WS-COL-IDX
|
||||
MOVE 256 TO WS-COL-LEN
|
||||
CALL 'br_get_col' USING
|
||||
WS-COL-IDX, SQL-END-TIME, WS-COL-LEN
|
||||
ADD 1 TO CUN-R01INN
|
||||
ELSE
|
||||
MOVE '1' TO WRK-R01EOF
|
||||
END-IF.
|
||||
*
|
||||
1100C1FETCHSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(1.3) *
|
||||
* サブモジュール名: 休日カレンダー読込処理 *
|
||||
* 処理概要 : HOLIDAY_CALENDARをWORKING-STORAGEに格納 *
|
||||
*****************************************************************
|
||||
1200HDINNSOR SECTION.
|
||||
*
|
||||
*** C2初回FETCH(SELECT INTO)
|
||||
EXEC SQL
|
||||
SELECT HOLIDAY_DATE
|
||||
FROM HOLIDAY_CALENDAR
|
||||
ORDER BY HOLIDAY_DATE
|
||||
INTO :SQL-HD-DATE
|
||||
END-EXEC.
|
||||
*
|
||||
*** 休日テーブルに全件読込
|
||||
PERFORM UNTIL SQLCODE NOT = 0
|
||||
ADD 1 TO WRK-HD-COUNT
|
||||
MOVE SQL-HD-DATE TO WRK-HD-DATE(WRK-HD-COUNT)
|
||||
CALL 'br_fetch_next' USING SQLCODE
|
||||
IF SQLCODE = 0
|
||||
MOVE 0 TO WS-COL-IDX
|
||||
MOVE 256 TO WS-COL-LEN
|
||||
CALL 'br_get_col' USING
|
||||
WS-COL-IDX, SQL-HD-DATE, WS-COL-LEN
|
||||
END-IF
|
||||
END-PERFORM.
|
||||
*
|
||||
1200HDINNSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.0) *
|
||||
* サブモジュール名: 主処理 *
|
||||
* 処理概要 : キーブレイク(社員番号)毎の処理を行う *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
*** 社員番号キー保存
|
||||
MOVE SQL-EMP-ID TO WRK-BFR-EMP-ID.
|
||||
*
|
||||
*** 1社員分処理(キーブレイク範囲)
|
||||
PERFORM 2100-PROCESS-EMP
|
||||
THRU 2100-PROCESS-EMP-EXIT.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.1) *
|
||||
* サブモジュール名: 社員別処理 *
|
||||
* 処理概要 : 1社員の全申請を処理(PERFORM THRU対象) *
|
||||
*****************************************************************
|
||||
2100-PROCESS-EMP SECTION.
|
||||
*
|
||||
MOVE ZERO TO CUN-EMP-SUB.
|
||||
*
|
||||
PERFORM UNTIL WRK-R01EOF = '1'
|
||||
OR SQL-EMP-ID NOT = WRK-BFR-EMP-ID
|
||||
PERFORM 2200-EXPAND-DATE
|
||||
THRU 2200-EXPAND-DATE-EXIT
|
||||
PERFORM 1100C1FETCHSOR
|
||||
END-PERFORM.
|
||||
*
|
||||
*** 社員別小計出力(キーブレイク)
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGKEYINF TO M00MSGCOD.
|
||||
MOVE WRK-BFR-EMP-ID TO M00UMKDATS22-01.
|
||||
MOVE CUN-EMP-SUB TO M00UMKDATS22-02.
|
||||
MOVE 'EMP SUB' TO M00UMKDATS22-03.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
2100-PROCESS-EMP-EXIT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.2) *
|
||||
* サブモジュール名: 日付展開処理 *
|
||||
* 処理概要 : 開始日〜終了日をループ(PERFORM THRU対象) *
|
||||
* 休日/週末を除外してLEAVE-DAILYを出力 *
|
||||
*****************************************************************
|
||||
2200-EXPAND-DATE SECTION.
|
||||
*
|
||||
MOVE SQL-START-DATE TO WRK-DATE-CURRENT.
|
||||
MOVE SQL-END-DATE TO WRK-DATE-END.
|
||||
*
|
||||
PERFORM UNTIL WRK-DATE-CURRENT > WRK-DATE-END
|
||||
COMPUTE WRK-DAY-OF-WEEK =
|
||||
FUNCTION MOD(
|
||||
FUNCTION INTEGER-OF-DATE(WRK-DATE-CURRENT), 7)
|
||||
IF WRK-DAY-OF-WEEK = 0
|
||||
OR WRK-DAY-OF-WEEK = 6
|
||||
IF WRK-HD-COUNT > 0
|
||||
AND WRK-DATE-CURRENT NOT = ZERO
|
||||
CONTINUE
|
||||
ELSE
|
||||
CONTINUE
|
||||
END-IF
|
||||
ELSE
|
||||
*** 休日テーブル検索
|
||||
MOVE '0' TO WRK-HD-FOUND
|
||||
IF WRK-HD-COUNT > 0
|
||||
SET WRK-HD-IDX TO 1
|
||||
SEARCH ALL WRK-HD-ENTRY
|
||||
AT END
|
||||
CONTINUE
|
||||
WHEN WRK-HD-DATE(WRK-HD-IDX)
|
||||
= WRK-DATE-CURRENT
|
||||
MOVE '1' TO WRK-HD-FOUND
|
||||
END-SEARCH
|
||||
END-IF
|
||||
IF WRK-HD-FOUND = '0'
|
||||
INITIALIZE W01OUTREC
|
||||
MOVE FUNCTION NUMVAL(SQL-APPL-ID)
|
||||
TO W01APPL-ID
|
||||
MOVE WRK-BFR-EMP-ID TO W01EMP-ID
|
||||
MOVE SQL-LEAVE-TYPE TO W01LEAVE-TYPE
|
||||
MOVE SQL-START-TIME TO W01START-TIME
|
||||
MOVE SQL-END-TIME TO W01END-TIME
|
||||
MOVE WRK-DATE-ALPHA
|
||||
TO W01DATE
|
||||
WRITE W01OUTREC
|
||||
ADD 1 TO CUN-W01OUT
|
||||
ADD 1 TO CUN-EMP-SUB
|
||||
END-IF
|
||||
END-IF
|
||||
*** 日付加算
|
||||
PERFORM 2300-DATE-ADD-1
|
||||
END-PERFORM.
|
||||
*
|
||||
2200-EXPAND-DATE-EXIT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.3) *
|
||||
* サブモジュール名: 日付加算処理 *
|
||||
* 処理概要 : 日付を1日進める(月/年跨ぎ対応) *
|
||||
*****************************************************************
|
||||
2300-DATE-ADD-1 SECTION.
|
||||
*
|
||||
ADD 1 TO WRK-DATE-DAY.
|
||||
*
|
||||
EVALUATE WRK-DATE-MONTH
|
||||
WHEN 1 WHEN 3 WHEN 5 WHEN 7
|
||||
WHEN 8 WHEN 10 WHEN 12
|
||||
IF WRK-DATE-DAY > 31
|
||||
MOVE 1 TO WRK-DATE-DAY
|
||||
ADD 1 TO WRK-DATE-MONTH
|
||||
IF WRK-DATE-MONTH > 12
|
||||
MOVE 1 TO WRK-DATE-MONTH
|
||||
ADD 1 TO WRK-DATE-YEAR
|
||||
END-IF
|
||||
END-IF
|
||||
WHEN 4 WHEN 6 WHEN 9 WHEN 11
|
||||
IF WRK-DATE-DAY > 30
|
||||
MOVE 1 TO WRK-DATE-DAY
|
||||
ADD 1 TO WRK-DATE-MONTH
|
||||
END-IF
|
||||
WHEN 2
|
||||
IF (FUNCTION MOD(WRK-DATE-YEAR, 400) = 0)
|
||||
OR (FUNCTION MOD(WRK-DATE-YEAR, 4) = 0
|
||||
AND FUNCTION MOD(WRK-DATE-YEAR, 100)
|
||||
NOT = 0)
|
||||
IF WRK-DATE-DAY > 29
|
||||
MOVE 1 TO WRK-DATE-DAY
|
||||
ADD 1 TO WRK-DATE-MONTH
|
||||
END-IF
|
||||
ELSE
|
||||
IF WRK-DATE-DAY > 28
|
||||
MOVE 1 TO WRK-DATE-DAY
|
||||
ADD 1 TO WRK-DATE-MONTH
|
||||
END-IF
|
||||
END-IF
|
||||
END-EVALUATE.
|
||||
*
|
||||
2300-DATE-ADD-1-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (3.0) *
|
||||
* サブモジュール名: 終了処理 *
|
||||
* 処理概要 : ファイルクローズ・件数出力 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
*** 出力ファイルCLOSE
|
||||
CLOSE W01OUTFIL.
|
||||
*
|
||||
*** 入力件数出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'LEAVE_RECORDS' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 出力件数出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'KIN02W01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 休日テーブル件数出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGKEYINF TO M00MSGCOD.
|
||||
MOVE 'HOLIDAYS LOADED' TO M00UMKDATS22-01.
|
||||
MOVE WRK-HD-COUNT 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,499 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. ZAN01CHK.
|
||||
*****************************************************************
|
||||
* システム名 : 残業統計管理システム *
|
||||
* プログラムID : ZAN01CHK *
|
||||
* プログラム名 : 残業申請振分処理 *
|
||||
* 作成日 : 2026-06-14 *
|
||||
* 処理概要 : CSV形式の残業申請ファイルを読み込み、 *
|
||||
* ステータスによって適切に振り分ける。 *
|
||||
* *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 26-06-14 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R01INNFIL ASSIGN TO ZAN01R01.
|
||||
SELECT W01OUTFIL ASSIGN TO ZAN01W01.
|
||||
SELECT W02OUTFIL ASSIGN TO ZAN01W02.
|
||||
SELECT W03OUTFIL ASSIGN TO ZAN01W03.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* ##R01## *
|
||||
*****************************************************************
|
||||
FD R01INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R01INNREC.
|
||||
03 R01LINE PIC X(80).
|
||||
*
|
||||
*****************************************************************
|
||||
* ##W01## *
|
||||
*****************************************************************
|
||||
FD W01OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 W01OUTREC.
|
||||
COPY ZAN01REC REPLACING ==(A)== BY ==W01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* ##W02## *
|
||||
*****************************************************************
|
||||
FD W02OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 W02OUTREC.
|
||||
COPY ZAN01REC REPLACING ==(A)== BY ==W02==.
|
||||
*
|
||||
*****************************************************************
|
||||
* ##W03## *
|
||||
*****************************************************************
|
||||
FD W03OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS V.
|
||||
01 W03OUTREC.
|
||||
COPY ZAN05REC REPLACING ==(A)== BY ==W03==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'ZAN01CHK'.
|
||||
03 CNS-MSGSTR PIC 9(003) VALUE 001.
|
||||
03 CNS-MSGFIN PIC 9(003) VALUE 002.
|
||||
03 CNS-MSGSUBEEK PIC 9(003) VALUE 005.
|
||||
03 CNS-MSGIINKES PIC 9(003) VALUE 006.
|
||||
03 CNS-MSGOUTKES PIC 9(003) VALUE 007.
|
||||
03 CNS-MSGKEYINF PIC 9(003) VALUE 033.
|
||||
03 CNS-KN0002 PIC 9(001) VALUE 2.
|
||||
03 CNS-ABD999 PIC 9(003) VALUE 999.
|
||||
01 CNS-STAT-0 PIC X(001) VALUE '0'.
|
||||
01 CNS-STAT-1 PIC X(001) VALUE '1'.
|
||||
01 CNS-STAT-9 PIC X(001) VALUE '9'.
|
||||
01 CNS-TIME-1830 PIC 9(004) VALUE 1830.
|
||||
01 CNS-DIFF-30 PIC 9(004) VALUE 30.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
01 CUNARA.
|
||||
03 CUN-R01INN PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-W01OUT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-W02OUT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-W03OUT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
*
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
*** 運用日付
|
||||
03 WRK-U06 PIC 9(008).
|
||||
*** 読込フラグ
|
||||
03 WRK-R01EOF PIC X(001).
|
||||
*** CSV分解用
|
||||
03 WRK-COMMA-CNT PIC 9(002) COMP.
|
||||
03 WRK-CSV-APPL-ID PIC X(008).
|
||||
03 WRK-CSV-EMP-ID PIC X(008).
|
||||
03 WRK-CSV-APPL-DATE PIC X(008).
|
||||
03 WRK-CSV-START-TIME PIC X(004).
|
||||
03 WRK-CSV-END-TIME PIC X(004).
|
||||
03 WRK-CSV-STATUS PIC X(001).
|
||||
03 WRK-CSV-OVT-TYPE PIC X(001).
|
||||
03 WRK-CSV-FILLER PIC X(046).
|
||||
*** 時間計算用
|
||||
03 WRK-START-NUM PIC 9(004).
|
||||
03 WRK-END-NUM PIC 9(004).
|
||||
03 WRK-DIFF-HH PIC 9(002).
|
||||
03 WRK-DIFF-MM PIC 9(002).
|
||||
03 WRK-DIFF-MIN PIC 9(004).
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
*** 運用日付取得
|
||||
COPY ZANDATAC.
|
||||
*** メッセージ編集出力SR用
|
||||
COPY ZANMSGAC.
|
||||
*** ABEND処理SR用
|
||||
COPY ZANENDAC.
|
||||
*** 項目チェックSR用
|
||||
COPY ZANCHKAC.
|
||||
*
|
||||
PROCEDURE DIVISION.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
* 処理概要 : メインコントロール処理 *
|
||||
*****************************************************************
|
||||
0000MAJCOLSOR SECTION.
|
||||
*
|
||||
*** 初期処理
|
||||
PERFORM 1000ITTSOR.
|
||||
*
|
||||
*** メイン処理
|
||||
PERFORM 2000MAJSOR
|
||||
UNTIL WRK-R01EOF = '1'.
|
||||
*
|
||||
*** 終了処理
|
||||
PERFORM 3000STPSOR.
|
||||
*
|
||||
0000MAJCOLSOR-EXT.
|
||||
GOBACK.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.0) *
|
||||
* サブモジュール名: 初期処理 *
|
||||
* 処理概要 : 開始メッセージ出力・各種初期化処理 *
|
||||
*****************************************************************
|
||||
1000ITTSOR SECTION.
|
||||
*
|
||||
*** 開始メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGSTR TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** コンパイル日時出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGKEYINF TO M00MSGCOD.
|
||||
MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01.
|
||||
MOVE 'COMPILED' TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** ワークエリア初期化
|
||||
INITIALIZE WRKARA.
|
||||
*
|
||||
*** 運用日付取得
|
||||
INITIALIZE D01UBSPAR.
|
||||
CALL 'SUB01DAT' USING D01UBSPAR.
|
||||
IF D01FKICOD = ZERO
|
||||
MOVE D01UBSUDATE TO WRK-U06
|
||||
ELSE
|
||||
INITIALIZE M00MHOPAR
|
||||
MOVE CNS-MSGSUBEEK TO M00MSGCOD
|
||||
MOVE 'SUB01DAT' TO M00UMKDATS22-01
|
||||
MOVE D01FKICOD TO M00UMKDATS22-02
|
||||
PERFORM 4000MSGOUTSOR
|
||||
PERFORM 9999ABDSOR
|
||||
END-IF.
|
||||
*
|
||||
*** 入出力ファイルOPEN
|
||||
OPEN INPUT R01INNFIL
|
||||
OUTPUT W01OUTFIL
|
||||
W02OUTFIL
|
||||
W03OUTFIL.
|
||||
*
|
||||
*** #R01#を読み込み
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(1.1) *
|
||||
* サブモジュール名:##R01##読込処理 *
|
||||
* 処理概要 : レコード読込・EOF判定処理 *
|
||||
*****************************************************************
|
||||
1100R01INNSOR SECTION.
|
||||
*
|
||||
READ R01INNFIL
|
||||
AT END
|
||||
MOVE '1' TO WRK-R01EOF
|
||||
NOT AT END
|
||||
ADD 1 TO CUN-R01INN
|
||||
END-READ.
|
||||
*
|
||||
1100R01INNSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.0) *
|
||||
* サブモジュール名: 主処理 *
|
||||
* 処理概要 : CSV分解・ステータス判定・振り分け処理 *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
*** CSV分解
|
||||
PERFORM 2010CSVSOR.
|
||||
*
|
||||
*** ステータス判定
|
||||
EVALUATE TRUE
|
||||
WHEN WRK-CSV-STATUS = CNS-STAT-0
|
||||
OR WRK-CSV-STATUS = CNS-STAT-1
|
||||
*** 有効申請処理
|
||||
PERFORM 2020VALIDATESOR
|
||||
WHEN WRK-CSV-STATUS = CNS-STAT-9
|
||||
*** 取消申請処理
|
||||
PERFORM 2030CANCELSOR
|
||||
WHEN OTHER
|
||||
*** エラー処理
|
||||
PERFORM 2040ERRORSOR
|
||||
END-EVALUATE.
|
||||
*
|
||||
*** 次のレコード読込
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1) *
|
||||
* サブモジュール名: CSV分解処理 *
|
||||
* 処理概要 : UNSTRINGでCSVを分解する *
|
||||
*****************************************************************
|
||||
2010CSVSOR SECTION.
|
||||
*
|
||||
INITIALIZE WRK-CSV-APPL-ID
|
||||
WRK-CSV-EMP-ID
|
||||
WRK-CSV-APPL-DATE
|
||||
WRK-CSV-START-TIME
|
||||
WRK-CSV-END-TIME
|
||||
WRK-CSV-STATUS
|
||||
WRK-CSV-OVT-TYPE
|
||||
WRK-CSV-FILLER.
|
||||
UNSTRING R01INNREC
|
||||
DELIMITED BY ','
|
||||
INTO WRK-CSV-APPL-ID
|
||||
WRK-CSV-EMP-ID
|
||||
WRK-CSV-APPL-DATE
|
||||
WRK-CSV-START-TIME
|
||||
WRK-CSV-END-TIME
|
||||
WRK-CSV-STATUS
|
||||
WRK-CSV-OVT-TYPE
|
||||
WRK-CSV-FILLER
|
||||
TALLYING IN WRK-COMMA-CNT
|
||||
END-UNSTRING.
|
||||
*
|
||||
2010CSVSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.2) *
|
||||
* サブモジュール名: 有効申請処理 *
|
||||
* 処理概要 : 項目チェックしW01出力またはW03出力 *
|
||||
*****************************************************************
|
||||
2020VALIDATESOR SECTION.
|
||||
*
|
||||
*** W01/W03レコード初期化
|
||||
INITIALIZE W01OUTREC
|
||||
W03OUTREC.
|
||||
*
|
||||
*** SUB04CHKで社員番号チェック
|
||||
INITIALIZE C01CHKPAR.
|
||||
MOVE WRK-CSV-EMP-ID TO C01CHKDAT.
|
||||
MOVE 'EMPID' TO C01CHKTYP.
|
||||
CALL 'SUB04CHK' USING C01CHKPAR.
|
||||
IF C01CHKRRC NOT = ZERO
|
||||
MOVE '01' TO W03ERR-CATEGORY
|
||||
STRING 'EMP-ID ERROR:'
|
||||
WRK-CSV-EMP-ID
|
||||
DELIMITED BY SIZE
|
||||
INTO W03ERR-DETAIL
|
||||
WRITE W03OUTREC
|
||||
ADD 1 TO CUN-W03OUT
|
||||
GO TO 2020VALIDATESOR-EXT
|
||||
END-IF.
|
||||
*
|
||||
*** SUB04CHKで日付チェック
|
||||
INITIALIZE C01CHKPAR.
|
||||
MOVE WRK-CSV-APPL-DATE TO C01CHKDAT.
|
||||
MOVE 'DATE' TO C01CHKTYP.
|
||||
CALL 'SUB04CHK' USING C01CHKPAR.
|
||||
IF C01CHKRRC NOT = ZERO
|
||||
MOVE '01' TO W03ERR-CATEGORY
|
||||
STRING 'DATE ERROR:'
|
||||
WRK-CSV-EMP-ID
|
||||
DELIMITED BY SIZE
|
||||
INTO W03ERR-DETAIL
|
||||
WRITE W03OUTREC
|
||||
ADD 1 TO CUN-W03OUT
|
||||
GO TO 2020VALIDATESOR-EXT
|
||||
END-IF.
|
||||
*
|
||||
*** 開始時刻チェック(1830以降)
|
||||
MOVE WRK-CSV-START-TIME TO WRK-START-NUM.
|
||||
IF WRK-START-NUM < CNS-TIME-1830
|
||||
MOVE '01' TO W03ERR-CATEGORY
|
||||
STRING 'START TIME < 1830'
|
||||
DELIMITED BY SIZE
|
||||
INTO W03ERR-DETAIL
|
||||
WRITE W03OUTREC
|
||||
ADD 1 TO CUN-W03OUT
|
||||
GO TO 2020VALIDATESOR-EXT
|
||||
END-IF.
|
||||
*
|
||||
*** 開始時刻 < 終了時刻チェック
|
||||
MOVE WRK-CSV-END-TIME TO WRK-END-NUM.
|
||||
IF WRK-START-NUM >= WRK-END-NUM
|
||||
MOVE '01' TO W03ERR-CATEGORY
|
||||
STRING 'START >= END'
|
||||
DELIMITED BY SIZE
|
||||
INTO W03ERR-DETAIL
|
||||
WRITE W03OUTREC
|
||||
ADD 1 TO CUN-W03OUT
|
||||
GO TO 2020VALIDATESOR-EXT
|
||||
END-IF.
|
||||
*
|
||||
*** 時間差30分以上チェック
|
||||
DIVIDE WRK-START-NUM BY 100
|
||||
GIVING WRK-DIFF-HH
|
||||
REMAINDER WRK-DIFF-MM.
|
||||
COMPUTE WRK-DIFF-MIN =
|
||||
WRK-DIFF-MM.
|
||||
DIVIDE WRK-END-NUM BY 100
|
||||
GIVING WRK-START-NUM
|
||||
REMAINDER WRK-END-NUM.
|
||||
COMPUTE WRK-DIFF-MIN =
|
||||
(WRK-START-NUM - WRK-DIFF-HH) * 60
|
||||
+ (WRK-END-NUM - WRK-DIFF-MM).
|
||||
IF WRK-DIFF-MIN < CNS-DIFF-30
|
||||
MOVE '01' TO W03ERR-CATEGORY
|
||||
STRING 'DIFF < 30MIN'
|
||||
DELIMITED BY SIZE
|
||||
INTO W03ERR-DETAIL
|
||||
WRITE W03OUTREC
|
||||
ADD 1 TO CUN-W03OUT
|
||||
GO TO 2020VALIDATESOR-EXT
|
||||
END-IF.
|
||||
*
|
||||
*** W01出力
|
||||
MOVE WRK-CSV-APPL-ID TO W01APPL-ID.
|
||||
MOVE WRK-CSV-EMP-ID TO W01EMP-ID.
|
||||
MOVE WRK-CSV-APPL-DATE TO W01APPL-DATE.
|
||||
MOVE WRK-CSV-START-TIME TO W01START-TIME.
|
||||
MOVE WRK-CSV-END-TIME TO W01END-TIME.
|
||||
MOVE WRK-CSV-STATUS TO W01STATUS.
|
||||
MOVE WRK-CSV-OVT-TYPE TO W01OVT-TYPE.
|
||||
WRITE W01OUTREC.
|
||||
ADD 1 TO CUN-W01OUT.
|
||||
*
|
||||
2020VALIDATESOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.3) *
|
||||
* サブモジュール名: 取消申請処理 *
|
||||
* 処理概要 : 取消レコードをW02出力する *
|
||||
*****************************************************************
|
||||
2030CANCELSOR SECTION.
|
||||
*
|
||||
*** W02レコード初期化
|
||||
INITIALIZE W02OUTREC.
|
||||
MOVE WRK-CSV-APPL-ID TO W02APPL-ID.
|
||||
MOVE WRK-CSV-EMP-ID TO W02EMP-ID.
|
||||
MOVE WRK-CSV-APPL-DATE TO W02APPL-DATE.
|
||||
MOVE WRK-CSV-START-TIME TO W02START-TIME.
|
||||
MOVE WRK-CSV-END-TIME TO W02END-TIME.
|
||||
MOVE WRK-CSV-STATUS TO W02STATUS.
|
||||
MOVE WRK-CSV-OVT-TYPE TO W02OVT-TYPE.
|
||||
WRITE W02OUTREC.
|
||||
ADD 1 TO CUN-W02OUT.
|
||||
*
|
||||
2030CANCELSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.4) *
|
||||
* サブモジュール名: エラー処理 *
|
||||
* 処理概要 : 不明ステータスをW03出力する *
|
||||
*****************************************************************
|
||||
2040ERRORSOR SECTION.
|
||||
*
|
||||
*** W03レコード初期化
|
||||
INITIALIZE W03OUTREC.
|
||||
MOVE '01' TO W03ERR-CATEGORY.
|
||||
STRING 'INVALID STATUS:'
|
||||
WRK-CSV-STATUS
|
||||
DELIMITED BY SIZE
|
||||
INTO W03ERR-DETAIL.
|
||||
WRITE W03OUTREC.
|
||||
ADD 1 TO CUN-W03OUT.
|
||||
*
|
||||
2040ERRORSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(3.0) *
|
||||
* サブモジュール名: 終了処理 *
|
||||
* 処理概要 : ファイルクローズ・件数と終了メッセージ出力 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
*** 入出力ファイルCLOSE
|
||||
CLOSE R01INNFIL
|
||||
W01OUTFIL
|
||||
W02OUTFIL
|
||||
W03OUTFIL.
|
||||
*
|
||||
*** 入出力ファイル件数出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'ZAN01R01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'ZAN01W01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'ZAN01W02' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W02OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'ZAN01W03' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W03OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 終了メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
3000STPSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(4.0) *
|
||||
* サブモジュール名: メッセージ編集出力処理 *
|
||||
* 処理概要 : メッセージ編集出力サブPGM呼出 *
|
||||
*****************************************************************
|
||||
4000MSGOUTSOR SECTION.
|
||||
*
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
|
||||
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
|
||||
CALL 'SUB02MSG' USING M00MHOPAR.
|
||||
*
|
||||
4000MSGOUTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(9.9) *
|
||||
* サブモジュール名: ABEND処理 *
|
||||
* 処理概要 : ABENDサブPGM呼出 *
|
||||
*****************************************************************
|
||||
9999ABDSOR SECTION.
|
||||
*
|
||||
MOVE CNS-ABD999 TO E01ABDCOD.
|
||||
CALL 'SUB03END' USING E01ABDPAR.
|
||||
*
|
||||
9999ABDSOR-EXT.
|
||||
EXIT.
|
||||
@@ -0,0 +1,360 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. ZAN02CHK.
|
||||
*****************************************************************
|
||||
* システム名 : 残業統計管理システム *
|
||||
* プログラムID : ZAN02CHK *
|
||||
* プログラム名 : 時間帯重複チェック処理 *
|
||||
* 作成日 : 2026-06-14 *
|
||||
* 処理概要 : OVT-VSORTファイルの同一社員・同一日付内の *
|
||||
* 開始時刻と終了時刻の重複をチェックする。 *
|
||||
* *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 26-06-14 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R01INNFIL ASSIGN TO ZAN02R01.
|
||||
SELECT W01OUTFIL ASSIGN TO ZAN02W01.
|
||||
SELECT W02OUTFIL ASSIGN TO ZAN02W02.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* ##R01## *
|
||||
*****************************************************************
|
||||
FD R01INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R01INNREC.
|
||||
COPY ZAN01REC REPLACING ==(A)== BY ==R01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* ##W01## *
|
||||
*****************************************************************
|
||||
FD W01OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 W01OUTREC.
|
||||
COPY ZAN01REC REPLACING ==(A)== BY ==W01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* ##W02## *
|
||||
*****************************************************************
|
||||
FD W02OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS V.
|
||||
01 W02OUTREC.
|
||||
COPY ZAN05REC REPLACING ==(A)== BY ==W02==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'ZAN02CHK'.
|
||||
03 CNS-MSGSTR PIC 9(003) VALUE 001.
|
||||
03 CNS-MSGFIN PIC 9(003) VALUE 002.
|
||||
03 CNS-MSGSUBEEK PIC 9(003) VALUE 005.
|
||||
03 CNS-MSGIINKES PIC 9(003) VALUE 006.
|
||||
03 CNS-MSGOUTKES PIC 9(003) VALUE 007.
|
||||
03 CNS-MSGKEYINF PIC 9(003) VALUE 033.
|
||||
03 CNS-KN0002 PIC 9(001) VALUE 2.
|
||||
03 CNS-ABD999 PIC 9(003) VALUE 999.
|
||||
01 CNS-ERR-CAT02 PIC 9(002) VALUE 02.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
01 CUNARA.
|
||||
03 CUN-R01INN PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-W01OUT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-W02OUT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
*
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
*** 運用日付
|
||||
03 WRK-U06 PIC 9(008).
|
||||
*** 読込フラグ
|
||||
03 WRK-R01EOF PIC X(001).
|
||||
*** 前レコード保持
|
||||
03 WRK-PREV-REC.
|
||||
05 FILLER PIC X(008).
|
||||
05 WRK-PREV-EMP-ID PIC 9(008).
|
||||
05 WRK-PREV-APPL-DATE PIC 9(008).
|
||||
05 FILLER PIC 9(004).
|
||||
05 WRK-PREV-END-TIME PIC 9(004).
|
||||
05 FILLER PIC X(001).
|
||||
05 FILLER PIC X(001).
|
||||
05 FILLER PIC X(046).
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
*** 運用日付取得
|
||||
COPY ZANDATAC.
|
||||
*** メッセージ編集出力SR用
|
||||
COPY ZANMSGAC.
|
||||
*** ABEND処理SR用
|
||||
COPY ZANENDAC.
|
||||
*
|
||||
PROCEDURE DIVISION.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
* 処理概要 : メインコントロール処理 *
|
||||
*****************************************************************
|
||||
0000MAJCOLSOR SECTION.
|
||||
*
|
||||
*** 初期処理
|
||||
PERFORM 1000ITTSOR.
|
||||
*
|
||||
*** メイン処理
|
||||
PERFORM 2000MAJSOR
|
||||
UNTIL WRK-R01EOF = '1'.
|
||||
*
|
||||
*** 終了処理
|
||||
PERFORM 3000STPSOR.
|
||||
*
|
||||
0000MAJCOLSOR-EXT.
|
||||
GOBACK.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.0) *
|
||||
* サブモジュール名: 初期処理 *
|
||||
* 処理概要 : 開始メッセージ出力・各種初期化処理 *
|
||||
*****************************************************************
|
||||
1000ITTSOR SECTION.
|
||||
*
|
||||
*** 開始メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGSTR TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** コンパイル日時出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGKEYINF TO M00MSGCOD.
|
||||
MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01.
|
||||
MOVE 'COMPILED' TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** ワークエリア初期化
|
||||
INITIALIZE WRKARA.
|
||||
*
|
||||
*** 運用日付取得
|
||||
INITIALIZE D01UBSPAR.
|
||||
CALL 'SUB01DAT' USING D01UBSPAR.
|
||||
IF D01FKICOD = ZERO
|
||||
MOVE D01UBSUDATE TO WRK-U06
|
||||
ELSE
|
||||
INITIALIZE M00MHOPAR
|
||||
MOVE CNS-MSGSUBEEK TO M00MSGCOD
|
||||
MOVE 'SUB01DAT' TO M00UMKDATS22-01
|
||||
MOVE D01FKICOD TO M00UMKDATS22-02
|
||||
PERFORM 4000MSGOUTSOR
|
||||
PERFORM 9999ABDSOR
|
||||
END-IF.
|
||||
*
|
||||
*** 入出力ファイルOPEN
|
||||
OPEN INPUT R01INNFIL
|
||||
OUTPUT W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
*** #R01#を読み込み
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
*** 1件目W01出力(前レコード初期化)
|
||||
IF WRK-R01EOF NOT = '1'
|
||||
MOVE R01INNREC TO WRK-PREV-REC
|
||||
MOVE R01INNREC TO W01OUTREC
|
||||
WRITE W01OUTREC
|
||||
ADD 1 TO CUN-W01OUT
|
||||
PERFORM 1100R01INNSOR
|
||||
END-IF.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(1.1) *
|
||||
* サブモジュール名:##R01##読込処理 *
|
||||
* 処理概要 : レコード読込・EOF判定処理 *
|
||||
*****************************************************************
|
||||
1100R01INNSOR SECTION.
|
||||
*
|
||||
READ R01INNFIL
|
||||
AT END
|
||||
MOVE '1' TO WRK-R01EOF
|
||||
NOT AT END
|
||||
ADD 1 TO CUN-R01INN
|
||||
END-READ.
|
||||
*
|
||||
1100R01INNSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.0) *
|
||||
* サブモジュール名: 主処理 *
|
||||
* 処理概要 : 時間帯重複チェック処理 *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
IF WRK-R01EOF NOT = '1'
|
||||
*** 重複チェック
|
||||
PERFORM 2010CHECKDUPSOR
|
||||
*** 次のレコード読込
|
||||
PERFORM 1100R01INNSOR
|
||||
END-IF.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1) *
|
||||
* サブモジュール名: 重複チェック処理 *
|
||||
* 処理概要 : 前レコードとの重複判定 *
|
||||
*****************************************************************
|
||||
2010CHECKDUPSOR SECTION.
|
||||
*
|
||||
*** 同一社員番号かつ同一日付の判定
|
||||
IF WRK-PREV-EMP-ID = R01EMP-ID
|
||||
AND WRK-PREV-APPL-DATE = R01APPL-DATE
|
||||
*** 前終了時刻 > 現開始時刻 → 重複
|
||||
IF WRK-PREV-END-TIME > R01START-TIME
|
||||
PERFORM 2011OVERLAPERRSOR
|
||||
ELSE
|
||||
PERFORM 2012NORMALOUTSOR
|
||||
END-IF
|
||||
ELSE
|
||||
*** キーブレイク
|
||||
PERFORM 2013KEYBRSOR
|
||||
END-IF.
|
||||
*
|
||||
2010CHECKDUPSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1-1) *
|
||||
* サブモジュール名: 重複エラー処理 *
|
||||
* 処理概要 : エラーログW02出力 *
|
||||
*****************************************************************
|
||||
2011OVERLAPERRSOR SECTION.
|
||||
*
|
||||
INITIALIZE W02OUTREC.
|
||||
MOVE CNS-ERR-CAT02 TO W02ERR-CATEGORY.
|
||||
STRING 'OVERLAP: '
|
||||
WRK-PREV-EMP-ID ','
|
||||
WRK-PREV-APPL-DATE
|
||||
DELIMITED BY SIZE
|
||||
INTO W02ERR-DETAIL.
|
||||
WRITE W02OUTREC.
|
||||
ADD 1 TO CUN-W02OUT.
|
||||
*
|
||||
2011OVERLAPERRSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1-2) *
|
||||
* サブモジュール名: 通常出力処理 *
|
||||
* 処理概要 : W01ファイル出力 *
|
||||
*****************************************************************
|
||||
2012NORMALOUTSOR SECTION.
|
||||
*
|
||||
MOVE R01INNREC TO W01OUTREC.
|
||||
WRITE W01OUTREC.
|
||||
ADD 1 TO CUN-W01OUT.
|
||||
*
|
||||
*** 前レコード更新
|
||||
MOVE R01INNREC TO WRK-PREV-REC.
|
||||
*
|
||||
2012NORMALOUTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1-3) *
|
||||
* サブモジュール名: キーブレイク処理 *
|
||||
* 処理概要 : 前レコード更新 *
|
||||
*****************************************************************
|
||||
2013KEYBRSOR SECTION.
|
||||
*
|
||||
MOVE R01INNREC TO WRK-PREV-REC.
|
||||
PERFORM 2012NORMALOUTSOR.
|
||||
*
|
||||
2013KEYBRSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(3.0) *
|
||||
* サブモジュール名: 終了処理 *
|
||||
* 処理概要 : ファイルクローズ・件数と終了メッセージ出力 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
*** 入出力ファイルCLOSE
|
||||
CLOSE R01INNFIL
|
||||
W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
*** 入出力ファイル件数出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'ZAN02R01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'ZAN02W01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'ZAN02W02' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W02OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 終了メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
3000STPSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(4.0) *
|
||||
* サブモジュール名: メッセージ編集出力処理 *
|
||||
* 処理概要 : メッセージ編集出力サブPGM呼出 *
|
||||
*****************************************************************
|
||||
4000MSGOUTSOR SECTION.
|
||||
*
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
|
||||
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
|
||||
CALL 'SUB02MSG' USING M00MHOPAR.
|
||||
*
|
||||
4000MSGOUTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(9.9) *
|
||||
* サブモジュール名: ABEND処理 *
|
||||
* 処理概要 : ABENDサブPGM呼出 *
|
||||
*****************************************************************
|
||||
9999ABDSOR SECTION.
|
||||
*
|
||||
MOVE CNS-ABD999 TO E01ABDCOD.
|
||||
CALL 'SUB03END' USING E01ABDPAR.
|
||||
*
|
||||
9999ABDSOR-EXT.
|
||||
EXIT.
|
||||
@@ -0,0 +1,466 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. ZAN03CHK.
|
||||
*****************************************************************
|
||||
* システム名 : 残業統計管理システム *
|
||||
* プログラムID : ZAN03CHK *
|
||||
* プログラム名 : 打刻時間照合処理 *
|
||||
* 作成日 : 2026-06-14 *
|
||||
* 処理概要 : OVT-NODUPとPUNCH-SORTEDを突合し申請時間帯の *
|
||||
* 照合を行う。 *
|
||||
* 申請時間帯が出勤〜退勤の範囲内かを確認する。*
|
||||
* 申請日が休日かを判定しOVT-TYPEを付加する。 *
|
||||
* *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 26-06-14 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R01INNFIL ASSIGN TO ZAN03R01.
|
||||
SELECT R02INNFIL ASSIGN TO ZAN03R02.
|
||||
SELECT R03INNFIL ASSIGN TO ZAN03R03.
|
||||
SELECT W01OUTFIL ASSIGN TO ZAN03W01.
|
||||
SELECT W02OUTFIL ASSIGN TO ZAN03W02.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* ##R01## *
|
||||
*****************************************************************
|
||||
FD R01INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R01INNREC.
|
||||
COPY ZAN01REC REPLACING ==(A)== BY ==R01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* ##R02## *
|
||||
*****************************************************************
|
||||
FD R02INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R02INNREC.
|
||||
03 R02EMP-ID PIC 9(008).
|
||||
03 R02DATE PIC 9(008).
|
||||
03 R02TIME-IN PIC 9(004).
|
||||
03 R02TIME-OUT PIC 9(004).
|
||||
03 R02FILLER PIC X(056).
|
||||
*
|
||||
*****************************************************************
|
||||
* ##R03## *
|
||||
*****************************************************************
|
||||
FD R03INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R03INNREC.
|
||||
03 R03HOLIDAY-DATE PIC 9(008).
|
||||
03 R03HOLIDAY-FLG PIC X(001).
|
||||
03 R03FILLER PIC X(071).
|
||||
*
|
||||
*****************************************************************
|
||||
* ##W01## *
|
||||
*****************************************************************
|
||||
FD W01OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 W01OUTREC.
|
||||
COPY ZAN01REC REPLACING ==(A)== BY ==W01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* ##W02## *
|
||||
*****************************************************************
|
||||
FD W02OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS V.
|
||||
01 W02OUTREC.
|
||||
COPY ZAN05REC REPLACING ==(A)== BY ==W02==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'ZAN03CHK'.
|
||||
03 CNS-MSGSTR PIC 9(003) VALUE 001.
|
||||
03 CNS-MSGFIN PIC 9(003) VALUE 002.
|
||||
|
||||
03 CNS-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-ERR-CAT03 PIC 9(002) VALUE 03.
|
||||
03 CNS-OVT-W PIC X(001) VALUE 'W'.
|
||||
03 CNS-OVT-H PIC X(001) VALUE 'H'.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
01 CUNARA.
|
||||
03 CUN-R01INN PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-R02INN PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-R03INN PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-W01OUT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-W02OUT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
*
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
*** 読込フラグ(R01)
|
||||
03 WRK-R01EOF PIC X(001).
|
||||
*** 読込フラグ(R02)
|
||||
03 WRK-R02EOF PIC X(001).
|
||||
*** 読込フラグ(R03)
|
||||
03 WRK-R03EOF PIC X(001).
|
||||
*** R01キー
|
||||
03 WRK-R01KEY.
|
||||
05 WRK-R01KEY001 PIC 9(008).
|
||||
05 WRK-R01KEY002 PIC 9(008).
|
||||
*** R02キー
|
||||
03 WRK-R02KEY.
|
||||
05 WRK-R02KEY001 PIC 9(008).
|
||||
05 WRK-R02KEY002 PIC 9(008).
|
||||
*** OVT-TYPE設定用
|
||||
03 WRK-OVT-TYPE-SET PIC X(001).
|
||||
*** 休日テーブル
|
||||
03 WRK-HOLIDAY-CNT PIC 9(004) COMP.
|
||||
03 WRK-HOLIDAY-TABLE OCCURS 1 TO 366 TIMES
|
||||
DEPENDING ON WRK-HOLIDAY-CNT
|
||||
ASCENDING KEY IS WRK-HD-DATE
|
||||
INDEXED BY WRK-HD-IDX.
|
||||
05 WRK-HD-DATE PIC 9(008).
|
||||
05 WRK-HD-FLG PIC X(001).
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
*** メッセージ編集出力SR用
|
||||
COPY ZANMSGAC.
|
||||
|
||||
*
|
||||
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.
|
||||
*
|
||||
|
||||
*
|
||||
*** 入出力ファイルOPEN
|
||||
OPEN INPUT R01INNFIL
|
||||
R02INNFIL
|
||||
R03INNFIL
|
||||
OUTPUT W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
*** 休日ファイル読込
|
||||
PERFORM 1300HOLIDAYSOR.
|
||||
*
|
||||
*** #R01#を読み込み
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
*** #R02#を読み込み
|
||||
PERFORM 1200R02INNSOR.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.1) *
|
||||
* サブモジュール名:##R01##読込処理 *
|
||||
* 処理概要 : レコード読込・EOF判定処理 *
|
||||
*****************************************************************
|
||||
1100R01INNSOR SECTION.
|
||||
*
|
||||
READ R01INNFIL
|
||||
AT END
|
||||
MOVE '1' TO WRK-R01EOF
|
||||
NOT AT END
|
||||
ADD 1 TO CUN-R01INN
|
||||
MOVE R01EMP-ID TO WRK-R01KEY001
|
||||
MOVE R01APPL-DATE TO WRK-R01KEY002
|
||||
END-READ.
|
||||
*
|
||||
1100R01INNSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(1.2) *
|
||||
* サブモジュール名:##R02##読込処理 *
|
||||
* 処理概要 : レコード読込・EOF判定処理 *
|
||||
*****************************************************************
|
||||
1200R02INNSOR SECTION.
|
||||
*
|
||||
READ R02INNFIL
|
||||
AT END
|
||||
MOVE '1' TO WRK-R02EOF
|
||||
MOVE HIGH-VALUES TO WRK-R02KEY
|
||||
NOT AT END
|
||||
ADD 1 TO CUN-R02INN
|
||||
MOVE R02EMP-ID TO WRK-R02KEY001
|
||||
MOVE R02DATE TO WRK-R02KEY002
|
||||
END-READ.
|
||||
*
|
||||
1200R02INNSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(1.3) *
|
||||
* サブモジュール名:##R03##読込処理 *
|
||||
* 処理概要 : 休日ファイル読込・HOLIDAY-TABLE設定 *
|
||||
*****************************************************************
|
||||
1300HOLIDAYSOR SECTION.
|
||||
*
|
||||
INITIALIZE WRK-HOLIDAY-CNT.
|
||||
*
|
||||
PERFORM UNTIL WRK-R03EOF = '1'
|
||||
READ R03INNFIL
|
||||
AT END
|
||||
MOVE '1' TO WRK-R03EOF
|
||||
NOT AT END
|
||||
ADD 1 TO WRK-HOLIDAY-CNT
|
||||
ADD 1 TO CUN-R03INN
|
||||
MOVE R03HOLIDAY-DATE TO
|
||||
WRK-HD-DATE(WRK-HOLIDAY-CNT)
|
||||
MOVE R03HOLIDAY-FLG TO
|
||||
WRK-HD-FLG(WRK-HOLIDAY-CNT)
|
||||
END-READ
|
||||
END-PERFORM.
|
||||
*
|
||||
1300HOLIDAYSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.0) *
|
||||
* サブモジュール名: 主処理 *
|
||||
* 処理概要 : R01とR02のキー比較・時間範囲チェック *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
*** R01とR02のキー比較
|
||||
EVALUATE TRUE
|
||||
WHEN WRK-R01KEY < WRK-R02KEY
|
||||
*** R01キー < R02キー(打刻データなし)
|
||||
PERFORM 2010NOMATCHSOR
|
||||
WHEN WRK-R01KEY = WRK-R02KEY
|
||||
*** R01キー = R02キー(マッチ)
|
||||
PERFORM 2020MATCHSOR
|
||||
WHEN WRK-R01KEY > WRK-R02KEY
|
||||
*** R01キー > R02キー(R02スキップ)
|
||||
PERFORM 1200R02INNSOR
|
||||
END-EVALUATE.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1) *
|
||||
* サブモジュール名: 不一致処理 *
|
||||
* 処理概要 : 打刻データなしエラー出力 *
|
||||
*****************************************************************
|
||||
2010NOMATCHSOR SECTION.
|
||||
*
|
||||
*** W02レコード初期化
|
||||
INITIALIZE W02OUTREC.
|
||||
*
|
||||
*** ERROR-LOGに出力
|
||||
MOVE CNS-ERR-CAT03 TO W02ERR-CATEGORY.
|
||||
STRING R01EMP-ID DELIMITED BY SIZE
|
||||
'/' DELIMITED BY SIZE
|
||||
R01APPL-DATE DELIMITED BY SIZE
|
||||
INTO W02ERR-DETAIL
|
||||
END-STRING.
|
||||
WRITE W02OUTREC.
|
||||
ADD 1 TO CUN-W02OUT.
|
||||
*
|
||||
*** #R01#を読み込む
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
2010NOMATCHSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.2) *
|
||||
* サブモジュール名: 一致処理 *
|
||||
* 処理概要 : 時間範囲チェック *
|
||||
*****************************************************************
|
||||
2020MATCHSOR SECTION.
|
||||
*
|
||||
*** 時間範囲チェック
|
||||
IF R01START-TIME >= R02TIME-IN
|
||||
AND R01END-TIME <= R02TIME-OUT
|
||||
*** 通過→OVT-TYPE設定+W01出力
|
||||
PERFORM 2200SETOVTSOR
|
||||
WRITE W01OUTREC
|
||||
ADD 1 TO CUN-W01OUT
|
||||
ELSE
|
||||
*** エラー→W02出力
|
||||
INITIALIZE W02OUTREC
|
||||
MOVE CNS-ERR-CAT03 TO W02ERR-CATEGORY
|
||||
STRING R01EMP-ID DELIMITED BY SIZE
|
||||
'/' DELIMITED BY SIZE
|
||||
R01APPL-DATE DELIMITED BY SIZE
|
||||
'/' DELIMITED BY SIZE
|
||||
R01START-TIME DELIMITED BY SIZE
|
||||
'-' DELIMITED BY SIZE
|
||||
R01END-TIME DELIMITED BY SIZE
|
||||
INTO W02ERR-DETAIL
|
||||
END-STRING
|
||||
WRITE W02OUTREC
|
||||
ADD 1 TO CUN-W02OUT
|
||||
END-IF.
|
||||
*
|
||||
*** #R01#を読み込む
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
2020MATCHSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.3) *
|
||||
* サブモジュール名: OVT-TYPE設定処理 *
|
||||
* 処理概要 : 申請日が休日か判定しOVT-TYPEを設定 *
|
||||
*****************************************************************
|
||||
2200SETOVTSOR SECTION.
|
||||
*
|
||||
*** 初期設定(平日)
|
||||
MOVE CNS-OVT-W TO WRK-OVT-TYPE-SET.
|
||||
*** 休日判定(SEARCH ALL)
|
||||
SET WRK-HD-IDX TO 1.
|
||||
SEARCH ALL WRK-HOLIDAY-TABLE
|
||||
AT END
|
||||
CONTINUE
|
||||
WHEN WRK-HD-DATE(WRK-HD-IDX) = R01APPL-DATE
|
||||
IF WRK-HD-FLG(WRK-HD-IDX) = '1'
|
||||
MOVE CNS-OVT-H TO WRK-OVT-TYPE-SET
|
||||
END-IF
|
||||
END-SEARCH.
|
||||
*
|
||||
*** レコード編集
|
||||
MOVE R01INNREC TO W01OUTREC.
|
||||
MOVE WRK-OVT-TYPE-SET TO W01OVT-TYPE.
|
||||
*
|
||||
2200SETOVTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(3.0) *
|
||||
* サブモジュール名: 終了処理 *
|
||||
* 処理概要 : ファイルクローズ・件数出力 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
*** 入出力ファイルCLOSE
|
||||
CLOSE R01INNFIL
|
||||
R02INNFIL
|
||||
R03INNFIL
|
||||
W01OUTFIL
|
||||
W02OUTFIL.
|
||||
*
|
||||
*** 入力件数メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'ZAN03R01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 入力件数メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'ZAN03R02' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R02INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 入力件数メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'ZAN03R03' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R03INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 出力件数メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'ZAN03W01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 出力件数メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'ZAN03W02' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W02OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 終了メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
3000STPSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(4.0) *
|
||||
* サブモジュール名: メッセージ出力処理 *
|
||||
* 処理概要 : メッセージ編集・出力 *
|
||||
*****************************************************************
|
||||
4000MSGOUTSOR SECTION.
|
||||
*
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
|
||||
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
|
||||
CALL 'SUB02MSG' USING M00MHOPAR.
|
||||
*
|
||||
4000MSGOUTSOR-EXT.
|
||||
EXIT.
|
||||
|
||||
@@ -0,0 +1,403 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. ZAN04MAT.
|
||||
*****************************************************************
|
||||
* システム名 : 残業統計管理システム *
|
||||
* プログラムID : ZAN04MAT *
|
||||
* プログラム名 : 取消マッチング処理 *
|
||||
* 作成日 : 2026-06-15 *
|
||||
* 処理概要 : OVT-SORTED(有効申請)とOVT-CSORT *
|
||||
* (取消申請)を申請番号で1: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 ZAN04R01.
|
||||
SELECT R02INNFIL ASSIGN TO ZAN04R02.
|
||||
SELECT W01OUTFIL ASSIGN TO ZAN04W01.
|
||||
SELECT W02OUTFIL ASSIGN TO ZAN04W02.
|
||||
SELECT W03OUTFIL ASSIGN TO ZAN04W03.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* R01 (OVT-SORTED) *
|
||||
*****************************************************************
|
||||
FD R01INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R01INNREC.
|
||||
COPY ZAN01REC REPLACING ==(A)== BY ==R01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* R02 (OVT-CSORT) *
|
||||
*****************************************************************
|
||||
FD R02INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R02INNREC.
|
||||
COPY ZAN01REC REPLACING ==(A)== BY ==R02==.
|
||||
*
|
||||
*****************************************************************
|
||||
* W01 (OVT-MATCHED) *
|
||||
*****************************************************************
|
||||
FD W01OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 W01OUTREC.
|
||||
COPY ZAN02REC REPLACING ==(A)== BY ==W01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* W02 (OVT-DBCLEAN) *
|
||||
*****************************************************************
|
||||
FD W02OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 W02OUTREC.
|
||||
COPY ZAN04REC REPLACING ==(A)== BY ==W02==.
|
||||
*
|
||||
*****************************************************************
|
||||
* W03 (ERROR-LOG) *
|
||||
*****************************************************************
|
||||
FD W03OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS V.
|
||||
01 W03OUTREC.
|
||||
COPY ZAN05REC REPLACING ==(A)== BY ==W03==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'ZAN04MAT'.
|
||||
03 CNS-MSGSTR PIC 9(003) VALUE 001.
|
||||
03 CNS-MSGFIN PIC 9(003) VALUE 002.
|
||||
03 CNS-MSGSUBEEK PIC 9(003) VALUE 005.
|
||||
03 CNS-MSGIINKES PIC 9(003) VALUE 006.
|
||||
03 CNS-MSGOUTKES PIC 9(003) VALUE 007.
|
||||
03 CNS-MSGKEYINF PIC 9(003) VALUE 033.
|
||||
03 CNS-KN0002 PIC 9(001) VALUE 2.
|
||||
03 CNS-ABD999 PIC 9(003) VALUE 999.
|
||||
01 CNS-ERR-CAT04 PIC 9(002) VALUE 04.
|
||||
01 CNS-PROC-SEQ01 PIC 9(002) VALUE 01.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
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.
|
||||
03 CUN-W02OUT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-W03OUT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
*
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
*** マッチングキー
|
||||
03 WRK-R01KEY PIC X(008).
|
||||
03 WRK-R02KEY PIC X(008).
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
*** 運用日付取得
|
||||
COPY ZANDATAC.
|
||||
*** メッセージ編集出力SR用
|
||||
COPY ZANMSGAC.
|
||||
*** ABEND処理SR用
|
||||
COPY ZANENDAC.
|
||||
*
|
||||
PROCEDURE DIVISION.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
* 処理概要 : メインコントロール処理 *
|
||||
*****************************************************************
|
||||
0000MAJCOLSOR SECTION.
|
||||
*
|
||||
*** 初期処理
|
||||
PERFORM 1000ITTSOR.
|
||||
*
|
||||
*** メイン処理
|
||||
PERFORM 2000MAJSOR
|
||||
UNTIL WRK-R01KEY = HIGH-VALUE
|
||||
AND WRK-R02KEY = HIGH-VALUE.
|
||||
*
|
||||
*** 終了処理
|
||||
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 NOT = ZERO
|
||||
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
|
||||
R02INNFIL
|
||||
OUTPUT W01OUTFIL
|
||||
W02OUTFIL
|
||||
W03OUTFIL.
|
||||
*
|
||||
*** R01を読み込み
|
||||
PERFORM 1100R01INNSOR.
|
||||
*** R02を読み込み
|
||||
PERFORM 1200R02INNSOR.
|
||||
*
|
||||
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:(1.2) *
|
||||
* サブモジュール名:R02読込処理 *
|
||||
* 処理概要 : レコード読込・キー設定 *
|
||||
*****************************************************************
|
||||
1200R02INNSOR SECTION.
|
||||
*
|
||||
READ R02INNFIL
|
||||
AT END
|
||||
MOVE HIGH-VALUE TO WRK-R02KEY
|
||||
NOT AT END
|
||||
ADD 1 TO CUN-R02INN
|
||||
MOVE R02APPL-ID TO WRK-R02KEY
|
||||
END-READ.
|
||||
*
|
||||
1200R02INNSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.0) *
|
||||
* サブモジュール名:主処理 *
|
||||
* 処理概要 : マッチング(1:1)を行う *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
EVALUATE TRUE
|
||||
*** マッチ
|
||||
WHEN WRK-R01KEY = WRK-R02KEY
|
||||
PERFORM 2100MATCHSOR
|
||||
PERFORM 1100R01INNSOR
|
||||
PERFORM 1200R02INNSOR
|
||||
*** R01のみ
|
||||
WHEN WRK-R01KEY < WRK-R02KEY
|
||||
PERFORM 2200R01OUTSOR
|
||||
PERFORM 1100R01INNSOR
|
||||
*** R02のみ
|
||||
WHEN WRK-R01KEY > WRK-R02KEY
|
||||
PERFORM 2300R02OUTSOR
|
||||
PERFORM 1200R02INNSOR
|
||||
END-EVALUATE.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1) *
|
||||
* サブモジュール名:マッチ時処理 *
|
||||
* 処理概要 : 取消済み申請をERROR-LOGに出力 *
|
||||
*****************************************************************
|
||||
2100MATCHSOR SECTION.
|
||||
*
|
||||
*** ERROR-LOG出力(監査証跡)
|
||||
INITIALIZE W03OUTREC.
|
||||
MOVE CNS-ERR-CAT04 TO W03ERR-CATEGORY.
|
||||
STRING 'CANCEL-MATCH: '
|
||||
R01APPL-ID ' '
|
||||
R01EMP-ID ' '
|
||||
R01APPL-DATE ' '
|
||||
R01START-TIME ' '
|
||||
R01END-TIME
|
||||
DELIMITED BY SIZE
|
||||
INTO W03ERR-DETAIL.
|
||||
WRITE W03OUTREC.
|
||||
ADD 1 TO CUN-W03OUT.
|
||||
*
|
||||
2100MATCHSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.2) *
|
||||
* サブモジュール名:R01のみ処理 *
|
||||
* 処理概要 : 有効申請をOVT-MATCHEDに出力 *
|
||||
*****************************************************************
|
||||
2200R01OUTSOR SECTION.
|
||||
*
|
||||
*** OVT-MATCHED出力(STRING編集)
|
||||
INITIALIZE W01OUTREC.
|
||||
STRING R01APPL-ID DELIMITED BY SIZE
|
||||
R01EMP-ID DELIMITED BY SIZE
|
||||
R01APPL-DATE DELIMITED BY SIZE
|
||||
R01START-TIME DELIMITED BY SIZE
|
||||
R01END-TIME DELIMITED BY SIZE
|
||||
R01STATUS DELIMITED BY SIZE
|
||||
R01OVT-TYPE DELIMITED BY SIZE
|
||||
CNS-PROC-SEQ01 DELIMITED BY SIZE
|
||||
INTO W01OUTREC.
|
||||
WRITE W01OUTREC.
|
||||
ADD 1 TO CUN-W01OUT.
|
||||
*
|
||||
2200R01OUTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.3) *
|
||||
* サブモジュール名:R02のみ処理 *
|
||||
* 処理概要 : 取消申請をOVT-DBCLEANに出力 *
|
||||
*****************************************************************
|
||||
2300R02OUTSOR SECTION.
|
||||
*
|
||||
*** OVT-DBCLEAN出力
|
||||
INITIALIZE W02OUTREC.
|
||||
MOVE R02APPL-ID TO W02APPL-ID.
|
||||
WRITE W02OUTREC.
|
||||
ADD 1 TO CUN-W02OUT.
|
||||
*
|
||||
2300R02OUTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(3.0) *
|
||||
* サブモジュール名:終了処理 *
|
||||
* 処理概要 : ファイルクローズ・件数と終了メッセージ出力 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
*** 入出力ファイルCLOSE
|
||||
CLOSE R01INNFIL
|
||||
R02INNFIL
|
||||
W01OUTFIL
|
||||
W02OUTFIL
|
||||
W03OUTFIL.
|
||||
*
|
||||
*** 入出力ファイル件数出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'ZAN04R01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'ZAN04R02' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R02INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'ZAN04W01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'ZAN04W02' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W02OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'ZAN04W03' TO M00UMKDATS22-01.
|
||||
MOVE CUN-W03OUT TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
*** 終了メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
3000STPSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(4.0) *
|
||||
* サブモジュール名:メッセージ編集出力処理 *
|
||||
* 処理概要 : メッセージ編集出力サブPGM呼出 *
|
||||
*****************************************************************
|
||||
4000MSGOUTSOR SECTION.
|
||||
*
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
|
||||
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
|
||||
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
|
||||
CALL 'SUB02MSG' USING M00MHOPAR.
|
||||
*
|
||||
4000MSGOUTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(9.9) *
|
||||
* サブモジュール名:ABEND処理 *
|
||||
* 処理概要 : ABENDサブPGM呼出 *
|
||||
*****************************************************************
|
||||
9999ABDSOR SECTION.
|
||||
*
|
||||
MOVE CNS-ABD999 TO E01ABDCOD.
|
||||
CALL 'SUB03END' USING E01ABDPAR.
|
||||
*
|
||||
9999ABDSOR-EXT.
|
||||
EXIT.
|
||||
@@ -0,0 +1,390 @@
|
||||
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.
|
||||
*** キーブレイク制御
|
||||
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 FILLER PIC 9(004).
|
||||
05 WRK-LAST-END PIC 9(004).
|
||||
05 FILLER PIC X(001).
|
||||
05 WRK-LAST-OVT-TYPE PIC X(001).
|
||||
05 FILLER PIC 9(002).
|
||||
05 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.
|
||||
*
|
||||
*** ワークエリア初期化
|
||||
INITIALIZE WRKARA.
|
||||
MOVE '0' TO WRK-GROUP-ACTIVE.
|
||||
*
|
||||
*** 運用日付取得
|
||||
INITIALIZE D01UBSPAR.
|
||||
CALL 'SUB01DAT' USING D01UBSPAR.
|
||||
IF D01FKICOD NOT = ZERO
|
||||
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
|
||||
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.
|
||||
@@ -0,0 +1,683 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. ZAN06UPD.
|
||||
*****************************************************************
|
||||
* システム名 : 残業統計管理システム *
|
||||
* プログラムID : ZAN06UPD *
|
||||
* プログラム名 : 残業統計DB更新処理 *
|
||||
* 作成日 : 2026-06-16 *
|
||||
* 処理概要 : OVT-SUMMARYの各レコードをDB2テーブル *
|
||||
* OVT-APPLICATIONSにINSERT/UPSERTし、 *
|
||||
* OVT-MONTHLYに月次集計を反映する。 *
|
||||
* またOVT-DBCLEANの各レコードについて、 *
|
||||
* 該当申請を取消状態に更新し、 *
|
||||
* OVT-MONTHLYから該当加班時間を減算する。 *
|
||||
* *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 26-06-16 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT R01INNFIL ASSIGN TO ZAN06R01.
|
||||
SELECT R02INNFIL ASSIGN TO ZAN06R02.
|
||||
SELECT W01OUTFIL ASSIGN TO ZAN06W01.
|
||||
*
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* R01 (OVT-SUMMARY) 80B FB *
|
||||
*****************************************************************
|
||||
FD R01INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R01INNREC.
|
||||
COPY ZAN03REC REPLACING ==(A)== BY ==R01==.
|
||||
*
|
||||
*****************************************************************
|
||||
* R02 (OVT-DBCLEAN) 80B FB *
|
||||
*****************************************************************
|
||||
FD R02INNFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
BLOCK CONTAINS 0
|
||||
RECORDING MODE IS F.
|
||||
01 R02INNREC.
|
||||
COPY ZAN04REC REPLACING ==(A)== BY ==R02==.
|
||||
*
|
||||
*****************************************************************
|
||||
* W01 (ERROR-LOG) VB 200B *
|
||||
*****************************************************************
|
||||
FD W01OUTFIL
|
||||
LABEL RECORD IS STANDARD
|
||||
RECORDING MODE IS V.
|
||||
01 W01OUTREC.
|
||||
COPY ZAN05REC REPLACING ==(A)== BY ==W01==.
|
||||
*
|
||||
WORKING-STORAGE SECTION.
|
||||
*
|
||||
*****************************************************************
|
||||
* SQLCA *
|
||||
*****************************************************************
|
||||
EXEC SQL INCLUDE SQLCA END-EXEC.
|
||||
*
|
||||
*****************************************************************
|
||||
* コンスタント領域 *
|
||||
*****************************************************************
|
||||
01 CNSARA.
|
||||
03 CNS-PRGIDX PIC X(008) VALUE 'ZAN06UPD'.
|
||||
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-ABD999 PIC 9(003) VALUE 999.
|
||||
03 CNS-KN0002 PIC 9(001) VALUE 2.
|
||||
03 CNS-COMMIT-CNT PIC 9(003) VALUE 050.
|
||||
03 CNS-STATUS-ACTIVE PIC X(001) VALUE '0'.
|
||||
03 CNS-STATUS-CANCEL PIC X(001) VALUE '9'.
|
||||
*
|
||||
*****************************************************************
|
||||
* カウンタ領域 *
|
||||
*****************************************************************
|
||||
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.
|
||||
03 CUN-DBXINS PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-DBXUPD PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
03 CUN-COMMIT PIC S9(009) COMP-3
|
||||
VALUE ZERO.
|
||||
*
|
||||
*****************************************************************
|
||||
* 作業領域 *
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
*** EOF判定
|
||||
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-APPL-DATE-N PIC 9(008).
|
||||
03 WRK-YEAR-MONTH PIC 9(006).
|
||||
03 WRK-MONTH PIC 9(002).
|
||||
03 WRK-MONTH-VALID PIC 9(001).
|
||||
*** ループ制御
|
||||
03 WRK-IDX PIC 9(004).
|
||||
03 WRK-RETRY-CNT PIC 9(001).
|
||||
*** 加班時間変換領域
|
||||
03 WRK-OVT-HOURS-EDITED PIC 9(004).9(001).
|
||||
03 WRK-OVT-HOURS-NUM PIC 9(004)V9(001).
|
||||
03 WRK-OVT-MINUTES PIC 9(006).
|
||||
*** SQL用ホスト変数(全DISPLAY)
|
||||
03 WRK-SQL-APPL-ID PIC X(008).
|
||||
03 WRK-SQL-EMP-ID PIC X(008).
|
||||
03 WRK-SQL-APPL-DATE PIC X(008).
|
||||
03 WRK-SQL-YEAR-MONTH PIC X(006).
|
||||
03 WRK-SQL-START-TIME PIC X(004).
|
||||
03 WRK-SQL-END-TIME PIC X(004).
|
||||
03 WRK-SQL-OVT-HOURS PIC X(006).
|
||||
03 WRK-SQL-OVT-TYPE PIC X(001).
|
||||
03 WRK-SQL-STATUS PIC X(001).
|
||||
*** SQLCODE表示用(COMP-5から編集変換)
|
||||
03 WRK-SQLCODE-DISP PIC +9(009).
|
||||
*** エラーログ編集領域
|
||||
03 WRK-ERR-CATEGORY PIC 9(002).
|
||||
03 WRK-ERR-DETAIL PIC X(198).
|
||||
*
|
||||
*****************************************************************
|
||||
* DBホスト変数(COMP-3、bridge compVarsマップ対応) *
|
||||
*****************************************************************
|
||||
01 DB-OVT-HOURS PIC S9(007)V9(001) COMP-3.
|
||||
01 DB-OVT-COUNT PIC S9(009) COMP-3.
|
||||
*
|
||||
*****************************************************************
|
||||
* サブプログラム連絡領域 *
|
||||
*****************************************************************
|
||||
*** 運用日付取得
|
||||
COPY ZANDATAC.
|
||||
*** メッセージ編集出力SR用
|
||||
COPY ZANMSGAC.
|
||||
*** ABEND処理SR用
|
||||
COPY ZANENDAC.
|
||||
*
|
||||
PROCEDURE DIVISION.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
* 処理概要 : メインコントロール処理 *
|
||||
*****************************************************************
|
||||
0000MAJCOLSOR SECTION.
|
||||
*
|
||||
*** 初期処理
|
||||
PERFORM 1000ITTSOR.
|
||||
*
|
||||
*** メイン処理(R01→R02順に処理)
|
||||
PERFORM 2000MAJSOR
|
||||
UNTIL WRK-R01-EOF
|
||||
AND WRK-R02-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.
|
||||
*
|
||||
*** 運用日付取得
|
||||
INITIALIZE D01UBSPAR.
|
||||
CALL 'SUB01DAT' USING D01UBSPAR.
|
||||
IF D01FKICOD = ZERO
|
||||
MOVE D01UBSUDATE TO WRK-APPL-DATE-N
|
||||
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
|
||||
R02INNFIL
|
||||
OUTPUT W01OUTFIL.
|
||||
*
|
||||
*** DB接続
|
||||
EXEC SQL
|
||||
CONNECT TO 'data\OVERTIME.DB'
|
||||
END-EXEC.
|
||||
*
|
||||
*** R01を初回読込
|
||||
PERFORM 1100R01INNSOR.
|
||||
*
|
||||
*** R02を初回読込
|
||||
PERFORM 1200R02INNSOR.
|
||||
*
|
||||
1000ITTSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(1.1) *
|
||||
* サブモジュール名:R01読込処理 *
|
||||
* 処理概要 : OVT-SUMMARY読込 *
|
||||
*****************************************************************
|
||||
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読込処理 *
|
||||
* 処理概要 : OVT-DBCLEAN読込 *
|
||||
*****************************************************************
|
||||
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) *
|
||||
* サブモジュール名:主処理 *
|
||||
* 処理概要 : R01(OVT-SUMMARY)→R02(OVT-DBCLEAN)処理 *
|
||||
*****************************************************************
|
||||
2000MAJSOR SECTION.
|
||||
*
|
||||
EVALUATE TRUE
|
||||
*** フェーズ1:OVT-SUMMARY処理
|
||||
WHEN NOT WRK-R01-EOF
|
||||
PERFORM 2100SUMMARYSOR
|
||||
PERFORM 1100R01INNSOR
|
||||
*** フェーズ2:OVT-DBCLEAN処理
|
||||
WHEN NOT WRK-R02-EOF
|
||||
PERFORM 2200DBCLEANSOR
|
||||
PERFORM 1200R02INNSOR
|
||||
WHEN OTHER
|
||||
CONTINUE
|
||||
END-EVALUATE.
|
||||
*
|
||||
2000MAJSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1) *
|
||||
* サブモジュール名:OVT-SUMMARY→DB登録処理 *
|
||||
* 処理概要 : OVT-APPLICATIONS INSERT/UPSERT *
|
||||
*****************************************************************
|
||||
2100SUMMARYSOR SECTION.
|
||||
*
|
||||
*** SQLホスト変数設定
|
||||
MOVE R01APPL-ID TO WRK-SQL-APPL-ID.
|
||||
MOVE R01EMP-ID TO WRK-SQL-EMP-ID.
|
||||
MOVE R01APPL-DATE TO WRK-SQL-APPL-DATE.
|
||||
MOVE R01APPL-DATE TO WRK-APPL-DATE-N.
|
||||
MOVE WRK-APPL-DATE-N(5:2) TO WRK-MONTH.
|
||||
*
|
||||
*** 月バリデーション(PERFORM VARYING カバレッジ用)
|
||||
MOVE ZERO TO WRK-MONTH-VALID.
|
||||
PERFORM VARYING WRK-IDX
|
||||
FROM 1 BY 1
|
||||
UNTIL WRK-IDX > 12
|
||||
OR WRK-MONTH-VALID = 1
|
||||
IF WRK-MONTH = WRK-IDX
|
||||
MOVE 1 TO WRK-MONTH-VALID
|
||||
END-IF
|
||||
END-PERFORM.
|
||||
*
|
||||
*** 月異常時はエラー
|
||||
IF WRK-MONTH-VALID = ZERO
|
||||
MOVE 10 TO WRK-ERR-CATEGORY
|
||||
STRING 'INVALID MONTH APPL-ID='
|
||||
WRK-SQL-APPL-ID DELIMITED BY SIZE
|
||||
INTO WRK-ERR-DETAIL
|
||||
END-STRING
|
||||
MOVE WRK-ERR-CATEGORY TO W01ERR-CATEGORY
|
||||
MOVE WRK-ERR-DETAIL TO W01ERR-DETAIL
|
||||
WRITE W01OUTREC
|
||||
ADD 1 TO CUN-W01OUT
|
||||
PERFORM 9999ABDSOR
|
||||
END-IF.
|
||||
*
|
||||
*** 年月抽出
|
||||
MOVE WRK-APPL-DATE-N(1:6) TO WRK-YEAR-MONTH.
|
||||
MOVE WRK-YEAR-MONTH TO WRK-SQL-YEAR-MONTH.
|
||||
*
|
||||
*** 開始/終了時刻設定
|
||||
MOVE R01START-TIME TO WRK-SQL-START-TIME.
|
||||
MOVE R01END-TIME TO WRK-SQL-END-TIME.
|
||||
*
|
||||
*** 加班時間 → SQL形式変換(小数点付加)
|
||||
MOVE R01OVT-HOURS TO WRK-OVT-HOURS-NUM.
|
||||
MOVE R01OVT-HOURS TO WRK-OVT-HOURS-EDITED.
|
||||
MOVE WRK-OVT-HOURS-EDITED TO WRK-SQL-OVT-HOURS.
|
||||
*
|
||||
*** MULTIPLY カバレッジ:時間→分変換
|
||||
MULTIPLY WRK-OVT-HOURS-NUM
|
||||
BY 60 GIVING WRK-OVT-MINUTES.
|
||||
*
|
||||
*** 種別・ステータス設定
|
||||
MOVE R01OVT-TYPE TO WRK-SQL-OVT-TYPE.
|
||||
MOVE CNS-STATUS-ACTIVE TO WRK-SQL-STATUS.
|
||||
*
|
||||
*** OVT-APPLICATIONSにINSERT
|
||||
EXEC SQL
|
||||
INSERT INTO OVT_APPLICATIONS
|
||||
(APPL_ID, EMP_ID, APPL_DATE, OVT_TYPE,
|
||||
START_TIME, END_TIME, OVT_HOURS, STATUS,
|
||||
UPDATED_AT)
|
||||
VALUES
|
||||
(:WRK-SQL-APPL-ID, :WRK-SQL-EMP-ID,
|
||||
:WRK-SQL-APPL-DATE, :WRK-SQL-OVT-TYPE,
|
||||
:WRK-SQL-START-TIME, :WRK-SQL-END-TIME,
|
||||
:WRK-SQL-OVT-HOURS, :WRK-SQL-STATUS,
|
||||
CURRENT_TIMESTAMP)
|
||||
END-EXEC.
|
||||
*
|
||||
IF SQLCODE NOT = 0
|
||||
*** 重複 → UPDATE
|
||||
EXEC SQL
|
||||
UPDATE OVT_APPLICATIONS SET
|
||||
STATUS = :WRK-SQL-STATUS,
|
||||
UPDATED_AT = CURRENT_TIMESTAMP
|
||||
WHERE APPL_ID = :WRK-SQL-APPL-ID
|
||||
END-EXEC
|
||||
IF SQLCODE NOT = 0
|
||||
PERFORM 9100DBERRSOR
|
||||
END-IF
|
||||
ADD 1 TO CUN-DBXUPD
|
||||
ELSE
|
||||
ADD 1 TO CUN-DBXINS
|
||||
END-IF.
|
||||
*
|
||||
ADD 1 TO CUN-COMMIT.
|
||||
*
|
||||
*** OVT-MONTHLY UPSERT
|
||||
PERFORM 2110MONTHLYUPSOR.
|
||||
*
|
||||
*** COMMIT判定
|
||||
IF CUN-COMMIT >= CNS-COMMIT-CNT
|
||||
PERFORM 2300COMMITDBX
|
||||
END-IF.
|
||||
*
|
||||
2100SUMMARYSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.1.1) *
|
||||
* サブモジュール名:OVT-MONTHLY UPSERT処理 *
|
||||
* 処理概要 : 月次集計テーブルへの追加/更新 *
|
||||
*****************************************************************
|
||||
2110MONTHLYUPSOR SECTION.
|
||||
*
|
||||
*** OVT-MONTHLY存在確認
|
||||
EXEC SQL
|
||||
SELECT OVT_HOURS, OVT_COUNT
|
||||
INTO :DB-OVT-HOURS, :DB-OVT-COUNT
|
||||
FROM OVT_MONTHLY
|
||||
WHERE EMP_ID = :WRK-SQL-EMP-ID
|
||||
AND YEAR_MONTH = :WRK-SQL-YEAR-MONTH
|
||||
AND OVT_TYPE = :WRK-SQL-OVT-TYPE
|
||||
END-EXEC.
|
||||
*
|
||||
IF SQLCODE = 0
|
||||
*** 既存レコードあり → 加算UPDATE
|
||||
EXEC SQL
|
||||
UPDATE OVT_MONTHLY SET
|
||||
OVT_HOURS = OVT_HOURS + :WRK-SQL-OVT-HOURS,
|
||||
OVT_COUNT = OVT_COUNT + 1,
|
||||
UPDATED_AT = CURRENT_TIMESTAMP
|
||||
WHERE EMP_ID = :WRK-SQL-EMP-ID
|
||||
AND YEAR_MONTH = :WRK-SQL-YEAR-MONTH
|
||||
AND OVT_TYPE = :WRK-SQL-OVT-TYPE
|
||||
END-EXEC
|
||||
IF SQLCODE NOT = 0
|
||||
PERFORM 9100DBERRSOR
|
||||
END-IF
|
||||
ELSE
|
||||
*** 新規 → INSERT
|
||||
EXEC SQL
|
||||
INSERT INTO OVT_MONTHLY
|
||||
(EMP_ID, YEAR_MONTH, OVT_TYPE,
|
||||
OVT_HOURS, OVT_COUNT, UPDATED_AT)
|
||||
VALUES
|
||||
(:WRK-SQL-EMP-ID, :WRK-SQL-YEAR-MONTH,
|
||||
:WRK-SQL-OVT-TYPE, :WRK-SQL-OVT-HOURS,
|
||||
1, CURRENT_TIMESTAMP)
|
||||
END-EXEC
|
||||
IF SQLCODE NOT = 0
|
||||
PERFORM 9100DBERRSOR
|
||||
END-IF
|
||||
END-IF.
|
||||
*
|
||||
2110MONTHLYUPSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.2) *
|
||||
* サブモジュール名:OVT-DBCLEAN→取消処理 *
|
||||
* 処理概要 : OVT-APPLICATIONS取消+OVT-MONTHLY減算 *
|
||||
*****************************************************************
|
||||
2200DBCLEANSOR SECTION.
|
||||
*
|
||||
*** SQLホスト変数設定
|
||||
MOVE R02APPL-ID TO WRK-SQL-APPL-ID.
|
||||
*
|
||||
*** OVT-APPLICATIONSから既存データ取得
|
||||
EXEC SQL
|
||||
SELECT EMP_ID, APPL_DATE, OVT_TYPE, OVT_HOURS
|
||||
INTO :WRK-SQL-EMP-ID, :WRK-SQL-APPL-DATE,
|
||||
:WRK-SQL-OVT-TYPE, :WRK-SQL-OVT-HOURS
|
||||
FROM OVT_APPLICATIONS
|
||||
WHERE APPL_ID = :WRK-SQL-APPL-ID
|
||||
END-EXEC.
|
||||
*
|
||||
IF SQLCODE NOT = 0
|
||||
*** 該当なし(孤立取消)→ ERROR-LOG + ABEND
|
||||
MOVE 20 TO WRK-ERR-CATEGORY
|
||||
STRING 'ORPHAN CANCEL APPL-ID='
|
||||
WRK-SQL-APPL-ID DELIMITED BY SIZE
|
||||
INTO WRK-ERR-DETAIL
|
||||
END-STRING
|
||||
MOVE WRK-ERR-CATEGORY TO W01ERR-CATEGORY
|
||||
MOVE WRK-ERR-DETAIL TO W01ERR-DETAIL
|
||||
WRITE W01OUTREC
|
||||
ADD 1 TO CUN-W01OUT
|
||||
PERFORM 9999ABDSOR
|
||||
END-IF.
|
||||
*
|
||||
*** 年月抽出
|
||||
MOVE WRK-SQL-APPL-DATE TO WRK-APPL-DATE-N.
|
||||
MOVE WRK-APPL-DATE-N(1:6) TO WRK-YEAR-MONTH.
|
||||
MOVE WRK-YEAR-MONTH TO WRK-SQL-YEAR-MONTH.
|
||||
*
|
||||
*** OVT-APPLICATIONSステータス更新(取消)
|
||||
EXEC SQL
|
||||
UPDATE OVT_APPLICATIONS SET
|
||||
STATUS = :CNS-STATUS-CANCEL,
|
||||
UPDATED_AT = CURRENT_TIMESTAMP
|
||||
WHERE APPL_ID = :WRK-SQL-APPL-ID
|
||||
END-EXEC.
|
||||
*
|
||||
IF SQLCODE NOT = 0
|
||||
PERFORM 9100DBERRSOR
|
||||
END-IF.
|
||||
*
|
||||
ADD 1 TO CUN-DBXUPD.
|
||||
ADD 1 TO CUN-COMMIT.
|
||||
*
|
||||
*** OVT-MONTHLY減算
|
||||
PERFORM 2210MONTHLYSUBSOR.
|
||||
*
|
||||
2200DBCLEANSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.2.1) *
|
||||
* サブモジュール名:OVT-MONTHLY減算処理 *
|
||||
* 処理概要 : 月次集計テーブルからの減算 *
|
||||
*****************************************************************
|
||||
2210MONTHLYSUBSOR SECTION.
|
||||
*
|
||||
*** リトライカウンタ設定
|
||||
MOVE 3 TO WRK-RETRY-CNT.
|
||||
*
|
||||
*** PERFORM TEST AFTER カバレッジ
|
||||
PERFORM TEST AFTER
|
||||
VARYING WRK-IDX
|
||||
FROM 1 BY 1
|
||||
UNTIL WRK-IDX > WRK-RETRY-CNT
|
||||
OR SQLCODE = 0
|
||||
EXEC SQL
|
||||
UPDATE OVT_MONTHLY SET
|
||||
OVT_HOURS = OVT_HOURS
|
||||
- :WRK-SQL-OVT-HOURS,
|
||||
OVT_COUNT = OVT_COUNT - 1,
|
||||
UPDATED_AT = CURRENT_TIMESTAMP
|
||||
WHERE EMP_ID = :WRK-SQL-EMP-ID
|
||||
AND YEAR_MONTH = :WRK-SQL-YEAR-MONTH
|
||||
AND OVT_TYPE = :WRK-SQL-OVT-TYPE
|
||||
END-EXEC
|
||||
IF SQLCODE NOT = 0
|
||||
EXEC SQL
|
||||
ROLLBACK WORK
|
||||
END-EXEC
|
||||
END-IF
|
||||
END-PERFORM.
|
||||
*
|
||||
IF SQLCODE NOT = 0
|
||||
*** 減算失敗 → データ不整合
|
||||
MOVE 21 TO WRK-ERR-CATEGORY
|
||||
STRING 'MONTHLY SUBTRACT FAIL APPL-ID='
|
||||
WRK-SQL-APPL-ID DELIMITED BY SIZE
|
||||
INTO WRK-ERR-DETAIL
|
||||
END-STRING
|
||||
MOVE WRK-ERR-CATEGORY TO W01ERR-CATEGORY
|
||||
MOVE WRK-ERR-DETAIL TO W01ERR-DETAIL
|
||||
WRITE W01OUTREC
|
||||
ADD 1 TO CUN-W01OUT
|
||||
PERFORM 9999ABDSOR
|
||||
END-IF.
|
||||
*
|
||||
ADD 1 TO CUN-DBXUPD.
|
||||
ADD 1 TO CUN-COMMIT.
|
||||
*
|
||||
*** COMMIT判定
|
||||
IF CUN-COMMIT >= CNS-COMMIT-CNT
|
||||
PERFORM 2300COMMITDBX
|
||||
END-IF.
|
||||
*
|
||||
2210MONTHLYSUBSOR-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(2.3) *
|
||||
* サブモジュール名:COMMIT処理 *
|
||||
* 処理概要 : DB COMMIT発行 *
|
||||
*****************************************************************
|
||||
2300COMMITDBX SECTION.
|
||||
*
|
||||
*** COMMIT
|
||||
EXEC SQL
|
||||
COMMIT WORK
|
||||
END-EXEC.
|
||||
*
|
||||
MOVE ZERO TO CUN-COMMIT.
|
||||
*
|
||||
2300COMMITDBX-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO:(3.0) *
|
||||
* サブモジュール名:終了処理 *
|
||||
* 処理概要 : 最終COMMIT・ファイルクローズ・件数出力 *
|
||||
*****************************************************************
|
||||
3000STPSOR SECTION.
|
||||
*
|
||||
*** 最終COMMIT
|
||||
IF CUN-COMMIT > ZERO
|
||||
PERFORM 2300COMMITDBX
|
||||
END-IF.
|
||||
*
|
||||
*** 入出力ファイルCLOSE
|
||||
CLOSE R01INNFIL
|
||||
R02INNFIL
|
||||
W01OUTFIL.
|
||||
*
|
||||
*** 件数メッセージ出力
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'ZAN06R01' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||
PERFORM 4000MSGOUTSOR.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||
MOVE 'ZAN06R02' TO M00UMKDATS22-01.
|
||||
MOVE CUN-R02INN 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.
|
||||
*
|
||||
INITIALIZE M00MHOPAR.
|
||||
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||
MOVE 'ZAN06W01' 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エラー処理 *
|
||||
* 処理概要 : DBエラー→ERROR-LOG出力+ROLLBACK+ABEND *
|
||||
*****************************************************************
|
||||
9100DBERRSOR SECTION.
|
||||
*
|
||||
*** ERROR-LOG出力
|
||||
MOVE 30 TO WRK-ERR-CATEGORY.
|
||||
MOVE SQLCODE TO WRK-SQLCODE-DISP.
|
||||
STRING 'DB ERROR SQLCODE='
|
||||
WRK-SQLCODE-DISP DELIMITED BY SIZE
|
||||
' APPL-ID='
|
||||
WRK-SQL-APPL-ID DELIMITED BY SIZE
|
||||
INTO WRK-ERR-DETAIL
|
||||
END-STRING.
|
||||
MOVE WRK-ERR-CATEGORY TO W01ERR-CATEGORY.
|
||||
MOVE WRK-ERR-DETAIL TO W01ERR-DETAIL.
|
||||
WRITE W01OUTREC.
|
||||
ADD 1 TO CUN-W01OUT.
|
||||
*
|
||||
*** ROLLBACK
|
||||
EXEC SQL
|
||||
ROLLBACK WORK
|
||||
END-EXEC.
|
||||
*
|
||||
MOVE ZERO TO CUN-COMMIT.
|
||||
*
|
||||
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,57 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. SUB01DAT.
|
||||
*****************************************************************
|
||||
* システム名 : 残業統計管理システム *
|
||||
* プログラムID : SUB01DAT *
|
||||
* プログラム名 : 運用日付取得サブ *
|
||||
* 作成日 : 2026-06-14 *
|
||||
* 処理概要 : FUNCTION CURRENT-DATEにより現在日付を取得 *
|
||||
* しYYYYMMDD形式で返す *
|
||||
* *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 26-06-14 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
DATA DIVISION.
|
||||
*****************************************************************
|
||||
WORKING-STORAGE SECTION.
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
03 WRK-SYS-DATE PIC X(026).
|
||||
03 WRK-DATE-8 PIC 9(008).
|
||||
*
|
||||
*****************************************************************
|
||||
* リンケージエリア *
|
||||
*****************************************************************
|
||||
LINKAGE SECTION.
|
||||
*
|
||||
01 D01UBSPAR.
|
||||
03 D01FKICOD PIC S9(004) COMP.
|
||||
03 D01UBSUDATE PIC 9(008).
|
||||
*
|
||||
PROCEDURE DIVISION USING D01UBSPAR.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
* 処理概要 : メインコントロール処理 *
|
||||
*****************************************************************
|
||||
0000MAINSOR SECTION.
|
||||
*
|
||||
*** 現在日付を取得する
|
||||
MOVE FUNCTION CURRENT-DATE TO WRK-SYS-DATE.
|
||||
*** YYYYMMDD部分を抽出
|
||||
MOVE WRK-SYS-DATE(1:8) TO D01UBSUDATE.
|
||||
*** 正常終了
|
||||
MOVE ZERO TO D01FKICOD.
|
||||
*
|
||||
0000MAINSOR-EXT.
|
||||
GOBACK.
|
||||
@@ -0,0 +1,76 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. SUB02MSG.
|
||||
*****************************************************************
|
||||
* システム名 : 残業統計管理システム *
|
||||
* プログラムID : SUB02MSG *
|
||||
* プログラム名 : メッセージ編集出力サブ *
|
||||
* 作成日 : 2026-06-14 *
|
||||
* 処理概要 : メッセージ番号とパラメータを編集し *
|
||||
* 標準出力へ出力する *
|
||||
* *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 26-06-14 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
DATA DIVISION.
|
||||
*****************************************************************
|
||||
WORKING-STORAGE SECTION.
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
03 WRK-MSG-LINE PIC X(303).
|
||||
*
|
||||
*****************************************************************
|
||||
* リンケージエリア *
|
||||
*****************************************************************
|
||||
LINKAGE SECTION.
|
||||
*
|
||||
01 M00MHOPAR.
|
||||
03 M00MSGCOD PIC 9(003).
|
||||
03 M00UMKDATS22-01 PIC X(030).
|
||||
03 M00UMKDATS22-02 PIC X(030).
|
||||
03 M00UMKDATS22-03 PIC X(030).
|
||||
03 M00UMKDATS22-04 PIC X(030).
|
||||
03 M00UMKDATS22-05 PIC X(030).
|
||||
03 M00UMKDATS22-06 PIC X(030).
|
||||
03 M00UMKDATS22-07 PIC X(030).
|
||||
03 M00UMKDATS22-08 PIC X(030).
|
||||
03 M00UMKDATS22-09 PIC X(030).
|
||||
03 M00UMKDATS22-10 PIC X(030).
|
||||
*
|
||||
PROCEDURE DIVISION USING M00MHOPAR.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
* 処理概要 : メインコントロール処理 *
|
||||
*****************************************************************
|
||||
0000MAINSOR SECTION.
|
||||
*
|
||||
*** メッセージ行を編集する
|
||||
STRING 'MSG['
|
||||
M00MSGCOD
|
||||
'] P1='
|
||||
M00UMKDATS22-01
|
||||
' P2='
|
||||
M00UMKDATS22-02
|
||||
' P3='
|
||||
M00UMKDATS22-03
|
||||
' P4='
|
||||
M00UMKDATS22-04
|
||||
' P5='
|
||||
M00UMKDATS22-05
|
||||
INTO WRK-MSG-LINE
|
||||
END-STRING.
|
||||
*** 標準出力へ出力
|
||||
DISPLAY WRK-MSG-LINE.
|
||||
*
|
||||
0000MAINSOR-EXT.
|
||||
GOBACK.
|
||||
@@ -0,0 +1,55 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. SUB03END.
|
||||
*****************************************************************
|
||||
* システム名 : 残業統計管理システム *
|
||||
* プログラムID : SUB03END *
|
||||
* プログラム名 : ABEND処理サブ *
|
||||
* 作成日 : 2026-06-14 *
|
||||
* 処理概要 : ABENDコードを表示しプログラムを異常終了 *
|
||||
* させる *
|
||||
* *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 26-06-14 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
DATA DIVISION.
|
||||
*****************************************************************
|
||||
WORKING-STORAGE SECTION.
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
03 WRK-ABEND-MSG PIC X(020).
|
||||
*
|
||||
*****************************************************************
|
||||
* リンケージエリア *
|
||||
*****************************************************************
|
||||
LINKAGE SECTION.
|
||||
*
|
||||
01 E01ABDPAR.
|
||||
03 E01ABDCOD PIC 9(003).
|
||||
*
|
||||
PROCEDURE DIVISION USING E01ABDPAR.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
* 処理概要 : メインコントロール処理 *
|
||||
*****************************************************************
|
||||
0000MAINSOR SECTION.
|
||||
*
|
||||
*** 異常終了メッセージを表示する
|
||||
MOVE 'ABEND CODE=' TO WRK-ABEND-MSG.
|
||||
MOVE E01ABDCOD TO WRK-ABEND-MSG(12:3).
|
||||
DISPLAY WRK-ABEND-MSG.
|
||||
*** プログラムを異常終了させる
|
||||
STOP RUN.
|
||||
*
|
||||
0000MAINSOR-EXT.
|
||||
GOBACK.
|
||||
@@ -0,0 +1,213 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. SUB04CHK.
|
||||
*****************************************************************
|
||||
* システム名 : 残業統計管理システム *
|
||||
* プログラムID : SUB04CHK *
|
||||
* プログラム名 : 項目チェックサブ *
|
||||
* 作成日 : 2026-06-14 *
|
||||
* 処理概要 : 指定されたタイプによりデータ項目の妥当性 *
|
||||
* をチェックする *
|
||||
* *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 26-06-14 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
DATA DIVISION.
|
||||
*****************************************************************
|
||||
WORKING-STORAGE SECTION.
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
03 WRK-RETURN-CODE PIC 9(004).
|
||||
03 WRK-SIGN PIC S9(004).
|
||||
03 WRK-NN PIC 9(004).
|
||||
03 WRK-DIGIT PIC 9(004).
|
||||
03 WRK-ALPHA PIC 9(004).
|
||||
*
|
||||
*****************************************************************
|
||||
* リンケージエリア *
|
||||
*****************************************************************
|
||||
LINKAGE SECTION.
|
||||
*
|
||||
01 C01CHKPAR.
|
||||
03 C01CHKTYP PIC X(008).
|
||||
03 C01CHKDAT PIC X(080).
|
||||
03 C01CHKRRC PIC 9(004).
|
||||
*
|
||||
PROCEDURE DIVISION USING C01CHKPAR.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
* 処理概要 : メインコントロール処理 *
|
||||
*****************************************************************
|
||||
0000MAINSOR SECTION.
|
||||
*
|
||||
*** チェックタイプにより分岐する
|
||||
EVALUATE C01CHKTYP
|
||||
*** 日付チェック(YYYYMMDD)
|
||||
WHEN 'DATE'
|
||||
PERFORM 1000CHKDATE
|
||||
*** 時刻チェック(HHMM)
|
||||
WHEN 'TIME'
|
||||
PERFORM 2000CHKTIME
|
||||
*** 数字チェック
|
||||
WHEN 'NUM'
|
||||
PERFORM 3000CHKNUM
|
||||
*** 社員番号チェック(英数字8桁)
|
||||
WHEN 'EMPID'
|
||||
PERFORM 4000CHKEMP
|
||||
WHEN OTHER
|
||||
MOVE 9999 TO WRK-RETURN-CODE
|
||||
END-EVALUATE.
|
||||
*
|
||||
*** 復帰コードを設定して復帰
|
||||
MOVE WRK-RETURN-CODE TO C01CHKRRC.
|
||||
*
|
||||
0000MAINSOR-EXT.
|
||||
GOBACK.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.0) *
|
||||
* サブモジュール名: 日付チェック *
|
||||
* 処理概要 : YYYYMMDD形式の妥当性チェック *
|
||||
*****************************************************************
|
||||
1000CHKDATE SECTION.
|
||||
*
|
||||
*** 月チェック(桁位置5〜6: 01-12)
|
||||
MOVE FUNCTION NUMVAL(
|
||||
C01CHKDAT(5:2)) TO WRK-NN.
|
||||
IF (WRK-NN < 1) OR (WRK-NN > 12) THEN
|
||||
MOVE 0001 TO WRK-RETURN-CODE
|
||||
GO TO 1000CHKDATE-EXT
|
||||
END-IF.
|
||||
*** 日チェック(桁位置7〜8: 01-31)
|
||||
MOVE FUNCTION NUMVAL(
|
||||
C01CHKDAT(7:2)) TO WRK-NN.
|
||||
IF (WRK-NN < 1) OR (WRK-NN > 31) THEN
|
||||
MOVE 0001 TO WRK-RETURN-CODE
|
||||
GO TO 1000CHKDATE-EXT
|
||||
END-IF.
|
||||
*** 正常
|
||||
MOVE ZERO TO WRK-RETURN-CODE.
|
||||
*
|
||||
1000CHKDATE-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.0) *
|
||||
* サブモジュール名: 時刻チェック *
|
||||
* 処理概要 : HHMM形式の妥当性チェック *
|
||||
*****************************************************************
|
||||
2000CHKTIME SECTION.
|
||||
*
|
||||
*** 時チェック(桁位置1〜2: 00-23)
|
||||
MOVE FUNCTION NUMVAL(
|
||||
C01CHKDAT(1:2)) TO WRK-NN.
|
||||
IF (WRK-NN > 23) THEN
|
||||
MOVE 0002 TO WRK-RETURN-CODE
|
||||
GO TO 2000CHKTIME-EXT
|
||||
END-IF.
|
||||
*** 分チェック(桁位置3〜4: 00-59)
|
||||
MOVE FUNCTION NUMVAL(
|
||||
C01CHKDAT(3:2)) TO WRK-NN.
|
||||
IF (WRK-NN > 59) THEN
|
||||
MOVE 0002 TO WRK-RETURN-CODE
|
||||
GO TO 2000CHKTIME-EXT
|
||||
END-IF.
|
||||
*** 正常
|
||||
MOVE ZERO TO WRK-RETURN-CODE.
|
||||
*
|
||||
2000CHKTIME-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (3.0) *
|
||||
* サブモジュール名: 数字チェック *
|
||||
* 処理概要 : 全桁が数字であることをチェック *
|
||||
*****************************************************************
|
||||
3000CHKNUM SECTION.
|
||||
*
|
||||
*** 空チェック(全スペース→正常=オプショナル)
|
||||
INSPECT C01CHKDAT
|
||||
TALLYING WRK-NN FOR
|
||||
LEADING SPACES.
|
||||
IF WRK-NN = LENGTH OF C01CHKDAT
|
||||
MOVE ZERO TO WRK-RETURN-CODE
|
||||
GO TO 3000CHKNUM-EXT
|
||||
END-IF.
|
||||
*** 数字(0-9)とスペースのみをカウント
|
||||
INSPECT C01CHKDAT
|
||||
TALLYING WRK-NN
|
||||
FOR ALL "0" "1" "2" "3" "4"
|
||||
"5" "6" "7" "8" "9"
|
||||
SPACE.
|
||||
IF WRK-NN NOT = LENGTH OF C01CHKDAT
|
||||
MOVE 0003 TO WRK-RETURN-CODE
|
||||
GO TO 3000CHKNUM-EXT
|
||||
END-IF.
|
||||
*** 正常
|
||||
MOVE ZERO TO WRK-RETURN-CODE.
|
||||
*
|
||||
3000CHKNUM-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (4.0) *
|
||||
* サブモジュール名: 社員番号チェック *
|
||||
* 処理概要 : 英数字8桁のチェック *
|
||||
*****************************************************************
|
||||
4000CHKEMP SECTION.
|
||||
*
|
||||
*** 桁数チェック(8桁)
|
||||
IF C01CHKDAT(9:72) NOT = SPACES THEN
|
||||
MOVE 0004 TO WRK-RETURN-CODE
|
||||
GO TO 4000CHKEMP-EXT
|
||||
END-IF.
|
||||
*** 空チェック(全8桁がスペース→必須エラー)
|
||||
IF C01CHKDAT(1:8) = SPACES
|
||||
MOVE 0004 TO WRK-RETURN-CODE
|
||||
GO TO 4000CHKEMP-EXT
|
||||
END-IF.
|
||||
*** 数字(0-9)カウント
|
||||
MOVE ZERO TO WRK-DIGIT.
|
||||
INSPECT C01CHKDAT(1:8)
|
||||
TALLYING WRK-DIGIT
|
||||
FOR ALL "0" "1" "2" "3" "4"
|
||||
"5" "6" "7" "8" "9".
|
||||
*** 英字(A-Z a-z)カウント
|
||||
MOVE ZERO TO WRK-ALPHA.
|
||||
INSPECT C01CHKDAT(1:8)
|
||||
TALLYING WRK-ALPHA
|
||||
FOR ALL "A" "B" "C" "D" "E"
|
||||
"F" "G" "H" "I" "J"
|
||||
"K" "L" "M" "N" "O"
|
||||
"P" "Q" "R" "S" "T"
|
||||
"U" "V" "W" "X" "Y"
|
||||
"Z"
|
||||
"a" "b" "c" "d" "e"
|
||||
"f" "g" "h" "i" "j"
|
||||
"k" "l" "m" "n" "o"
|
||||
"p" "q" "r" "s" "t"
|
||||
"u" "v" "w" "x" "y"
|
||||
"z".
|
||||
*** スペースカウント
|
||||
MOVE ZERO TO WRK-NN.
|
||||
INSPECT C01CHKDAT(1:8)
|
||||
TALLYING WRK-NN
|
||||
FOR ALL SPACE.
|
||||
*** 英数字以外(特殊文字)がないかチェック
|
||||
ADD WRK-DIGIT TO WRK-ALPHA.
|
||||
ADD WRK-NN TO WRK-ALPHA.
|
||||
IF WRK-ALPHA NOT = 8
|
||||
MOVE 0004 TO WRK-RETURN-CODE
|
||||
GO TO 4000CHKEMP-EXT
|
||||
END-IF.
|
||||
*** 正常
|
||||
MOVE ZERO TO WRK-RETURN-CODE.
|
||||
*
|
||||
4000CHKEMP-EXT.
|
||||
EXIT.
|
||||
@@ -0,0 +1,153 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. SUB05TIM.
|
||||
*****************************************************************
|
||||
* システム名 : 残業統計管理システム *
|
||||
* プログラムID : SUB05TIM *
|
||||
* プログラム名 : 時刻丸め計算サブ *
|
||||
* 作成日 : 2026-06-14 *
|
||||
* 処理概要 : 時間値を指定単位で丸め計算する *
|
||||
* *
|
||||
*****************************************************************
|
||||
* 更新履歴 *
|
||||
*---------------------------------------------------------------*
|
||||
* 更新日付 担当者 更新内容 *
|
||||
*---------------------------------------------------------------*
|
||||
* 26-06-14 @@@ 新規作成 *
|
||||
* *
|
||||
*****************************************************************
|
||||
ENVIRONMENT DIVISION.
|
||||
CONFIGURATION SECTION.
|
||||
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||
*
|
||||
DATA DIVISION.
|
||||
*****************************************************************
|
||||
WORKING-STORAGE SECTION.
|
||||
*****************************************************************
|
||||
01 WRKARA.
|
||||
03 WRK-MINUTES PIC S9(005).
|
||||
03 WRK-HOURS PIC S9(005)V9(001).
|
||||
03 WRK-REMAINDER PIC S9(005).
|
||||
*
|
||||
*****************************************************************
|
||||
* リンケージエリア *
|
||||
*****************************************************************
|
||||
LINKAGE SECTION.
|
||||
*
|
||||
01 T01TIMPAR.
|
||||
03 T01TIMHRS PIC 9(004)V9(001).
|
||||
03 T01TIMOUT PIC 9(004)V9(001).
|
||||
03 T01TIMRRC PIC 9(004).
|
||||
*
|
||||
PROCEDURE DIVISION USING T01TIMPAR.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (0.0) *
|
||||
* サブモジュール名: 制御処理 *
|
||||
* 処理概要 : メインコントロール処理 *
|
||||
*****************************************************************
|
||||
0000MAINSOR SECTION.
|
||||
*
|
||||
*** 丸めモードにより分岐する
|
||||
EVALUATE T01TIMRRC
|
||||
*** モード0: 0.5時間単位・切上
|
||||
WHEN 0
|
||||
PERFORM 1000RNDHALF
|
||||
*** モード1: 0.1時間単位・切上
|
||||
WHEN 1
|
||||
PERFORM 2000RNDUP
|
||||
*** モード2: 0.1時間単位・切捨
|
||||
WHEN 2
|
||||
PERFORM 3000RNDDOWN
|
||||
*** モード3: 単純四捨五入(0.1h単位)
|
||||
WHEN 3
|
||||
PERFORM 4000RNDNORMAL
|
||||
WHEN OTHER
|
||||
*** モード指定なし→そのまま出力
|
||||
MOVE T01TIMHRS TO T01TIMOUT
|
||||
END-EVALUATE.
|
||||
*
|
||||
0000MAINSOR-EXT.
|
||||
GOBACK.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (1.0) *
|
||||
* サブモジュール名: 0.5時間単位・切上 *
|
||||
* 処理概要 : 30分単位で切り上げる *
|
||||
*****************************************************************
|
||||
1000RNDHALF SECTION.
|
||||
*
|
||||
*** 時間→分変換
|
||||
COMPUTE WRK-MINUTES =
|
||||
T01TIMHRS * 60.
|
||||
*** 30分単位で切り上げ
|
||||
DIVIDE WRK-MINUTES BY 30
|
||||
GIVING WRK-HOURS
|
||||
REMAINDER WRK-REMAINDER.
|
||||
IF WRK-REMAINDER > 0 THEN
|
||||
COMPUTE WRK-HOURS =
|
||||
WRK-HOURS + 1
|
||||
END-IF.
|
||||
*** 分→時間変換
|
||||
COMPUTE T01TIMOUT =
|
||||
WRK-HOURS * 0.5.
|
||||
*
|
||||
1000RNDHALF-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (2.0) *
|
||||
* サブモジュール名: 0.1時間単位・切上 *
|
||||
* 処理概要 : 6分単位で切り上げる *
|
||||
*****************************************************************
|
||||
2000RNDUP SECTION.
|
||||
*
|
||||
*** 時間→分変換
|
||||
COMPUTE WRK-MINUTES =
|
||||
T01TIMHRS * 60.
|
||||
*** 6分単位で切り上げ
|
||||
DIVIDE WRK-MINUTES BY 6
|
||||
GIVING WRK-HOURS
|
||||
REMAINDER WRK-REMAINDER.
|
||||
IF WRK-REMAINDER > 0 THEN
|
||||
COMPUTE WRK-HOURS =
|
||||
WRK-HOURS + 1
|
||||
END-IF.
|
||||
*** 分→時間変換
|
||||
COMPUTE T01TIMOUT =
|
||||
WRK-HOURS * 0.1.
|
||||
*
|
||||
2000RNDUP-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (3.0) *
|
||||
* サブモジュール名: 0.1時間単位・切捨 *
|
||||
* 処理概要 : 6分単位で切り捨てる *
|
||||
*****************************************************************
|
||||
3000RNDDOWN SECTION.
|
||||
*
|
||||
*** 時間→分変換
|
||||
COMPUTE WRK-MINUTES =
|
||||
T01TIMHRS * 60.
|
||||
*** 6分単位で切り捨て
|
||||
DIVIDE WRK-MINUTES BY 6
|
||||
GIVING WRK-HOURS
|
||||
REMAINDER WRK-REMAINDER.
|
||||
*** 分→時間変換
|
||||
COMPUTE T01TIMOUT =
|
||||
WRK-HOURS * 0.1.
|
||||
*
|
||||
3000RNDDOWN-EXT.
|
||||
EXIT.
|
||||
*****************************************************************
|
||||
* サブモジュールNO: (4.0) *
|
||||
* サブモジュール名: 単純四捨五入(0.1h単位) *
|
||||
* 処理概要 : 0.05を加算して切捨 *
|
||||
*****************************************************************
|
||||
4000RNDNORMAL SECTION.
|
||||
*
|
||||
*** 0.05を加算してV9(1)に収める
|
||||
COMPUTE WRK-HOURS =
|
||||
T01TIMHRS + 0.05.
|
||||
*** V9(1)への代入で小数点第2位以下切捨
|
||||
MOVE WRK-HOURS TO T01TIMOUT.
|
||||
*
|
||||
4000RNDNORMAL-EXT.
|
||||
EXIT.
|
||||
@@ -0,0 +1,51 @@
|
||||
# KIN01INP 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: KIN01INP
|
||||
- **プログラム名**: 休暇申請CSV取込・検証処理
|
||||
- **処理概要**: CSV形式の休暇申請ファイルを読み込み、休暇種別テーブル検索と項目チェックを行い、ステータスによってWORK-LEAVEまたはERROR-LOGへ振り分ける。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||
|------|---------------|------|-------------|-----------|--------|
|
||||
| KIN01R01 | CSV-INPUT | 順編成 | F (固定長) | 80B | なし(自前定義) |
|
||||
| KIN01W01 | WORK-LEAVE | 順編成 | F (固定長) | 80B | KIN01REC |
|
||||
| KIN01W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | KIN05REC |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| KIN01REC | レコード定義(W01出力ファイル) | FILE SECTION |
|
||||
| KIN05REC | エラーログレコード定義(W02出力ファイル) | FILE SECTION |
|
||||
| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANCHKAC | 項目チェックサブPGM連絡領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||
| SUB04CHK | 日付/時刻/社員番号妥当性チェック | 2030VALIDATESOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
なし(DB操作なし)
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→休暇種別テーブル設定→運用日付取得→OPEN→初回読込)
|
||||
2. CSV分解(UNSTRINGで8項目に分解)
|
||||
3. 休暇種別テーブル検索(SEARCH)
|
||||
4. エラー前提判定
|
||||
- フィールド数≠8 → ERROR-LOG出力(種別:F)
|
||||
- 休暇種別未発見 → ERROR-LOG出力(種別:L)
|
||||
5. ステータス判定
|
||||
- ステータス'1'(有効)→ 項目チェック(SUB04CHK: 開始日付/時刻、終了日付/時刻)→ WORK-LEAVE出力(APPL-ID=0)
|
||||
- ステータス'9'(取消)→ WORK-LEAVE出力(APPL-ID保持、チェックなし)
|
||||
- その他(エラー)→ ERROR-LOG出力(種別:S)
|
||||
6. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||
@@ -0,0 +1,59 @@
|
||||
# KIN02UPD 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: KIN02UPD
|
||||
- **プログラム名**: 休暇申請DB更新処理
|
||||
- **処理概要**: WORK-LEAVEファイルの各レコードをDB2テーブルLEAVE_RECORDSに反映する。ステータスに応じて新規登録(INSERT)、変更(DELETE+INSERT)、取消(DELETE)を行う。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||
|------|---------------|------|-------------|-----------|--------|
|
||||
| KIN01W01 | WORK-LEAVE | 順編成 | F (固定長) | 80B | KIN01REC |
|
||||
| KIN02W01 | ERROR-LOG | 順編成 | V (可変長) | 200B | KIN05REC |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| KIN01REC | レコード定義(R01入力ファイル) | FILE SECTION |
|
||||
| KIN05REC | エラーログレコード定義(W01出力) | FILE SECTION |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
| SQLCA | SQL通信領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
| テーブル名 | 操作 | 備考 |
|
||||
|-----------|------|------|
|
||||
| LEAVE_RECORDS | INSERT, DELETE | APPLICATION_ID=0→INSERT, >0→DELETE+INSERT, STATUS='9'→DELETE |
|
||||
|
||||
## EXEC SQL一覧
|
||||
|
||||
| SQL種別 | 処理 | 実行条件 | 使用箇所 |
|
||||
|---------|------|---------|---------|
|
||||
| CONNECT | TO 'data/kin.db' | 常時 | 1000ITTSOR |
|
||||
| INSERT | LEAVE_RECORDSへ追加 | STATUS='1' AND APPL-ID=0 | 2110INSERTSOR |
|
||||
| DELETE | APPLICATION_ID一致削除+INSERT | STATUS='1' AND APPL-ID>0 | 2120UPDATESOR |
|
||||
| INSERT | LEAVE_RECORDSへ追加(変更後) | STATUS='1' AND APPL-ID>0 | 2120UPDATESOR |
|
||||
| DELETE | APPLICATION_ID一致削除 | STATUS='9' | 2130DELETESOR |
|
||||
| COMMIT | WORK | 常時 | 3000STPSOR |
|
||||
| ROLLBACK | WORK | SQLエラー時 | 9100DBERRSOR |
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→DB接続→OPEN(R01/W01)→初回読込)
|
||||
2. ホスト変数設定(R01→WS-*)
|
||||
3. ロジック分岐(EVALUATE)
|
||||
- STATUS='1' AND APPL-ID=0 → INSERT
|
||||
- STATUS='1' AND APPL-ID>0 → DELETE + INSERT
|
||||
- STATUS='9' → DELETE
|
||||
- その他 → スキップ
|
||||
4. SQLエラー時 → ROLLBACK + ERROR-LOG出力(W01) + エラーメッセージ + ABEND
|
||||
5. 終了処理(COMMIT→CLOSE(R01/W01)→件数出力→終了メッセージ)
|
||||
@@ -0,0 +1,61 @@
|
||||
# KIN03EXP 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: KIN03EXP
|
||||
- **プログラム名**: 休暇日別展開処理
|
||||
- **処理概要**: LEAVE_RECORDS(DB2)より有効申請(STATUS='1')を読込み、開始日〜終了日の期間を日別に展開し、休日・週末を除外してLEAVE-DAILYファイルを出力する。社員番号キーブレイクで小計出力を行う。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||
|------|---------------|------|-------------|-----------|--------|
|
||||
| KIN02W01.DAT | LEAVE-DAILY | 順編成 | F (固定長) | 80B | KIN02REC |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| KIN02REC | レコード定義(W01出力ファイル) | FILE SECTION |
|
||||
| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
| SQLCA | SQL通信領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||
| br_fetch_next | SQLカーソル次行FETCH(bridge) | 1100C1FETCHSOR, 1200HDINNSOR |
|
||||
| br_get_col | SQLカラム値取得(bridge) | 1100C1FETCHSOR, 1200HDINNSOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
| テーブル名 | 操作 | 備考 |
|
||||
|-----------|------|------|
|
||||
| LEAVE_RECORDS | SELECT | STATUS='1'、ORDER BY EMP_ID, START_DATE |
|
||||
| HOLIDAY_CALENDAR | SELECT | 休日マスタ、ORDER BY HOLIDAY_DATE |
|
||||
|
||||
## EXEC SQL一覧
|
||||
|
||||
| SQL種別 | 処理 | 実行条件 | 使用箇所 |
|
||||
|---------|------|---------|---------|
|
||||
| CONNECT | TO 'data/kin.db' | 常時 | 1000ITTSOR |
|
||||
| SELECT | HOLIDAY_DATE FROM HOLIDAY_CALENDAR | 常時(初回のみ) | 1200HDINNSOR |
|
||||
| SELECT | LEAVE_RECORDS(全件) | 常時(初回のみ) | 1100C1INITSOR |
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→DB接続→運用日付取得)
|
||||
2. 休日カレンダー全件読込(WORKING-STORAGEに格納)
|
||||
3. 出力ファイルOPEN
|
||||
4. DB初回FETCH(LEAVE_RECORDS:STATUS='1'、ORDER BY EMP_ID, START_DATE)
|
||||
5. 社員番号キーブレイクループ
|
||||
- 社員別に期間内を日別展開
|
||||
- 週末判定(MOD(INTEGER-OF-DATE,7)=0/6)→除外
|
||||
- 休日判定(SEARCH ALL on WRK-HOLIDAY-TABLE)→除外
|
||||
- 非週末・非休日 → LEAVE-DAILY出力
|
||||
- 日付加算(月跨ぎ/閏年対応)
|
||||
- キーブレイク時:社員別小計メッセージ出力
|
||||
6. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||
@@ -0,0 +1,48 @@
|
||||
# ZAN01CHK 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: ZAN01CHK
|
||||
- **プログラム名**: 残業申請振分処理
|
||||
- **処理概要**: CSV形式の残業申請ファイルを読み込み、ステータスによって適切に振り分ける。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||
|------|---------------|------|-------------|-----------|--------|
|
||||
| ZAN01R01 | 入力CSV | 順編成 | F (固定長) | 80B | なし(自前定義) |
|
||||
| ZAN01W01 | OVT-APPLY | 順編成 | F (固定長) | 80B | ZAN01REC |
|
||||
| ZAN01W02 | OVT-CANCEL | 順編成 | F (固定長) | 80B | ZAN01REC |
|
||||
| ZAN01W03 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| ZAN01REC | レコード定義(W01/W02出力ファイル) | FILE SECTION |
|
||||
| ZAN05REC | エラーログレコード定義(W03出力ファイル) | FILE SECTION |
|
||||
| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANCHKAC | 項目チェックサブPGM連絡領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||
| SUB04CHK | 日付/社員番号妥当性チェック | 2020VALIDATESOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
なし(DB操作なし)
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→運用日付取得→OPEN→初回読込)
|
||||
2. CSV分解(UNSTRING)
|
||||
3. ステータス判定
|
||||
- ステータス'0'/'1'(有効)→ 項目チェック(SUB04CHK)→ W01出力
|
||||
- ステータス'9'(取消)→ W02出力
|
||||
- その他(エラー)→ W03出力
|
||||
4. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||
@@ -0,0 +1,45 @@
|
||||
# ZAN02CHK 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: ZAN02CHK
|
||||
- **プログラム名**: 時間帯重複チェック処理
|
||||
- **処理概要**: OVT-APPLYファイルの同一社員・同一日付内の開始時刻と終了時刻の重複をチェックする。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||
|------|---------------|------|-------------|-----------|--------|
|
||||
| ZAN02R01 | OVT-APPLY | 順編成 | F (固定長) | 80B | ZAN01REC |
|
||||
| ZAN02W01 | OVT-NODUP | 順編成 | F (固定長) | 80B | ZAN01REC |
|
||||
| ZAN02W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| ZAN01REC | レコード定義(R01入力/W01出力) | FILE SECTION |
|
||||
| ZAN05REC | エラーログレコード定義(W02出力) | FILE SECTION |
|
||||
| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
なし(DB操作なし)
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→運用日付取得→OPEN→初回読込)
|
||||
2. 1件目をそのままW01出力+前レコード保持
|
||||
3. メイン処理:キー比較
|
||||
- 同一社員+同一日付 かつ 前終了時刻>現開始時刻 → 重複エラー(W02出力)
|
||||
- 同一社員+同一日付 かつ 重複なし → W01出力+前レコード更新
|
||||
- キーブレイク → 前レコード更新+W01出力
|
||||
4. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||
@@ -0,0 +1,49 @@
|
||||
# ZAN03CHK 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: ZAN03CHK
|
||||
- **プログラム名**: 打刻時間照合処理
|
||||
- **処理概要**: OVT-NODUPとPUNCH-SORTEDを突合し申請時間帯の照合を行う。申請時間帯が出勤〜退勤の範囲内かを確認する。申請日が休日かを判定しOVT-TYPEを付加する。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||
|------|---------------|------|-------------|-----------|--------|
|
||||
| ZAN03R01 | OVT-NODUP | 順編成 | F (固定長) | 80B | ZAN01REC |
|
||||
| ZAN03R02 | PUNCH-SORTED | 順編成 | F (固定長) | 80B | なし(自前定義:20B+56B) |
|
||||
| ZAN03R03 | HOLIDAY | 順編成 | F (固定長) | 80B | なし(自前定義:9B+71B) |
|
||||
| ZAN03W01 | OVT-CHECKED | 順編成 | F (固定長) | 80B | ZAN01REC |
|
||||
| ZAN03W02 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| ZAN01REC | レコード定義(R01入力/W01出力) | FILE SECTION |
|
||||
| ZAN05REC | エラーログレコード定義(W02出力) | FILE SECTION |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
なし(DB操作なし)
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→OPEN)
|
||||
2. 休日ファイル(R03)全件読込→HOLIDAY-TABLE設定(OCCURS 1~366)
|
||||
3. メイン処理:R01とR02のキー比較(社員番号+日付)
|
||||
- R01 < R02 → 打刻データなしエラー(W02出力)
|
||||
- R01 = R02 → 時間範囲チェック
|
||||
- 申請時間帯が出勤〜退勤の範囲内 → OVT-TYPE設定(SEARCH ALL休日判定)→ W01出力
|
||||
- 範囲外 → エラー(W02出力)
|
||||
- R01 > R02 → R02読み飛ばし
|
||||
4. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||
|
||||
## 備考
|
||||
- SUB01DAT不使用:日付取得不要のためFUNCTION CURRENT-DATEも使用しない
|
||||
- R02FILLER = 56B(PUNCH-SORTEDのフォーマット:社員番号8B+日付8B+出勤4B+退勤4B+予備56B)
|
||||
@@ -0,0 +1,48 @@
|
||||
# ZAN04MAT 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: ZAN04MAT
|
||||
- **プログラム名**: 取消マッチング処理
|
||||
- **処理概要**: OVT-SORTED(有効申請)とOVT-CSORT(取消申請)を申請番号で1:1マッチングし、結果を振り分ける。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||
|------|---------------|------|-------------|-----------|--------|
|
||||
| ZAN04R01 | OVT-SORTED | 順編成 | F (固定長) | 80B | ZAN01REC |
|
||||
| ZAN04R02 | OVT-CSORT | 順編成 | F (固定長) | 80B | ZAN01REC |
|
||||
| ZAN04W01 | OVT-MATCHED | 順編成 | F (固定長) | 80B | ZAN02REC |
|
||||
| ZAN04W02 | OVT-DBCLEAN | 順編成 | F (固定長) | 80B | ZAN04REC |
|
||||
| ZAN04W03 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| ZAN01REC | レコード定義(R01/R02入力ファイル) | FILE SECTION |
|
||||
| ZAN02REC | OVT-MATCHEDレコード定義(W01出力) | FILE SECTION |
|
||||
| ZAN04REC | OVT-DBCLEANレコード定義(W02出力) | FILE SECTION |
|
||||
| ZAN05REC | エラーログレコード定義(W03出力) | FILE SECTION |
|
||||
| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
なし(DB操作なし)
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→運用日付取得→OPEN→R01/R02初回読込)
|
||||
2. メイン処理:マッチング(申請番号APPL-IDで1:1突合)
|
||||
- R01キー = R02キー(マッチ) → 取消済み申請をERROR-LOG(W03)に出力(ERR-CATEGORY=04)
|
||||
- R01キー < R02キー(R01のみ) → 有効申請をOVT-MATCHED(W01)に出力(STRING編集でPROC-SEQ=01付加)
|
||||
- R01キー > R02キー(R02のみ) → 取消申請をOVT-DBCLEAN(W02)に出力
|
||||
3. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||
@@ -0,0 +1,50 @@
|
||||
# ZAN05CAL 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: ZAN05CAL
|
||||
- **プログラム名**: 残業時間集計処理
|
||||
- **処理概要**: OVT-SORTED2(申請番号+処理番号昇順)をキーブレイク集計し、同一APPL-ID内の全明細の加班時間を積算してOVT-SUMMARYに1レコード出力。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||
|------|---------------|------|-------------|-----------|--------|
|
||||
| ZAN05R01 | OVT-SORTED2 | 順編成 | F (固定長) | 80B | ZAN02REC |
|
||||
| ZAN05W01 | OVT-SUMMARY | 順編成 | F (固定長) | 80B | ZAN03REC |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| ZAN02REC | OVT-MATCHEDレコード定義(R01入力) | FILE SECTION |
|
||||
| ZAN03REC | OVT-SUMMARYレコード定義(W01出力) | FILE SECTION |
|
||||
| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANTIMAC | 時刻丸めサブPGM連絡領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||
| SUB05TIM | 時刻丸め(0.1h単位切捨) | 2100OUTSOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
なし(DB操作なし)
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→運用日付取得→OPEN→初回読込)
|
||||
2. キーブレイク集計ループ
|
||||
- キー変わり(APPL-ID) → 前グループ集計出力+累積リセット+新グループ開始
|
||||
- 同一グループ → 現レコード時間差分をWRK-ACCUM-MINに積算+最新レコード上書き保持
|
||||
- EOF → 最終グループを出力
|
||||
3. 集計出力処理(2100OUTSOR)
|
||||
- DIVIDE REMAINDERで時→分変換
|
||||
- COMPUTE ROUNDED ON SIZE ERROR
|
||||
- SUB05TIM呼出(0.1h単位切捨て丸め)
|
||||
- OVT-SUMMARY出力(グループ先頭START・最新END・積算OVT-HOURS)
|
||||
4. 終了処理(CLOSE→件数出力→終了メッセージ)
|
||||
@@ -0,0 +1,72 @@
|
||||
# ZAN06UPD 使用資源一覧
|
||||
|
||||
## プログラム概要
|
||||
- **プログラムID**: ZAN06UPD
|
||||
- **プログラム名**: 残業統計DB更新処理
|
||||
- **処理概要**: OVT-SUMMARYの各レコードをDBにINSERT/UPSERTし、OVT-DBCLEANの各レコードについて該当申請を取消状態に更新する。DB2テーブル操作を含む全サブシステムB唯一のDB更新プログラム。
|
||||
|
||||
## 使用ファイル
|
||||
|
||||
| DD名 | ファイル識別子 | 編成 | レコード形式 | レコード長 | COPY句 |
|
||||
|------|---------------|------|-------------|-----------|--------|
|
||||
| ZAN06R01 | OVT-SUMMARY | 順編成 | F (固定長) | 80B | ZAN03REC |
|
||||
| ZAN06R02 | OVT-DBCLEAN | 順編成 | F (固定長) | 80B | ZAN04REC |
|
||||
| ZAN06W01 | ERROR-LOG | 順編成 | V (可変長) | 200B | ZAN05REC |
|
||||
|
||||
## 使用COPY句
|
||||
|
||||
| COPY句 | 用途 | 使用箇所 |
|
||||
|--------|------|---------|
|
||||
| ZAN03REC | OVT-SUMMARYレコード定義(R01入力) | FILE SECTION |
|
||||
| ZAN04REC | OVT-DBCLEANレコード定義(R02入力) | FILE SECTION |
|
||||
| ZAN05REC | エラーログレコード定義(W01出力) | FILE SECTION |
|
||||
| ZANDATAC | 運用日付サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANMSGAC | メッセージ編集サブPGM連絡領域 | WORKING-STORAGE |
|
||||
| ZANENDAC | ABENDサブPGM連絡領域 | WORKING-STORAGE |
|
||||
|
||||
## 使用サブプログラム
|
||||
|
||||
| サブPGM | 役割 | CALL箇所 |
|
||||
|---------|------|---------|
|
||||
| SUB01DAT | 運用日付取得 | 1000ITTSOR |
|
||||
| SUB02MSG | メッセージ編集出力 | 4000MSGOUTSOR |
|
||||
| SUB03END | ABEND処理 | 9999ABDSOR |
|
||||
|
||||
## 使用DB2テーブル
|
||||
|
||||
| テーブル名 | 操作種別 | 説明 |
|
||||
|------------|---------|------|
|
||||
| OVT_APPLICATIONS | INSERT / UPDATE | 申請データ登録・更新(取消) |
|
||||
| OVT_MONTHLY | SELECT / INSERT / UPDATE | 月次集計テーブル(加算・減算) |
|
||||
|
||||
## 実行SQL一覧
|
||||
|
||||
| SQL種別 | 内容 | 該当箇所 |
|
||||
|---------|------|---------|
|
||||
| CONNECT TO | DB接続(data\OVERTIME.DB) | 1000ITTSOR |
|
||||
| INSERT INTO ... OVT_APPLICATIONS | 申請データ新規登録 | 2100SUMMARYSOR |
|
||||
| UPDATE ... OVT_APPLICATIONS | 重複時更新(STATUS) | 2100SUMMARYSOR |
|
||||
| SELECT ... OVT_MONTHLY | 月次集計存在確認 | 2110MONTHLYUPSOR |
|
||||
| UPDATE ... OVT_MONTHLY (+加算) | 月次集計加算 | 2110MONTHLYUPSOR |
|
||||
| INSERT INTO ... OVT_MONTHLY | 月次集計新規作成 | 2110MONTHLYUPSOR |
|
||||
| SELECT ... OVT_APPLICATIONS | 取消データ取得 | 2200DBCLEANSOR |
|
||||
| UPDATE ... OVT_APPLICATIONS (取消) | 申請ステータス取消 | 2200DBCLEANSOR |
|
||||
| UPDATE ... OVT_MONTHLY (-減算) | 月次集計減算(リトライ3回) | 2210MONTHLYSUBSOR |
|
||||
| COMMIT WORK | 50件毎/最終コミット | 2300COMMITDBX |
|
||||
| ROLLBACK WORK | DBエラー時ロールバック | 9100DBERRSOR |
|
||||
|
||||
## 処理フロー
|
||||
1. 初期処理(開始メッセージ→運用日付取得→OPEN→DB CONNECT→R01/R02初回読込)
|
||||
2. フェーズ1(OVT-SUMMARY処理):
|
||||
- SQLホスト変数設定(年月抽出・時刻変換・時間→分変換)
|
||||
- OVT_APPLICATIONSにINSERT
|
||||
- 成功 → INSERTカウンタ+1
|
||||
- 重複エラー(SQLCODE≠0) → UPDATE(STATUS更新)
|
||||
- OVT_MONTHLY UPSERT(存在確認SELECT→UPDATE/INSERT)
|
||||
- 50件毎にCOMMIT
|
||||
3. フェーズ2(OVT-DBCLEAN処理):
|
||||
- OVT_APPLICATIONSから既存データSELECT
|
||||
- 該当なし(孤立取消) → ERROR-LOG出力+ABEND(999)
|
||||
- OVT_APPLICATIONSステータス更新('9'=取消)
|
||||
- OVT_MONTHLY減算(3回リトライ付きUPDATE)
|
||||
4. 終了処理(最終COMMIT→CLOSE→件数出力→終了メッセージ)
|
||||
@@ -0,0 +1,542 @@
|
||||
# ファイル定義書
|
||||
|
||||
## 変更履歴
|
||||
|
||||
| No | 変更内容 | 担当者 | 変更日 | 承認者 | 備考 |
|
||||
|----|---------|--------|--------|--------|------|
|
||||
| 1 | 新規作成(ZAN系10部品) | AI | 2026/06/15 | | |
|
||||
| 2 | KIN系6部品追加(KIN02-07REC) | AI | 2026/06/23 | | KIN07DAI実装に伴い追加 |
|
||||
|
||||
---
|
||||
|
||||
# ZAN01REC — 加班申請レコード
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| OVT-VALID / OVT-CANCEL / OVT-SORTED / OVT-CSORT / OVT-VSORT / OVT-NODUP / OVT-CHECKED | ZAN01REC | PS | FB | 80 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 03 | 申請番号 | (A)APPL-ID | X(8) | 8 | | 1 | | | YYYYMMDD+SEQ |
|
||||
| 2 | 03 | 社員番号 | (A)EMP-ID | 9(8) | 8 | | 9 | | | |
|
||||
| 3 | 03 | 申請日 | (A)APPL-DATE | 9(8) | 8 | | 17 | | | YYYYMMDD |
|
||||
| 4 | 03 | 開始時刻 | (A)START-TIME | 9(4) | 4 | | 25 | | | HHMM |
|
||||
| 5 | 03 | 終了時刻 | (A)END-TIME | 9(4) | 4 | | 29 | | | HHMM |
|
||||
| 6 | 03 | ステータス | (A)STATUS | X(1) | 1 | | 33 | | | 0:有効/1:確定/9:取消 |
|
||||
| 7 | 03 | 残業種別 | (A)OVT-TYPE | X(1) | 1 | | 34 | | | W:平日/H:休日 |
|
||||
| 8 | 03 | 予約 | (A)FILLER | X(46) | 46 | | 35 | | | |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | プレフィックス | 用途 | I/O |
|
||||
|-----------|--------------|------|-----|
|
||||
| ZAN01CHK | W01 | OVT-VALID出力(STATUS=0/1) | O |
|
||||
| ZAN01CHK | W02 | OVT-CANCEL出力(STATUS=9) | O |
|
||||
| ZAN02CHK | R01 | OVT-VSORT入力 | I |
|
||||
| ZAN02CHK | W01 | OVT-NODUP出力 | O |
|
||||
| ZAN03CHK | R01 | OVT-NODUP入力 | I |
|
||||
| ZAN03CHK | W01 | OVT-CHECKED出力 | O |
|
||||
| ZAN04MAT | R01 | OVT-SORTED入力(有効申請) | I |
|
||||
| ZAN04MAT | R02 | OVT-CSORT入力(取消申請) | I |
|
||||
|
||||
---
|
||||
|
||||
# ZAN02REC — マッチング結果レコード
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| OVT-MATCHED | ZAN02REC | PS | FB | 80 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 03 | 申請番号 | (A)APPL-ID | X(8) | 8 | | 1 | | | |
|
||||
| 2 | 03 | 社員番号 | (A)EMP-ID | 9(8) | 8 | | 9 | | | |
|
||||
| 3 | 03 | 申請日 | (A)APPL-DATE | 9(8) | 8 | | 17 | | | YYYYMMDD |
|
||||
| 4 | 03 | 開始時刻 | (A)START-TIME | 9(4) | 4 | | 25 | | | HHMM |
|
||||
| 5 | 03 | 終了時刻 | (A)END-TIME | 9(4) | 4 | | 29 | | | HHMM |
|
||||
| 6 | 03 | ステータス | (A)STATUS | X(1) | 1 | | 33 | | | |
|
||||
| 7 | 03 | 残業種別 | (A)OVT-TYPE | X(1) | 1 | | 34 | | | W:平日/H:休日 |
|
||||
| 8 | 03 | 処理番号 | (A)PROC-SEQ | 9(2) | 2 | | 35 | | | 01固定 |
|
||||
| 9 | 03 | 予約 | (A)FILLER | X(44) | 44 | | 37 | | | |
|
||||
|
||||
### ZAN01RECとの差分
|
||||
|
||||
| 項目 | ZAN01REC | ZAN02REC |
|
||||
|------|----------|----------|
|
||||
| 追加 | — | PROC-SEQ(9(2)) |
|
||||
| FILLER | X(46) | X(44) |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | プレフィックス | 用途 | I/O |
|
||||
|-----------|--------------|------|-----|
|
||||
| ZAN04MAT | W01 | OVT-MATCHED出力 | O |
|
||||
|
||||
---
|
||||
|
||||
# ZAN03REC — 集約結果レコード
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| OVT-AGGREGATED | ZAN03REC | PS | FB | 80 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 03 | 申請番号 | (A)APPL-ID | X(8) | 8 | | 1 | | | |
|
||||
| 2 | 03 | 社員番号 | (A)EMP-ID | 9(8) | 8 | | 9 | | | |
|
||||
| 3 | 03 | 申請日 | (A)APPL-DATE | 9(8) | 8 | | 17 | | | YYYYMMDD |
|
||||
| 4 | 03 | 開始時刻 | (A)START-TIME | 9(4) | 4 | | 25 | | | HHMM |
|
||||
| 5 | 03 | 終了時刻 | (A)END-TIME | 9(4) | 4 | | 29 | | | HHMM |
|
||||
| 6 | 03 | 残業時間 | (A)OVT-HOURS | 9(4)V9(1) | 5 | | 33 | | | HH.h(0.1h単位) |
|
||||
| 7 | 03 | 残業種別 | (A)OVT-TYPE | X(1) | 1 | | 38 | | | W:平日/H:休日 |
|
||||
| 8 | 03 | 予約 | (A)FILLER | X(42) | 42 | | 39 | | | |
|
||||
|
||||
### ZAN01RECとの差分
|
||||
|
||||
| 項目 | ZAN01REC | ZAN03REC |
|
||||
|------|----------|----------|
|
||||
| 削除 | STATUS | — |
|
||||
| 追加 | — | OVT-HOURS(9(4)V9(1)) |
|
||||
| FILLER | X(46) | X(42) |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | プレフィックス | 用途 | I/O | 備考 |
|
||||
|-----------|--------------|------|-----|------|
|
||||
| ZAN05CAL | (未定) | 集約結果出力 | O | 未実装 |
|
||||
|
||||
---
|
||||
|
||||
# ZAN04REC — DBCLEAN対象レコード
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| OVT-DBCLEAN | ZAN04REC | PS | FB | 80 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 03 | 申請番号 | (A)APPL-ID | X(8) | 8 | | 1 | | | DB削除対象申請番号 |
|
||||
| 2 | 03 | 予約 | (A)FILLER | X(72) | 72 | | 9 | | | |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | プレフィックス | 用途 | I/O |
|
||||
|-----------|--------------|------|-----|
|
||||
| ZAN04MAT | W02 | OVT-DBCLEAN出力(APPL-IDのみ設定) | O |
|
||||
|
||||
---
|
||||
|
||||
# ZAN05REC — エラーログレコード
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| ERROR-LOG | ZAN05REC | PS | VB | 200 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 03 | エラーカテゴリ | (A)ERR-CATEGORY | 9(2) | 2 | | 1 | | | 01:項目CHK/02:重複/03:打刻不突合/03:取消監査 |
|
||||
| 2 | 03 | エラー詳細 | (A)ERR-DETAIL | X(198) | 198 | | 3 | | | STRING編集値 |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | プレフィックス | エラーカテゴリ | I/O |
|
||||
|-----------|--------------|---------------|-----|
|
||||
| ZAN01CHK | W03 | 01(項目チェックエラー) | O |
|
||||
| ZAN02CHK | W02 | 02(時間重複エラー) | O |
|
||||
| ZAN03CHK | W02 | 03(打刻不突合エラー) | O |
|
||||
| ZAN04MAT | W03 | 03(取消マッチ監査証跡) | O |
|
||||
|
||||
---
|
||||
|
||||
# ZANDATAC — SUB01DAT 運用日付取得用連絡領域
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| SUB01DAT連絡領域 | ZANDATAC | — | — | 10 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 01 | 運用日付パラメタ | D01UBSPAR | | | | 1 | | | CALL USING対象 |
|
||||
| 2 | 03 | 復帰コード | D01FKICOD | S9(4) COMP | 2 | | 1 | | D01UBSPAR | 0000:正常 |
|
||||
| 3 | 03 | 運用日付 | D01UBSUDATE | 9(8) | 8 | | 3 | | D01UBSPAR | YYYYMMDD |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | 呼出方法 | 備考 |
|
||||
|-----------|---------|------|
|
||||
| ZAN01CHK | CALL 'SUB01DAT' USING D01UBSPAR | 初期処理 |
|
||||
| ZAN02CHK | CALL 'SUB01DAT' USING D01UBSPAR | 初期処理 |
|
||||
| ZAN04MAT | CALL 'SUB01DAT' USING D01UBSPAR | 初期処理 |
|
||||
|
||||
※ ZAN03CHKはFUNCTION CURRENT-DATEを使用し本COPY未使用
|
||||
|
||||
---
|
||||
|
||||
# ZANMSGAC — SUB02MSG メッセージ出力用連絡領域
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| SUB02MSG連絡領域 | ZANMSGAC | — | — | 303 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 01 | メッセージパラメタ | M00MHOPAR | | | | 1 | | | CALL USING対象 |
|
||||
| 2 | 03 | メッセージ番号 | M00MSGCOD | 9(3) | 3 | | 1 | | M00MHOPAR | |
|
||||
| 3 | 03 | パラメータ1 | M00UMKDATS22-01 | X(30) | 30 | | 4 | | M00MHOPAR | |
|
||||
| 4 | 03 | パラメータ2 | M00UMKDATS22-02 | X(30) | 30 | | 34 | | M00MHOPAR | |
|
||||
| 5 | 03 | パラメータ3 | M00UMKDATS22-03 | X(30) | 30 | | 64 | | M00MHOPAR | |
|
||||
| 6 | 03 | パラメータ4 | M00UMKDATS22-04 | X(30) | 30 | | 94 | | M00MHOPAR | |
|
||||
| 7 | 03 | パラメータ5 | M00UMKDATS22-05 | X(30) | 30 | | 124 | | M00MHOPAR | |
|
||||
| 8 | 03 | パラメータ6 | M00UMKDATS22-06 | X(30) | 30 | | 154 | | M00MHOPAR | |
|
||||
| 9 | 03 | パラメータ7 | M00UMKDATS22-07 | X(30) | 30 | | 184 | | M00MHOPAR | |
|
||||
| 10 | 03 | パラメータ8 | M00UMKDATS22-08 | X(30) | 30 | | 214 | | M00MHOPAR | |
|
||||
| 11 | 03 | パラメータ9 | M00UMKDATS22-09 | X(30) | 30 | | 244 | | M00MHOPAR | |
|
||||
| 12 | 03 | パラメータ10 | M00UMKDATS22-10 | X(30) | 30 | | 274 | | M00MHOPAR | |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | 呼出方法 | 備考 |
|
||||
|-----------|---------|------|
|
||||
| ZAN01CHK | CALL 'SUB02MSG' USING M00MHOPAR | |
|
||||
| ZAN02CHK | CALL 'SUB02MSG' USING M00MHOPAR | |
|
||||
| ZAN03CHK | CALL 'SUB02MSG' USING M00MHOPAR | |
|
||||
| ZAN04MAT | CALL 'SUB02MSG' USING M00MHOPAR | |
|
||||
| ZAN05CAL | CALL 'SUB02MSG' USING M00MHOPAR | |
|
||||
| ZAN06UPD | CALL 'SUB02MSG' USING M00MHOPAR | |
|
||||
| KIN01INP | CALL 'SUB02MSG' USING M00MHOPAR | |
|
||||
| KIN02UPD | CALL 'SUB02MSG' USING M00MHOPAR | |
|
||||
| KIN03EXP | CALL 'SUB02MSG' USING M00MHOPAR | |
|
||||
| KIN04CHK | CALL 'SUB02MSG' USING M00MHOPAR | |
|
||||
| KIN05MAT | CALL 'SUB02MSG' USING M00MHOPAR | |
|
||||
| KIN06CLD | CALL 'SUB02MSG' USING M00MHOPAR | |
|
||||
| KIN07DAI | CALL 'SUB02MSG' USING M00MHOPAR | |
|
||||
|
||||
---
|
||||
|
||||
# ZANENDAC — SUB03END ABEND処理用連絡領域
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| SUB03END連絡領域 | ZANENDAC | — | — | 3 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 01 | ABENDパラメタ | E01ABDPAR | | | | 1 | | | CALL USING対象 |
|
||||
| 2 | 03 | ABENDコード | E01ABDCOD | 9(3) | 3 | | 1 | | E01ABDPAR | 999:汎用 |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | 呼出方法 |
|
||||
|-----------|---------|
|
||||
| ZAN01CHK | CALL 'SUB03END' USING E01ABDPAR |
|
||||
| ZAN02CHK | CALL 'SUB03END' USING E01ABDPAR |
|
||||
| ZAN03CHK | CALL 'SUB03END' USING E01ABDPAR |
|
||||
| ZAN04MAT | CALL 'SUB03END' USING E01ABDPAR |
|
||||
| ZAN05CAL | CALL 'SUB03END' USING E01ABDPAR |
|
||||
| ZAN06UPD | CALL 'SUB03END' USING E01ABDPAR |
|
||||
| KIN01INP | CALL 'SUB03END' USING E01ABDPAR |
|
||||
| KIN02UPD | CALL 'SUB03END' USING E01ABDPAR |
|
||||
| KIN03EXP | CALL 'SUB03END' USING E01ABDPAR |
|
||||
| KIN04CHK | CALL 'SUB03END' USING E01ABDPAR |
|
||||
| KIN05MAT | CALL 'SUB03END' USING E01ABDPAR |
|
||||
| KIN06CLD | CALL 'SUB03END' USING E01ABDPAR |
|
||||
| KIN07DAI | CALL 'SUB03END' USING E01ABDPAR |
|
||||
|
||||
---
|
||||
|
||||
# ZANCHKAC — SUB04CHK 項目チェック用連絡領域
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| SUB04CHK連絡領域 | ZANCHKAC | — | — | 92 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 01 | 項目チェックパラメタ | C01CHKPAR | | | | 1 | | | CALL USING対象 |
|
||||
| 2 | 03 | チェックタイプ | C01CHKTYP | X(8) | 8 | | 1 | | C01CHKPAR | DATE/TIME/NUM/EMPID |
|
||||
| 3 | 03 | チェック対象データ | C01CHKDAT | X(80) | 80 | | 9 | | C01CHKPAR | |
|
||||
| 4 | 03 | 復帰コード | C01CHKRRC | 9(4) | 4 | | 89 | | C01CHKPAR | 0000:正常/0001:日付/0002:時刻/0003:数字/0004:社員番号/9999:不明 |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | 呼出方法 | 備考 |
|
||||
|-----------|---------|------|
|
||||
| ZAN01CHK | CALL 'SUB04CHK' USING C01CHKPAR | 日付/時刻チェック |
|
||||
|
||||
---
|
||||
|
||||
# ZANTIMAC — SUB05TIM 時刻丸め用連絡領域
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| SUB05TIM連絡領域 | ZANTIMAC | — | — | 14 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 01 | 時刻丸めパラメタ | T01TIMPAR | | | | 1 | | | CALL USING対象 |
|
||||
| 2 | 03 | 入力時間 | T01TIMHRS | 9(4)V9(1) | 5 | | 1 | | T01TIMPAR | HH.h |
|
||||
| 3 | 03 | 出力時間 | T01TIMOUT | 9(4)V9(1) | 5 | | 6 | | T01TIMPAR | 丸め後 |
|
||||
| 4 | 03 | 丸めモード | T01TIMRRC | 9(4) | 4 | | 11 | | T01TIMPAR | 0:0.5h切上/1:0.1h切上/2:0.1h切捨/3:四捨五入 |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | 呼出方法 | 備考 |
|
||||
|-----------|---------|------|
|
||||
| ZAN05CAL | CALL 'SUB05TIM' USING T01TIMPAR | 残業時間丸め |
|
||||
| KIN07DAI | CALL 'SUB05TIM' USING T01TIMPAR | 休暇時間丸め(0.1h切上) |
|
||||
|
||||
---
|
||||
|
||||
# KIN02REC — 日別展開休暇レコード
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| LEAVE-DAILY | KIN02REC | PS | FB | 80 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 03 | 社員番号 | (A)EMP-ID | X(8) | 8 | | 1 | | | |
|
||||
| 2 | 03 | 日付 | (A)DATE | 9(8) | 8 | | 9 | | | YYYYMMDD |
|
||||
| 3 | 03 | 休暇種別 | (A)LEAVE-TYPE | X(2) | 2 | | 17 | | | 01/02/03/04 |
|
||||
| 4 | 03 | 開始時刻 | (A)START-TIME | 9(4) | 4 | | 19 | | | HHMM |
|
||||
| 5 | 03 | 終了時刻 | (A)END-TIME | 9(4) | 4 | | 23 | | | HHMM |
|
||||
| 6 | 03 | 申請番号 | (A)APPL-ID | 9(9) | 9 | | 27 | | | |
|
||||
| 7 | 03 | 予約 | (A)FILLER | X(45) | 45 | | 36 | | | |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | プレフィックス | 用途 | I/O |
|
||||
|-----------|--------------|------|-----|
|
||||
| KIN03EXP | W02 | LEAVE-DAILY出力(日別展開結果) | O |
|
||||
| KIN05MAT | R02 | LEAVE-DAILY入力(照合N側) | I |
|
||||
| KIN07DAI | R03 | LEAVE-DAILY入力(休暇日別) | I |
|
||||
|
||||
---
|
||||
|
||||
# KIN03REC — 打刻休暇照合レコード
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| KIN-LEAVE | KIN03REC | PS | FB | 160 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 03 | 社員番号 | (A)EMP-ID | X(8) | 8 | | 1 | | | |
|
||||
| 2 | 03 | 勤怠日付 | (A)WORK-DATE | 9(8) | 8 | | 9 | | | YYYYMMDD |
|
||||
| 3 | 03 | 出勤時刻 | (A)STR-TIME | 9(4) | 4 | | 17 | | | HHMM |
|
||||
| 4 | 03 | 退勤時刻 | (A)END-TIME | 9(4) | 4 | | 21 | | | HHMM |
|
||||
| 5 | 03 | 部門ID | (A)DEPT-ID | X(4) | 4 | | 25 | | | |
|
||||
| 6 | 03 | 端末ID | (A)TERMINAL | X(6) | 6 | | 29 | | | |
|
||||
| 7 | 03 | 予約 | (A)FILLER-1 | X(46) | 46 | | 35 | | | 打刻データ領域 |
|
||||
| 8 | 03 | 休暇種別 | (A)LEAVE-TYPE | X(2) | 2 | | 81 | | | 01/02/03/04 |
|
||||
| 9 | 03 | 休暇開始時刻 | (A)LEAVE-STR-TIME | 9(4) | 4 | | 83 | | | HHMM |
|
||||
| 10 | 03 | 休暇終了時刻 | (A)LEAVE-END-TIME | 9(4) | 4 | | 87 | | | HHMM |
|
||||
| 11 | 03 | 休暇時間 | (A)LEAVE-HOURS | 9(4)V9(1) | 5 | | 91 | | | 0.1h単位 |
|
||||
| 12 | 03 | 申請番号 | (A)APPLICATION-ID | 9(9) | 9 | | 96 | | | |
|
||||
| 13 | 03 | 予約 | (A)FILLER-2 | X(56) | 56 | | 105 | | | |
|
||||
|
||||
### KIN04RECとの差分
|
||||
|
||||
前半80BはKIN04REC(打刻編集レコード)と同一レイアウト。後半80Bに休暇情報を追記して160B構成。
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | プレフィックス | 用途 | I/O |
|
||||
|-----------|--------------|------|-----|
|
||||
| KIN05MAT | W01 | KIN-LEAVE出力(照合結果) | O |
|
||||
| KIN07DAI | R02 | KIN-LEAVE入力(打刻+休暇) | I |
|
||||
|
||||
---
|
||||
|
||||
# KIN04REC — 打刻編集レコード
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| EDITED-PUNCH | KIN04REC | PS | FB | 80 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 03 | 社員番号 | (A)EMP-ID | X(8) | 8 | | 1 | | | |
|
||||
| 2 | 03 | 勤怠日付 | (A)WORK-DATE | 9(8) | 8 | | 9 | | | YYYYMMDD |
|
||||
| 3 | 03 | 出勤時刻 | (A)STR-TIME | 9(4) | 4 | | 17 | | | HHMM |
|
||||
| 4 | 03 | 退勤時刻 | (A)END-TIME | 9(4) | 4 | | 21 | | | HHMM |
|
||||
| 5 | 03 | 部門ID | (A)DEPT-ID | X(4) | 4 | | 25 | | | |
|
||||
| 6 | 03 | 端末ID | (A)TERMINAL | X(6) | 6 | | 29 | | | |
|
||||
| 7 | 03 | 予約 | (A)FILLER | X(46) | 46 | | 35 | | | |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | プレフィックス | 用途 | I/O |
|
||||
|-----------|--------------|------|-----|
|
||||
| KIN04CHK | W01 | EDITED-PUNCH出力(打刻編集結果) | O |
|
||||
| KIN05MAT | R01 | EDITED-PUNCH入力(照合主駆動) | I |
|
||||
|
||||
---
|
||||
|
||||
# KIN05REC — エラーログレコード
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| KERR-LOG | KIN05REC | PS | VB | 200 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 03 | エラーカテゴリ | (A)ERR-CATEGORY | 9(2) | 2 | | 1 | | | 01:項目CHK/02:重複/03:打刻不突合 |
|
||||
| 2 | 03 | エラー詳細 | (A)ERR-DETAIL | X(198) | 198 | | 3 | | | STRING編集値 |
|
||||
|
||||
### ZAN05RECとの関係
|
||||
|
||||
ZAN05REC(残業側エラーログ)と同一レイアウト。別COPY IDだが実質同じ定義。
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | プレフィックス | エラーカテゴリ | I/O |
|
||||
|-----------|--------------|---------------|-----|
|
||||
| KIN01INP | W02 | 01(項目チェックエラー) | O |
|
||||
| KIN02UPD | W03 | 02(DB更新エラー) | O |
|
||||
|
||||
---
|
||||
|
||||
# KIN06REC — 出勤日カレンダーレコード
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| WORK-DAY-FILE | KIN06REC | PS | FB | 80 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 03 | 社員番号 | (A)EMP-ID | X(8) | 8 | | 1 | | | |
|
||||
| 2 | 03 | 日付 | (A)DATE | 9(8) | 8 | | 9 | | | YYYYMMDD |
|
||||
| 3 | 03 | 曜日 | (A)DAY-OF-WEEK | 9(1) | 1 | | 17 | | | 0=日/1=月/…/6=土 |
|
||||
| 4 | 03 | 予約 | (A)FILLER | X(63) | 63 | | 18 | | | |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | プレフィックス | 用途 | I/O |
|
||||
|-----------|--------------|------|-----|
|
||||
| KIN06CLD | W01 | WORK-DAY-FILE出力(カレンダー生成) | O |
|
||||
| KIN07DAI | R01 | WORK-DAY-FILE入力(主駆動) | I |
|
||||
|
||||
---
|
||||
|
||||
# KIN07REC — 日別勤怠計算レコード
|
||||
|
||||
## Layout(レコードレイアウト)
|
||||
|
||||
### ファイル基本情報
|
||||
|
||||
| ファイル名 | COPY ID | 媒体 | レコード形式 | レコード長 |
|
||||
|-----------|---------|------|-------------|-----------|
|
||||
| DAILY-RECORD | KIN07REC | PS | FB | 200 |
|
||||
|
||||
### レコード定義
|
||||
|
||||
| No | レベル | 項目名 | 項目名(英字名) | 属性(PIC TYPE) | バイト数 | OCCURS | 開始位置 | REDEFINES | 所属グループ | 備考 |
|
||||
|----|--------|--------|---------------|----------------|---------|--------|---------|-----------|-------------|------|
|
||||
| 1 | 03 | 社員番号 | (A)EMP-ID | 9(8) | 8 | | 1 | | | |
|
||||
| 2 | 03 | 日付 | (A)DATE | 9(8) | 8 | | 9 | | | YYYYMMDD |
|
||||
| 3 | 03 | 出勤時刻 | (A)TIME-IN | 9(4) | 4 | | 17 | | | HHMM、打刻なし=0000 |
|
||||
| 4 | 03 | 退勤時刻 | (A)TIME-OUT | 9(4) | 4 | | 21 | | | HHMM、打刻なし=0000 |
|
||||
| 5 | 03 | 年休時間 | (A)ANNUAL-H | 9(4)V9(1) | 5 | | 25 | | | 0.1h単位(SUB05TIM丸め) |
|
||||
| 6 | 03 | 事假時間 | (A)PERSONAL-H | 9(4)V9(1) | 5 | | 30 | | | 0.1h単位(SUB05TIM丸め) |
|
||||
| 7 | 03 | 因公特批假時間 | (A)OFFICIAL-H | 9(4)V9(1) | 5 | | 35 | | | 0.1h単位(SUB05TIM丸め) |
|
||||
| 8 | 03 | 病欠時間 | (A)SICK-H | 9(4)V9(1) | 5 | | 40 | | | 0.1h単位(SUB05TIM丸め) |
|
||||
| 9 | 03 | 未申請欠勤時間 | (A)ABSENT-H | 9(4)V9(1) | 5 | | 45 | | | 8.0h固定(パターンD) |
|
||||
| 10 | 03 | 予約 | (A)FILLER | X(151) | 151 | | 50 | | | |
|
||||
|
||||
### 使用プログラム
|
||||
|
||||
| プログラム | プレフィックス | 用途 | I/O |
|
||||
|-----------|--------------|------|-----|
|
||||
| KIN07DAI | W01 | DAILY-RECORD出力 | O |
|
||||
| KIN08DBU | R01 | DAILY-RECORD入力(DB書込用) | I |
|
||||
@@ -0,0 +1,232 @@
|
||||
# DB定義書
|
||||
|
||||
## 変更履歴
|
||||
|
||||
| No | 変更内容 | 担当者 | 変更日 | 承認者 | 備考 |
|
||||
|----|---------|--------|--------|--------|------|
|
||||
| 1 | 新規作成(全8テーブル) | AI | 2026/06/23 | | サブシステムA(6) + B(2) |
|
||||
|
||||
---
|
||||
|
||||
# EMP_MASTER — 社員マスタ
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 勤怠休暇管理DB | EMP_MASTER | — | PK: EMP_ID |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 社員番号 | EMP_ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | |
|
||||
| 2 | 部署ID | DEPT_ID | CHAR | 4 | | 4 | NOT NULL | | | | | | |
|
||||
| 3 | 氏名 | EMP_NAME | VARCHAR | 50 | | 50 | NOT NULL | | | | | | |
|
||||
| 4 | ステータス | STATUS | CHAR | 1 | | 1 | NOT NULL | | | | | | '1'=在籍, '9'=退職 |
|
||||
|
||||
### 備考
|
||||
|
||||
- サブシステムA: 参照のみ(SELECT)
|
||||
- サブシステムB: 使用しない
|
||||
|
||||
---
|
||||
|
||||
# LEAVE_RECORDS — 休暇申請記録
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 勤怠休暇管理DB | LEAVE_RECORDS | — | PK: APPLICATION_ID |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 申請番号 | APPLICATION_ID | INTEGER | 10 | | 4 | NOT NULL | | ✓ | | | | 自動採番 |
|
||||
| 2 | 社員番号 | EMP_ID | CHAR | 8 | | 8 | NOT NULL | | | | | | |
|
||||
| 3 | 休暇種別 | LEAVE_TYPE | CHAR | 2 | | 2 | NOT NULL | | | | | | 01/02/03/04 |
|
||||
| 4 | 開始日 | START_DATE | CHAR | 8 | | 8 | NOT NULL | | | | | | YYYYMMDD |
|
||||
| 5 | 開始時刻 | START_TIME | CHAR | 4 | | 4 | NOT NULL | | | | | | HHMM |
|
||||
| 6 | 終了日 | END_DATE | CHAR | 8 | | 8 | NOT NULL | | | | | | YYYYMMDD |
|
||||
| 7 | 終了時刻 | END_TIME | CHAR | 4 | | 4 | NOT NULL | | | | | | HHMM |
|
||||
| 8 | ステータス | STATUS | CHAR | 1 | | 1 | NOT NULL | | | | | | '1'=有効, '9'=取消 |
|
||||
|
||||
### 備考
|
||||
|
||||
- KIN02UPDがINSERT/DELETEを実行
|
||||
- KIN03EXPがSELECT(日付展開用)
|
||||
- 取消はDELETE FROM で物理削除
|
||||
|
||||
---
|
||||
|
||||
# HOLIDAY_CALENDAR — 休日カレンダー
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 勤怠休暇管理DB | HOLIDAY_CALENDAR | — | PK: HOLIDAY_DATE |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 休日日付 | HOLIDAY_DATE | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | YYYYMMDD |
|
||||
| 2 | 説明 | DESCRIPTION | VARCHAR | 50 | | 50 | NULL許可 | NULL | | | | | 例:「建国記念の日」 |
|
||||
|
||||
### 備考
|
||||
|
||||
- 土日は曜日判定で処理するため、このテーブルには祝日のみ格納
|
||||
- KIN03EXP, KIN06CLDがSELECTで参照
|
||||
|
||||
---
|
||||
|
||||
# SICK_LEAVE_RATE — 病欠控除率
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 勤怠休暇管理DB | SICK_LEAVE_RATE | — | PK: LEAVE_TYPE |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 休暇種別 | LEAVE_TYPE | CHAR | 2 | | 2 | NOT NULL | | ✓ | | | | '04'固定 |
|
||||
| 2 | 控除率 | DEDUCTION_RATE | DECIMAL | 3 | 2 | 3 | NOT NULL | | | | | | 例:0.50(50%控除) |
|
||||
|
||||
### 備考
|
||||
|
||||
- 全社員共通の設定値
|
||||
- 現時点では参照プログラム未実装(設計上定義)
|
||||
|
||||
---
|
||||
|
||||
# DAILY_RECORDS — 日別勤怠記録
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 勤怠休暇管理DB | DAILY_RECORDS | — | PK: (EMP_ID, TARGET_DATE) |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 社員番号 | EMP_ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | |
|
||||
| 2 | 対象日 | TARGET_DATE | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | YYYYMMDD |
|
||||
| 3 | 出勤時刻 | TIME_IN | CHAR | 4 | | 4 | NOT NULL | | | | | | HHMM, '0000'=打刻なし |
|
||||
| 4 | 退勤時刻 | TIME_OUT | CHAR | 4 | | 4 | NOT NULL | | | | | | HHMM, '0000'=打刻なし |
|
||||
| 5 | 年休時間 | ANNUAL_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | 0.1h単位 |
|
||||
| 6 | 事假時間 | PERSONAL_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | 0.1h単位 |
|
||||
| 7 | 因公特批假時間 | OFFICIAL_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | 0.1h単位 |
|
||||
| 8 | 病欠時間 | SICK_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | 0.1h単位 |
|
||||
| 9 | 未申請欠勤時間 | UNAPPROVED_ABSENT_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | 0.1h単位 |
|
||||
| 10 | 更新日時 | UPDATED_AT | TIMESTAMP | — | | 10 | NOT NULL | | | | | | DEFAULT CURRENT_TIMESTAMP |
|
||||
|
||||
### 備考
|
||||
|
||||
- KIN08DBUがKIN07DAIの出力ファイルからINSERT
|
||||
- 1社員1日=1レコード。出勤日のみ存在。
|
||||
|
||||
---
|
||||
|
||||
# MONTHLY_ABSENCE — 月次統計
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 勤怠休暇管理DB | MONTHLY_ABSENCE | — | PK: (EMP_ID, YEAR_MONTH) |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 社員番号 | EMP_ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | |
|
||||
| 2 | 対象年月 | YEAR_MONTH | CHAR | 6 | | 6 | NOT NULL | | ✓ | | | | YYYYMM |
|
||||
| 3 | 年休合計 | ANNUAL_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | |
|
||||
| 4 | 事假合計 | PERSONAL_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | |
|
||||
| 5 | 因公特批假合計 | OFFICIAL_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | |
|
||||
| 6 | 病欠合計 | SICK_LEAVE_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | |
|
||||
| 7 | 未申請欠勤合計 | UNAPPROVED_ABSENT_H | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | |
|
||||
| 8 | 更新日時 | UPDATED_AT | TIMESTAMP | — | | 10 | NOT NULL | | | | | | DEFAULT CURRENT_TIMESTAMP |
|
||||
|
||||
### 備考
|
||||
|
||||
- KIN08DBUが月次集計後にUPSERT(MERGE)
|
||||
- サブシステムC(給与計算)への連携元
|
||||
|
||||
---
|
||||
|
||||
# OVT_APPLICATIONS — 個別加班申請テーブル
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 残業統計管理DB | OVT_APPLICATIONS | — | PK: APPL_ID |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 申請番号 | APPL_ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | YYYYMMDD+SEQ |
|
||||
| 2 | 社員番号 | EMP_ID | CHAR | 8 | | 8 | NOT NULL | | | | | | |
|
||||
| 3 | 申請日 | APPL_DATE | CHAR | 8 | | 8 | NOT NULL | | | | | | YYYYMMDD |
|
||||
| 4 | 残業種別 | OVT_TYPE | CHAR | 1 | | 1 | NOT NULL | | | | | | W=平日, H=休日 |
|
||||
| 5 | 開始時刻 | START_TIME | CHAR | 4 | | 4 | NOT NULL | | | | | | HHMM |
|
||||
| 6 | 終了時刻 | END_TIME | CHAR | 4 | | 4 | NOT NULL | | | | | | HHMM |
|
||||
| 7 | 加班時間 | OVT_HOURS | DECIMAL | 4 | 1 | 4 | NOT NULL | | | | | | 0.1h単位 |
|
||||
| 8 | ステータス | STATUS | CHAR | 1 | | 1 | NOT NULL | | | | | | 0=有効, 9=取消 |
|
||||
| 9 | 更新日時 | UPDATED_AT | TIMESTAMP | — | | 10 | NOT NULL | | | | | | |
|
||||
|
||||
### 備考
|
||||
|
||||
- ZAN06UPDがINSERT/UPDATEを実行
|
||||
- STATUS=9で取消(物理削除はしない)
|
||||
|
||||
---
|
||||
|
||||
# OVT_MONTHLY — 月次集計テーブル
|
||||
|
||||
## Layout(テーブル定義)
|
||||
|
||||
### DB基本情報
|
||||
|
||||
| DB名 | DB ID | COPY ID | INDEX |
|
||||
|------|-------|---------|-------|
|
||||
| 残業統計管理DB | OVT_MONTHLY | — | PK: (EMP_ID, YEAR_MONTH, OVT_TYPE) |
|
||||
|
||||
### カラム定義
|
||||
|
||||
| No | 項目名 | 項目名(英字名) | TYPE | 最大長 | 小数桁 | バイト数 | NULL | DEFAULT | PK | INDEX1 | INDEX2 | INDEX3 | 備考 |
|
||||
|----|--------|---------------|------|--------|--------|---------|------|---------|----|--------|--------|--------|------|
|
||||
| 1 | 社員番号 | EMP_ID | CHAR | 8 | | 8 | NOT NULL | | ✓ | | | | |
|
||||
| 2 | 対象年月 | YEAR_MONTH | CHAR | 6 | | 6 | NOT NULL | | ✓ | | | | YYYYMM |
|
||||
| 3 | 残業種別 | OVT_TYPE | CHAR | 1 | | 1 | NOT NULL | | ✓ | | | | W=平日, H=休日 |
|
||||
| 4 | 加班時間合計 | OVT_HOURS | DECIMAL | 6 | 1 | 5 | NOT NULL | | | | | | |
|
||||
| 5 | 加班回数 | OVT_COUNT | INTEGER | 10 | | 4 | NOT NULL | | | | | | |
|
||||
| 6 | 更新日時 | UPDATED_AT | TIMESTAMP | — | | 10 | NOT NULL | | | | | | |
|
||||
|
||||
### 備考
|
||||
|
||||
- ZAN06UPDが月次集計結果をUPSERT
|
||||
@@ -0,0 +1,153 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 勤怠休暇管理システム |
|
||||
| 2 | プログラムID | KIN01INP |
|
||||
| 3 | プログラム名 | 休暇申請CSV取込・検証処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | 振り分け |
|
||||
| 6 | 機能概要 | CSV形式の休暇申請ファイルを読み込み、休暇種別テーブル検索と項目チェックを行い、ステータスによってWORK-LEAVEまたはERROR-LOGへ振り分ける。 |
|
||||
| 7 | | ステータス'1':有効申請としてWORK-LEAVEに出力(項目チェック実施) |
|
||||
| 8 | | ステータス'9':取消申請としてWORK-LEAVEに出力(項目チェックなし、APPL-ID保持) |
|
||||
| 9 | | その他・フィールド数異常・休暇種別異常:ERROR-LOGに出力 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | KIN01R01(CSV) | ソート不要。CSV形式(カンマ区切り、8項目) |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | CSV-INPUT | R01 | KIN01R01 | I | 自前(80B) | F | | 80 | PS | CSV形式 |
|
||||
| 2 | WORK-LEAVE | W01 | KIN01W01 | O | KIN01REC | FB | | 80 | PS | |
|
||||
| 3 | ERROR-LOG | W02 | KIN01W02 | O | KIN05REC | VB | | 200 | PS | |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | CSV-INPUT | なし | なし |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
| 4 | 項目チェックSUB | SUB04CHK | ZANCHKAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.休暇種別テーブル設定(WRK-LEAVE-TYPE-TABLE)
|
||||
WRK-LT-CODE(1)='01' (年休/年假)
|
||||
WRK-LT-CODE(2)='02' (事假)
|
||||
WRK-LT-CODE(3)='03' (因公特批假)
|
||||
WRK-LT-CODE(4)='04' (病欠)
|
||||
1-5.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-6.使用ファイルのオープン(R01:入力、W01/W02:出力)
|
||||
1-7.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.CSVの分解(2010CSVSOR)
|
||||
UNSTRINGでカンマ区切りのCSVを8項目に分解する。
|
||||
(APPL-ID, EMP-ID, START-DATE, START-TIME, END-DATE, END-TIME, LEAVE-TYPE, STATUS)
|
||||
2-2.休暇種別テーブル検索(2020LEAVSERSOR)
|
||||
SEARCH(非ALL)でWRK-LEAVE-TYPE-TABLEを検索し、休暇種別の妥当性を検証する。
|
||||
2-3.エラー判定
|
||||
2-3-1.フィールド数≠8の場合
|
||||
ERROR-LOGに出力する。(2050ERRORSOR)
|
||||
エラー種別:'F'(FIELD COUNT ERROR)
|
||||
2-3-2.休暇種別がテーブルに存在しない場合
|
||||
ERROR-LOGに出力する。(2050ERRORSOR)
|
||||
エラー種別:'L'(INVALID LEAVE TYPE)
|
||||
2-3-3.ステータス'1'(有効)の場合
|
||||
項目チェックを実施し、エラーがあればERROR-LOGに出力、なければWORK-LEAVEに出力する。(2030VALIDATESOR)
|
||||
2-3-3-1.SUB04CHKで社員番号チェック(EMPID): WRK-CSV-EMP-IDをC01CHKDATに設定し、CALL 'SUB04CHK' EMPIDタイプで社員番号フォーマットの妥当性を検証する。エラーの場合はW02ERR-CATEGORY='01'でエラーログに出力し本レコードをスキップ。
|
||||
2-3-3-2.開始日付チェック(SUB04CHK)。エラー→W02出力
|
||||
2-3-3-3.開始時刻チェック(SUB04CHK)。エラー→W02出力
|
||||
2-3-3-4.終了日付チェック(SUB04CHK)。エラー→W02出力
|
||||
2-3-3-5.終了時刻チェック(SUB04CHK)。エラー→W02出力
|
||||
2-3-3-6.複合条件チェック(AND+OR+3段ネスト)
|
||||
開始日>0 AND 終了日>0 AND 開始時刻>0 の場合:
|
||||
- 開始日>終了日 → WRK-DEMO-TYPE=10
|
||||
- 開始日=終了日 AND 開始時刻>=終了時刻 → WRK-DEMO-TYPE=10
|
||||
- 上記以外 → WRK-DEMO-TYPE=20
|
||||
2-3-3-7.すべて通過→W01出力(APPL-ID=0, STATUS='1')
|
||||
2-3-4.ステータス'9'(取消)の場合
|
||||
WORK-LEAVEにそのまま出力する。(2040CANCELSOR)
|
||||
APPL-ID=CSV値、STATUS='9'(項目チェックなし)
|
||||
2-3-5.その他のステータスの場合
|
||||
ERROR-LOGに出力する。(2050ERRORSOR)
|
||||
エラー種別:'S'(INVALID STATUS)
|
||||
2-4.R01を読み込む。(1100R01INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'KIN01R01'
|
||||
PARM2:当該入力ファイルの件数
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'KIN01W01'、'KIN01W02'
|
||||
PARM2:当該出力ファイルの件数
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/WORK-LEAVE) KIN01REC 80B FB
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | APPL-ID | WRK-CSV-APPL-ID | 有効時=0、取消時=CSV値 |
|
||||
| 2 | EMP-ID | WRK-CSV-EMP-ID | |
|
||||
| 3 | LEAVE-TYPE | WRK-CSV-LEAVE-TYPE | 01/02/03/04 |
|
||||
| 4 | START-DATE | WRK-CSV-START-DATE | YYYYMMDD |
|
||||
| 5 | START-TIME | WRK-CSV-START-TIME | HHMM |
|
||||
| 6 | END-DATE | WRK-CSV-END-DATE | YYYYMMDD |
|
||||
| 7 | END-TIME | WRK-CSV-END-TIME | HHMM |
|
||||
| 8 | STATUS | WRK-CSV-STATUS | '1'(有効)または'9'(取消) |
|
||||
| 9 | FILLER | SPACE | 36B |
|
||||
|
||||
### 出力ファイル2(W02/ERROR-LOG) KIN05REC 200B VB
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | '01'固定 | |
|
||||
| 2 | ERR-DETAIL | STRING編集 | エラー内容(198B) |
|
||||
@@ -0,0 +1,155 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 勤怠休暇管理システム |
|
||||
| 2 | プログラムID | KIN02UPD |
|
||||
| 3 | プログラム名 | 休暇申請DB更新処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | DB更新 |
|
||||
| 6 | 機能概要 | WORK-LEAVEファイルの各レコードをDB2テーブルLEAVE_RECORDSに反映する。 |
|
||||
| 7 | | ステータスによって新規登録(INSERT)、変更(DELETE+INSERT)、取消(DELETE)を行う。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | KIN01W01 | KIN01INPの出力順に従う。ソート不要。 |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | WORK-LEAVE | R01 | KIN01W01 | I | KIN01REC | FB | | 80 | PS | |
|
||||
| 2 | ERROR-LOG | W01 | KIN02W01 | O | KIN05REC | VB | | 200 | PS | DBエラー時出力 |
|
||||
| 3 | LEAVE_RECORDS | DB | — | I/U/D | — | — | — | — | DB | SQLite |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | WORK-LEAVE | なし | なし |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.DB接続
|
||||
EXEC SQL CONNECT TO 'data/kin.db'
|
||||
1-5.R01ファイルOPEN(入力)+ W01ファイルOPEN(出力)
|
||||
1-6.R01を初回読込(1100R01INNSOR)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.レコード処理(2100PROCSOR)
|
||||
2-1-1.R01各項目をホスト変数(WS-*)にMOVEする。
|
||||
2-1-2.ロジック分岐判定(EVALUATE)
|
||||
2-1-2-1.STATUS='1' AND APPL-ID=0(新規)の場合
|
||||
INSERT処理(2110INSERTSOR)
|
||||
【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)
|
||||
SQLCODE≠0の場合、DBエラー処理(9100DBERRSOR)を実行する。
|
||||
CUN-DBXINSを+1する。
|
||||
2-1-2-2.STATUS='1' AND APPL-ID>0(変更)の場合
|
||||
UPDATE処理(2120UPDATESOR)
|
||||
【SQL】
|
||||
DELETE FROM LEAVE_RECORDS
|
||||
WHERE APPLICATION_ID = :WS-APPL-ID
|
||||
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)
|
||||
各SQLでSQLCODE≠0の場合、DBエラー処理(9100DBERRSOR)を実行する。
|
||||
CUN-DBXUPDを+1する。
|
||||
2-1-2-3.STATUS='9'(取消)の場合
|
||||
DELETE処理(2130DELETESOR)
|
||||
【SQL】
|
||||
DELETE FROM LEAVE_RECORDS
|
||||
WHERE APPLICATION_ID = :WS-APPL-ID
|
||||
SQLCODE≠0の場合、DBエラー処理(9100DBERRSOR)を実行する。
|
||||
CUN-DBXDELを+1する。
|
||||
2-1-2-4.その他
|
||||
何も処理しない(CONTINUE)
|
||||
2-2.次レコード読込(1100R01INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.COMMIT
|
||||
EXEC SQL COMMIT WORK
|
||||
3-2.入出力ファイルのクローズ
|
||||
3-3.件数メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:6(入力件数)
|
||||
PARM1:'KIN01W01'
|
||||
PARM2:入力件数
|
||||
PARM1:'INS'、'UPD'、'DEL'
|
||||
PARM2:各処理件数
|
||||
3-4.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
|
||||
4.DBエラー処理(9100DBERRSOR)
|
||||
4-1.ROLLBACK
|
||||
EXEC SQL ROLLBACK WORK
|
||||
4-2.ERROR-LOG出力(W01OUTFIL)
|
||||
【MOVE → INITIALIZE & WRITE】
|
||||
MOVE SQLCODE TO WRK-SQLCODE-DISP
|
||||
W01ERR-CATEGORY = '01'(固定)
|
||||
W01ERR-DETAIL = 'KIN02UPD SQLCODE=' + WRK-SQLCODE-DISP + ' APPL-ID=' + WS-APPL-ID
|
||||
CUN-W01OUTを+1する。
|
||||
4-3.エラーメッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'KIN02UPD SQL ERROR'
|
||||
PARM2:SQLCODE
|
||||
PARM3:WS-APPL-ID
|
||||
4-4.ABEND処理SUB呼出(9999ABDSOR)
|
||||
ABENDコード:999
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 01で固定 | DBエラー |
|
||||
| 2 | ERR-DETAIL | STRINGで編集 | KIN02UPD SQLCODE= + WRK-SQLCODE-DISP + APPL-ID= + WS-APPL-ID |
|
||||
|
||||
### DB更新結果
|
||||
|
||||
LEAVE_RECORDSテーブルに直接反映される。
|
||||
@@ -0,0 +1,170 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 勤怠休暇管理システム |
|
||||
| 2 | プログラムID | KIN03EXP |
|
||||
| 3 | プログラム名 | 休暇日別展開処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | キーブレイク(集計) |
|
||||
| 6 | 機能概要 | LEAVE_RECORDS(DB2)より有効申請(STATUS='1')を読込み、開始日〜終了日の期間を日別に展開し、休日・週末を除外してLEAVE-DAILYファイルを出力する。 |
|
||||
| 7 | | 社員番号(EMP_ID)キーブレイクで小計出力を行う。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | DB(LEAVE_RECORDS) | EMP_ID, START_DATE順にソート済(ORDER BYで取得) |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | LEAVE-DAILY | W01 | KIN02W01.DAT | O | KIN02REC | FB | | 80 | PS | 日別展開後レコード |
|
||||
| 2 | LEAVE_RECORDS | DB | — | I | — | — | — | — | DB | SQLite |
|
||||
| 3 | HOLIDAY_CALENDAR | DB | — | I | — | — | — | — | DB | SQLite |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | DB(LEAVE_RECORDS) | EMP-ID, START_DATE(昇順) | キーブレイク: EMP-ID |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.DB接続
|
||||
EXEC SQL CONNECT TO 'data/kin.db'
|
||||
1-5.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-6.休日カレンダーテーブル読込(1200HDINNSOR)
|
||||
【SQL】
|
||||
SELECT HOLIDAY_DATE FROM HOLIDAY_CALENDAR ORDER BY HOLIDAY_DATE
|
||||
FETCHループでWORKING-STORAGEのWRK-HOLIDAY-TABLEに全件格納する。
|
||||
WRK-HD-COUNTに件数を保持。最大366件(ODO定義)。
|
||||
1-7.出力ファイルOPEN(W01)
|
||||
1-8.C1カーソル初回FETCH(1100C1INITSOR)
|
||||
【SQL】
|
||||
SELECT APPLICATION_ID, EMP_ID, LEAVE_TYPE,
|
||||
START_DATE, START_TIME, END_DATE, END_TIME
|
||||
FROM LEAVE_RECORDS
|
||||
WHERE STATUS = '1'
|
||||
ORDER BY EMP_ID, START_DATE
|
||||
INTO :SQL-APPL-ID, :SQL-EMP-ID, :SQL-LEAVE-TYPE,
|
||||
:SQL-START-DATE, :SQL-START-TIME,
|
||||
:SQL-END-DATE, :SQL-END-TIME
|
||||
SQLCODE=0の場合、入力件数+1
|
||||
SQLCODE≠0の場合、WRK-R01EOF='1'(EOF)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.社員番号キー保存
|
||||
SQL-EMP-ID → WRK-BFR-EMP-ID
|
||||
2-2.1社員分処理(2100-PROCESS-EMP)(PERFORM THRU)
|
||||
2-2-1.CUN-EMP-SUB初期化(ZERO)
|
||||
2-2-2.EOFまたはキー変化(SQL-EMP-ID≠WRK-BFR-EMP-ID)まで繰り返し
|
||||
2-2-2-1.日付展開処理(2200-EXPAND-DATE)(PERFORM THRU)
|
||||
2-2-2-1-1.開始日(SQL-START-DATE)→WRK-DATE-CURRENT
|
||||
終了日(SQL-END-DATE)→WRK-DATE-END
|
||||
2-2-2-1-2.WRK-DATE-CURRENT > WRK-DATE-END までループ
|
||||
2-2-2-1-2-1.曜日判定
|
||||
COMPUTE WRK-DAY-OF-WEEK = FUNCTION MOD(
|
||||
FUNCTION INTEGER-OF-DATE(WRK-DATE-CURRENT), 7)
|
||||
0=日曜日、6=土曜日 → 週末としてスキップ
|
||||
2-2-2-1-2-2.非週末の場合、休日テーブル検索
|
||||
SEARCH ALL WRK-HD-ENTRY(昇順KEY=WRK-HD-DATE)
|
||||
WRK-HD-DATE(WRK-HD-IDX) = WRK-DATE-CURRENT → 休日としてスキップ
|
||||
2-2-2-1-2-3.非週末かつ非休日の場合、W01出力
|
||||
W01レコード初期化
|
||||
APPL-ID = SQL-APPL-ID
|
||||
EMP-ID = WRK-BFR-EMP-ID
|
||||
LEAVE-TYPE = SQL-LEAVE-TYPE
|
||||
START-TIME = SQL-START-TIME
|
||||
END-TIME = SQL-END-TIME
|
||||
DATE = WRK-DATE-ALPHA(現在日付)
|
||||
WRITE W01OUTREC
|
||||
CUN-W01OUT +1
|
||||
CUN-EMP-SUB +1
|
||||
2-2-2-1-2-4.日付加算(2300-DATE-ADD-1)
|
||||
WRK-DATE-DAY + 1
|
||||
各月の最終日判定:
|
||||
- 1/3/5/7/8/10/12月:31日超で月+1、13月→年+1
|
||||
- 4/6/9/11月:30日超で月+1
|
||||
- 2月:閏年判定(MOD年400=0 または MOD年4=0 AND MOD年100≠0)
|
||||
閏年→29日超、平年→28日超で月+1
|
||||
2-2-3.次レコードFETCH(1100C1FETCHSOR)
|
||||
CALL 'br_fetch_next' USING SQLCODE
|
||||
SQLCODE=0の場合、br_get_colで各カラムを取得
|
||||
SQLCODE≠0の場合、WRK-R01EOF='1'
|
||||
2-2-4.社員別小計出力(キーブレイク)
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(情報メッセージ)
|
||||
PARM1:WRK-BFR-EMP-ID
|
||||
PARM2:CUN-EMP-SUB
|
||||
PARM3:'EMP SUB'
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.出力ファイルのクローズ
|
||||
3-2.件数メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:6(入力件数)
|
||||
PARM1:'LEAVE_RECORDS'
|
||||
PARM2:入力件数
|
||||
【メッセージ編集】
|
||||
メッセージ番号:7(出力件数)
|
||||
PARM1:'KIN02W01'
|
||||
PARM2:出力件数
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(情報)
|
||||
PARM1:'HOLIDAYS LOADED'
|
||||
PARM2:休日テーブル件数
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/LEAVE-DAILY) KIN02REC 80B FB
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | EMP-ID | WRK-BFR-EMP-ID | キーブレイク単位 |
|
||||
| 2 | DATE | WRK-DATE-ALPHA | 展開された日付(YYYYMMDD) |
|
||||
| 3 | LEAVE-TYPE | SQL-LEAVE-TYPE | 01/02/03/04 |
|
||||
| 4 | START-TIME | SQL-START-TIME | 元申請の開始時刻(HHMM) |
|
||||
| 5 | END-TIME | SQL-END-TIME | 元申請の終了時刻(HHMM) |
|
||||
| 6 | APPL-ID | SQL-APPL-ID | APPLICATION_ID |
|
||||
| 7 | FILLER | SPACE | 45B |
|
||||
@@ -0,0 +1,52 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | SUB01DAT |
|
||||
| 3 | プログラム名 | 運用日付取得サブ |
|
||||
| 4 | PGMタイプ | サブ |
|
||||
| 5 | PGMパターン | - |
|
||||
| 6 | 機能概要 | 現在日付を取得し、運用日付(YYYYMMDD)として返す |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 使用方法
|
||||
|
||||
```
|
||||
CALL 'SUB01DAT' USING D01UBSPAR
|
||||
```
|
||||
|
||||
### 入出力パラメータ
|
||||
|
||||
| COPY句 | ZANDATAC |
|
||||
|------------|----------|
|
||||
|
||||
| NO | 入出力区分 | 名称 | 属性 | 桁数 | 説明 |
|
||||
|----|-----------|------|------|------|------|
|
||||
| 1 | O | D01FKICOD | S9(4) COMP | 4 | 復帰コード(0000:正常) |
|
||||
| 2 | O | D01UBSUDATE | 9(8) | 8 | 運用日付(YYYYMMDD) |
|
||||
|
||||
### リターンコード一覧
|
||||
|
||||
| NO | コード | 説明 |
|
||||
|----|--------|------|
|
||||
| 1 | 0000 | 正常終了 |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.制御処理(0000MAINSOR)
|
||||
1-1.現在日時を取得する。
|
||||
MOVE FUNCTION CURRENT-DATE TO WRK-SYS-DATE.
|
||||
1-2.YYYYMMDD部分を抽出する。
|
||||
MOVE WRK-SYS-DATE(1:8) TO D01UBSUDATE.
|
||||
1-3.正常終了
|
||||
MOVE ZERO TO D01FKICOD.
|
||||
1-4.復帰(GOBACK)。
|
||||
```
|
||||
@@ -0,0 +1,72 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | SUB02MSG |
|
||||
| 3 | プログラム名 | メッセージ編集出力サブ |
|
||||
| 4 | PGMタイプ | サブ |
|
||||
| 5 | PGMパターン | - |
|
||||
| 6 | 機能概要 | メッセージ番号とパラメータを編集し、標準出力へ出力する。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 使用方法
|
||||
|
||||
```
|
||||
CALL 'SUB02MSG' USING M00MHOPAR
|
||||
```
|
||||
|
||||
### 入出力パラメータ
|
||||
|
||||
| COPY句 | ZANMSGAC |
|
||||
|------------|----------|
|
||||
|
||||
| NO | 入出力区分 | 名称 | 属性 | 桁数 | 説明 |
|
||||
|----|-----------|------|------|------|------|
|
||||
| 1 | I | M00MSGCOD | 9(3) | 3 | メッセージ番号 |
|
||||
| 2 | I | M00UMKDATS22-01 | X(30) | 30 | パラメータ1 |
|
||||
| 3 | I | M00UMKDATS22-02 | X(30) | 30 | パラメータ2 |
|
||||
| 4 | I | M00UMKDATS22-03 | X(30) | 30 | パラメータ3 |
|
||||
| 5 | I | M00UMKDATS22-04 | X(30) | 30 | パラメータ4 |
|
||||
| 6 | I | M00UMKDATS22-05 | X(30) | 30 | パラメータ5 |
|
||||
| 7 | I | M00UMKDATS22-06 | X(30) | 30 | パラメータ6 |
|
||||
| 8 | I | M00UMKDATS22-07 | X(30) | 30 | パラメータ7 |
|
||||
| 9 | I | M00UMKDATS22-08 | X(30) | 30 | パラメータ8 |
|
||||
| 10 | I | M00UMKDATS22-09 | X(30) | 30 | パラメータ9 |
|
||||
| 11 | I | M00UMKDATS22-10 | X(30) | 30 | パラメータ10 |
|
||||
|
||||
### リターンコード一覧
|
||||
|
||||
| NO | コード | 説明 |
|
||||
|----|--------|------|
|
||||
| 1 | - | 復帰コードなし(GOBACKで復帰) |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.制御処理(0000MAINSOR)
|
||||
1-1.メッセージ行(WRK-MSG-LINE)を編集する。
|
||||
STRING 'MSG['
|
||||
M00MSGCOD
|
||||
'] P1='
|
||||
M00UMKDATS22-01
|
||||
' P2='
|
||||
M00UMKDATS22-02
|
||||
' P3='
|
||||
M00UMKDATS22-03
|
||||
' P4='
|
||||
M00UMKDATS22-04
|
||||
' P5='
|
||||
M00UMKDATS22-05
|
||||
INTO WRK-MSG-LINE
|
||||
END-STRING.
|
||||
1-2.標準出力へ出力する。
|
||||
DISPLAY WRK-MSG-LINE.
|
||||
1-3.復帰(GOBACK)。
|
||||
```
|
||||
@@ -0,0 +1,51 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | SUB03END |
|
||||
| 3 | プログラム名 | ABEND処理サブ |
|
||||
| 4 | PGMタイプ | サブ |
|
||||
| 5 | PGMパターン | - |
|
||||
| 6 | 機能概要 | ABENDコードを表示し、異常終了する。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 使用方法
|
||||
|
||||
```
|
||||
CALL 'SUB03END' USING E01ABDPAR
|
||||
```
|
||||
|
||||
### 入出力パラメータ
|
||||
|
||||
| COPY句 | ZANENDAC |
|
||||
|------------|----------|
|
||||
|
||||
| NO | 入出力区分 | 名称 | 属性 | 桁数 | 説明 |
|
||||
|----|-----------|------|------|------|------|
|
||||
| 1 | I | E01ABDCOD | 9(3) | 3 | ABENDコード |
|
||||
|
||||
### リターンコード一覧
|
||||
|
||||
| NO | コード | 説明 |
|
||||
|----|--------|------|
|
||||
| 1 | - | ABENDするため復帰コードなし(STOP RUN実行) |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.制御処理(0000MAINSOR)
|
||||
1-1.ABENDメッセージを編集する。
|
||||
MOVE 'ABEND CODE=' TO WRK-ABEND-MSG.
|
||||
MOVE E01ABDCOD TO WRK-ABEND-MSG(12:3).
|
||||
1-2.メッセージを表示する。
|
||||
DISPLAY WRK-ABEND-MSG.
|
||||
1-3.異常終了する。
|
||||
STOP RUN.
|
||||
```
|
||||
@@ -0,0 +1,115 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | SUB04CHK |
|
||||
| 3 | プログラム名 | 項目チェックサブ |
|
||||
| 4 | PGMタイプ | サブ |
|
||||
| 5 | PGMパターン | 項目チェック |
|
||||
| 6 | 機能概要 | チェックタイプに応じてデータ妥当性を検証する。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 使用方法
|
||||
|
||||
```
|
||||
CALL 'SUB04CHK' USING C01CHKPAR
|
||||
```
|
||||
|
||||
### 入出力パラメータ
|
||||
|
||||
| COPY句 | ZANCHKAC |
|
||||
|------------|----------|
|
||||
|
||||
| NO | 入出力区分 | 名称 | 属性 | 桁数 | 説明 |
|
||||
|----|-----------|------|------|------|------|
|
||||
| 1 | I | C01CHKTYP | X(8) | 8 | チェックタイプ(DATE/TIME/NUM/EMPID) |
|
||||
| 2 | I | C01CHKDAT | X(80) | 80 | チェック対象データ |
|
||||
| 3 | O | C01CHKRRC | 9(4) | 4 | 復帰コード(0000:正常,0001:日付不正,0002:時刻不正,0003:数字不正) |
|
||||
|
||||
### リターンコード一覧
|
||||
|
||||
| NO | コード | 説明 |
|
||||
|----|--------|------|
|
||||
| 1 | 0000 | 正常終了(チェックOK) |
|
||||
| 2 | 0001 | 日付不正(DATE指定時、月01〜12/日01〜31範囲外) |
|
||||
| 3 | 0002 | 時刻不正(TIME指定時、時00〜23/分00〜59範囲外) |
|
||||
| 4 | 0003 | 数字不正(NUM指定時、非数字文字を含む) |
|
||||
| 5 | 0004 | 社員番号不正(EMPID指定時、8桁以外または空欄) |
|
||||
| 6 | 9999 | チェックタイプ不明 |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.制御処理(0000MAINSOR)
|
||||
1-1.C01CHKTYPにより分岐する。
|
||||
1-1-1.C01CHKTYP = 'DATE' の場合
|
||||
1000CHKDATEへ。
|
||||
1-1-2.C01CHKTYP = 'TIME' の場合
|
||||
2000CHKTIMEへ。
|
||||
1-1-3.C01CHKTYP = 'NUM' の場合
|
||||
3000CHKNUMへ。
|
||||
1-1-4.C01CHKTYP = 'EMPID' の場合
|
||||
4000CHKEMPへ。
|
||||
1-1-5.その他の場合
|
||||
C01CHKRRC = 9999 を設定し、1-2へ。
|
||||
1-2.復帰(GOBACK)。
|
||||
|
||||
2.日付チェック(1000CHKDATE)
|
||||
2-1.C01CHKDATから年月日を抽出する。
|
||||
YYYY = C01CHKDAT(1:4)
|
||||
MM = C01CHKDAT(5:2)
|
||||
DD = C01CHKDAT(7:2)
|
||||
2-2.月チェック(MM)
|
||||
2-2-1.MM < 1 OR MM > 12
|
||||
→ C01CHKRRC = 0001 を設定し、2-5へ。
|
||||
2-3.日チェック(DD)
|
||||
2-3-1.DD < 1 OR DD > 31
|
||||
→ C01CHKRRC = 0001 を設定し、2-5へ。
|
||||
2-4.正常の場合
|
||||
C01CHKRRC = 0000 を設定する。
|
||||
2-5.復帰(0000MAINSOR-EXTへ)。
|
||||
|
||||
3.時刻チェック(2000CHKTIME)
|
||||
3-1.C01CHKDATから時分を抽出する。
|
||||
HH = C01CHKDAT(1:2)
|
||||
MM = C01CHKDAT(3:2)
|
||||
3-2.時チェック(HH)
|
||||
3-2-1.HH > 23
|
||||
→ C01CHKRRC = 0002 を設定し、3-5へ。
|
||||
3-3.分チェック(MM)
|
||||
3-3-1.MM > 59
|
||||
→ C01CHKRRC = 0002 を設定し、3-5へ。
|
||||
3-4.正常の場合
|
||||
C01CHKRRC = 0000 を設定する。
|
||||
3-5.復帰(0000MAINSOR-EXTへ)。
|
||||
|
||||
4.数字チェック(3000CHKNUM)
|
||||
4-1.C01CHKDATにSPACEより前の文字があるかチェックする。
|
||||
INSPECT C01CHKDAT TALLYING WRK-NN FOR
|
||||
CHARACTERS BEFORE INITIAL SPACE.
|
||||
4-2.WRK-NN > 0 の場合
|
||||
C01CHKRRC = 0003 を設定し、4-4へ。
|
||||
4-3.正常の場合
|
||||
C01CHKRRC = 0000 を設定する。
|
||||
4-4.復帰(0000MAINSOR-EXTへ)。
|
||||
|
||||
5.社員番号チェック(4000CHKEMP)
|
||||
5-1.桁数チェック(8桁以内)
|
||||
C01CHKDAT(9:72)にSPACES以外がある場合
|
||||
C01CHKRRC = 0004 を設定し、5-4へ。
|
||||
5-2.空欄チェック
|
||||
INSPECT C01CHKDAT(1:8) TALLYING WRK-NN FOR
|
||||
CHARACTERS BEFORE INITIAL SPACE.
|
||||
WRK-NN > 0 の場合
|
||||
C01CHKRRC = 0004 を設定し、5-4へ。
|
||||
5-3.正常の場合
|
||||
C01CHKRRC = 0000 を設定する。
|
||||
5-4.復帰(0000MAINSOR-EXTへ)。
|
||||
```
|
||||
@@ -0,0 +1,107 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | SUB05TIM |
|
||||
| 3 | プログラム名 | 時刻丸め計算サブ |
|
||||
| 4 | PGMタイプ | サブ |
|
||||
| 5 | PGMパターン | - |
|
||||
| 6 | 機能概要 | 時間値を指定単位で丸め計算する。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 使用方法
|
||||
|
||||
```
|
||||
CALL 'SUB05TIM' USING T01TIMPAR
|
||||
```
|
||||
|
||||
### 入出力パラメータ
|
||||
|
||||
| COPY句 | ZANTIMAC |
|
||||
|------------|----------|
|
||||
|
||||
| NO | 入出力区分 | 名称 | 属性 | 桁数 | 説明 |
|
||||
|----|-----------|------|------|------|------|
|
||||
| 1 | I | T01TIMHRS | 9(4)V9(1) | 4.1 | 入力時間(HH.h) |
|
||||
| 2 | O | T01TIMOUT | 9(4)V9(1) | 4.1 | 出力時間(丸め後) |
|
||||
| 3 | I | T01TIMRRC | 9(4) | 4 | 丸めモード(0:0.5h切上,1:0.1h切上,2:0.1h切捨,3:単純四捨五入) |
|
||||
|
||||
### リターンコード一覧
|
||||
|
||||
| NO | コード | 説明 |
|
||||
|----|--------|------|
|
||||
| 1 | 0000 | 正常終了 |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.制御処理(0000MAINSOR)
|
||||
1-1.T01TIMRRCにより丸めモードを分岐する。
|
||||
1-1-1.T01TIMRRC = 0 の場合(0.5時間単位・切上)
|
||||
1000RNDHALFへ。
|
||||
1-1-2.T01TIMRRC = 1 の場合(0.1時間単位・切上)
|
||||
2000RNDUPへ。
|
||||
1-1-3.T01TIMRRC = 2 の場合(0.1時間単位・切捨)
|
||||
3000RNDDOWNへ。
|
||||
1-1-4.T01TIMRRC = 3 の場合(単純四捨五入・0.1h単位)
|
||||
4000RNDNORMALへ。
|
||||
1-1-5.その他の場合
|
||||
T01TIMOUT = T01TIMHRS をそのまま設定する。
|
||||
1-2.復帰(GOBACK)。
|
||||
|
||||
2.0.5時間単位・切上(1000RNDHALF)
|
||||
2-1.T01TIMHRSを分に変換する。
|
||||
WRK-MINUTES = T01TIMHRS * 60.
|
||||
2-2.30分単位で切り上げる(DIVIDE REMAINDER)。
|
||||
DIVIDE WRK-MINUTES BY 30
|
||||
GIVING WRK-HOURS
|
||||
REMAINDER WRK-REMAINDER.
|
||||
2-2-1.WRK-REMAINDER > 0 の場合
|
||||
WRK-HOURS = WRK-HOURS + 1.
|
||||
2-2-2.WRK-REMAINDER = 0 の場合
|
||||
そのまま。
|
||||
2-3.時間に戻す。
|
||||
T01TIMOUT = WRK-HOURS * 0.5.
|
||||
2-4.復帰(0000MAINSOR-EXTへ)。
|
||||
|
||||
3.0.1時間単位・切上(2000RNDUP)
|
||||
3-1.T01TIMHRSを分に変換する。
|
||||
WRK-MINUTES = T01TIMHRS * 60.
|
||||
3-2.6分単位で切り上げる(DIVIDE REMAINDER)。
|
||||
DIVIDE WRK-MINUTES BY 6
|
||||
GIVING WRK-HOURS
|
||||
REMAINDER WRK-REMAINDER.
|
||||
3-2-1.WRK-REMAINDER > 0 の場合
|
||||
WRK-HOURS = WRK-HOURS + 1.
|
||||
3-2-2.WRK-REMAINDER = 0 の場合
|
||||
そのまま。
|
||||
3-3.時間に戻す。
|
||||
T01TIMOUT = WRK-HOURS * 0.1.
|
||||
3-4.復帰(0000MAINSOR-EXTへ)。
|
||||
|
||||
4.0.1時間単位・切捨(3000RNDDOWN)
|
||||
4-1.T01TIMHRSを分に変換する。
|
||||
WRK-MINUTES = T01TIMHRS * 60.
|
||||
4-2.6分単位で切り捨てる(DIVIDE REMAINDER)。
|
||||
DIVIDE WRK-MINUTES BY 6
|
||||
GIVING WRK-HOURS
|
||||
REMAINDER WRK-REMAINDER.
|
||||
4-3.時間に戻す。
|
||||
T01TIMOUT = WRK-HOURS * 0.1.
|
||||
4-4.復帰(0000MAINSOR-EXTへ)。
|
||||
|
||||
5.単純四捨五入・0.1h単位(4000RNDNORMAL)
|
||||
5-1.T01TIMHRSに0.05を加算する。
|
||||
WRK-HOURS = T01TIMHRS + 0.05.
|
||||
5-2.小数点第2位以下を切り捨てる。
|
||||
T01TIMOUT = WRK-HOURS.
|
||||
*> 9(4)V9(1)へのMOVEにより自動で切捨
|
||||
5-3.復帰(0000MAINSOR-EXTへ)。
|
||||
```
|
||||
@@ -0,0 +1,144 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | ZAN01CHK |
|
||||
| 3 | プログラム名 | 残業申請振分処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | 振り分け |
|
||||
| 6 | 機能概要 | CSV形式の残業申請ファイルを読み込み、ステータスによって振り分ける。 |
|
||||
| 7 | | ステータス0/1:有効申請としてOVT-VALIDに出力 |
|
||||
| 8 | | ステータス9:取消申請としてOVT-CANCELに出力 |
|
||||
| 9 | | その他:エラーとしてERROR-LOGに出力 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | OVT-APPLY(CSV) | ソート不要。CSV形式(カンマ区切り) |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | OVT-APPLY | R01 | ZAN01R01 | I | 自前(80B) | F | | 80 | PS | CSV形式 |
|
||||
| 2 | OVT-VALID | W01 | ZAN01W01 | O | ZAN01REC | FB | | 80 | PS | |
|
||||
| 3 | OVT-CANCEL | W02 | ZAN01W02 | O | ZAN01REC | FB | | 80 | PS | |
|
||||
| 4 | ERROR-LOG | W03 | ZAN01W03 | O | ZAN05REC | VB | | 200 | PS | |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | OVT-APPLY | なし | なし |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
| 4 | 項目チェックSUB | SUB04CHK | ZANCHKAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-5.使用ファイルのオープン
|
||||
1-6.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.CSVの分解
|
||||
UNSTRINGでカンマ区切りのCSVを各項目に分解する。(2010CSVSOR)
|
||||
2-2.ステータス判定
|
||||
2-2-1.ステータスが0または1の場合
|
||||
項目チェックを実施し、エラーがあればERROR-LOGに出力、なければOVT-VALIDに出力。(2020VALIDATESOR)
|
||||
2-2-1-1.日付チェック(SUB04CHK)。エラー→W03出力
|
||||
2-2-1-2.開始時刻>=1830チェック。NG→W03出力
|
||||
2-2-1-3.開始時刻<終了時刻チェック。NG→W03出力
|
||||
2-2-1-4.時間差>=30分チェック。NG→W03出力
|
||||
2-2-1-5.すべて通過→W01出力
|
||||
2-2-2.ステータスが9の場合
|
||||
OVT-CANCELにそのまま出力する。(2030CANCELSOR)
|
||||
2-2-3.その他の場合
|
||||
ERROR-LOGに出力する。(2040ERRORSOR)
|
||||
2-3.R01を読み込む。(1100R01INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:当該入力ファイルのDD名
|
||||
PARM2:当該入力ファイルの件数
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:当該出力ファイルのDD名
|
||||
PARM2:当該出力ファイルの件数
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/OVT-VALID)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | APPL-ID | CSV同項目を設定 | |
|
||||
| 2 | EMP-ID | CSV同項目を設定 | |
|
||||
| 3 | APPL-DATE | CSV同項目を設定 | |
|
||||
| 4 | START-TIME | CSV同項目を設定 | |
|
||||
| 5 | END-TIME | CSV同項目を設定 | |
|
||||
| 6 | STATUS | CSV同項目を設定 | 0または1 |
|
||||
| 7 | OVT-TYPE | CSV同項目を設定 | |
|
||||
| 8 | FILLER | CSV同項目を設定 | |
|
||||
|
||||
### 出力ファイル2(W02/OVT-CANCEL)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | APPL-ID | CSV同項目を設定 | |
|
||||
| 2 | EMP-ID | CSV同項目を設定 | |
|
||||
| 3 | APPL-DATE | CSV同項目を設定 | |
|
||||
| 4 | START-TIME | CSV同項目を設定 | |
|
||||
| 5 | END-TIME | CSV同項目を設定 | |
|
||||
| 6 | STATUS | CSV同項目を設定 | 9 |
|
||||
| 7 | OVT-TYPE | CSV同項目を設定 | |
|
||||
| 8 | FILLER | CSV同項目を設定 | |
|
||||
|
||||
### 出力ファイル3(W03/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 01で固定 | |
|
||||
| 2 | ERR-DETAIL | STRINGで編集 | エラー内容 |
|
||||
@@ -0,0 +1,123 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | ZAN02CHK |
|
||||
| 3 | プログラム名 | 時間帯重複チェック処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | 項目チェック |
|
||||
| 6 | 機能概要 | OVT-VSORTファイルの同一社員・同一日付内の時間帯重複をチェックする。 |
|
||||
| 7 | | 重複なしのレコードはOVT-NODUPに出力 |
|
||||
| 8 | | 重複ありのレコードはERROR-LOGに出力 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | OVT-VSORT | 社員番号>日付>開始時刻で昇順ソート済み |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | OVT-VSORT | R01 | ZAN02R01 | I | ZAN01REC | FB | | 80 | PS | |
|
||||
| 2 | OVT-NODUP | W01 | ZAN02W01 | O | ZAN01REC | FB | | 80 | PS | |
|
||||
| 3 | ERROR-LOG | W02 | ZAN02W02 | O | ZAN05REC | VB | | 200 | PS | |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | OVT-VSORT | EMP-ID>APPL-DATE>START-TIME(昇順) | EMP-ID>APPL-DATE |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-5.使用ファイルのオープン
|
||||
1-6.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||
1-7.1件目をW01に出力し、前レコードに保持する。
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.前レコードとの比較
|
||||
2-1-1.同一社員番号かつ同一日付の場合
|
||||
2-1-1-1.前終了時刻>現開始時刻 → 重複あり(2011OVERLAPERRSOR)
|
||||
エラーカテゴリ02でERROR-LOGに出力
|
||||
2-1-1-2.前終了時刻<=現開始時刻 → 重複なし(2012NORMALOUTSOR)
|
||||
W01に出力
|
||||
2-1-2.異なる社員番号または日付の場合(キーブレイク)
|
||||
キーブレイク処理として前レコードを更新しW01に出力(2013KEYBRSOR)
|
||||
2-2.R01を読み込む。(1100R01INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:当該入力ファイルのDD名
|
||||
PARM2:当該入力ファイルの件数
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:当該出力ファイルのDD名
|
||||
PARM2:当該出力ファイルの件数
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/OVT-NODUP)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | APPL-ID | R01.同項目を設定 | |
|
||||
| 2 | EMP-ID | R01.同項目を設定 | |
|
||||
| 3 | APPL-DATE | R01.同項目を設定 | |
|
||||
| 4 | START-TIME | R01.同項目を設定 | |
|
||||
| 5 | END-TIME | R01.同項目を設定 | |
|
||||
| 6 | STATUS | R01.同項目を設定 | |
|
||||
| 7 | OVT-TYPE | R01.同項目を設定 | |
|
||||
| 8 | FILLER | R01.同項目を設定 | |
|
||||
|
||||
### 出力ファイル2(W02/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 02で固定 | 重複エラー |
|
||||
| 2 | ERR-DETAIL | STRINGで編集 | EMP-IDと日付を編集 |
|
||||
@@ -0,0 +1,122 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | ZAN03CHK |
|
||||
| 3 | プログラム名 | 打刻時間照合処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | マッチング(N:1) |
|
||||
| 6 | 機能概要 | OVT-NODUPとPUNCH-SORTEDを突合し申請時間帯の照合を行う。 |
|
||||
| 7 | | 申請時間帯が出勤〜退勤の範囲内かを確認する。 |
|
||||
| 8 | | 申請日が休日かを判定しOVT-TYPEを付加する。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | OVT-NODUP | 社員番号>日付で昇順ソート済み |
|
||||
| 2 | PUNCH-SORTED | 社員番号>日付で昇順ソート済み |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | OVT-NODUP | R01 | ZAN03R01 | I | ZAN01REC | FB | | 80 | PS | |
|
||||
| 2 | PUNCH-SORTED | R02 | ZAN03R02 | I | 自前(80B) | FB | | 80 | PS | |
|
||||
| 3 | HOLIDAY-FILE | R03 | ZAN03R03 | I | 自前(80B) | FB | | 80 | PS | 休日カレンダー |
|
||||
| 4 | OVT-CHECKED | W01 | ZAN03W01 | O | ZAN01REC | FB | | 80 | PS | |
|
||||
| 5 | ERROR-LOG | W02 | ZAN03W02 | O | ZAN05REC | VB | | 200 | PS | |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | OVT-NODUP | EMP-ID>APPL-DATE(昇順) | EMP-ID>APPL-DATE |
|
||||
| 2 | PUNCH-SORTED | EMP-ID>DATE(昇順) | EMP-ID>DATE |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 2 | ABEND処理SUB | SUB03END | ZANENDAC |※ コード上では未使用(PERFORM元なし)|
|
||||
|
||||
※ ZAN03CHKはSUB01DATを使用しない。日付取得は不要のためFUNCTION CURRENT-DATEも使用しない。
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.使用ファイルのオープン
|
||||
1-6.HOLIDAY-FILEを全件読込しHOLIDAY-TABLEに設定する。(1300HOLIDAYSOR)
|
||||
1-7.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||
1-8.R02を読み込む。(1200R02INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終えるまで下記を繰り返す)
|
||||
2-1.R01キーとR02キーを比較
|
||||
2-1-1.R01キー < R02キー(打刻データなし)
|
||||
ERROR-LOGにエラー出力する(エラーカテゴリ03)。(2010NOMATCHSOR)
|
||||
2-1-2.R01キー = R02キー(マッチ)
|
||||
時間範囲チェックを実施する。(2020MATCHSOR)
|
||||
2-1-2-1.開始時刻>=出勤時刻 かつ 終了時刻<=退勤時刻 → 通過
|
||||
OVT-TYPEを設定しW01に出力する。(2200SETOVTSOR)
|
||||
2-1-2-2.範囲外 → ERROR-LOGに出力(エラーカテゴリ03)
|
||||
2-1-3.R01キー > R02キー(R02スキップ)
|
||||
R02を1件読み進める。(1200R02INNSOR)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:当該入力ファイルのDD名
|
||||
PARM2:当該入力ファイルの件数
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:当該出力ファイルのDD名
|
||||
PARM2:当該出力ファイルの件数
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/OVT-CHECKED)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | APPL-ID | R01.同項目を設定 | |
|
||||
| 2 | EMP-ID | R01.同項目を設定 | |
|
||||
| 3 | APPL-DATE | R01.同項目を設定 | |
|
||||
| 4 | START-TIME | R01.同項目を設定 | |
|
||||
| 5 | END-TIME | R01.同項目を設定 | |
|
||||
| 6 | STATUS | R01.同項目を設定 | |
|
||||
| 7 | OVT-TYPE | 2200SETOVTSORで設定 | W:平日/H:休日 |
|
||||
| 8 | FILLER | R01.同項目を設定 | |
|
||||
|
||||
### 出力ファイル2(W02/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 03で固定 | 打刻不突合 |
|
||||
| 2 | ERR-DETAIL | STRINGで編集 | 社員番号と日付を編集 |
|
||||
@@ -0,0 +1,144 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | ZAN04MAT |
|
||||
| 3 | プログラム名 | 取消マッチング処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | マッチング(1:1) |
|
||||
| 6 | 機能概要 | OVT-SORTED(有効申請)とOVT-CSORT(取消申請)を申請番号(APPL-ID)で1:1マッチングし、結果を振り分ける。 |
|
||||
| 7 | | 申請番号一致(取消済):監査証跡としてERROR-LOGに記録 |
|
||||
| 8 | | 申請のみ(取消なし):OVT-MATCHEDに出力(処理番号=1) |
|
||||
| 9 | | 取消のみ(既DB登録済):OVT-DBCLEANに出力(DB削除用) |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | ファイルR01(OVT-SORTED) | 申請番号(APPL-ID)で昇順ソート済、重複なし |
|
||||
| 2 | ファイルR02(OVT-CSORT) | 申請番号(APPL-ID)で昇順ソート済、重複なし |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | OVT-SORTED | R01 | ZAN04R01 | I | ZAN01REC | FB | | 80 | PS | 有効申請(APPL-ID昇順) |
|
||||
| 2 | OVT-CSORT | R02 | ZAN04R02 | I | ZAN01REC | FB | | 80 | PS | 取消申請(APPL-ID昇順) |
|
||||
| 3 | OVT-MATCHED | W01 | ZAN04W01 | O | ZAN02REC | FB | | 80 | PS | マッチング結果(処理番号付) |
|
||||
| 4 | OVT-DBCLEAN | W02 | ZAN04W02 | O | ZAN04REC | FB | | 80 | PS | DB削除用(APPL-IDのみ) |
|
||||
| 5 | ERROR-LOG | W03 | ZAN04W03 | O | ZAN05REC | VB | | 200 | PS | 監査証跡(取消マッチ記録) |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | ファイルR01 | APPL-ID(重複NG) | APPL-ID |
|
||||
| 2 | ファイルR02 | APPL-ID(重複NG) | APPL-ID |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-5.使用ファイルのオープン
|
||||
1-6.R01を読み込む。(1100R01INNSOR)(1回目)
|
||||
1-7.R02を読み込む。(1200R02INNSOR)(1回目)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01、R02を全て読み終えるまで下記を繰り返す)
|
||||
2-1.マッチの場合(R01.APPL-ID = R02.APPL-ID)
|
||||
取消済みの申請のため、OVT-MATCHEDには出力しない。
|
||||
監査証跡としてERROR-LOGにマッチ情報を出力する。(2100MATCHSOR)
|
||||
【STRING編集】
|
||||
ERR-CATEGORY = 04
|
||||
ERR-DETAIL = 'CANCEL-MATCH: ' + 申請番号 + 社員番号 + 申請日 + 開始時刻 + 終了時刻
|
||||
R01を読み込む。(1100R01INNSOR)(2件目以降)
|
||||
R02を読み込む。(1200R02INNSOR)(2件目以降)
|
||||
2-2.R01のみの場合(R01.APPL-ID < R02.APPL-ID)
|
||||
R01をOVT-MATCHEDにSTRING編集して出力する。(2200R01OUTSOR)
|
||||
【STRING編集】
|
||||
W01 = 申請番号 + 社員番号 + 申請日 + 開始時刻 + 終了時刻 + ステータス + OVT-TYPE + 処理番号(01)
|
||||
R01を読み込む。(1100R01INNSOR)(2件目以降)
|
||||
2-3.R02のみの場合(R01.APPL-ID > R02.APPL-ID)
|
||||
R02をOVT-DBCLEANに出力する。(2300R02OUTSOR)
|
||||
W02.APPL-ID = R02.APPL-ID
|
||||
R02を読み込む。(1200R02INNSOR)(2件目以降)
|
||||
|
||||
3.終了処理(3000STPSOR)
|
||||
3-1.入出力ファイルのクローズ
|
||||
3-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:当該入力ファイルのDD名
|
||||
PARM2:当該入力ファイルの件数
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:当該出力ファイルのDD名
|
||||
PARM2:当該出力ファイルの件数
|
||||
3-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/OVT-MATCHED)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | APPL-ID | R01.APPL-ID | |
|
||||
| 2 | EMP-ID | R01.EMP-ID | |
|
||||
| 3 | APPL-DATE | R01.APPL-DATE | |
|
||||
| 4 | START-TIME | R01.START-TIME | |
|
||||
| 5 | END-TIME | R01.END-TIME | |
|
||||
| 6 | STATUS | R01.STATUS | |
|
||||
| 7 | OVT-TYPE | R01.OVT-TYPE | |
|
||||
| 8 | PROC-SEQ | 01固定 | 同一申請番号グループ内連番 |
|
||||
| 9 | FILLER | 初期値 | |
|
||||
|
||||
### 出力ファイル2(W02/OVT-DBCLEAN)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | APPL-ID | R02.APPL-ID | DB削除対象申請番号 |
|
||||
| 2 | FILLER | 初期値 | |
|
||||
|
||||
### 出力ファイル3(W03/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | 04で固定 | 取消マッチ監査証跡 |
|
||||
| 2 | ERR-DETAIL | STRINGで編集 | CANCEL-MATCH: + 申請番号 + 社員番号 + 申請日 + 開始時刻 + 終了時刻 |
|
||||
@@ -0,0 +1,169 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | ZAN05CAL |
|
||||
| 3 | プログラム名 | 残業時間集約処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | キーブレイク(集計) |
|
||||
| 6 | 機能概要 | OVT-SORTED2(申請番号+処理番号昇順)をキーブレイク集約し、 |
|
||||
| 7 | | 同一APPL-IDの全レコードの加班時間を積算し、 |
|
||||
| 8 | | OVT-SUMMARYに1レコードに集計して出力する。 |
|
||||
| 9 | | キーブレイク制御にCONTINUE/SET、時間計算にCOMPUTE ROUNDED/DIVIDEをそれぞれ使用する。 |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | ファイルR01(OVT-SORTED2) | 申請番号(APPL-ID)>処理番号(PROC-SEQ)で昇順ソート済 |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | OVT-SORTED2 | R01 | ZAN05R01 | I | ZAN02REC | FB | | 80 | PS | マッチング結果(APPL-ID+PROC-SEQ昇順) |
|
||||
| 2 | OVT-SUMMARY | W01 | ZAN05W01 | O | ZAN03REC | FB | | 80 | PS | 集約結果(加班時間付加) |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | ソート条件(キー項目) | キー条件(マッチング/キーブレイク) |
|
||||
|----|-----------|---------------------|-------------------------------------------|
|
||||
| 1 | ファイルR01 | APPL-ID>PROC-SEQ(同一APPL-ID内複数明細あり) | APPL-ID(キーブレイク) |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
| 4 | 時刻丸め計算SUB | SUB05TIM | ZANTIMAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化(WRK-ACCUM-MIN含む)
|
||||
1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-6.使用ファイルのオープン(R01入力、W01出力)
|
||||
1-7.R01の初回読込(1100R01INNSOR)
|
||||
1-8.初回読込成功時、WRK-PREV-APPL-IDに設定
|
||||
WRK-GROUP-STARTに現レコードのSTARTを保持
|
||||
WRK-LAST-RECに現レコードを保持
|
||||
SET WRK-GROUP-IS-ACTIVE TO TRUE
|
||||
(積算は主処理2000MAJSOR内の各分岐で行う)
|
||||
|
||||
2.主処理(2000MAJSOR)(R01を全て読み終え、最終グループ出力完了まで下記を繰り返す)
|
||||
2-1.EOFの場合(WRK-R01KEY = HIGH-VALUE)
|
||||
2-1-1.WRK-GROUP-IS-ACTIVEなら最終グループを出力(2100OUTSOR)
|
||||
2-1-2.SET WRK-GROUP-NOT-ACTIVE TO TRUE(ループ終了条件)
|
||||
2-2.初回設定済みの場合(WRK-PREV-APPL-ID = 初回値あり)
|
||||
2-2-1.同一APPL-IDの場合
|
||||
現レコードの時間差分を積算(2200ACCUMSOR)
|
||||
現レコードをWRK-LAST-RECに上書き保持(ENDは最終明細で上書きされる)
|
||||
グループ内最初の明細のSTARTはWRK-GROUP-STARTに保持済のため不変
|
||||
R01次回読込(1100R01INNSOR)
|
||||
2-2-2.異なるAPPL-IDの場合(キーブレイク)
|
||||
WRK-GROUP-IS-ACTIVEなら直前に保持していたグループを出力(2100OUTSOR)
|
||||
WRK-PREV-APPL-IDを現レコードのAPPL-IDで更新
|
||||
WRK-GROUP-STARTに現レコードのSTARTを保持
|
||||
現レコードをWRK-LAST-RECに設定
|
||||
2200ACCUMSORを呼出(新グループ初回レコードの時間差分を積算)
|
||||
SET WRK-GROUP-IS-ACTIVE TO TRUE
|
||||
R01次回読込(1100R01INNSOR)
|
||||
|
||||
3.積算処理(2200ACCUMSOR)
|
||||
3-1.現レコードの時刻→分変換
|
||||
DIVIDE R01START-TIME BY 100 GIVING WRK-START-HOUR REMAINDER WRK-START-MIN
|
||||
DIVIDE R01END-TIME BY 100 GIVING WRK-END-HOUR REMAINDER WRK-END-MIN
|
||||
COMPUTE WRK-START-TOTAL = WRK-START-HOUR * 60 + WRK-START-MIN
|
||||
COMPUTE WRK-END-TOTAL = WRK-END-HOUR * 60 + WRK-END-MIN
|
||||
3-2.差分計算
|
||||
COMPUTE WRK-DIFF-MIN = WRK-END-TOTAL - WRK-START-TOTAL
|
||||
3-3.WRK-ACCUM-MINに積算
|
||||
COMPUTE WRK-ACCUM-MIN = WRK-ACCUM-MIN + WRK-DIFF-MIN
|
||||
|
||||
4.計算出力処理(2100OUTSOR)
|
||||
4-1.分→時間変換(DIVIDE for coverage)
|
||||
DIVIDE WRK-ACCUM-MIN BY 60 GIVING WRK-INT-HOURS REMAINDER WRK-REMAIN-MIN
|
||||
4-2.COMPUTE ROUNDED for coverage(結果はSUB05TIMには渡さない)
|
||||
COMPUTE WRK-OVT-HOURS ROUNDED = WRK-ACCUM-MIN / 60
|
||||
ON SIZE ERROR
|
||||
CONTINUE
|
||||
MOVE ZERO TO WRK-OVT-HOURS
|
||||
END-COMPUTE
|
||||
4-3.SUB05TIM呼出(mode 2:0.1h単位切捨)
|
||||
COMPUTE WRK-TEMP-HOURS = WRK-ACCUM-MIN / 60(切捨用にそのまま)
|
||||
MOVE WRK-TEMP-HOURS TO T01TIMHRS
|
||||
MOVE 2 TO T01TIMRRC(mode 2)
|
||||
CALL 'SUB05TIM' USING T01TIMPAR
|
||||
MOVE T01TIMOUT TO WRK-OVT-HOURS
|
||||
4-4.OVT-SUMMARY出力
|
||||
【STRING編集相当(MOVE)】
|
||||
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 WRK-OVT-HOURS TO W01OVT-HOURS
|
||||
MOVE WRK-LAST-OVT-TYPE TO W01OVT-TYPE
|
||||
WRITE W01OUTREC
|
||||
W01出力カウンタ加算
|
||||
4-5.WRK-ACCUM-MINをZEROに初期化(次グループ用)
|
||||
|
||||
5.終了処理(3000STPSOR)
|
||||
5-1.入出力ファイルのクローズ
|
||||
5-2.入出力件数出力メッセージ出力
|
||||
【入力メッセージ編集】
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'ZAN05R01'
|
||||
PARM2:入力件数
|
||||
【出力メッセージ編集】
|
||||
メッセージ番号:7(出力件数メッセージ)
|
||||
PARM1:'ZAN05W01'
|
||||
PARM2:出力件数
|
||||
5-3.終了メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/OVT-SUMMARY)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | APPL-ID | WRK-LAST-APPL-ID | 申請番号 |
|
||||
| 2 | EMP-ID | WRK-LAST-EMP-ID | 社員番号 |
|
||||
| 3 | APPL-DATE | WRK-LAST-APPL-DATE | 申請日 YYYYMMDD |
|
||||
| 4 | START-TIME | WRK-GROUP-START | 開始時刻 HHMM(グループ最初の明細のSTART) |
|
||||
| 5 | END-TIME | WRK-LAST-END | 終了時刻 HHMM |
|
||||
| 6 | OVT-HOURS | SUB05TIM出力(T01TIMOUT) | 加班時間(0.1h単位切捨) |
|
||||
| 7 | OVT-TYPE | WRK-LAST-OVT-TYPE | W=平日 / H=休日 |
|
||||
| 8 | FILLER | 初期値 | |
|
||||
@@ -0,0 +1,238 @@
|
||||
# 詳細設計書
|
||||
|
||||
## 基本情報
|
||||
|
||||
| # | 項目 | 内容 |
|
||||
|---|------|------|
|
||||
| 1 | システム名 | 残業統計管理システム |
|
||||
| 2 | プログラムID | ZAN06UPD |
|
||||
| 3 | プログラム名 | 残業統計DB更新処理 |
|
||||
| 4 | PGMタイプ | メイン |
|
||||
| 5 | PGMパターン | DB更新 |
|
||||
| 6 | 機能概要 | OVT-SUMMARYの各レコードをOVT-APPLICATIONSテーブルにINSERT/UPSERTし、 |
|
||||
| 7 | | OVT-MONTHLYテーブルに月次集計を反映する。 |
|
||||
| 8 | | またOVT-DBCLEANの各レコードについて、該当申請を取消状態に更新し、 |
|
||||
| 9 | | OVT-MONTHLYから該当加班時間を減算する。 |
|
||||
| 10 | | 新規カバレッジ:EXEC SQL(INSERT/UPDATE/SELECT)、COMMIT/ROLLBACK、 |
|
||||
| 11 | | PERFORM VARYING/TEST AFTER、COBOL MULTIPLY |
|
||||
|
||||
※PGMタイプ:メイン、サブ
|
||||
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||
|
||||
### 前提条件
|
||||
|
||||
| NO | 対象ファイル | 条件 |
|
||||
|----|-------------|------|
|
||||
| 1 | ファイルR01(OVT-SUMMARY) | ZAN05CALの出力、APPL-ID順ソート済 |
|
||||
| 2 | ファイルR02(OVT-DBCLEAN) | ZAN04MATの出力、DB上に該当APPL-IDが存在すること(孤立取消はエラー) |
|
||||
|
||||
### 使用ファイル一覧
|
||||
|
||||
| NO | 使用ファイル/DB名 | 識別子 | DD名 | I/O | COPY群 | 形式 | ブロック | レコード長 | 媒体 | 備考 |
|
||||
|----|------------------|--------|------|-----|--------|------|---------|-----------|------|------|
|
||||
| 1 | OVT-SUMMARY | R01 | ZAN06R01 | I | ZAN03REC | FB | | 80 | PS | 集約結果(加班時間付加) |
|
||||
| 2 | OVT-DBCLEAN | R02 | ZAN06R02 | I | ZAN04REC | FB | | 80 | PS | 孤立取消(DB削除対象) |
|
||||
| 3 | ERROR-LOG | W01 | ZAN06W01 | O | ZAN05REC | VB | | 200 | PS | DBエラー・データ不整合記録 |
|
||||
| 4 | OVERTIME-DB | DB | - | - | - | DB2 | - | - | DASD | EXEC SQLで直接操作 |
|
||||
|
||||
### キー項目一覧
|
||||
|
||||
| NO | ファイル名 | キー項目 | 用途 |
|
||||
|----|-----------|---------|------|
|
||||
| 1 | ファイルR01 | APPL-ID | OVT-APPLICATIONS INSERT/UPDATEのキー |
|
||||
| 2 | ファイルR02 | APPL-ID | OVT-APPLICATIONS SELECT/UPDATEのキー |
|
||||
| 3 | DB OVT-MONTHLY | EMP-ID + YEAR-MONTH + OVT-TYPE | 月次集計UPSERTのキー |
|
||||
|
||||
### テーブル定義
|
||||
|
||||
#### OVT-APPLICATIONS(個別加班申請テーブル)
|
||||
|
||||
| カラム | 型 | 内容 |
|
||||
|--------|-----|------|
|
||||
| APPL-ID | CHAR(8) | 申請番号(PK) |
|
||||
| EMP-ID | CHAR(8) | 社員番号 |
|
||||
| APPL-DATE | CHAR(8) | 申請日 YYYYMMDD |
|
||||
| OVT-TYPE | CHAR(1) | W=平日 / H=休日 |
|
||||
| START-TIME | CHAR(4) | 開始時刻 HHMM |
|
||||
| END-TIME | CHAR(4) | 終了時刻 HHMM |
|
||||
| OVT-HOURS | DECIMAL(4,1) | 加班時間 |
|
||||
| STATUS | CHAR(1) | 0=有効 / 9=取消 |
|
||||
| UPDATED-AT | TIMESTAMP | 更新日時 |
|
||||
|
||||
#### OVT-MONTHLY(月次集計テーブル)
|
||||
|
||||
| カラム | 型 | 内容 |
|
||||
|--------|-----|------|
|
||||
| EMP-ID | CHAR(8) | 社員番号(PK) |
|
||||
| YEAR-MONTH | CHAR(6) | 対象年月 YYYYMM(PK) |
|
||||
| OVT-TYPE | CHAR(1) | W=平日 / H=休日(PK) |
|
||||
| OVT-HOURS | DECIMAL(6,1) | 加班時間合計 |
|
||||
| OVT-COUNT | INTEGER | 加班回数 |
|
||||
| UPDATED-AT | TIMESTAMP | 更新日時 |
|
||||
|
||||
### 使用モジュール一覧
|
||||
|
||||
| NO | 機能 | プログラムID | 使用COPY名 |
|
||||
|----|------|-------------|-----------|
|
||||
| 1 | 運用日付取得SUB | SUB01DAT | ZANDATAC |
|
||||
| 2 | メッセージ編集出力SUB | SUB02MSG | ZANMSGAC |
|
||||
| 3 | ABEND処理SUB | SUB03END | ZANENDAC |
|
||||
|
||||
---
|
||||
|
||||
## 処理詳細
|
||||
|
||||
```
|
||||
1.初期処理(1000ITTSOR)
|
||||
1-1.開始メッセージ出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:1(開始メッセージ)
|
||||
1-2.コンパイル日時出力
|
||||
【メッセージ編集】
|
||||
メッセージ番号:33(コンパイル日時)
|
||||
PARM1:コンパイル日時
|
||||
PARM2:'COMPILED'
|
||||
1-3.ワークエリアの初期化
|
||||
1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。
|
||||
復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。
|
||||
【メッセージ編集】
|
||||
メッセージ番号:5(サブエラー)
|
||||
PARM1:'SUB01DAT'
|
||||
PARM2:復帰コード
|
||||
【ABEND処理SUB】
|
||||
ABENDコード:999
|
||||
1-5.使用ファイルのオープン(R01/R02入力、W01出力)
|
||||
1-6.R01、R02の初回読込(1100R01INNSOR、1200R02INNSOR)
|
||||
|
||||
2.主処理(2000MAJSOR)
|
||||
2-1.処理フェーズ1:OVT-SUMMARY(R01)を全件処理
|
||||
R01 EOFまで以下の処理を繰り返す
|
||||
2-1-1.OVT-APPLICATIONSへのINSERTを試行
|
||||
【EXEC SQL INSERT】
|
||||
INSERT INTO OVT-APPLICATIONS (APPL-ID, EMP-ID, APPL-DATE, OVT-TYPE,
|
||||
START-TIME, END-TIME, OVT-HOURS, STATUS, UPDATED-AT)
|
||||
VALUES (:WRK-SQL-APPL-ID, :WRK-SQL-EMP-ID, :WRK-SQL-APPL-DATE,
|
||||
:WRK-SQL-OVT-TYPE, :WRK-SQL-START-TIME, :WRK-SQL-END-TIME,
|
||||
:WRK-SQL-OVT-HOURS, :WRK-SQL-STATUS, CURRENT TIMESTAMP)
|
||||
2-1-2.SQLCODE NOT = 0の場合(APPL-ID重複):
|
||||
【EXEC SQL UPDATE】
|
||||
UPDATE OVT-APPLICATIONS SET STATUS = :WRK-SQL-STATUS,
|
||||
UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE APPL-ID = :WRK-SQL-APPL-ID
|
||||
SQLCODE異常時は9100DBERRSORへ
|
||||
2-1-3.SQLCODE = 0の場合:CUN-DBXINS加算、それ以外:CUN-DBXUPD加算
|
||||
2-1-4.OVT-MONTHLYのUPSERT(2110MONTHLYUPSOR)
|
||||
2-1-5.CUN-COMMITが閾値以上の場合、COMMIT実行(2300COMMITDBX)
|
||||
|
||||
2-2.処理フェーズ2:OVT-DBCLEAN(R02)を全件処理
|
||||
R02 EOFまで以下の処理を繰り返す
|
||||
2-2-1.SELECTでOVT-APPLICATIONSから該当レコード取得
|
||||
【EXEC SQL SELECT INTO】
|
||||
SELECT EMP-ID, APPL-DATE, OVT-TYPE, OVT-HOURS
|
||||
INTO :WRK-SQL-EMP-ID, :WRK-SQL-APPL-DATE, :WRK-SQL-OVT-TYPE,
|
||||
:WRK-SQL-OVT-HOURS
|
||||
FROM OVT-APPLICATIONS
|
||||
WHERE APPL-ID = :WRK-SQL-APPL-ID
|
||||
2-2-2.SQLCODE NOT = 0(該当なし=孤立取消):
|
||||
ERROR-LOGに出力(カテゴリ=20)、9999ABDSORで異常終了
|
||||
2-2-3.OVT-APPLICATIONSのSTATUSを'9'に更新
|
||||
【EXEC SQL UPDATE】
|
||||
UPDATE OVT-APPLICATIONS SET STATUS = '9',
|
||||
UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE APPL-ID = :WRK-SQL-APPL-ID
|
||||
2-2-4.YEAR-MONTH抽出:APPL-DATE(1:6)
|
||||
2-2-5.OVT-MONTHLYから減算(2210MONTHLYSUBSOR)
|
||||
【EXEC SQL UPDATE(減算)】
|
||||
UPDATE OVT-MONTHLY SET
|
||||
OVT-HOURS = OVT-HOURS - :WRK-SQL-OVT-HOURS,
|
||||
OVT-COUNT = OVT-COUNT - 1,
|
||||
UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE EMP-ID = :WRK-SQL-EMP-ID
|
||||
AND YEAR-MONTH = :WRK-SQL-YEAR-MONTH
|
||||
AND OVT-TYPE = :WRK-SQL-OVT-TYPE
|
||||
リトライ制御:PERFORM TEST AFTER VARYING(最大3回)
|
||||
SQLCODE≠0時はROLLBACKしてリトライ
|
||||
全リトライ消費後もSQLCODE≠0の場合、
|
||||
ERROR-LOG(カテゴリ=21)に出力し9999ABDSORで異常終了する
|
||||
(9100DBERRSORは通らない)
|
||||
2-2-6.CUN-COMMITが閾値以上の場合、COMMIT実行(2300COMMITDBX)
|
||||
|
||||
3.OVT-MONTHLY UPSERT処理(2110MONTHLYUPSOR)
|
||||
3-1.OVT-MONTHLYの存在確認SELECT
|
||||
【EXEC SQL SELECT INTO(DB-OVT-HOURS, DB-OVT-COUNT)】
|
||||
SELECT OVT-HOURS, OVT-COUNT
|
||||
INTO :DB-OVT-HOURS, :DB-OVT-COUNT
|
||||
FROM OVT-MONTHLY
|
||||
WHERE EMP-ID = :WRK-SQL-EMP-ID
|
||||
AND YEAR-MONTH = :WRK-SQL-YEAR-MONTH
|
||||
AND OVT-TYPE = :WRK-SQL-OVT-TYPE
|
||||
3-2.SQLCODE = 0(既存レコードあり):
|
||||
【EXEC SQL UPDATE(加算)】
|
||||
UPDATE OVT-MONTHLY SET
|
||||
OVT-HOURS = OVT-HOURS + :WRK-SQL-OVT-HOURS,
|
||||
OVT-COUNT = OVT-COUNT + 1,
|
||||
UPDATED-AT = CURRENT TIMESTAMP
|
||||
WHERE EMP-ID = :WRK-SQL-EMP-ID
|
||||
AND YEAR-MONTH = :WRK-SQL-YEAR-MONTH
|
||||
AND OVT-TYPE = :WRK-SQL-OVT-TYPE
|
||||
3-3.SQLCODE NOT = 0(新規):
|
||||
【EXEC SQL INSERT】
|
||||
INSERT INTO OVT-MONTHLY
|
||||
(EMP-ID, YEAR-MONTH, OVT-TYPE, OVT-HOURS, OVT-COUNT, UPDATED-AT)
|
||||
VALUES
|
||||
(:WRK-SQL-EMP-ID, :WRK-SQL-YEAR-MONTH, :WRK-SQL-OVT-TYPE,
|
||||
:WRK-SQL-OVT-HOURS, 1, CURRENT TIMESTAMP)
|
||||
3-4.SQLCODE異常時は9100DBERRSORへ
|
||||
|
||||
4.COMMIT処理(2300COMMITDBX)
|
||||
4-1.【EXEC SQL COMMIT】
|
||||
COMMIT WORK
|
||||
4-2.CUN-COMMITをZEROにリセット
|
||||
|
||||
5.終了処理(3000STPSOR)
|
||||
5-1.最終COMMIT(2300COMMITDBX)
|
||||
5-2.入出力ファイルのクローズ
|
||||
5-3.DB操作件数メッセージ出力
|
||||
メッセージ番号:6(入力件数メッセージ)
|
||||
PARM1:'ZAN06R01' / PARM2:CUN-R01INN
|
||||
PARM1:'ZAN06R02' / PARM2:CUN-R02INN
|
||||
PARM1:'INS' / PARM2:CUN-DBXINS
|
||||
PARM1:'UPD' / PARM2:CUN-DBXUPD
|
||||
PARM1:'W01' / PARM2:CUN-W01OUT
|
||||
5-4.終了メッセージ出力
|
||||
メッセージ番号:2(終了メッセージ)
|
||||
|
||||
6.DBエラー処理(9100DBERRSOR)
|
||||
6-1.ERROR-LOGにDBエラー情報出力(カテゴリ=30)
|
||||
【COBOL STRING】
|
||||
STRING 'DB ERROR SQLCODE=' SQLCODE ' APPL-ID='
|
||||
WRK-SQL-APPL-ID INTO WRK-ERR-DETAIL
|
||||
6-2.【EXEC SQL ROLLBACK】
|
||||
ROLLBACK WORK
|
||||
6-3.9999ABDSORで異常終了
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 新規カバレッジ構文
|
||||
|
||||
| # | 構文 | 用途 |
|
||||
|---|------|------|
|
||||
| 1 | EXEC SQL INSERT | OVT-APPLICATIONSへの新規登録 |
|
||||
| 2 | EXEC SQL UPDATE | OVT-APPLICATIONSステータス更新・OVT-MONTHLY加減算 |
|
||||
| 3 | EXEC SQL SELECT INTO | OVT-MONTHLY存在確認・OVT-APPLICATIONS検索 |
|
||||
| 4 | EXEC SQL COMMIT | 定期的なCOMMIT発行 |
|
||||
| 5 | EXEC SQL ROLLBACK | DBエラー時のROLLBACK |
|
||||
| 6 | PERFORM VARYING | 月(1-12)のバリデーションループ |
|
||||
| 7 | PERFORM TEST AFTER VARYING | 月次減算のリトライ制御 |
|
||||
| 8 | COBOL MULTIPLY | 加班時間→分変換 |
|
||||
|
||||
|
||||
## 出力レコード定義
|
||||
|
||||
### 出力ファイル1(W01/ERROR-LOG)
|
||||
|
||||
| No | 項目名 | 設定元 | 備考 |
|
||||
|----|--------|--------|------|
|
||||
| 1 | ERR-CATEGORY | WRK-ERR-CATEGORY | 20=孤立取消 / 30=DBエラー |
|
||||
| 2 | ERR-DETAIL | WRK-ERR-DETAIL | エラー詳細メッセージ |
|
||||
Reference in New Issue
Block a user