コンテンツにスキップ

iDempiere 生産伝票の使い方|製造管理 操作マニュアル・技術仕様

📖 製造管理の全体像: 製造管理の業務フロー全体図 も合わせてご覧ください。

生産伝票は、iDempiereの製造管理における中核機能です。BOM(部品表)に基づいて構成部品を消費し、完成品を入庫する一連の生産プロセスを管理します。

生産伝票は単一レベル生産を実現するためのシンプルな仕組みで、製造指図(Manufacturing Order)よりも軽量に運用できます。BOMに登録された構成部品が自動展開され、完了処理により在庫トランザクションが生成されます。

📌 ポイント: 生産伝票(M_Production)はシンプルな単一レベル生産向けです。複数工程・リソース管理・作業指示が必要な場合はManufacturing Order(PP_Order)の使用を検討してください。

  • BOMに基づく構成部品の自動展開(明細行の自動作成)
  • 完成品の入庫と構成部品の出庫を同時処理
  • ファントムBOM(中間組立品)の自動展開
  • 生産計画(Production Plan)による複数品目の一括生産
  • 原価差異のチェック(標準原価との差異検証)
graph TD
    subgraph "Production(ウィンドウ 191)"
        T1["🏭 Production Header(生産ヘッダー)<br/>M_Production<br/>20項目"]
        T2["📋 Production Plan(生産計画)<br/>M_ProductionPlan<br/>9項目"]
        T3["📝 Production Line(生産明細)<br/>M_ProductionLine<br/>12項目"]
    end
    T1 --> T2
    T2 --> T3

Production(ウィンドウ 191) Production Header(生産ヘッダー) M_Production 20項目 Production Plan(生産計画) M_ProductionPlan 9項目 Production Line(生産明細) M_ProductionLine 12項目

📌 ポイント: 生産計画(Production Plan)タブは複数の完成品を1つの生産伝票で処理する場合に使用します。単品の生産であれば、ヘッダーで品目を直接指定するシンプルな運用が可能です。

タブ名テーブル役割主な入力項目
生産ヘッダー(Production Header)M_Productionヘッダー情報(品目・数量・日付等)品目、生産数量、移動日付、保管場所
生産計画(Production Plan)M_ProductionPlan複数品目の生産計画(オプション)品目、計画数量
生産明細(Production Line)M_ProductionLine構成部品と完成品の明細行品目、使用数量、保管場所
graph TD
    A[BOM登録済みの品目を確認] --> B[生産ウィンドウを開く]
    B --> C[新規ボタンをクリック]
    C --> D[完成品・生産数量・<br/>移動日付・保管場所を入力して保存]
    D --> E[明細行作成ボタンをクリック<br/>BOM自動展開]
    E --> F[生産明細タブで<br/>数量・保管場所を確認・修正]
    F --> G{修正あり?}
    G -->|はい| F
    G -->|いいえ| H[伝票処理 → 完了を実行]
    H --> I[完成品の在庫増加]
    H --> J[構成部品の在庫減少]

修正あり? はい いいえ BOM登録済みの品目を確認 生産ウィンドウを開く 新規ボタンをクリック 完成品・生産数量・ 移動日付・保管場所を入力して保存 明細行作成ボタンをクリック BOM自動展開 生産明細タブで 数量・保管場所を確認・修正 伝票処理 → 完了を実行 完成品の在庫増加 構成部品の在庫減少

💡 ヒント: 「明細行作成」ボタンを複数回クリックすると明細行が重複して作成されます。必ず1回だけクリックし、結果を確認してから保管場所や数量を修正してください。

⚠️ 注意: 完了処理の前に構成部品の在庫が十分にあることを確認してください。在庫不足のまま完了処理を実行すると、在庫がマイナスになる可能性があります(マイナス在庫の許可設定による)。

メニューから「製造管理 > 製造管理 > 生産」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. ヘッダー情報を入力:
    • 品目: 生産する完成品を選択(BOM登録済みの品目)
    • 生産数量: 生産する数量を入力
    • 移動日付: 生産日を入力(デフォルト: 当日)
    • 保管場所: 完成品の入庫先保管場所を選択
    • 伝票タイプ: 「生産」を選択
  3. 保存」をクリック
  1. ヘッダー保存後、「明細行作成」ボタンをクリック
  2. BOMに登録された構成部品が自動展開され、明細行が作成される
  3. 完成品行(IsEndProduct=Y)と構成部品行が生成される
  4. 必要に応じて使用数量・保管場所を修正
  1. 生産」タブ(ヘッダー)に戻る
  2. 伝票処理」ボタンをクリック
  3. アクション「完了(Complete)」を選択
  4. OK」をクリック

完了処理により以下が自動実行されます:

  • 完成品の在庫増加(入庫トランザクション)
  • 構成部品の在庫減少(出庫トランザクション)
  • 伝票ステータスが「完了」に変更
