コンテンツにスキップ

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構造の管理(ファントム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(ウィンドウ 354) Product(品目) M_Product 47項目 Alternative Groups(代替グループ) M_BOMAlternative 6項目 Operation(オペレーション) M_ProductOperation 10項目 Operation Resource(オペレーションリソース) M_OperationResource 12項目 BOM M_BOM 11項目 BOM Component(BOM構成部品) M_BOMProduct 17項目

📌 ポイント: Product BOMウィンドウでは、品目に対してBOM構成だけでなくオペレーション(工程)とリソース(設備・人員)も一元管理できます。製造プロセス全体の定義が1つのウィンドウで完結します。

タブ名テーブル役割主な入力項目
品目(Product)M_Product親品目(完成品)の基本情報品目名、品目カテゴリ、BOMフラグ
代替グループ(Alternative Groups)M_BOMAlternativeBOM代替グループの定義グループ名、説明
オペレーション(Operation)M_ProductOperation製造工程の定義工程名、シーケンス
オペレーションリソース(Operation Resource)M_OperationResource各工程に必要なリソースリソース、数量、時間
BOMM_BOMBOMヘッダー(親品目・BOMタイプ等)BOMタイプ、BOM用途、有効期間
BOM構成部品(BOM Component)M_BOMProduct構成部品の定義構成部品、数量、部品タイプ
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[原価ロールアップ実行(任意)]

構成部品追加あり? 検証OK? はい いいえ 品目マスタの確認 BOMフラグが有効か確認 Product BOMウィンドウを開く 品目を選択・表示 BOMタブへ移動 新規BOMヘッダーを作成 BOMタイプ・用途・有効期間 BOM Componentタブへ移動 構成部品を追加 品目・部品タイプ・数量 保存 品目マスタでBOM検証を実行 循環参照・設定エラーを修正 原価ロールアップ実行(任意)

💡 ヒント: BOM検証は品目マスタのボタンから実行します(BOMウィンドウからではありません)。検証を定期的に実行することで、BOM構造の整合性を保てます。

⚠️ 注意: iDempiere 13では M_BOM / M_BOMProduct が標準BOMテーブルです。旧来の PP_Product_BOM / PP_Product_BOMLine とは異なりますので、新規登録は必ず新テーブルを使用してください。

メニューから「製造管理 > 製造管理 > BOM & フォーミュラ」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. BOMヘッダーを入力:
    • 検索キー: BOMの識別子(品目の検索キーと同一にすることを推奨)
    • 名前: BOMの名称
    • 品目: 完成品(親品目)を選択
    • BOMタイプ: 「現行有効(Current Active)」を選択
    • BOM用途: 「マスター(Master)」を選択
  3. 保存」をクリック
  1. BOM明細」タブに移動
  2. 新規」ボタンをクリック
  3. 構成部品情報を入力:
    • 品目: 構成部品を選択
    • 部品タイプ: 「部品(Component)」を選択
    • 数量: 完成品1単位あたりの必要数量を入力
    • 有効開始日 / 有効終了日: 必要に応じて期間を設定
  4. 保存」をクリック
  5. 必要な構成部品をすべて登録

BOM登録後、品目マスタの「BOM検証」ボタンを実行して整合性を確認します:

  1. メニュー「資材管理 > 資材管理 > 品目」から対象品目を開く
  2. BOM検証」ボタンをクリック
  3. 検証項目:
    • 循環参照の検出(品目AがBを含み、BがAを含むケース)
    • 構成部品の存在チェック
    • BOMフラグの整合性チェック
項目名必須説明
検索キー必須文字列BOMの識別子
名前必須文字列BOMの名称
品目必須検索完成品(親品目)
BOMタイプ必須リスト現行有効、受注生産、キット生産 等
BOM用途必須リストマスター、製造、品質 等
有効開始日-日付BOMの有効開始日
有効終了日-日付BOMの有効終了日
項目名必須説明
行番号自動整数明細行の順序
品目必須検索構成部品
部品タイプ必須リスト部品、梱包材、ファントム、副産物 等
数量必須数量完成品1単位あたりの必要数量
スクラップ率-数値製造時の想定ロス率(%)
有効開始日-日付構成部品の有効開始日
有効終了日-日付構成部品の有効終了日(代替部品の切替に使用)
BOMタイプ用途生産伝票での使用
現行有効(Current Active)標準の生産用BOMデフォルトで使用
受注生産(Make-To-Order)受注ごとに生産受注連動で使用
キット生産(Make-To-Kit)キット組立用キット出荷で使用
graph TD
    A[完成品: デスクセット] --> B[天板 x1]
    A --> C[脚部ユニット x1]
    A --> D[ネジセット x1]
    C -->|ファントムBOM| E[脚 x4]
    C -->|ファントムBOM| F[フレーム x1]

ファントムBOM 完成品: デスクセット 天板 x1 脚部ユニット x1 ネジセット x1 脚 x4 フレーム x1

ファントムBOMの場合、生産伝票では「脚部ユニット」は展開され、「脚 x4」と「フレーム x1」が直接明細行に表示されます。

BOMに基づいて完成品の標準原価を計算するプロセスです:

  1. メニュー「製造管理 > 原価管理 > 原価ロールアップ」を開く
  2. 対象の品目カテゴリ・会計スキーマを選択
  3. OK」をクリック
  4. 構成部品の原価を積み上げ、完成品の標準原価が更新される

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 を使用してください。

graph TD
    A[品目マスタ] -->|BOM品目登録| B[BOM登録]
    B -->|構成部品定義| C[BOM明細]
    B -->|BOM検証| D[整合性チェック]
    B -->|原価ロールアップ| E[標準原価計算]
    B -->|明細行作成| F[生産伝票]

BOM品目登録 構成部品定義 BOM検証 原価ロールアップ 明細行作成 品目マスタ BOM登録 BOM明細 整合性チェック 標準原価計算 生産伝票


iDempiereのBOM管理は、製造業の部品構成管理から原価計算までを一元管理できる柔軟な機能を備えています。 製造プロセスの効率化を、オープンソースERPで実現しませんか?

As-Link株式会社では、iDempiereの導入支援・カスタマイズ開発を承っております。

OSS ERP導入サービスの詳細はこちら


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

BOM(部品表)は PP_Product_BOM(ヘッダー)と PP_Product_BOMLine(明細)の2テーブルで構成されます。MPPProductBOM クラス(468行)がBOMヘッダーの管理を、MPPProductBOMLine クラス(420行)が構成部品明細の管理を担います。キャッシュ機構(ImmutablePOSupport)を実装し、頻繁なBOM参照に対して高いパフォーマンスを実現します。

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

+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 +getByProduct(MProduct) List~MPPProductBOMLine~$ +getBOMLines(MProduct) MPPProductBOMLine[]$ +getEstimateQty(BigDecimal) BigDecimal <> <> > X_PP_Product_BOM X_PP_Product_BOM -- > ImmutablePOSupport MPPProductBOM --> MPPProductBOMLine : has many MPPProductBOMLine -- > PO MPPProductBOMLine ..

パッケージ: org.eevolution.model ソースファイル:

  • org.adempiere.base/src/org/eevolution/model/MPPProductBOM.java(468行)
  • org.adempiere.base/src/org/eevolution/model/MPPProductBOMLine.java(420行)
カラム名必須説明備考
PP_Product_BOM_IDIDPKBOM ID主キー
AD_Client_IDTableDirectYクライアント
AD_Org_IDTableDirectY組織組織=0は全組織共通
ValueStringY検索キー品目の検索キーと合わせることを推奨
NameStringY名前
M_Product_IDSearchY品目完成品(親品目)
BOMTypeListYBOMタイプA=現行有効, F=受注生産, K=キット
BOMUseListYBOM用途A=マスター, M=製造, Q=品質
ValidFromDateN有効開始日
ValidToDateN有効終了日
IsActiveYesNoY有効
カラム名必須説明備考
PP_Product_BOMLine_IDIDPKBOM明細ID主キー
PP_Product_BOM_IDTableDirectYBOM FKヘッダーへの参照
LineIntegerY行番号
M_Product_IDSearchY品目構成部品
ComponentTypeListY部品タイプCO=部品, PH=ファントム, PK=梱包材, BY=副産物
QtyBOMQuantityY数量完成品1単位あたりの必要数量
ScrapNumberNスクラップ率製造ロス率(%)
ValidFromDateN有効開始日
ValidToDateN有効終了日
C_UOM_IDTableDirectY数量単位
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"

parent product component product

MPPProductBOM.getDefault(MProduct, String) によるデフォルトBOM取得のロジック:

  1. BOMUse = 'A'(マスター)かつ BOMType = 'A'(現行有効)で検索
  2. 組織固有のBOMが優先(AD_Org_ID DESC でソート)
  3. 組織=0(全組織共通)のBOMがフォールバック
  4. 該当なしの場合は null を返す
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 の場合に true
MPPProductBOM.isProductMakeToOrder(ctx, productId, trxName);

MPPProductBOM.getLines(boolean reload) は BOM明細行をキャッシュ付きで取得します。reload=true でキャッシュを無効化し、最新データを再取得します。

生産伝票の MProduction.isBom(int M_Product_ID) で実行:

  1. M_Product.IsBOM = 'Y' の確認
  2. PP_Product_BOMLine に有効な明細行が存在するか確認
  3. BOMタイプ=現行有効、BOM用途=マスターの条件でフィルタ

MPPProductBOM.isValidFromTo(Timestamp date) で指定日がBOMの有効期間内かどうかを判定します。ValidFrom / ValidTo が未設定の場合は制限なしとして扱います。

MPPProductBOMImmutablePOSupport を実装し、ImmutableIntPOCache でキャッシュされます:

  • キャッシュサイズ: 40エントリ
  • 有効期間: 5分
  • get(int PP_Product_BOM_ID) でキャッシュヒット時は不変コピーを返却
  • getCopy() で更新可能なコピーを取得

拡張ポイント(カスタマイズ箇所)

Section titled “拡張ポイント(カスタマイズ箇所)”

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の取得ロジックを拡張できます。


iDempiereのBOM管理は Model Validator で安全にカスタマイズできます。 独自のBOM検証ルールや原価計算ロジックの追加も、コア改変なしで実現可能です。

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

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