コンテンツにスキップ

iDempiere 原価要素の使い方|会計 操作マニュアル・技術仕様

📖 会計の全体像: 会計の全体図 も合わせてご覧ください。

原価要素は、品目原価を「何の原価か」で分類するためのマスタです。材料費のほか、独自の原価要素(間接費・輸送費等)を定義でき、材料タイプの原価要素には在庫評価方法(先入先出・移動平均等)を紐づけて複数の評価方法で原価を並行計算できます。

📌 ポイント: 会計転記に使われる在庫評価方法は、原価要素ではなく会計スキーマ(または品目カテゴリ会計)側の設定で決まります。原価要素側で在庫評価方法を指定するのは「その方法でも原価を計算・保持したい」場合のみです。

  • 独自の品目原価要素の定義(材料費以外の分類を追加)
  • 材料タイプの原価要素への在庫評価方法の割当(複数の評価方法の並行管理)
  • 原価要素タイプによる分類(材料等)
  • システム計算値かどうかの区分(「計算済み」フラグ)
  • 品目原価・原価詳細の集計軸としての利用

原価要素は 1 タブのシンプルなマスタです。

タブ名テーブル項目数役割
原価要素M_CostElement約8項目原価要素の定義(タイプ・在庫評価方法・計算済みフラグ)
graph TD
    A["🚀 メニューから開く<br/>会計管理 > 原価管理 > 原価要素"] --> B["➕ 新規で名称を入力"]
    B --> C{原価要素タイプ}
    C -->|材料| D["📦 必要に応じて<br/>在庫評価方法を選択<br/>(同一の組合せは登録不可)"]
    C -->|その他| E["🏷️ タイプのみ選択<br/>(在庫評価方法は空欄)"]
    D --> F["💾 保存<br/>(組織は自動的に * に設定)"]
    E --> F
    F --> G["🔗 品目原価ウィンドウで<br/>原価要素ごとの原価を確認"]

メニューから開く 会計管理 > 原価管理 > 原価要素 新規で名称を入力 必要に応じて 在庫評価方法を選択 (同一の組合せは登録不可) タイプのみ選択 (在庫評価方法は空欄) 保存 (組織は自動的に * に設定) 品目原価ウィンドウで 原価要素ごとの原価を確認 原価要素タイプ 材料 その他

アクセス方法(メニューパス)

Section titled “アクセス方法(メニューパス)”