項目名必須説明
伝票番号自動文字列生産伝票番号(自動採番)
伝票タイプ必須選択生産伝票の種類
移動日付必須日付生産実施日(デフォルト: 当日)
品目必須検索生産する完成品(BOM品目)
生産数量必須数量生産する数量
保管場所必須選択完成品の入庫先保管場所
BOM-選択使用するBOM(未指定時はデフォルトBOM)
伝票状態自動リスト起案、進行中、完了、取消 等
項目名必須説明
品目必須検索構成部品または完成品
移動数量-数量完成品の入庫数量(正値)
使用数量-数量構成部品の消費数量
計画数量自動数量BOMから計算された計画数量
保管場所必須選択品目の入出庫先保管場所
完成品フラグ自動チェック完成品行かどうか
stateDiagram-v2
    [*] --> 起案: 新規作成
    起案 --> 進行中: prepareIt()
    進行中 --> 完了: completeIt()
    完了 --> クローズ: closeIt()
    完了 --> 取消: voidIt()
    起案 --> 無効: voidIt()

*

ステータス説明
起案(Drafted)入力中。在庫変動なし
進行中(InProgress)準備完了。BOM・原価の検証済み
完了(Completed)生産完了。在庫トランザクション発行済み
取消(Voided)取消。在庫トランザクションが逆仕訳される

Q. 明細行作成でエラーが出る場合は?

Section titled “Q. 明細行作成でエラーが出る場合は?”
エラー原因対処法
「Non Bill Of Materials」品目にBOMフラグが設定されていない品目マスタでBOMフラグをチェック
「no BOM Components」BOM明細行が未登録BOMウィンドウで構成部品を登録
「Excessive difference in standard costs」標準原価の差異が大きい原価要素を確認し、原価ロールアップを実行

Q. ファントムBOMとは何ですか?

Section titled “Q. ファントムBOMとは何ですか?”

ファントムBOMは中間組立品を表します。生産伝票の明細行作成時に、ファントム品目は自動的に展開され、その構成部品が直接明細行に追加されます。ファントム品目自体の在庫移動は発生しません。

Q. 生産計画は何に使いますか?

Section titled “Q. 生産計画は何に使いますか?”

生産計画(Production Plan)タブを使うと、1つの生産伝票で複数の完成品を同時に生産できます。「生産計画使用」フラグをオンにすると、ヘッダーの品目ではなく生産計画タブの品目ごとに明細行が展開されます。

graph TD
    A[BOM登録] -->|構成部品定義| B[生産伝票]
    B -->|明細行作成| C[BOM展開]
    C -->|完了処理| D[在庫トランザクション]
    D --> E[完成品入庫]
    D --> F[構成部品出庫]

構成部品定義 明細行作成 完了処理 BOM登録 生産伝票 BOM展開 在庫トランザクション 完成品入庫 構成部品出庫


iDempiereの生産管理は、BOMに基づく部品展開から在庫トランザクションまでを一元管理できる柔軟な機能を備えています。 製造業の生産プロセスを、オープンソースERPで効率化しませんか?

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

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


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

生産伝票は Document 型の伝票で、M_Production テーブルに格納されます。MProduction クラス(1,100行)が中核ビジネスロジックを担い、DocAction インターフェースを実装しています。BOMに基づく構成部品の自動展開(createLines)と、完了処理時の在庫トランザクション生成(completeIt)が主要機能です。

