ERP5の注文や入出荷の内容に応じて追加で発生する費用や割引などを計算する仕組み

  • Last Update:2021-09-28
  • Version:001
  • Language:ja

消費税8%対応方法について紹介した記事でTrade Model Lineの機能を解説しました。この記事ではTrade Model Lineを使ったもう少し複雑な例を紹介します。

Trade Model Lineの基本

Trade Model Lineを使うと注文や入出荷の内容に応じて追加で発生する費用や割引などを計算することができます。抽象的にいうとTrade Model Lineは入力された何かに応じて別の何かを出力する仕組みです。これを消費税の計算にも使うことができます。消費税の課税対象であることを表すカテゴリーの値をvat_taxableとして、base_contributionカテゴリーにvat_taxableが付いたAmountを入力値とするbase_applicationがvat_taxableのTrade Model Lineは入力されたAmountに税率を掛けて消費税額を計算します。カテゴリーというのはデータを分類するための印でERP5のコア機能の一つです。base_contributionは値を与える(contributeする)側、base_applicationは値を用いる(applyする)側と考えてください。下の図はこれを表したものです。

DeliveryとMovement

複雑なTrade Model Lineの例を挙げていく前にERP5の基本的なデータ構造について説明します。ERP5では注文書や出荷伝票、請求書などモノやお金の場所や所有権が移ることを意味するような文書を表すときにDeliveryとMovementというデータ構造を使います。ERP5は文書を中心に据えて考える文書指向のシステムです。コンピュータシステムですから本物の紙は実際には使わないかもしれませんが考え方としては紙の文書が表していた構造と同じデータ構造をコンピュータ上に構築するようになっています。

Deliveryとは紙を使っているときでいうところの伝票です。例えば注文書であれば注文者の名前を書く欄が一つ、注文先の名前を書く欄が一つ、そして表があって表の中には複数の行があり一つ一つの行には注文したい品名や数量を書くことができます。つまりDeliveryは紙の注文書のデジタル版です。

Movementとは紙を使っているときでいうところの伝票の中の表の一行のことです。明細ということもあるかもしれません。品名や数量、単価などを書くことができます。

まとめると、Deliveryは伝票の用紙で、Movementは伝票の中の表にある行(明細)一つ一つと同じということです。

Trade Model Lineを使って合計金額を出す

さて、DeliveryとMovementのことが分かったところでTrade Model Lineを使ってDeliveryに含まれるMovementの金額の合計を計算してみようと思います。つまり伝票の明細全ての合計金額ということです。ここではまだ税金などのことは考えません。Deliveryに含まれるMovementの金額の合計を出すには単にMovementを全て取得して金額を足せばいいだけなのでTrade Model Lineを使わないほうがよほど簡単なのですがここではTrade Model Lineを理解するための練習としてそれをやってみたいと思います。

まずTrade Model Lineを使うにはカテゴリーが必ず必要になりますのでここでは注文品を表すordered_itemというカテゴリーを使うこととします。全てのMovementのbase_contributionにordered_itemというカテゴリーの値を付けます。そうすることでここで登場するMovementは全て同じordered_itemという分類の仲間になります。

次にTrade Model Lineを作ります。ここで作るTrade Model Lineのbase_applicationにはordered_itemを付けます。こうすることでこのTrade Model Lineはordered_itemに分類されているAmountを入力として受け取って何かの計算をするものになります。MovementはAmountの一種です。さらにこのTrade Model Lineのbase_contributionにはtotal_price_of_ordered_itemsというカテゴリーを付けて出力されるAmountが合計金額であることをカテゴリーで明示的に表明します。そしてこのTrade Model LineのターゲットをDeliveryにします。Trade Model LineのターゲットにはDeliveryかMovementのどちらかを選ぶことになります。ターゲットがDeliveryであればTrade Model LineはDeliveryに対して一回適用され、その一回でそのDeliveryに格納されているMovementの全てが入力値かどうか試されることになります。もしターゲットがMovementであればTrade Model LineはMovementに対して一回適用されます。つまりDeliveryが格納するMovementの一つ一つに対して個別に適用されます。

ターゲットがDeliveryの場合には

TradeModelLine((amount1, amount2, amount3...))

ターゲットがMovementの場合には

TradeModelLine(amount1)
TradeModelLine(amount2)
TradeModelLine(amount3)
TradeModelLine(...)

のようになります。

Trade Model Lineのbase_applicationにordered_itemを付けてターゲットをDeliveryにしたので、このTrade Model Lineは全てのMovementを一度に受け取ることになりました。最後の設定としてTrade Model Lineの計算ルーチンを受け取ったAmountの全ての金額を合計するというものにします。これでTrade Model Lineを使って合計金額を出せるようになりました。下記の図をみてください。

Trade Model Lineを使って消費税の合計を出す

上と同じ要領で消費税の合計を計算するTrade Model Lineを作ってみましょう。二通りの方法を試してみます。Deliveryに含まれる課税対象のMovementの合計金額に消費税率を掛けて消費税額を求める方法とMovement一つ一つの金額に消費税率を掛けて消費税額を求めてそれらを合計する方法です。

Deliveryに含まれる課税対象のMovementの合計金額に消費税率を掛けて消費税額を求める方法の図です。

Movement一つ一つの金額に消費税率を掛けて消費税額を求めてそれらを合計する方法の図です。この場合には3つのMovementがあるのでTrade Model Lineの計算は計3回行われて3つのAmountが結果として得られます。

Trade Model Lineを使って税込の合計金額を出す

最後に税抜の合計金額と消費税額を足し算して税込の合計金額を出してみます。下図のとおりです。今まで紹介したTrade Model Lineの使い方を応用して3つのTrade Model Lineを組み合わせています。

伝票の合計金額や消費税絡みの計算をTrade Model Lineだけで行う方法を通してTrade Model Lineを組み合わせると色々な計算ができることが分かりました。長くなりましたので今回はここまでにしてその2に続きます。その2では消費税の話はやめて注文や入出荷の内容に応じて追加で発生する費用や割引などをTrade Model Lineで計算する具体例をみていきたいと思います。

読んでいただきありがとうございました。

 

Contact

  • Photo Yusei Tahara
  • Logo Nexedi
  • Yusei Tahara
  • yusei (at) nexedi (dot) com