feat: サブシステムB 残業統計管理 初回production反映
- 全6プログラム(ZAN01CHK~ZAN06UPD)ソース・実行ファイル - 5サブプログラム(SUB01DAT~SUB05TIM)ソース・DLL - 10 COPY書式ファイル - 詳細設計書12ファイル - サブシステムB全体設計書 - bin/配下の実行ファイル资産
This commit is contained in:
+5
-12
@@ -1,18 +1,11 @@
|
|||||||
# 编译产物
|
# バックアップディレクトリ(push対象外)
|
||||||
*.exe
|
old/
|
||||||
*.dll
|
|
||||||
|
# コンパイル中間ファイル
|
||||||
*.o
|
*.o
|
||||||
*.obj
|
*.obj
|
||||||
|
|
||||||
# 临时文件
|
# データ・ログファイル
|
||||||
data/
|
|
||||||
inpute/
|
|
||||||
test/
|
|
||||||
|
|
||||||
# 备份文件
|
|
||||||
*_2026*.bak.*
|
|
||||||
|
|
||||||
# 日志文件
|
|
||||||
*.log
|
*.log
|
||||||
*.DAT
|
*.DAT
|
||||||
*.dat
|
*.dat
|
||||||
@@ -1,99 +1,54 @@
|
|||||||
# 勤怠管理システム - 生产环境资源
|
# 勤怠管理システム - 生产环境资源
|
||||||
|
|
||||||
本リポジトリは勤怠管理システム(サブシステムA:勤怠休暇管理、サブシステムB:残業統計管理、サブシステムC:給与計算)の生产环境最終版リソースを管理する。
|
本リポジトリは勤怠管理システム(サブシステムA:勤怠休暇管理、サブシステムB:残業統計管理、サブシステムC:給与計算)の生产环境リソースを管理する。
|
||||||
|
|
||||||
## 目录结构
|
## 目录结构
|
||||||
|
|
||||||
```
|
```
|
||||||
production/
|
production/
|
||||||
├── src/ # 主程序源代码(COBOL)
|
├── src/ # 主プログラムソース(COBOL)
|
||||||
├── sub/ # 共通サブプログラム(SUB01DAT~SUB05TIM)
|
├── sub/ # 共通サブプログラム
|
||||||
├── cpy/ # COPY書式ファイル(レコード定義・連絡領域)
|
├── cpy/ # COPY書式ファイル(レコード定義・連絡領域)
|
||||||
├── jcl/ # 実行スクリプト(Windows batch)
|
├── bin/ # 実行ファイル(.exe)+サブプログラムDLL(.dll)
|
||||||
|
├── design/ # サブシステム全体設計書
|
||||||
└── 詳細設計書/ # 詳細設計ドキュメント
|
└── 詳細設計書/ # 詳細設計ドキュメント
|
||||||
|
```
|
||||||
|
|
||||||
|
## サブシステム構成
|
||||||
|
|
||||||
|
| サブシステム | 役割 | COBOLプログラム |
|
||||||
|
|-------------|------|----------------|
|
||||||
|
| A: 勤怠休暇管理 | 休暇申請取込・打刻照合・日別計算・DB更新 | KIN01INP~KIN09CSV(9本) |
|
||||||
|
| 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
|
```batch
|
||||||
rem 单个程序编译
|
rem プロジェクトルートで実行
|
||||||
tools\build.bat <cobol>\<program>.cbl
|
tools\build.bat src\<program>.cbl
|
||||||
|
|
||||||
rem 例如:
|
|
||||||
tools\build.bat cobol\ZAN01CHK.cbl
|
|
||||||
tools\build.bat cobol\ZAN02CHK.cbl
|
|
||||||
tools\build.bat cobol\ZAN03CHK.cbl
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 运行环境设置
|
### 実行
|
||||||
|
|
||||||
```batch
|
```batch
|
||||||
set COB_CONFIG_DIR=C:\mingw64\share\gnucobol\config
|
set COB_CONFIG_DIR=C:\mingw64\share\gnucobol\config
|
||||||
set COB_LIBRARY_PATH=<path_to_cobol_directory>
|
set COB_LIBRARY_PATH=bin
|
||||||
|
cd <project_root>
|
||||||
|
bin\<program>.exe
|
||||||
```
|
```
|
||||||
|
|
||||||
### 输入输出 DD 名称对应关系
|
### サブシステムB テスト実行順序
|
||||||
|
|
||||||
| 程序 | DD 名称 | 说明 |
|
```batch
|
||||||
|----------|---------|----------------|
|
ZAN01CHK → ZAN02CHK → ZAN03CHK → ZAN04MAT → ZAN05CAL → ZAN06UPD
|
||||||
| ZAN01CHK | ZAN01R01 | OVT-APPLY.DAT |
|
```
|
||||||
| | ZAN01W01 | OVT-VALID.DAT |
|
|
||||||
| | ZAN01W02 | OVT-CANCEL.DAT |
|
|
||||||
| | ZAN01W03 | ERROR-LOG.DAT |
|
|
||||||
| ZAN02CHK | ZAN02R01 | OVT-VSORT.DAT |
|
|
||||||
| | ZAN02W01 | OVT-CHECKED.DAT|
|
|
||||||
| | ZAN02W02 | ERROR-LOG.DAT |
|
|
||||||
| ZAN03CHK | ZAN03R01 | OVT-NODUP.DAT |
|
|
||||||
| | ZAN03R02 | PUNCH-SORTED.DAT|
|
|
||||||
| | ZAN03R03 | HOLIDAY.DAT |
|
|
||||||
| | ZAN03W01 | OVT-MATCHED.DAT|
|
|
||||||
| | ZAN03W02 | ERROR-LOG.DAT |
|
|
||||||
|
|
||||||
## 测试结果概要
|
## 编码
|
||||||
|
|
||||||
三个主程序均已通过疏通测试,覆盖正常和异常分支:
|
源文件使用 ASCII/JIS 编码保存。COPYファイルは元の命名を維持する。
|
||||||
|
|
||||||
**ZAN01CHK - 残業申請振分処理**
|
|
||||||
- ✓ CSV 格式解析正确
|
|
||||||
- ✓ status=0/1 → W01 有效申请
|
|
||||||
- ✓ status=9 → W02 取消申请
|
|
||||||
- ✓ 无效状态/DATETIME CHECK→ W03错误日志
|
|
||||||
- ✓ START TIME >= 1830验证
|
|
||||||
- ✓ START < END验证
|
|
||||||
- ✓ 时间差 >= 30min验证
|
|
||||||
- **已修复**: W01/W02/W03 FILLER 未初始化 Bug
|
|
||||||
|
|
||||||
**ZAN02CHK - 時間帯重複チェック処理**
|
|
||||||
- ✓ 同一天同一员工的时段重复检查
|
|
||||||
- ✓ 初回记录直出到 W01
|
|
||||||
- ✓ キーブレイク正确处理
|
|
||||||
- ✓ OVERLAP 判断逻辑正确(前終了 > 現開始)
|
|
||||||
- **已修复**: 主循环中首条记录与自身比较误判的 Bug
|
|
||||||
- **已修复**: NORMALOUTSOR不更新 PREV 导致后续比较基准失准
|
|
||||||
|
|
||||||
**ZAN03CHK - 打刻時間照合処理**
|
|
||||||
- ✓ R01(申请) vs R02(打刻) 匹配检查
|
|
||||||
- ✓ 时间范围包含验证(申请⊆打刻)
|
|
||||||
- ✓ NOMATCH 处理(无对应打刻)→ W02错误
|
|
||||||
- ✓ MISMATCH 处理(时间不符)→ W02错误
|
|
||||||
- ✓ HOLIDAY判定正确(OVT-TYPE="H")
|
|
||||||
- ✓ R03休日计数问题已修复
|
|
||||||
- ✓ W02 FILLER 初始化问题已修复
|
|
||||||
- **已知限制**: GnuCOBOL 读无 CRLF 的二进制文件可能多产生一条伪空记录
|
|
||||||
|
|
||||||
## 重要 Notes
|
|
||||||
|
|
||||||
1. **GnuCOBOL 文件读取特性**: 在纯二进制定长文件(无行分隔符)模式下,GnuCOBOL READ 操作可能在真正 EOF 前多产生一条记录,这是运行时环境的已知行为,非代码 Bug。
|
|
||||||
|
|
||||||
2. **COPY 文件命名**: 所有 COPY 文件均保留原始命名,无额外字符后缀。
|
|
||||||
|
|
||||||
3. **备份文件**: 生产环境只包含最新确定的版本,不包含 *.bak.* 或 *_fixed* 等中间版本。
|
|
||||||
|
|
||||||
4. **编码**: 源文件使用 ASCII/JIS 编码保存。
|
|
||||||
|
|
||||||
## 维护建议
|
|
||||||
|
|
||||||
- 每次修改后请再次进行完整疏通测试
|
|
||||||
- JCL/batch 脚本的 DD 变量名需与实际 DD 分配一致
|
|
||||||
- 确保 `COB_LIBRARY_PATH` 包含 SUB*.dll(如需要动态加载)
|
|
||||||
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,822 @@
|
|||||||
|
# 残業統計管理システム 設計書(サブシステム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(メッセージ), SUB03END(ABEND) |
|
||||||
|
|
||||||
|
**機能:**
|
||||||
|
|
||||||
|
#### 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-TABLEを構築する。
|
||||||
|
|
||||||
|
1. FUNCTION CURRENT-DATE で処理日を取得
|
||||||
|
2. 処理日の年月から該当月の初日〜末日を算出
|
||||||
|
3. 各日について曜日判定(土日またはHOLIDAY-FILE該当)を行い、
|
||||||
|
休日=該当月内の全祝日レコードを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 を設定。**FUNCTION CURRENT-DATE** で処理日を取得し、曜日計算の補助に使用。
|
||||||
|
|
||||||
|
全通過レコードは 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)
|
||||||
+2
-1
@@ -56,7 +56,7 @@
|
|||||||
03 R02DATE PIC 9(008).
|
03 R02DATE PIC 9(008).
|
||||||
03 R02TIME-IN PIC 9(004).
|
03 R02TIME-IN PIC 9(004).
|
||||||
03 R02TIME-OUT PIC 9(004).
|
03 R02TIME-OUT PIC 9(004).
|
||||||
03 R02FILLER PIC X(060).
|
03 R02FILLER PIC X(056).
|
||||||
*
|
*
|
||||||
*****************************************************************
|
*****************************************************************
|
||||||
* ##R03## *
|
* ##R03## *
|
||||||
@@ -252,6 +252,7 @@
|
|||||||
READ R02INNFIL
|
READ R02INNFIL
|
||||||
AT END
|
AT END
|
||||||
MOVE '1' TO WRK-R02EOF
|
MOVE '1' TO WRK-R02EOF
|
||||||
|
MOVE HIGH-VALUES TO WRK-R02KEY
|
||||||
NOT AT END
|
NOT AT END
|
||||||
ADD 1 TO CUN-R02INN
|
ADD 1 TO CUN-R02INN
|
||||||
MOVE R02EMP-ID TO WRK-R02KEY001
|
MOVE R02EMP-ID TO WRK-R02KEY001
|
||||||
|
|||||||
@@ -0,0 +1,407 @@
|
|||||||
|
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-CAT03 PIC 9(002) VALUE 03.
|
||||||
|
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-U06 PIC 9(008).
|
||||||
|
*** マッチングキー
|
||||||
|
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 = 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
|
||||||
|
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-CAT03 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,400 @@
|
|||||||
|
IDENTIFICATION DIVISION.
|
||||||
|
PROGRAM-ID. ZAN05CAL.
|
||||||
|
*****************************************************************
|
||||||
|
* システム名 : 残業統計管理システム *
|
||||||
|
* プログラムID : ZAN05CAL *
|
||||||
|
* プログラム名 : 残業時間集計処理 *
|
||||||
|
* 作成日 : 2026-06-15 *
|
||||||
|
* 処理概要 : OVT-SORTED2(申請番号+処理番号昇順)を *
|
||||||
|
* キーブレイク集計し、同一APPL-ID内の全明細の *
|
||||||
|
* 加班時間を積算してOVT-SUMMARYに1レコード出力。*
|
||||||
|
* *
|
||||||
|
*****************************************************************
|
||||||
|
* 更新履歴 *
|
||||||
|
*---------------------------------------------------------------*
|
||||||
|
* 更新日付 担当者 更新内容 *
|
||||||
|
*---------------------------------------------------------------*
|
||||||
|
* 26-06-15 @@@ 新規作成 *
|
||||||
|
* *
|
||||||
|
*****************************************************************
|
||||||
|
ENVIRONMENT DIVISION.
|
||||||
|
CONFIGURATION SECTION.
|
||||||
|
SOURCE-COMPUTER. IBM-ZSERIES.
|
||||||
|
OBJECT-COMPUTER. IBM-ZSERIES.
|
||||||
|
*
|
||||||
|
INPUT-OUTPUT SECTION.
|
||||||
|
FILE-CONTROL.
|
||||||
|
SELECT R01INNFIL ASSIGN TO ZAN05R01.
|
||||||
|
SELECT W01OUTFIL ASSIGN TO ZAN05W01.
|
||||||
|
*
|
||||||
|
DATA DIVISION.
|
||||||
|
FILE SECTION.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* R01 (OVT-SORTED2) *
|
||||||
|
*****************************************************************
|
||||||
|
FD R01INNFIL
|
||||||
|
LABEL RECORD IS STANDARD
|
||||||
|
BLOCK CONTAINS 0
|
||||||
|
RECORDING MODE IS F.
|
||||||
|
01 R01INNREC.
|
||||||
|
COPY ZAN02REC REPLACING ==(A)== BY ==R01==.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* W01 (OVT-SUMMARY) *
|
||||||
|
*****************************************************************
|
||||||
|
FD W01OUTFIL
|
||||||
|
LABEL RECORD IS STANDARD
|
||||||
|
BLOCK CONTAINS 0
|
||||||
|
RECORDING MODE IS F.
|
||||||
|
01 W01OUTREC.
|
||||||
|
COPY ZAN03REC REPLACING ==(A)== BY ==W01==.
|
||||||
|
*
|
||||||
|
WORKING-STORAGE SECTION.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* コンスタント領域 *
|
||||||
|
*****************************************************************
|
||||||
|
01 CNSARA.
|
||||||
|
03 CNS-PRGIDX PIC X(008) VALUE 'ZAN05CAL'.
|
||||||
|
03 CNS-MSGSTR PIC 9(003) VALUE 001.
|
||||||
|
03 CNS-MSGFIN PIC 9(003) VALUE 002.
|
||||||
|
03 CNS-MSGSUBEEK PIC 9(003) VALUE 005.
|
||||||
|
03 CNS-MSGIINKES PIC 9(003) VALUE 006.
|
||||||
|
03 CNS-MSGOUTKES PIC 9(003) VALUE 007.
|
||||||
|
03 CNS-MSGKEYINF PIC 9(003) VALUE 033.
|
||||||
|
03 CNS-KN0002 PIC 9(001) VALUE 2.
|
||||||
|
03 CNS-TIMMODE02 PIC 9(001) VALUE 2.
|
||||||
|
03 CNS-ABD999 PIC 9(003) VALUE 999.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* カウンタ領域 *
|
||||||
|
*****************************************************************
|
||||||
|
01 CUNARA.
|
||||||
|
03 CUN-R01INN PIC S9(009) COMP-3
|
||||||
|
VALUE ZERO.
|
||||||
|
03 CUN-W01OUT PIC S9(009) COMP-3
|
||||||
|
VALUE ZERO.
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* 作業領域 *
|
||||||
|
*****************************************************************
|
||||||
|
01 WRKARA.
|
||||||
|
*** 処理日付(ACCEPT FROM DATE用)
|
||||||
|
03 WRK-DATE-8 PIC 9(008).
|
||||||
|
*** 運用日付
|
||||||
|
03 WRK-U06 PIC 9(008).
|
||||||
|
*** キーブレイク制御
|
||||||
|
03 WRK-R01KEY PIC X(008).
|
||||||
|
03 WRK-PREV-APPL-ID PIC X(008).
|
||||||
|
03 WRK-GROUP-ACTIVE PIC X(001).
|
||||||
|
88 WRK-GROUP-IS-ACTIVE VALUE '1'.
|
||||||
|
88 WRK-GROUP-NOT-ACTIVE VALUE '0'.
|
||||||
|
*** 集約用最終レコード保持
|
||||||
|
03 WRK-LAST-REC PIC X(080).
|
||||||
|
03 WRK-LAST-REC-REDEF REDEFINES WRK-LAST-REC.
|
||||||
|
05 WRK-LAST-APPL-ID PIC X(008).
|
||||||
|
05 WRK-LAST-EMP-ID PIC 9(008).
|
||||||
|
05 WRK-LAST-APPL-DATE PIC 9(008).
|
||||||
|
05 WRK-LAST-START PIC 9(004).
|
||||||
|
05 WRK-LAST-END PIC 9(004).
|
||||||
|
05 WRK-LAST-STATUS PIC X(001).
|
||||||
|
05 WRK-LAST-OVT-TYPE PIC X(001).
|
||||||
|
05 WRK-LAST-PROC-SEQ PIC 9(002).
|
||||||
|
05 WRK-LAST-FILLER PIC X(044).
|
||||||
|
*** 集計用グループ先頭START保持
|
||||||
|
03 WRK-GROUP-START PIC 9(004).
|
||||||
|
*** 集計用積算分領域
|
||||||
|
03 WRK-ACCUM-MIN PIC S9(009) COMP-3.
|
||||||
|
*** 時刻計算領域
|
||||||
|
03 WRK-START-HOUR PIC 9(004).
|
||||||
|
03 WRK-START-MIN PIC 9(004).
|
||||||
|
03 WRK-END-HOUR PIC 9(004).
|
||||||
|
03 WRK-END-MIN PIC 9(004).
|
||||||
|
03 WRK-START-TOTAL PIC 9(005).
|
||||||
|
03 WRK-END-TOTAL PIC 9(005).
|
||||||
|
03 WRK-DIFF-MIN PIC 9(005).
|
||||||
|
03 WRK-INT-HOURS PIC 9(004).
|
||||||
|
03 WRK-REMAIN-MIN PIC 9(004).
|
||||||
|
03 WRK-OVT-HOURS PIC 9(004)V9(001).
|
||||||
|
03 WRK-TEMP-HOURS PIC 9(004)V9(001).
|
||||||
|
*
|
||||||
|
*****************************************************************
|
||||||
|
* サブプログラム連絡領域 *
|
||||||
|
*****************************************************************
|
||||||
|
*** 運用日付取得
|
||||||
|
COPY ZANDATAC.
|
||||||
|
*** メッセージ編集出力SR用
|
||||||
|
COPY ZANMSGAC.
|
||||||
|
*** ABEND処理SR用
|
||||||
|
COPY ZANENDAC.
|
||||||
|
*** 時刻丸め計算SR用
|
||||||
|
COPY ZANTIMAC.
|
||||||
|
*
|
||||||
|
PROCEDURE DIVISION.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO: (0.0) *
|
||||||
|
* サブモジュール名: 制御処理 *
|
||||||
|
* 処理概要 : メインコントロール処理 *
|
||||||
|
*****************************************************************
|
||||||
|
0000MAJCOLSOR SECTION.
|
||||||
|
*
|
||||||
|
*** 初期処理
|
||||||
|
PERFORM 1000ITTSOR.
|
||||||
|
*
|
||||||
|
*** メイン処理
|
||||||
|
PERFORM 2000MAJSOR
|
||||||
|
UNTIL WRK-R01KEY = HIGH-VALUE
|
||||||
|
AND WRK-GROUP-NOT-ACTIVE.
|
||||||
|
*
|
||||||
|
*** 終了処理
|
||||||
|
PERFORM 3000STPSOR.
|
||||||
|
*
|
||||||
|
0000MAJCOLSOR-EXT.
|
||||||
|
GOBACK.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO: (1.0) *
|
||||||
|
* サブモジュール名: 初期処理 *
|
||||||
|
* 処理概要 : 開始メッセージ出力・各種初期化処理 *
|
||||||
|
*****************************************************************
|
||||||
|
1000ITTSOR SECTION.
|
||||||
|
*
|
||||||
|
*** 開始メッセージ出力
|
||||||
|
INITIALIZE M00MHOPAR.
|
||||||
|
MOVE CNS-MSGSTR TO M00MSGCOD.
|
||||||
|
PERFORM 4000MSGOUTSOR.
|
||||||
|
*
|
||||||
|
*** コンパイル日時出力
|
||||||
|
INITIALIZE M00MHOPAR.
|
||||||
|
MOVE CNS-MSGKEYINF TO M00MSGCOD.
|
||||||
|
MOVE FUNCTION WHEN-COMPILED TO M00UMKDATS22-01.
|
||||||
|
MOVE 'COMPILED' TO M00UMKDATS22-02.
|
||||||
|
PERFORM 4000MSGOUTSOR.
|
||||||
|
*
|
||||||
|
*** 処理日付取得(ACCEPT FROM DATE)
|
||||||
|
ACCEPT WRK-DATE-8 FROM DATE YYYYMMDD.
|
||||||
|
*
|
||||||
|
*** ワークエリア初期化
|
||||||
|
INITIALIZE WRKARA.
|
||||||
|
MOVE '0' TO WRK-GROUP-ACTIVE.
|
||||||
|
*
|
||||||
|
*** 運用日付取得
|
||||||
|
INITIALIZE D01UBSPAR.
|
||||||
|
CALL 'SUB01DAT' USING D01UBSPAR.
|
||||||
|
IF D01FKICOD = ZERO
|
||||||
|
MOVE D01UBSUDATE TO WRK-U06
|
||||||
|
ELSE
|
||||||
|
INITIALIZE M00MHOPAR
|
||||||
|
MOVE CNS-MSGSUBEEK TO M00MSGCOD
|
||||||
|
MOVE 'SUB01DAT' TO M00UMKDATS22-01
|
||||||
|
MOVE D01FKICOD TO M00UMKDATS22-02
|
||||||
|
PERFORM 4000MSGOUTSOR
|
||||||
|
PERFORM 9999ABDSOR
|
||||||
|
END-IF.
|
||||||
|
*
|
||||||
|
*** 入出力ファイルOPEN
|
||||||
|
OPEN INPUT R01INNFIL
|
||||||
|
OUTPUT W01OUTFIL.
|
||||||
|
*
|
||||||
|
*** R01を読み込み
|
||||||
|
PERFORM 1100R01INNSOR.
|
||||||
|
*
|
||||||
|
*** 初回レコード設定
|
||||||
|
IF WRK-R01KEY NOT = HIGH-VALUE
|
||||||
|
MOVE R01APPL-ID TO WRK-PREV-APPL-ID
|
||||||
|
MOVE R01INNREC TO WRK-LAST-REC
|
||||||
|
MOVE R01START-TIME TO WRK-GROUP-START
|
||||||
|
SET WRK-GROUP-IS-ACTIVE TO TRUE
|
||||||
|
END-IF.
|
||||||
|
*
|
||||||
|
1000ITTSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(1.1) *
|
||||||
|
* サブモジュール名:R01読込処理 *
|
||||||
|
* 処理概要 : レコード読込・キー設定 *
|
||||||
|
*****************************************************************
|
||||||
|
1100R01INNSOR SECTION.
|
||||||
|
*
|
||||||
|
READ R01INNFIL
|
||||||
|
AT END
|
||||||
|
MOVE HIGH-VALUE TO WRK-R01KEY
|
||||||
|
NOT AT END
|
||||||
|
ADD 1 TO CUN-R01INN
|
||||||
|
MOVE R01APPL-ID TO WRK-R01KEY
|
||||||
|
END-READ.
|
||||||
|
*
|
||||||
|
1100R01INNSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(2.0) *
|
||||||
|
* サブモジュール名:主処理 *
|
||||||
|
* 処理概要 : キーブレイク集計制御を行う *
|
||||||
|
*****************************************************************
|
||||||
|
2000MAJSOR SECTION.
|
||||||
|
*
|
||||||
|
EVALUATE TRUE
|
||||||
|
*** EOF時:最終グループを出力
|
||||||
|
WHEN WRK-R01KEY = HIGH-VALUE
|
||||||
|
IF WRK-GROUP-IS-ACTIVE
|
||||||
|
PERFORM 2100OUTSOR
|
||||||
|
SET WRK-GROUP-NOT-ACTIVE TO TRUE
|
||||||
|
END-IF
|
||||||
|
*** キーブレイク:前グループ出力→新グループ開始
|
||||||
|
WHEN WRK-R01KEY NOT = WRK-PREV-APPL-ID
|
||||||
|
IF WRK-GROUP-IS-ACTIVE
|
||||||
|
PERFORM 2100OUTSOR
|
||||||
|
END-IF
|
||||||
|
MOVE R01APPL-ID TO WRK-PREV-APPL-ID
|
||||||
|
MOVE R01INNREC TO WRK-LAST-REC
|
||||||
|
MOVE R01START-TIME TO WRK-GROUP-START
|
||||||
|
SET WRK-GROUP-IS-ACTIVE TO TRUE
|
||||||
|
PERFORM 2200ACCUMSOR
|
||||||
|
PERFORM 1100R01INNSOR
|
||||||
|
*** 同一グループ:現レコード積算→最新レコードで上書き保持
|
||||||
|
WHEN OTHER
|
||||||
|
PERFORM 2200ACCUMSOR
|
||||||
|
MOVE R01INNREC TO WRK-LAST-REC
|
||||||
|
CONTINUE
|
||||||
|
PERFORM 1100R01INNSOR
|
||||||
|
END-EVALUATE.
|
||||||
|
*
|
||||||
|
2000MAJSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(2.1) *
|
||||||
|
* サブモジュール名:集計計算出力処理 *
|
||||||
|
* 処理概要 : WRK-ACCUM-MIN→SUB05TIM丸め・OVT-SUMMARY出力*
|
||||||
|
*****************************************************************
|
||||||
|
2100OUTSOR SECTION.
|
||||||
|
*
|
||||||
|
*** 累積分→時間変換(DIVIDE REMAINDER)
|
||||||
|
DIVIDE WRK-ACCUM-MIN BY 60
|
||||||
|
GIVING WRK-INT-HOURS
|
||||||
|
REMAINDER WRK-REMAIN-MIN.
|
||||||
|
*
|
||||||
|
*** COMPUTE ROUNDED ON SIZE ERROR(カバレッジ用)
|
||||||
|
COMPUTE WRK-OVT-HOURS ROUNDED =
|
||||||
|
WRK-ACCUM-MIN / 60
|
||||||
|
ON SIZE ERROR
|
||||||
|
CONTINUE
|
||||||
|
MOVE ZERO TO WRK-OVT-HOURS
|
||||||
|
END-COMPUTE.
|
||||||
|
*
|
||||||
|
*** SUB05TIM呼出(mode 2:0.1h単位切捨)
|
||||||
|
COMPUTE WRK-TEMP-HOURS =
|
||||||
|
WRK-ACCUM-MIN / 60
|
||||||
|
END-COMPUTE.
|
||||||
|
MOVE WRK-TEMP-HOURS TO T01TIMHRS.
|
||||||
|
MOVE CNS-TIMMODE02 TO T01TIMRRC.
|
||||||
|
CALL 'SUB05TIM' USING T01TIMPAR.
|
||||||
|
*
|
||||||
|
*** OVT-SUMMARY出力
|
||||||
|
INITIALIZE W01OUTREC.
|
||||||
|
MOVE WRK-LAST-APPL-ID TO W01APPL-ID.
|
||||||
|
MOVE WRK-LAST-EMP-ID TO W01EMP-ID.
|
||||||
|
MOVE WRK-LAST-APPL-DATE TO W01APPL-DATE.
|
||||||
|
MOVE WRK-GROUP-START TO W01START-TIME.
|
||||||
|
MOVE WRK-LAST-END TO W01END-TIME.
|
||||||
|
MOVE T01TIMOUT TO W01OVT-HOURS.
|
||||||
|
MOVE WRK-LAST-OVT-TYPE TO W01OVT-TYPE.
|
||||||
|
WRITE W01OUTREC.
|
||||||
|
ADD 1 TO CUN-W01OUT.
|
||||||
|
*
|
||||||
|
*** 累積分リセット(次グループ用)
|
||||||
|
MOVE ZERO TO WRK-ACCUM-MIN.
|
||||||
|
*
|
||||||
|
2100OUTSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(2.2) *
|
||||||
|
* サブモジュール名:積算処理 *
|
||||||
|
* 処理概要 : 現レコードの時間差分をWRK-ACCUM-MINに加算 *
|
||||||
|
*****************************************************************
|
||||||
|
2200ACCUMSOR SECTION.
|
||||||
|
*
|
||||||
|
*** 開始時刻→分変換
|
||||||
|
DIVIDE R01START-TIME BY 100
|
||||||
|
GIVING WRK-START-HOUR
|
||||||
|
REMAINDER WRK-START-MIN.
|
||||||
|
COMPUTE WRK-START-TOTAL =
|
||||||
|
WRK-START-HOUR * 60 + WRK-START-MIN
|
||||||
|
END-COMPUTE.
|
||||||
|
*
|
||||||
|
*** 終了時刻→分変換
|
||||||
|
DIVIDE R01END-TIME BY 100
|
||||||
|
GIVING WRK-END-HOUR
|
||||||
|
REMAINDER WRK-END-MIN.
|
||||||
|
COMPUTE WRK-END-TOTAL =
|
||||||
|
WRK-END-HOUR * 60 + WRK-END-MIN
|
||||||
|
END-COMPUTE.
|
||||||
|
*
|
||||||
|
*** 差分計算
|
||||||
|
COMPUTE WRK-DIFF-MIN =
|
||||||
|
WRK-END-TOTAL - WRK-START-TOTAL
|
||||||
|
END-COMPUTE.
|
||||||
|
*
|
||||||
|
*** 積算
|
||||||
|
COMPUTE WRK-ACCUM-MIN =
|
||||||
|
WRK-ACCUM-MIN + WRK-DIFF-MIN
|
||||||
|
END-COMPUTE.
|
||||||
|
*
|
||||||
|
2200ACCUMSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(3.0) *
|
||||||
|
* サブモジュール名:終了処理 *
|
||||||
|
* 処理概要 : ファイルクローズ・件数と終了メッセージ出力 *
|
||||||
|
*****************************************************************
|
||||||
|
3000STPSOR SECTION.
|
||||||
|
*
|
||||||
|
*** 入出力ファイルCLOSE
|
||||||
|
CLOSE R01INNFIL
|
||||||
|
W01OUTFIL.
|
||||||
|
*
|
||||||
|
*** 入出力ファイル件数出力
|
||||||
|
INITIALIZE M00MHOPAR.
|
||||||
|
MOVE CNS-MSGIINKES TO M00MSGCOD.
|
||||||
|
MOVE 'ZAN05R01' TO M00UMKDATS22-01.
|
||||||
|
MOVE CUN-R01INN TO M00UMKDATS22-02.
|
||||||
|
PERFORM 4000MSGOUTSOR.
|
||||||
|
*
|
||||||
|
INITIALIZE M00MHOPAR.
|
||||||
|
MOVE CNS-MSGOUTKES TO M00MSGCOD.
|
||||||
|
MOVE 'ZAN05W01' TO M00UMKDATS22-01.
|
||||||
|
MOVE CUN-W01OUT TO M00UMKDATS22-02.
|
||||||
|
PERFORM 4000MSGOUTSOR.
|
||||||
|
*
|
||||||
|
*** 終了メッセージ出力
|
||||||
|
INITIALIZE M00MHOPAR.
|
||||||
|
MOVE CNS-MSGFIN TO M00MSGCOD.
|
||||||
|
PERFORM 4000MSGOUTSOR.
|
||||||
|
*
|
||||||
|
3000STPSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(4.0) *
|
||||||
|
* サブモジュール名:メッセージ編集出力処理 *
|
||||||
|
* 処理概要 : メッセージ編集出力サブPGM呼出 *
|
||||||
|
*****************************************************************
|
||||||
|
4000MSGOUTSOR SECTION.
|
||||||
|
*
|
||||||
|
MOVE CNS-KN0002 TO M00UMKDATS22-03(1:1).
|
||||||
|
MOVE CNS-KN0002 TO M00UMKDATS22-04(1:1).
|
||||||
|
MOVE CNS-PRGIDX TO M00UMKDATS22-05.
|
||||||
|
CALL 'SUB02MSG' USING M00MHOPAR.
|
||||||
|
*
|
||||||
|
4000MSGOUTSOR-EXT.
|
||||||
|
EXIT.
|
||||||
|
*****************************************************************
|
||||||
|
* サブモジュールNO:(9.9) *
|
||||||
|
* サブモジュール名:ABEND処理 *
|
||||||
|
* 処理概要 : ABENDサブPGM呼出 *
|
||||||
|
*****************************************************************
|
||||||
|
9999ABDSOR SECTION.
|
||||||
|
*
|
||||||
|
MOVE CNS-ABD999 TO E01ABDCOD.
|
||||||
|
CALL 'SUB03END' USING E01ABDPAR.
|
||||||
|
*
|
||||||
|
9999ABDSOR-EXT.
|
||||||
|
EXIT.
|
||||||
@@ -0,0 +1,696 @@
|
|||||||
|
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'.
|
||||||
|
03 CNS-MAX-HOURS PIC 9(004)V9(001)
|
||||||
|
VALUE 9999.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.
|
||||||
|
03 CUN-ETHUS 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).
|
||||||
|
88 WRK-MONTH-OK VALUE 1.
|
||||||
|
*** ループ制御
|
||||||
|
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).
|
||||||
|
03 WRK-REMAIN-HOURS PIC 9(004)V9(001).
|
||||||
|
*** 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.
|
||||||
|
*
|
||||||
|
*** SUBTRACT カバレッジ:残容量検証
|
||||||
|
MOVE WRK-SQL-OVT-HOURS TO WRK-OVT-HOURS-NUM.
|
||||||
|
SUBTRACT WRK-OVT-HOURS-NUM
|
||||||
|
FROM CNS-MAX-HOURS
|
||||||
|
GIVING WRK-REMAIN-HOURS.
|
||||||
|
*
|
||||||
|
*** 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.
|
||||||
|
ADD 1 TO CUN-ETHUS.
|
||||||
|
*
|
||||||
|
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,326 @@
|
|||||||
|
# ファイル定義書
|
||||||
|
|
||||||
|
## 変更履歴
|
||||||
|
|
||||||
|
| No | 変更内容 | 担当者 | 変更日 | 承認者 | 備考 |
|
||||||
|
|----|---------|--------|--------|--------|------|
|
||||||
|
| 1 | 新規作成 | AI | 2026/06/15 | | COPY10部品を一括定義 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 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 | |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 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 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 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で使用予定(未実装) |
|
||||||
@@ -11,6 +11,9 @@
|
|||||||
| 5 | PGMパターン | - |
|
| 5 | PGMパターン | - |
|
||||||
| 6 | 機能概要 | 現在日付を取得し、運用日付(YYYYMMDD)として返す |
|
| 6 | 機能概要 | 現在日付を取得し、運用日付(YYYYMMDD)として返す |
|
||||||
|
|
||||||
|
※PGMタイプ:メイン、サブ
|
||||||
|
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||||
|
|
||||||
### 使用方法
|
### 使用方法
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -11,6 +11,9 @@
|
|||||||
| 5 | PGMパターン | - |
|
| 5 | PGMパターン | - |
|
||||||
| 6 | 機能概要 | メッセージ番号とパラメータを編集し、標準出力へ出力する。 |
|
| 6 | 機能概要 | メッセージ番号とパラメータを編集し、標準出力へ出力する。 |
|
||||||
|
|
||||||
|
※PGMタイプ:メイン、サブ
|
||||||
|
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||||
|
|
||||||
### 使用方法
|
### 使用方法
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -11,6 +11,9 @@
|
|||||||
| 5 | PGMパターン | - |
|
| 5 | PGMパターン | - |
|
||||||
| 6 | 機能概要 | ABENDコードを表示し、異常終了する。 |
|
| 6 | 機能概要 | ABENDコードを表示し、異常終了する。 |
|
||||||
|
|
||||||
|
※PGMタイプ:メイン、サブ
|
||||||
|
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||||
|
|
||||||
### 使用方法
|
### 使用方法
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -11,6 +11,9 @@
|
|||||||
| 5 | PGMパターン | 項目チェック |
|
| 5 | PGMパターン | 項目チェック |
|
||||||
| 6 | 機能概要 | チェックタイプに応じてデータ妥当性を検証する。 |
|
| 6 | 機能概要 | チェックタイプに応じてデータ妥当性を検証する。 |
|
||||||
|
|
||||||
|
※PGMタイプ:メイン、サブ
|
||||||
|
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||||
|
|
||||||
### 使用方法
|
### 使用方法
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -11,6 +11,9 @@
|
|||||||
| 5 | PGMパターン | - |
|
| 5 | PGMパターン | - |
|
||||||
| 6 | 機能概要 | 時間値を指定単位で丸め計算する。 |
|
| 6 | 機能概要 | 時間値を指定単位で丸め計算する。 |
|
||||||
|
|
||||||
|
※PGMタイプ:メイン、サブ
|
||||||
|
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||||
|
|
||||||
### 使用方法
|
### 使用方法
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -14,7 +14,8 @@
|
|||||||
| 8 | | ステータス9:取消申請としてOVT-CANCELに出力 |
|
| 8 | | ステータス9:取消申請としてOVT-CANCELに出力 |
|
||||||
| 9 | | その他:エラーとしてERROR-LOGに出力 |
|
| 9 | | その他:エラーとしてERROR-LOGに出力 |
|
||||||
|
|
||||||
※PGMパターン:マッチング(1:1、1:N、M:N)、レイアウト編集のみ(GETPUT)、項目チェック、振り分け、キーブレイク、キーブレイク(集計、集約)、DB更新
|
※PGMタイプ:メイン、サブ
|
||||||
|
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||||
|
|
||||||
### 前提条件
|
### 前提条件
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,8 @@
|
|||||||
| 7 | | 重複なしのレコードはOVT-NODUPに出力 |
|
| 7 | | 重複なしのレコードはOVT-NODUPに出力 |
|
||||||
| 8 | | 重複ありのレコードはERROR-LOGに出力 |
|
| 8 | | 重複ありのレコードはERROR-LOGに出力 |
|
||||||
|
|
||||||
※PGMパターン:マッチング(1:1、1:N、M:N)、レイアウト編集のみ(GETPUT)、項目チェック、振り分け、キーブレイク、キーブレイク(集計、集約)、DB更新
|
※PGMタイプ:メイン、サブ
|
||||||
|
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||||
|
|
||||||
### 前提条件
|
### 前提条件
|
||||||
|
|
||||||
|
|||||||
@@ -8,12 +8,13 @@
|
|||||||
| 2 | プログラムID | ZAN03CHK |
|
| 2 | プログラムID | ZAN03CHK |
|
||||||
| 3 | プログラム名 | 打刻時間照合処理 |
|
| 3 | プログラム名 | 打刻時間照合処理 |
|
||||||
| 4 | PGMタイプ | メイン |
|
| 4 | PGMタイプ | メイン |
|
||||||
| 5 | PGMパターン | 項目チェック |
|
| 5 | PGMパターン | マッチング(N:1) |
|
||||||
| 6 | 機能概要 | OVT-NODUPとPUNCH-SORTEDを突合し申請時間帯の照合を行う。 |
|
| 6 | 機能概要 | OVT-NODUPとPUNCH-SORTEDを突合し申請時間帯の照合を行う。 |
|
||||||
| 7 | | 申請時間帯が出勤〜退勤の範囲内かを確認する。 |
|
| 7 | | 申請時間帯が出勤〜退勤の範囲内かを確認する。 |
|
||||||
| 8 | | 申請日が休日かを判定しOVT-TYPEを付加する。 |
|
| 8 | | 申請日が休日かを判定しOVT-TYPEを付加する。 |
|
||||||
|
|
||||||
※PGMパターン:マッチング(1:1、1:N、M:N)、レイアウト編集のみ(GETPUT)、項目チェック、振り分け、キーブレイク、キーブレイク(集計、集約)、DB更新
|
※PGMタイプ:メイン、サブ
|
||||||
|
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
|
||||||
|
|
||||||
### 前提条件
|
### 前提条件
|
||||||
|
|
||||||
|
|||||||
@@ -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 = 03
|
||||||
|
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 | 03で固定 | 取消マッチ監査証跡 |
|
||||||
|
| 2 | ERR-DETAIL | STRINGで編集 | CANCEL-MATCH: + 申請番号 + 社員番号 + 申請日 + 開始時刻 + 終了時刻 |
|
||||||
@@ -0,0 +1,173 @@
|
|||||||
|
# 詳細設計書
|
||||||
|
|
||||||
|
## 基本情報
|
||||||
|
|
||||||
|
| # | 項目 | 内容 |
|
||||||
|
|---|------|------|
|
||||||
|
| 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、 |
|
||||||
|
| 10 | | 処理日付取得にACCEPT FROM DATEをそれぞれ使用する。 |
|
||||||
|
|
||||||
|
※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.ACCEPT FROM DATEで処理日付を取得(WRK-DATE-8)
|
||||||
|
【新規カバレッジ】
|
||||||
|
ACCEPT FROM DATE YYYYMMDD
|
||||||
|
1-4.ワークエリアの初期化(WRK-ACCUM-MIN含む)
|
||||||
|
1-5.運用日付取得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 WRK-KEY-START BY 100 GIVING WRK-START-HOUR REMAINDER WRK-START-MIN
|
||||||
|
DIVIDE WRK-KEY-END 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,235 @@
|
|||||||
|
# 詳細設計書
|
||||||
|
|
||||||
|
## 基本情報
|
||||||
|
|
||||||
|
| # | 項目 | 内容 |
|
||||||
|
|---|------|------|
|
||||||
|
| 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 SUBTRACT/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(減算)+COBOL SUBTRACT検証】
|
||||||
|
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
|
||||||
|
SQLCODE異常時は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にリセット
|
||||||
|
4-3.CUN-ETHUSに1加算
|
||||||
|
|
||||||
|
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 | 加班時間→分変換 |
|
||||||
|
| 9 | COBOL SUBTRACT | 残加班容量検証 |
|
||||||
|
|
||||||
|
## 出力レコード定義
|
||||||
|
|
||||||
|
### 出力ファイル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