JPiereの期末在庫評価の計算方法に、総平均原価を追加しました。
総平均原価の追加理由
JPiereの期末在庫評価の計算は、在庫評価プロファイルを使用して、在庫評価計算伝票で行うようになっています。平均単価で評価しようとして場合、"平均発注単価"と"平均請求単価"がこれまでも選べましたが、この計算は、単純平均(期間平均)であり、期首在庫の評価金額と在庫数量は平均単価の計算に加味されていませんでした。
これまでの機能でも、在庫評価期間をシステムの運用開始日とすることで、総平均原価的な評価は可能でしたが、この方法だと運用期間が長くなればなるほど、処理に時間がかかるようになりますし、期首在庫の評価金額と在庫数量が加味されていないので、会社の設立当初から運用を開始していない限りは、正確な総平均原価にはなりません。
そこで、JPiereでは、これまでの"平均発注単価"と"平均請求単価"の計算方法を"単純平均(期間平均)"とし、期首在庫の評価金額と在庫数量を平均単価の計算に加味する在庫評価計算処理を"総平均"として追加しました。
総平均原価の計算処理
在庫評価プロファイルの設定
在庫評価方法で”平均発注単価”か"平均請求単価"を選択した場合、平均単価計算方法フィールドが表示され、"総平均"か"単純平均(期間平均)"を選択します。ここで、"単純平均(期間平均)"を選択すると、これまで実装されていたロジックで在庫評価計算伝票で在庫評価が行われます。"総平均"を選択すると、今回追加した新しい在庫評価ロジックで在庫評価が行われます。
在庫評価計算伝票明細作成
在庫評価計算伝票の在庫評価計算伝票明細作成プロセスを実行すると、総平均で計算する在庫評価計算プロファイルを使用している場合は、"期首となる在庫評価計算伝票"が入力されていない場合は、"期首在庫となる在庫評価計算伝票"を自動設定します。
JPiereのデフォルトの在庫評価計算明細作成クラスでは、次の条件に合致している在庫評価計算伝票を"期首在庫となる在庫評価計算伝票"に自動設定します。
- 同じ在庫評価プロファイルを使用している在庫評価計算伝票
- 在庫計算伝票の"前回評価日付"と同じ日付の"評価日付"が設定されている在庫評価計算伝票
- 伝票スタータスが"完成"か"クローズ"になっている在庫評価計算伝票
- 上記条件に合致する在庫評価計算伝票が複数ある場合には、在庫評価計算伝票のID(JP_InvValCal_ID)が一番大きい在庫評価計算伝票
上記条件に合致する在庫評価計算伝票が無い場合は、自動設定されません。また自動設定される場合でも、これはあくまでも在庫評価計算伝票明細プロセスのロジックにより自動設定されているだけですので、手入力で修正できます。
- 異なる在庫評価プロファイルの在庫評価計算伝票は設定する事ができません。
- 期首となる在庫評価計算伝票は、その評価日付が、在庫計算伝票の前回評価日付と同じ日付でなくてはいけません。
在庫評価計算
在庫評価計算伝票で、総平均で在庫評価を行う場合には、期首在庫の評価金額と在庫数量を持っている在庫評価計算伝票(≒前回の在庫評価計算伝票)を指定します。
◆平均発注単価 - 総平均
まず評価日付から前回評価日付の期間の入荷伝票(ベース伝票タイプが”MMR”で、IsSOTrxフラグが”N”であり伝票ステータスが”完成”か”クローズ”の入荷伝票明細)を取得します。
そして、その入荷伝票明細が照合されている発注伝票明細の"発注金額の合計(≒当期商品仕入高)"と"発注数量の合計(≒当期商品仕入数量)"を算出します。
次に在庫評価計算伝票のヘッダー情報に入力されている、"期首となる在庫評価計算伝票"フィールドに設定されている在庫評価計算伝票から、在庫評価金額と帳簿数量を取得し、当期商品仕入高と当期商品仕入数量にそれぞれ加算し、合計金額から合計数量を除算して総平均原価(在庫評価単価)を求め、総平均原価に期末在庫数量を乗算して期末在庫評価金額を算出します。
まとめると次のような計算式になります。
- 総平均原価(在庫評価単価)=(期首在庫評価額+当期仕入額)÷ (期首在庫数量 +当期仕入数量)
- 在庫評価金額 = 総平均原価(在庫評価単価) × 期末在庫数量
期首となる在庫評価計算伝票が設定されていない場合は、"単純平均(期間平均)"で計算します。
平均単価の算出に際して小数点以下の金額の取扱いについては、通貨の原価計算精度に依存します。通貨の原価計算精度以下の桁数は四捨五入されます。そして品目毎の在庫評価金額については、通貨の標準精度に依存し、標準精度以下の桁数は四捨五入されます。
◆平均請求単価 - 総平均
まず評価日付から前回評価日付の期間の入荷伝票(ベース伝票タイプが”MMR”で、IsSOTrxフラグが”N”であり伝票ステータスが”完成”か”クローズ”の入荷伝票明細)を取得します。
そして、その入荷伝票明細が照合されている請求伝票明細の"請求金額の合計(≒当期商品仕入高)"と"請求数量の合計(≒当期商品仕入数量)"を算出します。
次に在庫評価計算伝票のヘッダー情報に入力されている、"期首となる在庫評価計算伝票"フィールドに設定されている在庫評価計算伝票から、在庫評価金額と帳簿数量を取得し、当期商品仕入高と当期商品仕入数量にそれぞれ加算し、合計金額から合計数量を除算して総平均原価(在庫評価単価)を求め、総平均原価に期末在庫数量を乗算して期末在庫評価金額を算出します。
まとめると次のような計算式になります。
- 総平均原価(在庫評価単価)=(期首在庫評価額+当期仕入額)÷ (期首在庫数量 +当期仕入数量)
- 在庫評価金額 = 総平均原価(在庫評価単価) × 期末在庫数量
期首となる在庫評価計算伝票が設定されていない場合は、"単純平均(期間平均)"で計算します。
平均単価の算出に際して小数点以下の金額の取扱いについては、通貨の原価計算精度に依存します。通貨の原価計算精度以下の桁数は四捨五入されます。そして品目毎の在庫評価金額については、通貨の標準精度に依存し、標準精度以下の桁数は四捨五入されます。
カスタマイズ情報
追加リストバリデーション
◆JP Type of Average Cost(平均単価の計算方法)
下記の選択リスト:
- GA:総平均(Gross Average)
- PA:単純平均(期間平均)(Periodic Average)
追加テーブルバリデーション
◆JP JP_InvValCal(在庫評価計算伝票)
◆JP JP_InvValCalLine(在庫評価計算伝票明細)
追加カラム
◆JP_InvValProfile(在庫評価プロファイル)テーブル
- JP_TypeOfAverageCost(平均単価の計算方法)
◆JP_InvValCal(在庫評価計算伝票ヘッダー)テーブル
- JP_BeginInvValCal_ID(期首在庫となる在庫評価計算伝票)
◆JP_InvValCalLine(在庫評価計算伝票明細)テーブル
- JP_BeginInvValCalLine_ID(期首在庫となる在庫評価計算伝票明細)
◆JP_InvValCalLog(在庫評価計算伝票ログ)テーブル
- JP_BeginInvValCalLine_ID(期首在庫となる在庫評価計算伝票明細)
修正クラス
◆在庫評価計算伝票名足作成プロセス(DefaultCreateInvValCalLine)
総平均の計算の場合で、期首となる在庫評価計算伝票が入力されていない場合は、期首となる在庫評価計算伝票を自動設定するように変更しました。
◆在庫評価計算プロセス(DefaultInventoryValuatiionCalculate)
総平均原価の計算ロジックを追加しました。
◆在庫評価計算プロファイル(MInvValProfile)
beforeSave()メソッドで、在庫評価方法が”請求平均単価"と"発注平均単価"ではない場合、”平均単価の計算方法”をブランクにするようにしました。
◆在庫評価計算伝票ヘッダ(MInvValCal)
beforeSave()メソッドで、期首となる在庫評価計算伝票の入力がある場合で、かつ在庫評価プロファイルが総平均を採用している場合、同じ在庫評価プロファイルを使用しているかどうかのチェックと、期首となる在庫評価計算伝票の伝票ステータスが"完成"もしくは"クローズ"になっているかのチェックと、期首となる在庫評価計算伝票の評価日付と前回評価日付が同じかどうかのチェックと追加しました。
◆モデルクラス(XクラスとIクラス)の再作成
次のテーブルはカラムを追加したため、XクラスとIクラスを再作成しています。
- JP_InvValProfile(在庫評価プロファイル)
- JP_InvValCal(在庫評価計算伝票ヘッダー)
- JP_InvValCalLine(在庫評価計算伝票明細)
- JP_InvValCalLog(在庫評価計算ログ)
追加メッセージ
◆JP_BeginningInventory
Beginning Inventory(期首在庫)
◆JP_DifferentInvValProfile
Different Inventory Valuation Profile(在庫評価プロファイルが異なります。)
◆JP_DiffDateValue
Last Date Value is different from Valuation Date of Beginning Inventory Valuation(期首となる在庫評価計算伝票の評価日付と前回評価日付が異なります。)
◆JP_CreateStockOrgTimestamp
Please Create Stock Org Timestamp(組織在庫のタイムスタンプを作成して下さい。)