計量単位(UOM)の標準精度を画面表示に反映させる方法
オープンソースのERP iDempiere(アイデンピエレ)をはじめほとんどのCompiere Distributionでは計量単位(Unit of Measure)を自由に追加する事ができます。計量単位には、小数点以下の表示桁数を制御できるようにと、標準精度(Standard Precision)と原価計算精度(Costing Precision)というフィールドがあります。
ただ、ここで設定した小数点以下の表示桁数を制御する値は、何もしないとどこにも影響がありません。
そのためiDempiereでは、この計量単位の標準精度を使用して、受注伝票明細/発注伝票明細、出荷納品伝票明細/入荷伝票明細、売上請求伝票明細/仕入請求伝票明細の数量の小数点以下の表示桁数をコールアウトとモデルクラスのbeforSave()メソッドで制御しています。
上記のイメージでは、計量単位が"個"の場合と"時間"の場合とで、入力数量に表示されている数値の少数点以下の表示が異なっているのがわかると思います。これは、具体的には次の方法で実装されています。
コールアウト
CalloutOrderクラスのqty()メソッドにおいて、小数点以下の表示桁数を、計量単位の標準精度を使用して制御するロジックが記載されています。
モデルクラスのbeforSave()メソッド
MOderLineクラスのbeforSave()メソッド内で、setQtyEntered()メソッドを使用して、小数点以下の表示桁数を、計量単位の標準精度を使用して制御する実装がされています。
このような処理がされていない所もあると思いますが、上記処理を把握しておけば、どこでも応用できると思います。