iDempiere 原価要素の使い方|会計 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 会計の全体像: 会計の全体図 も合わせてご覧ください。
原価要素は、品目原価を「何の原価か」で分類するためのマスタです。材料費のほか、独自の原価要素(間接費・輸送費等)を定義でき、材料タイプの原価要素には在庫評価方法(先入先出・移動平均等)を紐づけて複数の評価方法で原価を並行計算できます。
📌 ポイント: 会計転記に使われる在庫評価方法は、原価要素ではなく会計スキーマ(または品目カテゴリ会計)側の設定で決まります。原価要素側で在庫評価方法を指定するのは「その方法でも原価を計算・保持したい」場合のみです。
原価要素でできること
Section titled “原価要素でできること”- 独自の品目原価要素の定義(材料費以外の分類を追加)
- 材料タイプの原価要素への在庫評価方法の割当(複数の評価方法の並行管理)
- 原価要素タイプによる分類(材料等)
- システム計算値かどうかの区分(「計算済み」フラグ)
- 品目原価・原価詳細の集計軸としての利用
原価要素は 1 タブのシンプルなマスタです。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| 原価要素 | M_CostElement | 約8項目 | 原価要素の定義(タイプ・在庫評価方法・計算済みフラグ) |
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 メニューから開く<br/>会計管理 > 原価管理 > 原価要素"] --> B["➕ 新規で名称を入力"]
B --> C{原価要素タイプ}
C -->|材料| D["📦 必要に応じて<br/>在庫評価方法を選択<br/>(同一の組合せは登録不可)"]
C -->|その他| E["🏷️ タイプのみ選択<br/>(在庫評価方法は空欄)"]
D --> F["💾 保存<br/>(組織は自動的に * に設定)"]
E --> F
F --> G["🔗 品目原価ウィンドウで<br/>原価要素ごとの原価を確認"]
アクセス方法(メニューパス)
Section titled “アクセス方法(メニューパス)”メニューから「会計管理 ▸ 原価管理 ▸ 原価要素」を開きます。
- ツールバーの「新規」ボタンをクリック
- 基本情報を入力:
- 名称: 原価要素名(例:
移動平均原価) - 原価要素タイプ: 原価要素の分類(材料 等)
- 在庫評価方法: その方法で原価計算したい場合のみ選択(材料タイプ向け)
- 計算済み: 値をシステムが計算する要素かどうか
- 名称: 原価要素名(例:
- 「保存」をクリック
⚠️ 注意: 材料タイプの原価要素では、同じ在庫評価方法を持つ原価要素を同一クライアント内に複数登録できません(保存時に「既に存在します」エラー)。また、組織を指定して保存しても自動的に「*」(全組織)へ変更されます。
項目リファレンス
Section titled “項目リファレンス”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| クライアント | 必須 | 選択 | テナント |
| 組織 | 必須 | 選択 | 保存時に自動で「*」に設定 |
| 名称 | 必須 | 文字列 | 原価要素の名称 |
| 説明 | - | テキスト | 補足説明 |
| 有効 | 必須 | チェック | レコードの有効/無効 |
| 原価要素タイプ | 必須 | リスト | 原価要素の分類 |
| 在庫評価方法 | - | リスト | 原価の計算方法(材料タイプで計算対象とする場合のみ) |
| 計算済み | 必須 | チェック | 値がシステム計算かどうか |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”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)による高速参照をサポートします。
アーキテクチャ概要
Section titled “アーキテクチャ概要”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 : 集計軸
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MCostElement.java
関連DBテーブル
Section titled “関連DBテーブル”M_CostElement(原価要素)
Section titled “M_CostElement(原価要素)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_CostElement_ID | ID | PK | 原価要素ID | 主キー |
| AD_Client_ID | TableDirect | Y | クライアント | デフォルト @#AD_Client_ID@ |
| AD_Org_ID | TableDirect | Y | 組織 | beforeSave で 0 に強制 |
| Name | String(60) | Y | 名称 | 識別子 |
| Description | Text(255) | N | 説明 | |
| CostElementType | List(1) | Y | 原価要素タイプ | Material / OutsideProcessing 等 |
| CostingMethod | List(1) | N | 在庫評価方法 | 材料タイプで一意制約 |
| IsCalculated | YesNo | Y | 計算済み | システム計算値かどうか |
| IsActive | YesNo | Y | 有効 | デフォルト Y |
ビジネスロジック
Section titled “ビジネスロジック”beforeSave()
Section titled “beforeSave()”- 在庫評価方法の一意性チェック: タイプが Material または OutsideProcessing で、新規または
CostingMethod変更時、同一クライアント・同一タイプ・同一評価方法の既存レコードを SQL で検索。存在すればAlreadyExistsエラーで保存拒否 - 組織の強制:
AD_Org_ID != 0の場合、常に 0(全組織)へ上書き
beforeDelete()
Section titled “beforeDelete()”材料タイプかつ在庫評価方法が設定されている場合のみチェック:
- クライアントの全会計スキーマ(
MAcctSchema.getClientAcctSchema)を走査し、同じ在庫評価方法を使用するスキーマがあればCannotDeleteUsedで削除拒否 - 品目カテゴリ会計(
M_Product_Category_Acct)に同じ在庫評価方法の設定があれば同様に削除拒否
主要な static ユーティリティ
Section titled “主要な static ユーティリティ”| メソッド | 用途 |
|---|---|
| getMaterialCostElement(ctx, CostingMethod) | 指定評価方法の材料原価要素を取得(無ければ作成) |
| getCostingMethods(po) | 在庫評価方法を持つ原価要素の一覧 |
| getNonCostingMethods(po) | 評価方法を持たない原価要素の一覧 |
| get(ctx, id) | Immutable キャッシュ経由の取得 |
拡張ポイント
Section titled “拡張ポイント”- Model Validator:
M_CostElementのTYPE_BEFORE_NEW/TYPE_BEFORE_CHANGEで独自制約(命名規則・タイプ制限等)を追加できます。コア改変は不要です - Callout: 標準ではこのテーブルにカラム callout は定義されていません
- 独自原価要素: 標準の原価計算エンジン(
MCost/MCostDetail)は原価要素単位で原価を保持するため、独自要素を追加すれば要素別の原価管理が可能です
関連プロセス
Section titled “関連プロセス”リファレンスページ・メニューに直接関連するプロセスは登録されていません。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”原価要素の追加定義や独自の原価集計ロジックは、Model Validator を使えばコア改変なしで安全に拡張できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。