Files
cobol-tna-system/詳細設計書/詳細設計書_SUB05TIM.md
qiuqiuqiu b3e800e601 feat: サブシステムB 残業統計管理 初回production反映
- 全6プログラム(ZAN01CHK~ZAN06UPD)ソース・実行ファイル
- 5サブプログラム(SUB01DAT~SUB05TIM)ソース・DLL
- 10 COPY書式ファイル
- 詳細設計書12ファイル
- サブシステムB全体設計書
- bin/配下の実行ファイル资産
2026-06-17 23:20:53 +08:00

108 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 詳細設計書
## 基本情報
| # | 項目 | 内容 |
|---|------|------|
| 1 | システム名 | 残業統計管理システム |
| 2 | プログラムID | SUB05TIM |
| 3 | プログラム名 | 時刻丸め計算サブ |
| 4 | PGMタイプ | サブ |
| 5 | PGMパターン | - |
| 6 | 機能概要 | 時間値を指定単位で丸め計算する。 |
※PGMタイプ:メイン、サブ
※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新
### 使用方法
```
CALL 'SUB05TIM' USING T01TIMPAR
```
### 入出力パラメータ
| COPY句 | ZANTIMAC |
|------------|----------|
| NO | 入出力区分 | 名称 | 属性 | 桁数 | 説明 |
|----|-----------|------|------|------|------|
| 1 | I | T01TIMHRS | 9(4)V9(1) | 4.1 | 入力時間(HH.h) |
| 2 | O | T01TIMOUT | 9(4)V9(1) | 4.1 | 出力時間(丸め後) |
| 3 | I | T01TIMRRC | 9(4) | 4 | 丸めモード(0:0.5h切上,1:0.1h切上,2:0.1h切捨,3:単純四捨五入) |
### リターンコード一覧
| NO | コード | 説明 |
|----|--------|------|
| 1 | 0000 | 正常終了 |
---
## 処理詳細
```
1.制御処理(0000MAINSOR
1-1.T01TIMRRCにより丸めモードを分岐する。
1-1-1.T01TIMRRC = 0 の場合(0.5時間単位・切上)
1000RNDHALFへ。
1-1-2.T01TIMRRC = 1 の場合(0.1時間単位・切上)
2000RNDUPへ。
1-1-3.T01TIMRRC = 2 の場合(0.1時間単位・切捨)
3000RNDDOWNへ。
1-1-4.T01TIMRRC = 3 の場合(単純四捨五入・0.1h単位)
4000RNDNORMALへ。
1-1-5.その他の場合
T01TIMOUT = T01TIMHRS をそのまま設定する。
1-2.復帰(GOBACK)。
2.0.5時間単位・切上(1000RNDHALF
2-1.T01TIMHRSを分に変換する。
WRK-MINUTES = T01TIMHRS * 60.
2-2.30分単位で切り上げる(DIVIDE REMAINDER)。
DIVIDE WRK-MINUTES BY 30
GIVING WRK-HOURS
REMAINDER WRK-REMAINDER.
2-2-1.WRK-REMAINDER > 0 の場合
WRK-HOURS = WRK-HOURS + 1.
2-2-2.WRK-REMAINDER = 0 の場合
そのまま。
2-3.時間に戻す。
T01TIMOUT = WRK-HOURS * 0.5.
2-4.復帰(0000MAINSOR-EXTへ)。
3.0.1時間単位・切上(2000RNDUP
3-1.T01TIMHRSを分に変換する。
WRK-MINUTES = T01TIMHRS * 60.
3-2.6分単位で切り上げる(DIVIDE REMAINDER)。
DIVIDE WRK-MINUTES BY 6
GIVING WRK-HOURS
REMAINDER WRK-REMAINDER.
3-2-1.WRK-REMAINDER > 0 の場合
WRK-HOURS = WRK-HOURS + 1.
3-2-2.WRK-REMAINDER = 0 の場合
そのまま。
3-3.時間に戻す。
T01TIMOUT = WRK-HOURS * 0.1.
3-4.復帰(0000MAINSOR-EXTへ)。
4.0.1時間単位・切捨(3000RNDDOWN
4-1.T01TIMHRSを分に変換する。
WRK-MINUTES = T01TIMHRS * 60.
4-2.6分単位で切り捨てる(DIVIDE REMAINDER)。
DIVIDE WRK-MINUTES BY 6
GIVING WRK-HOURS
REMAINDER WRK-REMAINDER.
4-3.時間に戻す。
T01TIMOUT = WRK-HOURS * 0.1.
4-4.復帰(0000MAINSOR-EXTへ)。
5.単純四捨五入・0.1h単位(4000RNDNORMAL
5-1.T01TIMHRSに0.05を加算する。
WRK-HOURS = T01TIMHRS + 0.05.
5-2.小数点第2位以下を切り捨てる。
T01TIMOUT = WRK-HOURS.
*> 9(4)V9(1)へのMOVEにより自動で切捨
5-3.復帰(0000MAINSOR-EXTへ)。
```