【JPIERE-0161】期末在庫評価 - 在庫評価計算伝票

 在庫評価計算伝票は、在庫の評価金額を計算するための伝票です。在庫評価の単位で、明細を作成し、評価金額を計算します。そして、計算した評価金額の単価をもとに品目原価を更新します。

オープンソースERPの専門企業-OSS ERP Solutions

在庫評価計算伝票概要

 在庫評価計算伝票は、在庫の評価金額を計算するための伝票です。在庫評価の単位で、明細を作成し、評価金額を計算します。そして、計算した評価金額の単価をもとに品目原価を更新します。

Step1:在庫評価計算伝票明細の作成

 在庫評価プロファイルに定義されている在庫評価計算伝票明細作成クラスを呼び出して、在庫評価計算伝票明細を作成します。次の”Step2:在庫評価計算”では、ここで作成した在庫評価計算伝票明細に対して、在庫評価の計算を行います。

Step2:在庫評価計算

 “Step1:在庫評価計算伝票明細の作成”で作成した明細毎に、在庫の評価金額を計算します。その計算には、在庫評価プロファイルに定義されている在庫評価計算クラスが呼び出されます。

Step3:在庫評価金額をもとに品目原価を更新

 “Step2:在庫評価計算”で計算した評価金額の単価をもとに品目原価を更新します。その処理には、在庫評価プロファイルに定義されている品目原価更新クラスが呼び出されます。

 

【カスタマイズポイント】在庫評価計算伝票

 在庫評価計算伝票は、在庫評価伝票明細毎に、在庫評価額を算出し、品目の標準原価を更新するための伝票です。その処理のために、明細作成→在庫評価計算→品目原価の更新と3つのステップに分けて、それぞれにプロセスを自由に定義し呼び出す事ができいます。言い換えると、在庫評価計算伝票の本質は在庫評価プロファイルに定義されている3つのプロセスを自由に呼び出せるだけの伝票という事になります。

 

在庫評価計算伝票ウィンドウ

 在庫評価計算伝票は、在庫評価伝票明細毎に在庫評価額を算出し、その評価金額をもとに品目の標準原価を更新するための伝票です。在庫評価プロファイルにより、在庫評価伝票明細の作成ロジックや、在庫評価額の計算ロジック、品目の標準原価を更新するロジックを自由にカスタマイズする事ができます。そして監査対応目的のために在庫評価額の算出根拠となる情報は、在庫評価計算ログに記録する事ができいます。在庫評価計算伝票は、在庫評価プロファイルと評価日付で一意になります。

在庫評価計算伝票タブ(JP_InvValCalテーブル)

在庫評価計算伝票
在庫評価計算伝票

◆伝票タイプ

 在庫評価計算伝票の伝票タイプを選択します。在庫評価計算伝票のベース伝票タイプは”JPI”です。

◆評価日付

  在庫評価を行う日付です。この評価日付の在庫数量に対して、在庫評価金額を計算します。

◆前回評価日付

 前回在庫評価を行った日付を入力します。この値をどのように使用するかは、自由です。評価日付より以前の日付を入力する事ができます。

◆在庫評価プロファイル

 在庫評価計算伝票の各処理を行う在庫評価プロファイルを選択します。

◆通貨

 在庫評価プロファイルに設定されている通貨が自動入力されます。

◆明細作成ボタン

 在庫評価プロファイルに設定されている在庫評価計算伝票明細作成クラスのプロセスが呼び出されます。

◆在庫評価計算ボタン

 在庫評価プロファイルに設定されている在庫評価計算クラスのプロセスが呼び出されます。

◆品目原価更新ボタン

 在庫評価プロファイルに設定されている品目原価更新クラスのプロセスが呼び出されます。

◆明細行合計

 参考情報として、在庫評価計伝票明細の評価額(JP_InvValTotalAmt)の合計値を表示します。この値を更新するには、明細行合計更新ボタンを押します。

 

在庫評価計算伝票明細タブ(JP_InvValCalLineテーブル)

 在庫評価計算伝票明細タブは、“在庫評価計算伝票明細の作成”プロセスで、在庫評価の計算単位となる明細を作成し、”在庫評価計算”プロセスで、その明細毎の在庫評価計算を行います。

在庫計算伝票明細タブ
在庫計算伝票明細タブ

◆帳簿数量

評価日付の帳簿数量。組織在庫のタイムスタンプより取得する事を想定しています。

◆在庫評価単位

在庫1つあたりの評価単価。

◆在庫評価金額

帳簿数量 × 在庫評価単価

