iDempiere BOM(部品表)の使い方|製造管理 操作マニュアル・技術仕様
📖 製造管理の全体像: 製造管理の業務フロー全体図 も合わせてご覧ください。
BOM(Bill of Materials / 部品表)は、完成品を製造するために必要な構成部品の一覧を定義する機能です。iDempiereでは PP_Product_BOM テーブルでBOMヘッダーを、PP_Product_BOMLine テーブルで構成部品明細を管理します。
BOMは生産伝票の明細行自動展開や、原価計算(原価ロールアップ)の基礎データとして利用されます。1つの品目に対して複数のBOMを登録でき、BOMタイプやBOM用途で使い分けます。
📌 ポイント: iDempiereのBOM管理は「Product BOM」ウィンドウで行いますが、内部的にはADウィンドウID=354の品目(M_Product)を親タブに持つ構造です。品目マスタの拡張としてBOM・オペレーション・代替グループが管理されます。
BOMでできること
Section titled “BOMでできること”- 完成品に対する構成部品(原材料・中間組立品)の定義
- 多階層BOM構造の管理(ファントムBOMによる自動展開)
- BOMタイプによる用途別管理(現行有効、受注生産、キット生産等)
- BOM検証(構成部品の循環参照チェック)
- 原価ロールアップ(構成部品原価の積み上げ計算)
- 構成部品の有効期間管理
graph TD
subgraph "Product BOM(ウィンドウ 354)"
T1["📦 Product(品目)<br/>M_Product<br/>47項目"]
T2["🔀 Alternative Groups(代替グループ)<br/>M_BOMAlternative<br/>6項目"]
T3["⚙️ Operation(オペレーション)<br/>M_ProductOperation<br/>10項目"]
T4["🔧 Operation Resource(オペレーションリソース)<br/>M_OperationResource<br/>12項目"]
T5["📋 BOM<br/>M_BOM<br/>11項目"]
T6["🧩 BOM Component(BOM構成部品)<br/>M_BOMProduct<br/>17項目"]
end
T1 --> T2
T1 --> T3
T3 --> T4
T1 --> T5
T5 --> T6
📌 ポイント: Product BOMウィンドウでは、品目に対してBOM構成だけでなくオペレーション(工程)とリソース(設備・人員)も一元管理できます。製造プロセス全体の定義が1つのウィンドウで完結します。
| タブ名 | テーブル | 役割 | 主な入力項目 |
|---|---|---|---|
| 品目(Product) | M_Product | 親品目(完成品)の基本情報 | 品目名、品目カテゴリ、BOMフラグ |
| 代替グループ(Alternative Groups) | M_BOMAlternative | BOM代替グループの定義 | グループ名、説明 |
| オペレーション(Operation) | M_ProductOperation | 製造工程の定義 | 工程名、シーケンス |
| オペレーションリソース(Operation Resource) | M_OperationResource | 各工程に必要なリソース | リソース、数量、時間 |
| BOM | M_BOM | BOMヘッダー(親品目・BOMタイプ等) | BOMタイプ、BOM用途、有効期間 |
| BOM構成部品(BOM Component) | M_BOMProduct | 構成部品の定義 | 構成部品、数量、部品タイプ |
BOM登録の操作フロー
Section titled “BOM登録の操作フロー”graph TD
A[品目マスタの確認<br/>BOMフラグが有効か確認] --> B[Product BOMウィンドウを開く]
B --> C[品目を選択・表示]
C --> D[BOMタブへ移動]
D --> E[新規BOMヘッダーを作成<br/>BOMタイプ・用途・有効期間]
E --> F[BOM Componentタブへ移動]
F --> G[構成部品を追加<br/>品目・部品タイプ・数量]
G --> H{構成部品追加あり?}
H -->|はい| G
H -->|いいえ| I[保存]
I --> J[品目マスタでBOM検証を実行]
J --> K{検証OK?}
K -->|NG| L[循環参照・設定エラーを修正]
L --> G
K -->|OK| M[原価ロールアップ実行(任意)]
💡 ヒント: BOM検証は品目マスタのボタンから実行します(BOMウィンドウからではありません)。検証を定期的に実行することで、BOM構造の整合性を保てます。
⚠️ 注意: iDempiere 13では
M_BOM/M_BOMProductが標準BOMテーブルです。旧来のPP_Product_BOM/PP_Product_BOMLineとは異なりますので、新規登録は必ず新テーブルを使用してください。
BOMの基本操作手順
Section titled “BOMの基本操作手順”アクセス方法
Section titled “アクセス方法”メニューから「製造管理 > 製造管理 > BOM & フォーミュラ」を開きます。
BOMの新規登録
Section titled “BOMの新規登録”- ツールバーの「新規」ボタンをクリック
- BOMヘッダーを入力:
- 検索キー: BOMの識別子(品目の検索キーと同一にすることを推奨)
- 名前: BOMの名称
- 品目: 完成品(親品目)を選択
- BOMタイプ: 「現行有効(Current Active)」を選択
- BOM用途: 「マスター(Master)」を選択
- 「保存」をクリック
構成部品の登録
Section titled “構成部品の登録”- 「BOM明細」タブに移動
- 「新規」ボタンをクリック
- 構成部品情報を入力:
- 品目: 構成部品を選択
- 部品タイプ: 「部品(Component)」を選択
- 数量: 完成品1単位あたりの必要数量を入力
- 有効開始日 / 有効終了日: 必要に応じて期間を設定
- 「保存」をクリック
- 必要な構成部品をすべて登録
BOM登録後、品目マスタの「BOM検証」ボタンを実行して整合性を確認します:
- メニュー「資材管理 > 資材管理 > 品目」から対象品目を開く
- 「BOM検証」ボタンをクリック
- 検証項目:
- 循環参照の検出(品目AがBを含み、BがAを含むケース)
- 構成部品の存在チェック
- BOMフラグの整合性チェック
項目リファレンス
Section titled “項目リファレンス”BOMタブ(ヘッダー)
Section titled “BOMタブ(ヘッダー)”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 検索キー | 必須 | 文字列 | BOMの識別子 |
| 名前 | 必須 | 文字列 | BOMの名称 |
| 品目 | 必須 | 検索 | 完成品(親品目) |
| BOMタイプ | 必須 | リスト | 現行有効、受注生産、キット生産 等 |
| BOM用途 | 必須 | リスト | マスター、製造、品質 等 |
| 有効開始日 | - | 日付 | BOMの有効開始日 |
| 有効終了日 | - | 日付 | BOMの有効終了日 |
BOM明細タブ
Section titled “BOM明細タブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 行番号 | 自動 | 整数 | 明細行の順序 |
| 品目 | 必須 | 検索 | 構成部品 |
| 部品タイプ | 必須 | リスト | 部品、梱包材、ファントム、副産物 等 |
| 数量 | 必須 | 数量 | 完成品1単位あたりの必要数量 |
| スクラップ率 | - | 数値 | 製造時の想定ロス率(%) |
| 有効開始日 | - | 日付 | 構成部品の有効開始日 |
| 有効終了日 | - | 日付 | 構成部品の有効終了日(代替部品の切替に使用) |
BOMタイプ一覧
Section titled “BOMタイプ一覧”| BOMタイプ | 用途 | 生産伝票での使用 |
|---|---|---|
| 現行有効(Current Active) | 標準の生産用BOM | デフォルトで使用 |
| 受注生産(Make-To-Order) | 受注ごとに生産 | 受注連動で使用 |
| キット生産(Make-To-Kit) | キット組立用 | キット出荷で使用 |
BOM構造の例
Section titled “BOM構造の例”graph TD
A[完成品: デスクセット] --> B[天板 x1]
A --> C[脚部ユニット x1]
A --> D[ネジセット x1]
C -->|ファントムBOM| E[脚 x4]
C -->|ファントムBOM| F[フレーム x1]
ファントムBOMの場合、生産伝票では「脚部ユニット」は展開され、「脚 x4」と「フレーム x1」が直接明細行に表示されます。
原価ロールアップ
Section titled “原価ロールアップ”BOMに基づいて完成品の標準原価を計算するプロセスです:
- メニュー「製造管理 > 原価管理 > 原価ロールアップ」を開く
- 対象の品目カテゴリ・会計スキーマを選択
- 「OK」をクリック
- 構成部品の原価を積み上げ、完成品の標準原価が更新される
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 1つの品目に複数のBOMを登録できますか?
Section titled “Q. 1つの品目に複数のBOMを登録できますか?”はい、可能です。BOMタイプやBOM用途を変えて複数登録できます。生産伝票ではデフォルトBOM(BOMタイプ=現行有効、BOM用途=マスター)が自動選択されますが、明示的に別のBOMを指定することもできます。
Q. 構成部品を途中で変更するには?
Section titled “Q. 構成部品を途中で変更するには?”有効期間を使います。旧部品の「有効終了日」を設定し、新部品の「有効開始日」を設定することで、切替日を境に構成部品を自動的に切り替えられます。
Q. レガシーBOM(M_Product_BOM)との違いは?
Section titled “Q. レガシーBOM(M_Product_BOM)との違いは?”iDempiere 13では PP_Product_BOM / PP_Product_BOMLine が標準BOMテーブルです。旧テーブル M_Product_BOM はレガシー互換のため残っていますが、新規登録には PP_Product_BOM を使用してください。
業務フロー上の位置づけ
Section titled “業務フロー上の位置づけ”graph TD
A[品目マスタ] -->|BOM品目登録| B[BOM登録]
B -->|構成部品定義| C[BOM明細]
B -->|BOM検証| D[整合性チェック]
B -->|原価ロールアップ| E[標準原価計算]
B -->|明細行作成| F[生産伝票]
関連する仕様書
Section titled “関連する仕様書”OSS ERP導入についてのご相談
Section titled “OSS ERP導入についてのご相談”iDempiereのBOM管理は、製造業の部品構成管理から原価計算までを一元管理できる柔軟な機能を備えています。 製造プロセスの効率化を、オープンソースERPで実現しませんか?
As-Link株式会社では、iDempiereの導入支援・カスタマイズ開発を承っております。
🛠 技術仕様(開発者向け)
BOM(部品表)は PP_Product_BOM(ヘッダー)と PP_Product_BOMLine(明細)の2テーブルで構成されます。MPPProductBOM クラス(468行)がBOMヘッダーの管理を、MPPProductBOMLine クラス(420行)が構成部品明細の管理を担います。キャッシュ機構(ImmutablePOSupport)を実装し、頻繁なBOM参照に対して高いパフォーマンスを実現します。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MPPProductBOM {
+get(int) MPPProductBOM$
+getDefault(MProduct, String) MPPProductBOM$
+getProductBOMs(MProduct) List~MPPProductBOM~$
+isProductMakeToOrder(Properties, int, String) boolean$
+getBOMSearchKey(MProduct) int$
+getLines(boolean) MPPProductBOMLine[]
+isValidFromTo(Timestamp) boolean
}
class MPPProductBOMLine {
+getByProduct(MProduct) List~MPPProductBOMLine~$
+getBOMLines(MProduct) MPPProductBOMLine[]$
+getEstimateQty(BigDecimal) BigDecimal
}
class X_PP_Product_BOM {
<<generated>>
}
class X_PP_Product_BOMLine {
<<generated>>
}
class ImmutablePOSupport {
<<interface>>
}
MPPProductBOM --|> X_PP_Product_BOM
X_PP_Product_BOM --|> PO
MPPProductBOM ..|> ImmutablePOSupport
MPPProductBOM --> MPPProductBOMLine : has many
MPPProductBOMLine --|> X_PP_Product_BOMLine
X_PP_Product_BOMLine --|> PO
MPPProductBOMLine ..|> ImmutablePOSupport
パッケージ: org.eevolution.model
ソースファイル:
org.adempiere.base/src/org/eevolution/model/MPPProductBOM.java(468行)org.adempiere.base/src/org/eevolution/model/MPPProductBOMLine.java(420行)
関連DBテーブル
Section titled “関連DBテーブル”PP_Product_BOM(BOMヘッダー)
Section titled “PP_Product_BOM(BOMヘッダー)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| PP_Product_BOM_ID | ID | PK | BOM ID | 主キー |
| AD_Client_ID | TableDirect | Y | クライアント | |
| AD_Org_ID | TableDirect | Y | 組織 | 組織=0は全組織共通 |
| Value | String | Y | 検索キー | 品目の検索キーと合わせることを推奨 |
| Name | String | Y | 名前 | |
| M_Product_ID | Search | Y | 品目 | 完成品(親品目) |
| BOMType | List | Y | BOMタイプ | A=現行有効, F=受注生産, K=キット |
| BOMUse | List | Y | BOM用途 | A=マスター, M=製造, Q=品質 |
| ValidFrom | Date | N | 有効開始日 | |
| ValidTo | Date | N | 有効終了日 | |
| IsActive | YesNo | Y | 有効 |
PP_Product_BOMLine(BOM明細)
Section titled “PP_Product_BOMLine(BOM明細)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| PP_Product_BOMLine_ID | ID | PK | BOM明細ID | 主キー |
| PP_Product_BOM_ID | TableDirect | Y | BOM FK | ヘッダーへの参照 |
| Line | Integer | Y | 行番号 | |
| M_Product_ID | Search | Y | 品目 | 構成部品 |
| ComponentType | List | Y | 部品タイプ | CO=部品, PH=ファントム, PK=梱包材, BY=副産物 |
| QtyBOM | Quantity | Y | 数量 | 完成品1単位あたりの必要数量 |
| Scrap | Number | N | スクラップ率 | 製造ロス率(%) |
| ValidFrom | Date | N | 有効開始日 | |
| ValidTo | Date | N | 有効終了日 | |
| C_UOM_ID | TableDirect | Y | 数量単位 |
erDiagram
PP_Product_BOM ||--o{ PP_Product_BOMLine : "has"
PP_Product_BOM }o--|| M_Product : "parent product"
PP_Product_BOMLine }o--|| M_Product : "component product"
PP_Product_BOMLine }o--|| C_UOM : "references"
M_Production }o--o| PP_Product_BOM : "uses"
ビジネスロジック
Section titled “ビジネスロジック”BOM取得の優先順位
Section titled “BOM取得の優先順位”MPPProductBOM.getDefault(MProduct, String) によるデフォルトBOM取得のロジック:
BOMUse = 'A'(マスター)かつBOMType = 'A'(現行有効)で検索- 組織固有のBOMが優先(
AD_Org_ID DESCでソート) - 組織=0(全組織共通)のBOMがフォールバック
- 該当なしの場合は
nullを返す
BOMタイプによる動作の違い
Section titled “BOMタイプによる動作の違い”| BOMタイプ | 定数 | 生産伝票での動作 |
|---|---|---|
| 現行有効(Current Active) | BOMTYPE_CurrentActive = "A" | デフォルトBOMとして使用 |
| 受注生産(Make-To-Order) | BOMTYPE_Make_To_Order = "F" | 受注伝票から生産指図生成時に使用 |
| キット生産(Make-To-Kit) | BOMTYPE_Make_To_Kit = "K" | キット出荷時に使用 |
isProductMakeToOrder() - 受注生産判定
Section titled “isProductMakeToOrder() - 受注生産判定”// BOMType が Make-To-Order または Make-To-Kit、// かつ BOMUse が Manufacturing の場合に trueMPPProductBOM.isProductMakeToOrder(ctx, productId, trxName);getLines() - BOM明細取得
Section titled “getLines() - BOM明細取得”MPPProductBOM.getLines(boolean reload) は BOM明細行をキャッシュ付きで取得します。reload=true でキャッシュを無効化し、最新データを再取得します。
BOM検証(生産伝票側)
Section titled “BOM検証(生産伝票側)”生産伝票の MProduction.isBom(int M_Product_ID) で実行:
M_Product.IsBOM = 'Y'の確認PP_Product_BOMLineに有効な明細行が存在するか確認- BOMタイプ=現行有効、BOM用途=マスターの条件でフィルタ
有効期間チェック
Section titled “有効期間チェック”MPPProductBOM.isValidFromTo(Timestamp date) で指定日がBOMの有効期間内かどうかを判定します。ValidFrom / ValidTo が未設定の場合は制限なしとして扱います。
キャッシュ機構
Section titled “キャッシュ機構”MPPProductBOM は ImmutablePOSupport を実装し、ImmutableIntPOCache でキャッシュされます:
- キャッシュサイズ: 40エントリ
- 有効期間: 5分
get(int PP_Product_BOM_ID)でキャッシュヒット時は不変コピーを返却getCopy()で更新可能なコピーを取得
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”BOMの保存時に独自バリデーションを追加する方法:
public class CustomBOMValidator implements ModelValidator { @Override public int modelChange(PO po, int type) throws Exception { if (po instanceof MPPProductBOM) { MPPProductBOM bom = (MPPProductBOM) po; if (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE) { // 例: BOM検索キーと品目検索キーの一致チェック MProduct product = MProduct.get( bom.getCtx(), bom.getM_Product_ID()); if (!bom.getValue().equals(product.getValue())) { log.warning("BOM検索キーが品目検索キーと" + "一致しません: " + bom.getValue()); } } } if (po instanceof MPPProductBOMLine) { MPPProductBOMLine line = (MPPProductBOMLine) po; if (type == TYPE_BEFORE_NEW) { // 例: 循環参照の簡易チェック MPPProductBOM bom = MPPProductBOM.get( line.getPP_Product_BOM_ID()); if (bom != null && bom.getM_Product_ID() == line.getM_Product_ID()) { throw new AdempiereException( "構成部品に親品目自身を指定できません"); } } } return null; }}OSGi サービスファクトリによるBOMロジック拡張
Section titled “OSGi サービスファクトリによるBOMロジック拡張”IProductBOM インターフェースを実装し、OSGi Service Ranking でデフォルト実装を上書きする方法でBOMの取得ロジックを拡張できます。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”iDempiereのBOM管理は Model Validator で安全にカスタマイズできます。 独自のBOM検証ルールや原価計算ロジックの追加も、コア改変なしで実現可能です。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。