# 詳細設計書 ## 基本情報 | # | 項目 | 内容 | |---|------|------| | 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へ)。 ```