【カスタマイズポイント】在庫評価計算伝票の明細情報

 在庫評価計算伝票は、在庫評価伝票明細毎に、在庫評価額を算出し、品目の標準原価を更新するための伝票で、それぞれの処理を独自に実装したプロセスを呼び出して処理する事ができます。そのため、在庫評価計算伝票の明細情報にあるフィールドをどのように使用するかは、実装するプロセス次第です。在庫評価を計算する上で、必要な項目があれば追加し、拡張して活用する事を想定しています。

 

在庫評価計算ログタブ(JP_InvValCalLogテーブル)

 在庫評価計ログタブでは、在庫評価計算伝票明細タブの計算根拠となったデータを監査目的のためにログとして記録しておく事を目的としています。

在庫評価計算ログ
在庫評価計算ログ

JPiereデフォルトの処理

JPiereデフォルトの明細行作成プロセス

 在庫評価伝票明細作成ボタンを押すと呼び出されるデフォルトのクラスとしてJPiereでは、jpiere.base.plugin.org.adempiere.processパッケージにDefaultCreateInvValCalLineクラスを用意しています。このクラスでは在庫評価計算伝票の評価日付をキー情報として、組織在庫(JP_stockOrg)から、在庫数量を取得し、在庫評価計算伝票明細を作成します。在庫評価計算伝票明細の作成対象となる品目マスタは、品目タイプがアイテムで、”在庫管理するフラグ”がONの品目マスタです。

 

JPiereデフォルトの在庫評価計算プロセス

 在庫評価計算ボタンを押すと呼び出されるデフォルトのクラスとしてJPiereでは、jpiere.base.plugin.org.adempiere.processパッケージにDefaultInventoryValuationCalculateクラスを用意しています。 DefaultInventoryValuationCalculateクラスは、在庫評価計算伝票明細に設定されている評価方法に従って、それぞれ下記のようなロジックで在庫評価金額を計算します。

◆先入れ先出し(FIFO)

まず評価日付から前回評価日付の期間の入荷伝票(ベース伝票タイプが”MMR”で、IsSOTrxフラグが”N”であり伝票ステータスが”完成”か”クローズ”の入荷伝票明細)を取得します。 (※2016年11月11日修正)

 まず評価日付から前回評価日付の期間の"入荷伝票"と"仕入先返品依頼伝票"の伝票ステータスが”完成”か”クローズ”の明細データを取得します。

 次にその中から、入荷伝票の入荷数量が0以下のマイナス数量の明細データと仕入先返品依頼伝票の明細データは在庫評価計算から除外します。

 計算対象が入荷伝票のプラスの数量の明細に絞られたところで、評価日付に近い移動日付の順番にその入荷伝票明細が照合されている、発注伝票の金額(発注金額)もしくは仕入請求伝票の金額(請求金額)を使用して在庫評価して行きます。

 評価日付から前回評価日付の期間の入荷伝票に照合されている、発注伝票もしくは仕入請求伝票で、すべての在庫の評価ができなかった場合、残りの部分は標準原価の“現在の原価”で評価します。 残りの部分は次のいずれかの方法で評価されます。(2019年4月改修機能)

①期首在庫となる在庫評価計算伝票が指定されている場合

->期首在庫となる在庫評価計算伝票の対応する明細に入力されている在庫評価単価を使用します。

②期首在庫となる在庫評価計算伝票が指定されていない場合

->在庫評価プロファイルに設定されているプライスリストの前回評価日付のバージョンから該当する品目価格の標準価格を在庫評価単価として使用します。

③上記のいずれにも該当しない場合

->標準原価の”現在の原価”を在庫評価単価として使用します。

 

 発注金額と請求金額のどちらで評価するかは、在庫評価プロフィールで設定する事ができます。

 評価日付の時点でマイナス在庫数量の場合、マイナス在庫数量の絶対値分の、在庫評価を行い、1個当たりの正の評価金額(在庫評価単価)を算出し、後でマイナス在庫数量を乗算する事で負の評価金額を算出します。

 在庫評価単価の算出に際しては、小数点以下の金額については通貨の原価計算精度に依存します。通貨の原価計算精度以下の桁数は四捨五入されます。

 

◆後入れ先出し(LIFO)

