はじめに
これは設計時の見落とし Advent Calendar 2018の16日目の記事となります。
業務アプリケーションの設計をするときに、見落としがちなところに焦点をあてて紹介します。
下流工程からの手戻りを少なくして 双方の負担を減らしましょう。
業務用アプリケーションを作成していると、受注入力画面などヘッダー部と明細部が一緒になっている画面が多いです。
簡易な例としては、ヘッダー部に請求先コードを入力し、明細部に数量、単価、金額などの項目があるとかです。
自動計算項目が入力可能
明細入力などで、数量、単価、金額の項目があり、金額項目は「数量x単価」として自動計算でセットします。
一般的には自動計算する項目は入力不可となっている場合が多いです。
しかし、ユーザーの要望で金額を手動で調整出来るように入力項目になることがあります。
数量 | 単価 | 金額 |
---|---|---|
5 | 100 | 500 |
問題点
自動計算された金額を訂正後に数量または単価を変えた場合、手動で入力した金額が書き換わってしまう。※システム的に金額が重要値とする。
数量 | 単価 | 金額 | コメント |
---|---|---|---|
5 | 100 | 500 | |
5 | 100 | 550 | 金額を訂正 |
6 | 100 | 600 | 書き換えた金額が訂正されてしまう。 |
この問題点を良しとするか悪いとするかは、ユーザーとの確認が必要となります。
対応
当時の対応では、金額が 0 の場合に自動計算した結果をセットする仕様となりました。
他にも、再計算ボタンを用意して再計算させる方法もあります。
関連項目値の変更
請求先コードをキーに請求先マスタを参照し、端数区分(切り上げ、四捨五入、切り捨て)を取得します。
そして、明細入力の金額を自動計算(数量x単価)する際の端数処理として使用します。
問題点
明細を何件か入力後にヘッダー部にて先ほどとは違う請求先コードに変更した場合、端数区分が「四捨五入」から「切り捨て」など違う場合があります。
では、その時に入力されている明細の金額についてはどうするべきなのか?
- 何もしない
- 自動計算
- 明細をクリアーする
などなど
※請求書コードを変更する段階で確認メッセージを出力するものとする
端数区分「四捨五入」
日付 | 個数 | 計算 | 端数処理 | 結果 |
---|---|---|---|---|
11/2 | 5個 | 5 x 20.5 = 102.5 | 四捨五入 | 103 |
11/3 | 5個 | 5 x 20.5 = 102.5 | 四捨五入 | 103 |
計 | 206 |
端数区分「切り捨て」
日付 | 個数 | 計算 | 端数処理 | 結果 |
---|---|---|---|---|
11/2 | 5個 | 5 x 20.5 = 102.5 | 切り捨て | 102 |
11/3 | 5個 | 5 x 20.5 = 102.5 | 切り捨て | 102 |
計 | 204 |
自動計算の選択した場合は再計算しますが、先述した自動計算項目が入力可能項目になっている場合には書き換えてしまう問題があります。
明細をクリアーするとなると、ユーザーが明細を再入力し直しとなってしまいます。
何もしないとすると、計算が合わなくなる問題がありえます。
端数処理の仕方
販売管理系システムの場合など請求先または支払先ごとに計算方法の指定がある場合がほとんどです。
よくあるのは消費税計算で、明細単位、請求単位、請求明細単位、合計請求単位などがあります。
問題点
明細毎に端数処理するのか明細集計後に端数処理するのかによって誤差が発生します。
明細毎に端数処理
日付 | 個数 | 計算 | 端数処理 | 結果 |
---|---|---|---|---|
11/2 | 5個 | 5 x 20.25 = 101.25 | 四捨五入 | 101 |
11/3 | 5個 | 5 x 20.25 = 101.25 | 四捨五入 | 101 |
計 | 202 |
明細集計後に端数処理
日付 | 個数 | 計算 | 端数処理 | 結果 |
---|---|---|---|---|
11/2 | 5個 | |||
11/3 | 5個 | (5+5) x 20.25 = 202.5 | 四捨五入 | 203 |
計 | 203 |
このように集計レベルによる端数処理により誤差が出るため、仕様者およびユーザーに確認が必要となります。
最後に
このように関連する項目が変更された場合、幾つかの方法が考えられるわけですが、詳細設計書上にその旨の記述があったことがなかなかありません。
かといって、共通仕様書上にあるのかというと無いわけです。そうすると、たいがい指摘するはめになります。