サポート > リポジトリ > 他モデルの参照 > [応用] 選択肢の絞り込みを用いて、操作時点での消費税を定める

利用者が操作した時点の消費税率を用いて税額を求めます。将来の消費税変更ルールにも対応します。

「消費税率」モデルを用意します。図1に示す初期データを登録しておきます。

図1 消費税率モデルの設定値

受注モデルで利用した例です。販売額に対して、操作時点での消費税率(図2の例では8パーセント)が適用されています。

図2 消費税額の計算例

消費税率モデル

「税率開始日」を日付型とします。「消費税率」を8バイト浮動小数点型とします。

図3 消費税率モデル

図4 消費税率項目の型

消費税計算を行うモデル

消費税の計算を行うモデルでは「日付」「金額」「消費税」「消費税額」に相当する項目を用意します。

図5 受注日、販売額、消費税、消費税額の項目
項目 説明
日付 税率を求める時点の日付項目 日付型。対象日となる。
金額 税率を求める対象となる項目 整数型。参照連動を用いて、商品マスタにある値を転記する、といった使い方もできる。
消費税 算出日時点での消費税 消費税モデルを参照する。後述する設定により、対象日付の消費税に絞り込む。
消費税額 金額と消費税を掛け合わせて求める。 誤差がないような式とする。(後述)

隠し項目消費税

この項目は消費税モデルの参照となります。リストボックスとしてください。

図6 消費税モデルをリストボックスで参照する。

この値はデータベースに保存しない、とします。

図7 データベースに保存しない
計算時の消費税を記録として残しておく、という場合は、データベースに保存してください。

「他項目の値で選択肢を絞り込む」設定を行います。次のようにします。

図8 他項目の値で選択肢を絞り込む設定
項目名
対象日が格納された日付項目を指定します。
絞込条件
対象日より前で絞り込むため、"以下" を指定します。
参照先項目名
消費税モデルの「税率開始日」項目を指定します。
未入力のときの動作
"選択肢を作らない" とします。

さらに、この選択肢は「税率開始日」の降順であらかじめソートさせておき、かつ、(複数ある選択肢の)先頭1つだけを用いる、とします。

図9 選択肢の先頭のみ表示する

この設定により、現時点における消費税率が確定されます。この設定のイメージは次のとおりです。

図10 絞り込みのイメージ

さらに、この項目は入力時に隠しとします。さらに出力時にも隠しとします。これによって画面には表示されません。

図11 入力時に隠し項目とする

図12 出力時に隠し項目とする
開発時は、隠し指定を解除するとよいでしょう。現在の消費税率を画面上で確認できます。

消費税額

消費税額を求める式を示します。

図13
IF (${HIDDENTAX} == 0.0,
    0,
    (int)ROUND(VALUE(MUL(${AMHANBAI},${HIDDENTAX})),0)
)
  • 消費税項目はモデル参照です。${HIDDENTAX} と記述すると、内容部(消費税率)を取得します。
  • 販売額と消費税率の掛け算は一般に小数点部分で誤差が生じます。この解決のために、通常の乗算ではなく、MUL関数を用います。詳細は「計算式 > 演算精度」をお読みください。
  • MUL関数の戻り値は文字列型です。VALUE関数を適用して、これを8バイト浮動小数点に変換します。
  • ROUND 関数に桁数に 0 を指定し、数値を最も近い整数として四捨五入するようにしています。
  • 最終的な計算結果は整数型になるため、最後に (int) を先頭に付与して明示的に型変換を行っています。
  • 消費税マスタに存在しない日付(最初の消費税が設定されるより前の日付)を受注日とした場合、「隠し項目消費税(HIDDENTAX)」項目は空白(null)となりますが、${HIDDENTAX} と記述すると 0.0 が返されます。これは Wagby が展開した後の式で、選択した結果が null の場合は(8バイト浮動小数点型の初期値である)0.0 を返すようになっているためです。この性質を用いて、この場合は消費税を 0 としています。