まず評価日付から前回評価日付の期間の入荷伝票(ベース伝票タイプが”MMR”で、IsSOTrxフラグが”N”であり伝票ステータスが”完成”か”クローズ”の入荷伝票明細)を取得します。(※2016年11月11日修正)

 次にその中から、入荷伝票の入荷数量が0以下のマイナス数量の明細データと仕入先返品依頼伝票の明細データは在庫評価計算から除外します。

 計算対象が入荷伝票のプラスの数量の明細に絞られたところで、前回評価日付に近い移動日付の順番にその入荷伝票明細が照合されている、発注伝票の金額(発注金額)もしくは仕入請求伝票の金額(請求金額)を使用して在庫評価して行きます。

 評価日付から前回評価日付の期間の入荷伝票に照合されている、発注伝票もしくは仕入請求伝票で、すべての在庫の評価ができなかった場合、残りの部分は標準原価の“現在の原価”で評価します。 残りの部分は次のいずれかの方法で評価されます。(2019年4月改修機能)

①期首在庫となる在庫評価計算伝票が指定されている場合

->期首在庫となる在庫評価計算伝票の対応する明細に入力されている在庫評価単価を使用します。

②期首在庫となる在庫評価計算伝票が指定されていない場合

->在庫評価プロファイルに設定されているプライスリストの前回評価日付のバージョンから該当する品目価格の標準価格を在庫評価単価として使用します。

③上記のいずれにも該当しない場合

->標準原価の”現在の原価”を在庫評価単価として使用します。

 

 発注金額と請求金額のどちらで評価するかは、在庫評価プロフィールで設定する事ができます。

 評価日付の時点でマイナス在庫数量の場合、マイナス在庫数量の絶対値分の、在庫評価を行い、1個当たりの正の評価金額(在庫評価単価)を算出し、後でマイナス在庫数量を乗算する事で負の評価金額を算出します。

 在庫評価単価の算出に際しては、小数点以下の金額については通貨の原価計算精度に依存します。通貨の原価計算精度以下の桁数は四捨五入されます。

 

◆平均発注単価 -> JPIERE-0194:期末在庫評価-総平均原価の計算 参照

 まず評価日付から前回評価日付の期間の入荷伝票(ベース伝票タイプが”MMR”で、IsSOTrxフラグが”N”であり伝票ステータスが”完成”か”クローズ”の入荷伝票明細)を取得します。そして、その入荷伝票明細が照合されている発注伝票明細の発注金額の合計から平均単価を算出します。

 

◆平均請求単価 -> JPIERE-0194:期末在庫評価-総平均原価の計算 参照

 まず評価日付から前回評価日付の期間の入荷伝票(ベース伝票タイプが”MMR”で、IsSOTrxフラグが”N”であり伝票ステータスが”完成”か”クローズ”の入荷伝票明細)を取得します。そして、その入荷伝票明細が照合されている請求伝票明細の請求金額の合計から平均単価を算出します。

 

◆最終発注単価

 まず評価日付から前回評価日付の期間の入荷伝票(ベース伝票タイプが”MMR”で、IsSOTrxフラグが”N”であり伝票ステータスが”完成”か”クローズ”の入荷伝票明細)を取得します。 (※2016年11月11日修正)

 まず評価日付から前回評価日付の期間の"入荷伝票"と"仕入先返品依頼伝票"の伝票ステータスが”完成”か”クローズ”の明細データを取得します。

 次にその中から、入荷伝票の入荷数量が0以下のマイナス数量の明細データと仕入先返品依頼伝票の明細データは在庫評価計算から除外します。

  計算対象が入荷伝票のプラスの数量の明細に絞られたところで、評価日付に近い移動日付の入荷伝票明細が照合されている、発注伝票の金額(発注金額) を使用して在庫評価して行きます。

 評価日付から前回評価日付の期間の入荷伝票に照合されている発注伝票がなかった場合、標準原価の“現在の原価”で評価します。

 

◆最終請求単価

 まず評価日付から前回評価日付の期間の入荷伝票(ベース伝票タイプが”MMR”で、IsSOTrxフラグが”N”であり伝票ステータスが”完成”か”クローズ”の入荷伝票明細)を取得します。 (※2016年11月11日修正)

 まず評価日付から前回評価日付の期間の"入荷伝票"と"仕入先返品依頼伝票"の伝票ステータスが”完成”か”クローズ”の明細データを取得します。

 次にその中から、入荷伝票の入荷数量が0以下のマイナス数量の明細データと仕入先返品依頼伝票の明細データは在庫評価計算から除外します。

 計算対象が入荷伝票のプラスの数量の明細に絞られたところで、評価日付に近い移動日付の入荷伝票明細が照合されている、仕入請求伝票の金額(発注金額) を使用して在庫評価して行きます。

 評価日付から前回評価日付の期間の入荷伝票に照合されている仕入請求伝票がなかった場合、標準原価の“現在の原価”で評価します。

 