classDiagram
    class MProduction {
        +prepareIt() String
        +completeIt() String
        +voidIt() boolean
        +closeIt() boolean
        +createLines(boolean) int
        +createLines(boolean, int) int
        #createLines(boolean, MProduct, BigDecimal, int) int
        +validateEndProduct(int) String
        #isBom(int) String
    }
    class X_M_Production {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    class DocAction {
        <<interface>>
    }
    MProduction --|> X_M_Production
    X_M_Production --|> PO
    MProduction ..|> DocAction
    MProduction --> MProductionLine : has many
    MProduction --> MProductionPlan : has many (optional)
    MProductionLine --> MProductionLineMA : has many

+prepareIt() String +completeIt() String +voidIt() boolean +closeIt() boolean +createLines(boolean) int +createLines(boolean, int) int #createLines(boolean, MProduct, BigDecimal, int) int +validateEndProduct(int) String #isBom(int) String <> <> <> > X_M_Production X_M_Production --

パッケージ: org.compiere.model ソースファイル: org.adempiere.base/src/org/compiere/model/MProduction.java(1,100行) 明細クラス: org.adempiere.base/src/org/compiere/model/MProductionLine.java(522行)

カラム名必須説明備考
M_Production_IDIDPK生産ID主キー
AD_Client_IDTableDirectYクライアント
AD_Org_IDTableDirectY組織
DocumentNoStringY伝票番号
C_DocType_IDTableDirectY伝票タイプ
DocStatusListY伝票状態DR/IP/CO/CL/VO
DocActionButtonY伝票アクション
MovementDateDateY移動日付生産実施日
M_Product_IDSearchN品目完成品
ProductionQtyQuantityY生産数量
M_Locator_IDTableDirectY保管場所完成品の入庫先
PP_Product_BOM_IDTableDirectNBOM使用するBOM
IsCreatedListY作成済みY=明細行作成済
IsUseProductionPlanYesNoY生産計画使用
ProcessedYesNoY処理済み
カラム名必須説明
M_ProductionLine_IDIDPK明細ID
M_Production_IDTableDirectYヘッダーFK
M_ProductionPlan_IDTableDirectN生産計画FK
LineIntegerY行番号
M_Product_IDSearchY品目
MovementQtyQuantityY移動数量(完成品は正、部品は負)
QtyUsedQuantityN使用数量
PlannedQtyQuantityY計画数量
M_Locator_IDTableDirectY保管場所
IsEndProductYesNoY完成品フラグ
erDiagram
    M_Production ||--o{ M_ProductionLine : "has"
    M_Production ||--o{ M_ProductionPlan : "has (optional)"
    M_ProductionPlan ||--o{ M_ProductionLine : "has"
    M_Production }o--|| C_DocType : "references"
    M_Production }o--|| M_Product : "references"
    M_Production }o--|| M_Locator : "references"
    M_Production }o--o| PP_Product_BOM : "references"
    M_ProductionLine }o--|| M_Product : "references"
    M_ProductionLine ||--o{ M_ProductionLineMA : "has"
    M_ProductionLine }o--|| M_Locator : "references"

has (optional)

MProduction.createLines(boolean mustBeStocked, int PP_Product_BOM_ID) がBOM展開の起点です。

  1. 完成品の MProductionLine(IsEndProduct=Y)を作成(移動数量=生産数量)
  2. PP_Product_BOMLine から構成部品を取得
  3. 各構成部品について:
    • ファントムBOM品目: 再帰的に createLines() を呼び出し展開
    • 通常品目: 消費用の MProductionLine を作成(使用数量=BOM数量 x 生産数量)
  4. 在庫不足チェック(mustBeStocked=true の場合)
  1. ModelValidator.TIMING_BEFORE_PREPARE イベント発火
  2. 会計期間のオープンチェック(MPeriod.testPeriodOpen
  3. バックデート取引の許可チェック(MAcctSchema.testBackDateTrxAllowed
  4. 明細行作成済みチェック(IsCreated='Y' が必須)
  5. 完成品のBOM検証(validateEndProduct):
    • BOMフラグの確認
    • BOM明細行の存在確認
    • 標準原価差異のチェック
  6. ModelValidator.TIMING_AFTER_PREPARE イベント発火
  1. ModelValidator.TIMING_BEFORE_COMPLETE イベント発火
  2. 完成品行の存在チェック(isHaveEndProduct
  3. 各明細行の在庫トランザクション処理(processLines):
    • 完成品: 入庫(M_Transaction の正値)
    • 構成部品: 出庫(M_Transaction の負値)
    • MProductionLineMA による属性セット・ロット管理
  4. 生産計画使用時は計画単位で処理
  5. ModelValidator.TIMING_AFTER_COMPLETE イベント発火

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

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

生産伝票に独自バリデーションや後処理を追加する方法:

public class CustomProductionValidator implements ModelValidator {
@Override
public String docValidate(PO po, int timing) {
if (po instanceof MProduction) {
MProduction production = (MProduction) po;
if (timing == TIMING_BEFORE_COMPLETE) {
// 例: 生産数量の上限チェック
if (production.getProductionQty().compareTo(
new BigDecimal("1000")) > 0) {
return "生産数量が上限を超えています";
}
}
if (timing == TIMING_AFTER_COMPLETE) {
// 例: 生産完了後の通知処理
sendProductionNotification(production);
}
}
return null;
}
}

IColumnCallout によるフィールド連動

Section titled “IColumnCallout によるフィールド連動”
public class ProductionCallout implements IColumnCallout {
@Override
public String start(Properties ctx, int WindowNo,
GridTab mTab, GridField mField, Object value,
Object oldValue) {
// 例: 品目変更時にデフォルトBOMを自動セット
if ("M_Product_ID".equals(mField.getColumnName())) {
int productId = (Integer) value;
MProduct product = MProduct.get(ctx, productId);
MPPProductBOM bom = MPPProductBOM.getDefault(
product, null);
if (bom != null) {
mTab.setValue("PP_Product_BOM_ID",
bom.getPP_Product_BOM_ID());
}
}
return "";
}
}

iDempiereの生産伝票は Model Validator や Callout で安全にカスタマイズできます。 BOM展開ロジックの拡張や、生産完了後の後処理追加もコア改変なしで実現可能です。

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

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