iDempiere 品目カテゴリの使い方|在庫管理 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 在庫管理の全体像: 在庫管理の業務フロー全体図 も合わせてご覧ください。
品目カテゴリは、品目マスタを分類するグルーピングのマスタです。単なる分類にとどまらず、会計スキーマごとの勘定科目テンプレートと在庫移動方針(FIFO / LIFO)・在庫評価方法を保持しており、新規品目登録時の会計設定の初期値を決定します。
📌 ポイント: 品目を登録する前に品目カテゴリを整備してください。品目の会計設定(
M_Product_Acct)はカテゴリの会計タブからコピーされるため、後からカテゴリを直しても既存品目には自動反映されません。
品目カテゴリでできること
Section titled “品目カテゴリでできること”- 品目の分類グループの定義(検索キー・名称)
- 親品目カテゴリによる階層(ツリー)構造の構築
- 在庫移動方針(FIFO / LIFO)の指定
- 会計スキーマごとの在庫評価方法・在庫評価レベルの設定
- 品目資産・売上原価・品目売上など 15 種類以上の勘定科目テンプレートの設定
- 所属品目タブでのカテゴリ配下品目の一覧確認
- 「所属品目勘定科目上書き」ボタンによる配下品目への会計設定一括反映
- 価格表・割引スキーマの条件としてのカテゴリ利用
- 計画マージン % の設定、資産グループ・カラーの紐づけ
- 多言語対応(翻訳タブ)
品目カテゴリは 4 タブ構成です。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| 品目カテゴリ | M_Product_Category | 13項目 | 基本情報・階層・在庫移動方針 |
| 会計 | M_Product_Category_Acct | 21項目 | 会計スキーマ別の勘定科目・在庫評価方法 |
| 所属品目 | M_Product | 12項目 | このカテゴリに属する品目の一覧 |
| 翻訳 | M_Product_Category_Trl | 8項目 | 多言語対応の翻訳 |
💡 ヒント: 「所属品目」タブは参照・軽微な編集用のビューです。品目の詳細設定は品目マスタから行ってください。
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 メニューから開く<br/>在庫管理 > 品目マスタ管理 > 品目カテゴリ"] --> B["➕ 新規ボタンをクリック"]
B --> C["🏷 検索キー・名称を入力<br/>(必須)"]
C --> D{階層構造にする?}
D -->|する| E["🌳 親品目カテゴリを選択<br/>(ループは Callout が検知)"]
D -->|しない| F["📦 在庫移動方針を選択<br/>FIFO / LIFO"]
E --> F
F --> G["💾 保存<br/>→ 会計レコードが自動生成"]
G --> H["📒 会計タブで<br/>在庫評価方法・勘定科目を設定"]
H --> I{既存品目にも<br/>反映する?}
I -->|する| J["🔁 所属品目勘定科目上書き<br/>ボタンを実行"]
I -->|しない| K["✅ 以降の新規品目に適用"]
J --> K
アクセス方法(メニューパス)
Section titled “アクセス方法(メニューパス)”メニューから「在庫管理 > 品目マスタ管理 > 品目カテゴリ」を開きます。
- ツールバーの「新規」ボタンをクリック
- 必須項目を入力:
- 検索キー: カテゴリコード(40文字以内・一意)
- 名称: カテゴリ名(60文字以内)
- 在庫移動方針:
FIFO(先入先出)またはLIFO(後入先出)。既定値はF(FIFO) - 計画マージン %: プロジェクトの計画マージン率
- 必要に応じて任意項目を入力:
- 親品目カテゴリ: 上位カテゴリ(階層化する場合)
- 説明: 補足説明
- デフォルト: 既定カテゴリとして使う場合にチェック
- セルフサービス: セルフサービスからの参照・変更を許可する場合(既定値 Y)
- 資産グループ / カラー: 資産計上・印刷色の指定
- 「保存」をクリック(保存時に会計レコードが自動生成されます)
- 「会計」タブに移動(会計スキーマごとに 1 行が自動生成済み)
- 在庫評価の設定:
- 在庫評価方法: 標準原価・平均原価・先入先出等(未設定時は会計スキーマの既定値を使用)
- 在庫評価レベル: 原価を集計する最小レベル
- 必須の勘定科目を設定:
- 品目資産勘定 / 品目費用勘定 / 原価調整勘定 / 仕入仮勘定
- 売上原価勘定 / 品目売上勘定
- 発注入荷差異勘定(PPV)/ 入荷請求差異勘定(IPV)
- 仕入値引勘定 / 売上値引勘定 / 賃率差異勘定
- 「保存」をクリック
⚠️ 注意: 「在庫評価レベル」を運用開始後に変更すると原価計算の集計単位が変わります。
MProductCategoryAcct.beforeSave()で変更検証が行われますが、既存の原価データへの影響が大きいため、変更は在庫・原価がクリアな時点で行ってください。
既存品目への会計設定の反映
Section titled “既存品目への会計設定の反映”会計タブの「所属品目勘定科目上書き」ボタンを実行すると、選択した品目カテゴリに所属する品目マスタの自動仕訳設定を、カテゴリの設定と同じ内容で上書きします。
項目リファレンス
Section titled “項目リファレンス”品目カテゴリタブ
Section titled “品目カテゴリタブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 検索キー | 必須 | 文字列(40) | カテゴリコード(一意) |
| 名称 | 必須 | 文字列(60) | カテゴリ名 |
| 説明 | - | 文字列(255) | 補足説明 |
| 親品目カテゴリ | - | 選択 | 上位カテゴリ(ループ検出 Callout あり) |
| 在庫移動方針 | 必須 | リスト | F=FIFO / L=LIFO(既定値 F) |
| デフォルト | 必須 | チェック | 既定カテゴリとして使用 |
| セルフサービス | 必須 | チェック | セルフサービス対象(既定値 Y) |
| 計画マージン % | 必須 | 数値 | プロジェクトの計画マージン率 |
| 資産グループ | - | 選択 | 資産計上時の資産グループ |
| カラー | - | 選択 | 印刷・表示用のカラー |
| 有効 | - | チェック | レコードが有効か(既定値 Y) |
会計タブ(主要項目)
Section titled “会計タブ(主要項目)”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 会計スキーマ | 必須 | 選択 | 対象の会計スキーマ |
| 在庫評価方法 | - | リスト | 原価計算方法(未設定時はスキーマ既定) |
| 在庫評価レベル | - | リスト | 原価を集計する最小レベル |
| 品目資産勘定 | 必須 | 勘定科目 | 在庫資産の勘定 |
| 品目費用勘定 | 必須 | 勘定科目 | 品目費用の勘定 |
| 売上原価勘定 | 必須 | 勘定科目 | 売上原価(COGS) |
| 品目売上勘定 | 必須 | 勘定科目 | 品目売上 |
| 仕入仮勘定 | 必須 | 勘定科目 | 入荷時の仮勘定 |
| 発注入荷差異勘定 | 必須 | 勘定科目 | 標準原価と発注価格の差異(PPV) |
| 入荷請求差異勘定 | 必須 | 勘定科目 | 原価と請求価格の差異(IPV) |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 親品目カテゴリを設定したら「ループを検出しました」というエラーになります
Section titled “Q. 親品目カテゴリを設定したら「ループを検出しました」というエラーになります”品目カテゴリの階層に循環参照(A の親が B、B の親が A など)が生じています。MProductCategory.beforeSave() は hasLoopInTree() でツリー全体を走査し、ループを検出すると ProductCategoryLoopDetected メッセージを出力して保存を中止します。親カテゴリの指定を見直してください。
Q. 会計タブの行はどのタイミングで作られますか?
Section titled “Q. 会計タブの行はどのタイミングで作られますか?”新規保存時です。MProductCategory.afterSave() が insert_Accounting("M_Product_Category_Acct", "C_AcctSchema_Default", null) を実行し、既定の会計スキーマ設定をコピーした会計レコードを自動生成します。
Q. カテゴリの会計設定を変更したら、既存品目にも反映されますか?
Section titled “Q. カテゴリの会計設定を変更したら、既存品目にも反映されますか?”自動では反映されません。品目の会計設定(M_Product_Acct)は品目作成時にカテゴリからコピーされる仕組みです。既存品目にも適用したい場合は、会計タブの「所属品目勘定科目上書き」ボタンを実行してください。
Q. 在庫移動方針(FIFO / LIFO)は何に使われますか?
Section titled “Q. 在庫移動方針(FIFO / LIFO)は何に使われますか?”在庫の払い出し順序を決める方針です。MProductCategory.isFiFo() が MMPolicy の値を判定し、出荷・在庫引き当て処理での消費順序に用いられます。既定値は F(FIFO)です。
Q. 在庫評価方法を空欄にするとどうなりますか?
Section titled “Q. 在庫評価方法を空欄にするとどうなりますか?”会計スキーマに設定された既定の在庫評価方法が使用されます。カテゴリ側で明示的に設定した場合のみ、その方法が優先されます。値を設定すると MProductCategoryAcct.checkCosting() が対応する原価要素(MCostElement)を自動生成します。
🛠 技術仕様(開発者向け)
品目カテゴリはマスタデータ型のウィンドウ(AD_Window_ID: 144)で、M_Product_Category テーブル(アクセスレベル 3)に格納されます。MProductCategory クラス(346行)が階層のループ検出と会計レコードの自動生成を担い、MProductCategoryAcct クラス(247行)が会計スキーマ別の勘定科目・原価設定を保持します。両クラスとも markImmutable() を実装しており、キャッシュ経由の不変オブジェクト参照に対応しています。Document 型ではありません。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MProductCategory {
+get(M_Product_Category_ID) MProductCategory
+isCategory(categoryId, productId) boolean
+beforeSave(newRecord) boolean
+afterSave(newRecord, success) boolean
+isFiFo() boolean
+hasLoopInTree() boolean
+markImmutable() MProductCategory
}
class MProductCategoryAcct {
+get(categoryId, acctSchemaId) MProductCategoryAcct
+checkCosting() void
+beforeSave(newRecord) boolean
+afterSave(newRecord, success) boolean
}
class X_M_Product_Category {
<<generated>>
}
class PO {
<<abstract>>
}
class ImmutablePOSupport {
<<interface>>
}
MProductCategory --|> X_M_Product_Category
X_M_Product_Category --|> PO
MProductCategory ..|> ImmutablePOSupport
MProductCategory --> MProductCategoryAcct : has many
MProductCategory --> MProduct : classifies
MProductCategoryAcct --> MCostElement : creates
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MProductCategory.java、org.adempiere.base/src/org/compiere/model/MProductCategoryAcct.java
関連DBテーブル
Section titled “関連DBテーブル”M_Product_Category(品目カテゴリ)
Section titled “M_Product_Category(品目カテゴリ)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_Product_Category_ID | ID | PK | 品目カテゴリID | 主キー |
| AD_Client_ID | Table Direct | Y | クライアント | 既定値 @#AD_Client_ID@ |
| AD_Org_ID | Table Direct | Y | 組織 | 既定値 @#AD_Org_ID@ |
| Value | String(40) | Y | 検索キー | 一意 |
| Name | String(60) | Y | 名称 | 識別子カラム |
| Description | String(255) | N | 説明 | |
| M_Product_Category_Parent_ID | Table | N | 親品目カテゴリ | Callout: CalloutProductCategory.testForLoop |
| MMPolicy | List(1) | Y | 在庫移動方針 | 既定値 F(FIFO) |
| IsDefault | Yes-No | Y | デフォルト | |
| IsSelfService | Yes-No | Y | セルフサービス | 既定値 Y |
| PlannedMargin | Number | Y | 計画マージン % | |
| A_Asset_Group_ID | Table Direct | N | 資産グループ | |
| AD_PrintColor_ID | Table Direct | N | カラー | |
| IsActive | Yes-No | Y | 有効 | 既定値 Y |
M_Product_Category_Acct(品目カテゴリ会計)
Section titled “M_Product_Category_Acct(品目カテゴリ会計)”会計スキーマ(C_AcctSchema_ID)ごとに 1 レコード。主要カラムは在庫評価設定と勘定科目です。
| カラム名 | 型 | 必須 | 説明 |
|---|---|---|---|
| M_Product_Category_ID | Table Direct | PK | 品目カテゴリFK |
| C_AcctSchema_ID | Table Direct | PK | 会計スキーマFK |
| CostingMethod | List | N | 在庫評価方法 |
| CostingLevel | List | N | 在庫評価レベル |
| P_Asset_Acct | Account | Y | 品目資産勘定 |
| P_Expense_Acct | Account | Y | 品目費用勘定 |
| P_COGS_Acct | Account | Y | 売上原価勘定 |
| P_Revenue_Acct | Account | Y | 品目売上勘定 |
| P_InventoryClearing_Acct | Account | Y | 仕入仮勘定 |
| P_CostAdjustment_Acct | Account | Y | 原価調整勘定 |
| P_PurchasePriceVariance_Acct | Account | Y | 発注入荷差異勘定(PPV) |
| P_InvoicePriceVariance_Acct | Account | Y | 入荷請求差異勘定(IPV) |
| P_TradeDiscountRec_Acct | Account | Y | 仕入値引勘定 |
| P_TradeDiscountGrant_Acct | Account | Y | 売上値引勘定 |
| P_RateVariance_Acct | Account | Y | 賃率差異勘定 |
| P_AverageCostVariance_Acct | Account | N | 平均原価差異勘定 |
| P_LandedCostClearing_Acct | Account | N | 荷揚コスト勘定 |
erDiagram
M_Product_Category ||--o{ M_Product_Category_Acct : "accounting by schema"
M_Product_Category ||--o{ M_Product_Category_Trl : "translations"
M_Product_Category ||--o{ M_Product : "classifies"
M_Product_Category ||--o{ M_Product_Category : "parent-child"
M_Product_Category ||--o{ M_DiscountSchemaBreak : "discount condition"
M_Product_Category_Acct }o--|| C_AcctSchema : "schema"
ビジネスロジック
Section titled “ビジネスロジック”beforeSave() — ループ検出
Section titled “beforeSave() — ループ検出”MProductCategory.beforeSave() の処理は 1 点に集約されています。
hasLoopInTree()を呼び出す- ループが検出されたら
Msg.getMsg(getCtx(), "ProductCategoryLoopDetected")をsaveErrorに記録しfalseを返却(保存中止)
hasLoopInTree() は SELECT M_Product_Category_ID, M_Product_Category_Parent_ID FROM M_Product_Category で全カテゴリを読み込み、自レコードについては変更後の親 ID を使ってノード集合を構築します。その後 hasLoop() が親を再帰的にたどり、開始ノードに戻ってきたらループと判定します。SQL 例外時も安全側に倒して true(ループあり)を返します。
💡 ヒント: 親カテゴリの入力時点でも
CalloutProductCategory.testForLoopCallout が動作し、UI 上で即座に警告されます。beforeSave()はその最終防衛線です。
afterSave() — 会計レコードの自動生成
Section titled “afterSave() — 会計レコードの自動生成”if (newRecord && success) insert_Accounting("M_Product_Category_Acct", "C_AcctSchema_Default", null);新規レコードの保存成功時のみ、既定会計スキーマ(C_AcctSchema_Default)の設定を雛形として M_Product_Category_Acct を生成します。
在庫移動方針の判定
Section titled “在庫移動方針の判定”isFiFo() は MMPOLICY_FiFo.equals(getMMPolicy()) を返すだけの単純な判定です。MMPolicy の既定値は F のため、明示的に設定しない限り FIFO として扱われます。
MProductCategoryAcct の検証と原価要素生成
Section titled “MProductCategoryAcct の検証と原価要素生成”| メソッド | 処理 |
|---|---|
beforeSave() | CostingLevel の変更時に検証。null の場合は会計スキーマ(MAcctSchema)の既定レベルで補完して比較 |
afterSave() | checkCosting() を呼び出す |
checkCosting() | CostingMethod が設定されていれば MCostElement.getMaterialCostElement(this, getCostingMethod()) で原価要素を取得・生成 |
カテゴリ判定ユーティリティ
Section titled “カテゴリ判定ユーティリティ”MProductCategory.isCategory(int M_Product_Category_ID, int M_Product_ID) は、指定品目が指定カテゴリに属するかを判定します。割引スキーマの MDiscountSchemaBreak.applies() から、品目カテゴリ条件の照合に利用されています。
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”既存 Callout
Section titled “既存 Callout”| カラム | Callout クラス・メソッド | 用途 |
|---|---|---|
M_Product_Category_Parent_ID | org.compiere.model.CalloutProductCategory.testForLoop | 親カテゴリ指定時のループ検出 |
OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”public class CustomProductCategoryValidator implements ModelValidator { @Override public int modelChange(PO po, int type) throws Exception { if (po instanceof MProductCategory && (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE)) { MProductCategory pc = (MProductCategory) po; // 例: カテゴリコードの命名規則を強制 if (pc.getValue() != null && !pc.getValue().matches("[A-Z]{3}-\\d{2}")) { throw new AdempiereException("カテゴリコードは「ABC-01」形式で入力してください"); } } return null; }}会計設定の一括展開
Section titled “会計設定の一括展開”カテゴリ会計の変更を配下品目へ展開する処理は、標準では会計タブの「所属品目勘定科目上書き」ボタン(Processing カラム)から実行します。展開条件を業務要件に合わせて絞りたい場合は、M_Product_Acct を操作する独自プロセスを OSGi プラグインとして追加し、メニューまたはボタンに割り当てる方式が安全です。
関連プロセス
Section titled “関連プロセス”| プロセス名 | 起動場所 | 説明 |
|---|---|---|
| 所属品目勘定科目上書き | 会計タブの Processing ボタン | 選択した品目カテゴリに所属する品目マスタの自動仕訳設定を、品目カテゴリの設定と同じになるよう上書き修正 |
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”品目カテゴリは会計設定・原価計算・価格戦略が交差する要のマスタです。カテゴリ体系の設計と勘定科目テンプレートの整備は、導入初期に固めておくほど後工程が楽になります。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。