売価還元法(JPIERE-0441:2019年4月28日追加)

 在庫評価プロファイルに設定してあるプライスリストの品目価格をもとに在庫評価を行う方法です。

 iDempiereのプライスリストはプライスリストスキーマをもとに自動で作成する事ができます。プライスリストスキーマに原価率を設定しておけば、売価をもつプライスリストをもとに原価のプライスリストを簡単に作成する事ができます。そのプライスリストを使用して、在庫評価を行います。

 売価還元法で在庫を評価する際には、評価日付と同じ日付のプライスリストのバージョンが存在する必要があります。そのプライスリストのバージョンに品目価格が存在しなかった場合は、品目原価の現在の原価で在庫評価されます。

 

JPiereデフォルトの品目原価更新プロセス

 在庫評価計算ボタンを押すと呼び出されるデフォルトのクラスとしてJPiereでは、jpiere.base.plugin.org.adempiere.processパッケージにDefaultInvValCalUpdateCostクラスを用意しています。 在庫評価明細毎に計算されている評価額をもとに対応する標準原価を更新します。

カスタマイズ履歴

2020年10月22日:PostgreSQL - To_Date()関数の引数チェックの厳格化への対応

PostgreSQL10よりTo_Date()関数の引数のチェックが厳格化された事により、jpiere.base.plugin.JPiereInvValUtilクラスをメンテナンスしました。

参照:https://www.ashisuto.co.jp/db_blog/article/201712-postgresql10-upgrade.html

2019年4月23日

色々な期間を指定して、在庫評価がシミュレーションできるように改修しました。

◆FIFOとLIFO

先入先出法(FIFO)と後入先出法(LIFO)の在庫評価方法の際に、期間中の仕入の金額で評価しきれなかった場合、これまでは標準原価の"現在の原価"で評価していたのを、次のいずれかの方法で評価するように改修しました。

①期首在庫となる在庫評価計算伝票が指定されている場合

->期首在庫となる在庫評価計算伝票の対応する明細に入力されている在庫評価単価を使用します。

②期首在庫となる在庫評価計算伝票が指定されていない場合

->在庫評価プロファイルに設定されているプライスリストの前回評価日付のバージョンから該当する品目価格の標準価格を在庫評価単価として使用します。

③上記のいずれにも該当しない場合

->標準原価の”現在の原価”を在庫評価単価として使用します。

 

◆総平均

平均発注単価と平均請求単価の"総平均"の在庫評価方法の際に、期首在庫の評価額と在庫数量を期首在庫となる在庫評価計算伝票からのみ取得していたのを、次のいずれかの方法で取得するように改修しました。

①期首在庫となる在庫評価計算伝票が指定されている場合

->期首在庫となる在庫評価計算伝票の対応する明細に入力されている在庫評価単価と帳簿数量を使用します。

②期首在庫となる在庫評価計算伝票が指定されていない場合

->期首在庫の数量は前回評価日付の組織在庫のタイムスタンプから取得します。 ->在庫評価単価は、在庫評価プロファイルに設定されているプライスリストの前回評価日付のバージョンから取得します。該当するデータが無い場合は、標準原価の”現在の原価”を使用します。 ③上記のいずれにも該当しない場合

->期首の時点では在庫は存在していなかった事になります。

 

カスタマイズ情報

追加テーブル

  • JP_InvValCal
  • JP_InvValCalLine
  • JP_InvValCalLog

追加クラス

◆モデルクラス

  • MInvValCal
  • MInvValCalLine
  • MInvValCalLog

◆プロセス

  • 在庫評価計算伝票ワークフロープロセス(JP_InvValCal Process)
  • 在庫評価計算伝票明細作成プロセス(JP_Create_InvValCalLine)…CallInvValCalLineClass
  • 在庫評価計算プロセス(JP_Create_InvValCal)…CallInvValCalClass
  • 品目原価更新プロセス(JP_Create_InvValUpdateCost)…CallInvValUpdateCostClass
  • 明細行合計更新(JP_Sum_InvValCalLine)…InvValCalLineSum
  • DefaultCreateInvValCalLine
  • DefaultInventoryValuationCalculate
  • DefaultInvValCalUpdateCost

その他

◆ベース伝票タイプの追加

 リファレンス"C_DocType DocBaseType"にJPI(Inventory Valuation Calculate)を追加

◆リファレンスの追加

 伝票タイプをベース伝票タイプ"JPI"で絞り込むためのリファレンス"JP DocType JPI"を追加

◆ワークフロー

 在庫評価計算伝票ワークフロー(Process_JPiere_InvValCal)

関連するコンテンツ