メニューから「会計管理 ▸ 原価管理 ▸ 原価要素」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. 基本情報を入力:
    • 名称: 原価要素名(例: 移動平均原価
    • 原価要素タイプ: 原価要素の分類(材料 等)
    • 在庫評価方法: その方法で原価計算したい場合のみ選択(材料タイプ向け)
    • 計算済み: 値をシステムが計算する要素かどうか
  3. 保存」をクリック

⚠️ 注意: 材料タイプの原価要素では、同じ在庫評価方法を持つ原価要素を同一クライアント内に複数登録できません(保存時に「既に存在します」エラー)。また、組織を指定して保存しても自動的に「*」(全組織)へ変更されます。

項目名必須説明
クライアント必須選択テナント
組織必須選択保存時に自動で「*」に設定
名称必須文字列原価要素の名称
説明-テキスト補足説明
有効必須チェックレコードの有効/無効
原価要素タイプ必須リスト原価要素の分類
在庫評価方法-リスト原価の計算方法(材料タイプで計算対象とする場合のみ)
計算済み必須チェック値がシステム計算かどうか

全項目一覧はリファレンス参照

Q. 同じ在庫評価方法の原価要素を複数作成できますか?

Section titled “Q. 同じ在庫評価方法の原価要素を複数作成できますか?”

できません。材料タイプ(および外注加工タイプ)の原価要素では、MCostElement.beforeSave() が同一クライアント・同一タイプ内で在庫評価方法の重複をチェックし、既存レコードがあると保存エラーになります。

Q. 原価要素が削除できないのはなぜですか?

Section titled “Q. 原価要素が削除できないのはなぜですか?”

その原価要素の在庫評価方法が会計スキーマまたは品目カテゴリ会計で使用されている場合、beforeDelete() が削除をブロックします(「使用中のため削除できません」エラー)。先に会計スキーマ・品目カテゴリ側の在庫評価方法を変更する必要があります。

Q. 組織を指定して保存したのに「*」に戻ってしまいます

Section titled “Q. 組織を指定して保存したのに「*」に戻ってしまいます”

仕様です。beforeSave()AD_Org_ID は常に 0(全組織)に強制されます。原価要素はクライアント全体で共有されるマスタです。

Q. 在庫評価方法は必須ですか?

Section titled “Q. 在庫評価方法は必須ですか?”

任意です。会計転記に使う評価方法は会計スキーマ(または品目カテゴリ会計)の設定が使われます。原価要素側で評価方法を設定するのは、その方法での原価を追加で計算・保持したい場合のみです。

🛠 技術仕様(開発者向け)

原価要素は M_CostElement テーブル(アクセスレベル: Client)に格納されます。MCostElement クラス(534行)が一意性チェック・削除保護・在庫評価方法の判定ロジックを担い、ImmutableIntPOCache(キャッシュサイズ20)による高速参照をサポートします。

classDiagram
    class MCostElement {
        +getMaterialCostElement(ctx, CostingMethod) MCostElement$
        +getCostElementsWithCostingMethods(po) List$
        +getCostingMethods(po) MCostElement[]$
        +get(ctx, M_CostElement_ID) MCostElement$
        +getByCostingMethod(ctx, CostingMethod) List$
        #beforeSave(newRecord) boolean
        #beforeDelete() boolean
        +isCostingMethod() boolean
        +isFifo() boolean
        +isAverageInvoice() boolean
        +isAveragePO() boolean
    }
    class X_M_CostElement {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    MCostElement --|> X_M_CostElement
    X_M_CostElement --|> PO
    MCostElement --> MCost : 集計軸
    MCostElement --> MCostDetail : 集計軸

+getMaterialCostElement(ctx, CostingMethod) MCostElement$ +getCostElementsWithCostingMethods(po) List$ +getCostingMethods(po) MCostElement[]$ +get(ctx, M_CostElement_ID) MCostElement$ +getByCostingMethod(ctx, CostingMethod) List$ #beforeSave(newRecord) boolean #beforeDelete() boolean +isCostingMethod() boolean +isFifo() boolean +isAverageInvoice() boolean +isAveragePO() boolean <> <> > X_M_CostElement X_M_CostElement --

パッケージ: org.compiere.model ソースファイル: org.adempiere.base/src/org/compiere/model/MCostElement.java

カラム名必須説明備考
M_CostElement_IDIDPK原価要素ID主キー
AD_Client_IDTableDirectYクライアントデフォルト @#AD_Client_ID@
AD_Org_IDTableDirectY組織beforeSave で 0 に強制
NameString(60)Y名称識別子
DescriptionText(255)N説明
CostElementTypeList(1)Y原価要素タイプMaterial / OutsideProcessing 等
CostingMethodList(1)N在庫評価方法材料タイプで一意制約
IsCalculatedYesNoY計算済みシステム計算値かどうか
IsActiveYesNoY有効デフォルト Y
  1. 在庫評価方法の一意性チェック: タイプが Material または OutsideProcessing で、新規または CostingMethod 変更時、同一クライアント・同一タイプ・同一評価方法の既存レコードを SQL で検索。存在すれば AlreadyExists エラーで保存拒否
  2. 組織の強制: AD_Org_ID != 0 の場合、常に 0(全組織)へ上書き

材料タイプかつ在庫評価方法が設定されている場合のみチェック:

  1. クライアントの全会計スキーマMAcctSchema.getClientAcctSchema)を走査し、同じ在庫評価方法を使用するスキーマがあれば CannotDeleteUsed で削除拒否
  2. 品目カテゴリ会計M_Product_Category_Acct)に同じ在庫評価方法の設定があれば同様に削除拒否
メソッド用途
getMaterialCostElement(ctx, CostingMethod)指定評価方法の材料原価要素を取得(無ければ作成)
getCostingMethods(po)在庫評価方法を持つ原価要素の一覧
getNonCostingMethods(po)評価方法を持たない原価要素の一覧
get(ctx, id)Immutable キャッシュ経由の取得
  • Model Validator: M_CostElementTYPE_BEFORE_NEW / TYPE_BEFORE_CHANGE で独自制約(命名規則・タイプ制限等)を追加できます。コア改変は不要です
  • Callout: 標準ではこのテーブルにカラム callout は定義されていません
  • 独自原価要素: 標準の原価計算エンジン(MCost / MCostDetail)は原価要素単位で原価を保持するため、独自要素を追加すれば要素別の原価管理が可能です

リファレンスページ・メニューに直接関連するプロセスは登録されていません。


原価要素の追加定義や独自の原価集計ロジックは、Model Validator を使えばコア改変なしで安全に拡張できます。

As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。

OSS ERP導入・カスタマイズサービスの詳細はこちら