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

3.3 KiB
Raw Permalink Blame History

詳細設計書

基本情報

# 項目 内容
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へ)。