勤怠管理システム production 定版

This commit is contained in:
qiuqiuqiu
2026-06-15 20:00:06 +08:00
parent 9813dd7772
commit c13e2407d7
9 changed files with 221 additions and 80 deletions
+6 -13
View File
@@ -32,7 +32,6 @@
| NO | コード | 説明 |
|----|--------|------|
| 1 | 0000 | 正常終了 |
| 2 | 0001 | 日付不正(月01〜12/日01〜31範囲外) |
---
@@ -41,16 +40,10 @@
```
1.制御処理(0000MAINSOR
1-1.現在日時を取得する。
ACCEPT WRK-SYS-DATE-14 FROM DATE YYYYMMDD.
1-2.年月日を個別に抽出する。
DIVIDE WRK-SYS-DATE-14 BY 10000 GIVING WRK-YYYY REMAINDER WRK-WK.
DIVIDE WRK-WK BY 100 GIVING WRK-MM REMAINDER WRK-DD.
1-3.月日チェック
1-3-1.WRK-MM < 1 OR WRK-MM > 12
→ D01FKICOD = 0001 を設定し、1-6へ。
1-3-2.WRK-DD < 1 OR WRK-DD > 31
→ D01FKICOD = 0001 を設定し、1-6へ。
1-4.D01UBSUDATEにWRK-SYS-DATE-14を設定する。
1-5.D01FKICOD = 0000 を設定する。
1-6.復帰(GOBACK)。
MOVE FUNCTION CURRENT-DATE TO WRK-SYS-DATE.
1-2.YYYYMMDD部分を抽出する。
MOVE WRK-SYS-DATE(1:8) TO D01UBSUDATE.
1-3.正常終了
MOVE ZERO TO D01FKICOD.
1-4.復帰(GOBACK)。
```
+20 -15
View File
@@ -9,7 +9,7 @@
| 3 | プログラム名 | メッセージ編集出力サブ |
| 4 | PGMタイプ | サブ |
| 5 | PGMパターン | - |
| 6 | 機能概要 | メッセージ番号とパラメータを編集し、メッセージログファイルへ出力する。 |
| 6 | 機能概要 | メッセージ番号とパラメータを編集し、標準出力へ出力する。 |
### 使用方法
@@ -40,8 +40,7 @@
| NO | コード | 説明 |
|----|--------|------|
| 1 | 0000 | 正常終了(出力完了) |
| 2 | 0001 | ファイルオープン失敗 |
| 1 | - | 復帰コードなし(GOBACKで復帰) |
---
@@ -49,16 +48,22 @@
```
1.制御処理(0000MAINSOR
1-1.メッセージファイル(MSGLOG)のオープン状態を確認する。
1-1-1.未オープンの場合
OPEN EXTEND MSGLOG を実行する。
1-1-1-1.オープン失敗の場合
DISPLAY でエラーメッセージを出力し、1-4へ。
1-2.メッセージ行(MSG-LINE)を編集する。
1-2-1.現在日時を取得する。
1-2-2.TIMESTAMP、M00MSGCOD、M00UMKDATS22-01〜10を MSG-LINE に編集する。
1-3.MSGLOGにMSG-LINEを出力する。
1-3-1.WRITE失敗の場合
RETURN-CODEに0001を設定し、1-4へ。
1-4.復帰(GOBACK)。
1-1.メッセージ行(WRK-MSG-LINE)を編集する。
STRING 'MSG['
M00MSGCOD
'] P1='
M00UMKDATS22-01
' P2='
M00UMKDATS22-02
' P3='
M00UMKDATS22-03
' P4='
M00UMKDATS22-04
' P5='
M00UMKDATS22-05
INTO WRK-MSG-LINE
END-STRING.
1-2.標準出力へ出力する。
DISPLAY WRK-MSG-LINE.
1-3.復帰(GOBACK)。
```
+6 -3
View File
@@ -38,8 +38,11 @@
```
1.制御処理(0000MAINSOR
1-1.ABENDメッセージを表示する。
DISPLAY 'ABEND CODE=' E01ABDCOD.
1-2.異常終了する。
1-1.ABENDメッセージを編集する。
MOVE 'ABEND CODE=' TO WRK-ABEND-MSG.
MOVE E01ABDCOD TO WRK-ABEND-MSG(12:3).
1-2.メッセージを表示する。
DISPLAY WRK-ABEND-MSG.
1-3.異常終了する。
STOP RUN.
```
+32 -15
View File
@@ -24,7 +24,7 @@
| NO | 入出力区分 | 名称 | 属性 | 桁数 | 説明 |
|----|-----------|------|------|------|------|
| 1 | I | C01CHKTYP | X(8) | 8 | チェックタイプ(DATE/TIME/NUM) |
| 1 | I | C01CHKTYP | X(8) | 8 | チェックタイプ(DATE/TIME/NUM/EMPID) |
| 2 | I | C01CHKDAT | X(80) | 80 | チェック対象データ |
| 3 | O | C01CHKRRC | 9(4) | 4 | 復帰コード(0000:正常,0001:日付不正,0002:時刻不正,0003:数字不正) |
@@ -36,7 +36,8 @@
| 2 | 0001 | 日付不正(DATE指定時、月01〜12/日01〜31範囲外) |
| 3 | 0002 | 時刻不正(TIME指定時、時00〜23/分00〜59範囲外) |
| 4 | 0003 | 数字不正(NUM指定時、非数字文字を含む) |
| 5 | 0004 | チェックタイプ不明 |
| 5 | 0004 | 社員番号不正(EMPID指定時、8桁以外または空欄) |
| 6 | 9999 | チェックタイプ不明 |
---
@@ -46,16 +47,18 @@
1.制御処理(0000MAINSOR
1-1.C01CHKTYPにより分岐する。
1-1-1.C01CHKTYP = 'DATE' の場合
2000CHKDATEへ。
1000CHKDATEへ。
1-1-2.C01CHKTYP = 'TIME' の場合
3000CHKTIMEへ。
2000CHKTIMEへ。
1-1-3.C01CHKTYP = 'NUM' の場合
4000CHKNUMへ。
1-1-4.その他の場合
C01CHKRRC = 0004 を設定し、1-2へ。
3000CHKNUMへ。
1-1-4.C01CHKTYP = 'EMPID' の場合
4000CHKEMPへ。
1-1-5.その他の場合
C01CHKRRC = 9999 を設定し、1-2へ。
1-2.復帰(GOBACK)。
2.日付チェック(2000CHKDATE
2.日付チェック(1000CHKDATE
2-1.C01CHKDATから年月日を抽出する。
YYYY = C01CHKDAT(1:4)
MM = C01CHKDAT(5:2)
@@ -70,26 +73,40 @@
C01CHKRRC = 0000 を設定する。
2-5.復帰(0000MAINSOR-EXTへ)。
3.時刻チェック(3000CHKTIME
3.時刻チェック(2000CHKTIME
3-1.C01CHKDATから時分を抽出する。
HH = C01CHKDAT(1:2)
MM = C01CHKDAT(3:2)
3-2.時チェック(HH)
3-2-1.HH < 0 OR HH > 23
3-2-1.HH > 23
→ C01CHKRRC = 0002 を設定し、3-5へ。
3-3.分チェック(MM)
3-3-1.MM < 0 OR MM > 59
3-3-1.MM > 59
→ C01CHKRRC = 0002 を設定し、3-5へ。
3-4.正常の場合
C01CHKRRC = 0000 を設定する。
3-5.復帰(0000MAINSOR-EXTへ)。
4.数字チェック(4000CHKNUM
4-1.C01CHKDATに非数字文字が含まれるかチェックする。
INSPECT C01CHKDAT TALLYING WRK-NONDIGIT FOR NON-NUMERIC.
4-2.WRK-NONDIGIT > 0 の場合
4.数字チェック(3000CHKNUM
4-1.C01CHKDATにSPACEより前の文字があるかチェックする。
INSPECT C01CHKDAT TALLYING WRK-NN FOR
CHARACTERS BEFORE INITIAL SPACE.
4-2.WRK-NN > 0 の場合
C01CHKRRC = 0003 を設定し、4-4へ。
4-3.正常の場合
C01CHKRRC = 0000 を設定する。
4-4.復帰(0000MAINSOR-EXTへ)。
5.社員番号チェック(4000CHKEMP
5-1.桁数チェック(8桁以内)
C01CHKDAT(9:72)にSPACES以外がある場合
C01CHKRRC = 0004 を設定し、5-4へ。
5-2.空欄チェック
INSPECT C01CHKDAT(1:8) TALLYING WRK-NN FOR
CHARACTERS BEFORE INITIAL SPACE.
WRK-NN > 0 の場合
C01CHKRRC = 0004 を設定し、5-4へ。
5-3.正常の場合
C01CHKRRC = 0000 を設定する。
5-4.復帰(0000MAINSOR-EXTへ)。
```
+37 -31
View File
@@ -42,57 +42,63 @@
1.制御処理(0000MAINSOR
1-1.T01TIMRRCにより丸めモードを分岐する。
1-1-1.T01TIMRRC = 0 の場合(0.5時間単位・切上)
2000RNDHALFへ。
1000RNDHALFへ。
1-1-2.T01TIMRRC = 1 の場合(0.1時間単位・切上)
3000RNDUP01へ。
2000RNDUPへ。
1-1-3.T01TIMRRC = 2 の場合(0.1時間単位・切捨)
4000RNDDN01へ。
3000RNDDOWNへ。
1-1-4.T01TIMRRC = 3 の場合(単純四捨五入・0.1h単位)
5000RNDNORMへ。
4000RNDNORMALへ。
1-1-5.その他の場合
T01TIMOUT = T01TIMHRS をそのまま設定する。
1-2.復帰(GOBACK)。
2.0.5時間単位・切上(2000RNDHALF
2.0.5時間単位・切上(1000RNDHALF
2-1.T01TIMHRSを分に変換する。
WRK-MIN = T01TIMHRS * 60.
2-2.30分単位で切り上げる。
WRK-R = FUNCTION MOD(WRK-MIN, 30).
2-2-1.WRK-R > 0 の場合
WRK-MIN = ((WRK-MIN / 30) + 1) * 30.
2-2-2.WRK-R = 0 の場合
WRK-MINUTES = T01TIMHRS * 60.
2-2.30分単位で切り上げる(DIVIDE REMAINDER)
DIVIDE WRK-MINUTES BY 30
GIVING WRK-HOURS
REMAINDER WRK-REMAINDER.
2-2-1.WRK-REMAINDER > 0 の場合
WRK-HOURS = WRK-HOURS + 1.
2-2-2.WRK-REMAINDER = 0 の場合
そのまま。
2-3.時間に戻す。
T01TIMOUT = WRK-MIN / 60.
T01TIMOUT = WRK-HOURS * 0.5.
2-4.復帰(0000MAINSOR-EXTへ)。
3.0.1時間単位・切上(3000RNDUP01
3.0.1時間単位・切上(2000RNDUP
3-1.T01TIMHRSを分に変換する。
WRK-MIN = T01TIMHRS * 60.
3-2.6分単位で切り上げる。
WRK-R = FUNCTION MOD(WRK-MIN, 6).
3-2-1.WRK-R > 0 の場合
WRK-MIN = ((WRK-MIN / 6) + 1) * 6.
3-2-2.WRK-R = 0 の場合
WRK-MINUTES = T01TIMHRS * 60.
3-2.6分単位で切り上げる(DIVIDE REMAINDER)
DIVIDE WRK-MINUTES BY 6
GIVING WRK-HOURS
REMAINDER WRK-REMAINDER.
3-2-1.WRK-REMAINDER > 0 の場合
WRK-HOURS = WRK-HOURS + 1.
3-2-2.WRK-REMAINDER = 0 の場合
そのまま。
3-3.時間に戻す。
T01TIMOUT = WRK-MIN / 60.
3-4.復帰(0000MAJSOR-EXTへ)。
T01TIMOUT = WRK-HOURS * 0.1.
3-4.復帰(0000MAINSOR-EXTへ)。
4.0.1時間単位・切捨(4000RNDDN01
4.0.1時間単位・切捨(3000RNDDOWN
4-1.T01TIMHRSを分に変換する。
WRK-MIN = T01TIMHRS * 60.
4-2.6分単位で切り捨てる。
WRK-MIN = (WRK-MIN / 6) * 6.
WRK-MINUTES = T01TIMHRS * 60.
4-2.6分単位で切り捨てる(DIVIDE REMAINDER)
DIVIDE WRK-MINUTES BY 6
GIVING WRK-HOURS
REMAINDER WRK-REMAINDER.
4-3.時間に戻す。
T01TIMOUT = WRK-MIN / 60.
4-4.復帰(0000MAJSOR-EXTへ)。
T01TIMOUT = WRK-HOURS * 0.1.
4-4.復帰(0000MAINSOR-EXTへ)。
5.単純四捨五入・0.1h単位(5000RNDNORM
5.単純四捨五入・0.1h単位(4000RNDNORMAL
5-1.T01TIMHRSに0.05を加算する。
WRK-WK = T01TIMHRS + 0.05.
WRK-HOURS = T01TIMHRS + 0.05.
5-2.小数点第2位以下を切り捨てる。
T01TIMOUT = WRK-WK.
T01TIMOUT = WRK-HOURS.
*> 9(4)V9(1)へのMOVEにより自動で切捨
5-3.復帰(0000MAJSOR-EXTへ)。
5-3.復帰(0000MAINSOR-EXTへ)。
```
+2 -2
View File
@@ -74,8 +74,8 @@
2-1.R01キーとR02キーを比較
2-1-1.R01キー < R02キー(打刻データなし)
ERROR-LOGにエラー出力する(エラーカテゴリ03)。(2010NOMATCHSOR)
2-1-2.R01キー = R02キー(マッチ)
時間範囲チェックを実施する。(2020MATCHSOR→2100CHKTIMSOR)
2-1-2.R01キー = R02キー(マッチ)
時間範囲チェックを実施する。(2020MATCHSOR)
2-1-2-1.開始時刻>=出勤時刻 かつ 終了時刻<=退勤時刻 → 通過
OVT-TYPEを設定しW01に出力する。(2200SETOVTSOR)
2-1-2-2.範囲外 → ERROR-LOGに出力(エラーカテゴリ03)