コンテンツにスキップ

iDempiere 発注伝票の使い方|購買管理 操作マニュアル・技術仕様

発注伝票は、仕入先への発注を管理する伝票です。受注伝票と同じ C_Order テーブルを使用しますが、伝票タイプ(IsSOTrx=N)で購買側として区別されます。発注伝票から入荷伝票や仕入請求書を生成できます。

  • 仕入先への発注情報(品目・数量・価格・納期)の登録・管理
  • 購買依頼(Requisition)からの自動生成
  • 受注伝票からの連動発注(受注連動発注)
  • 入荷伝票・仕入請求書の生成の起点
  • 発注-入荷-請求の3方マッチング
  • 仕入諸掛(Landed Cost)の管理

🖥️ インタラクティブ画面レイアウト: AD メタデータから自動生成した 発注伝票の全タブ・全フィールド レイアウト(HTML版) で、実際の画面配置をご確認いただけます。

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

画面レイアウト(ヘッダータブ)

Section titled “画面レイアウト(ヘッダータブ)”
┌─ 発注伝票(Purchase Order)──────────────────────────────────────────────┐
│ │
│ クライアント [▼ Table Direct] 組織 [▼ Table Direct] │
│ 伝票番号 [________________] 注文参照 [________________] │
│ 説明 [_______________________________________________] │
│ │
│ ── 伝票タイプ・日付 ────────────────────────────────────────────────── │
│ 対象伝票タイプ [▼ Table] │
│ 注文日付 [📅 Date] 納品予定日 [📅 Date] │
│ │
│ ── 仕入先情報 ──────────────────────────────────────────────────────── │
│ 取引先(仕入先) [🔍 Search] 請求先 [🔍 Search] │
│ 取引先住所 [▼ Table Direct] 請求先住所 [▼ Table] │
│ 担当者 [▼ Table Direct] 請求先担当者 [▼ Table] │
│ │
│ ── 入荷・配送 ──────────────────────────────────────────────────────── │
│ 出荷ルール [▼ List] 倉庫 [▼ Table Direct] │
│ 配送方法 [▼ List] 運送会社 [▼ Table] │
│ │
│ ── 請求・支払 ──────────────────────────────────────────────────────── │
│ 価格表 [▼ Table Direct] 通貨 [▼ Table Direct] │
│ 支払方法 [▼ List] 支払条件 [▼ Table Direct] │
│ │
│ ── 合計・ステータス ────────────────────────────────────────────────── │
│ 明細行合計 [¥_________] 総合計 [¥_________] │
│ 伝票状態 [▼ List] 伝票タイプ [▼ Table Direct] │
│ [明細行コピー] [注文プロセス] │
│ │
│ [発注伝票] [発注明細] [発注照合] [税額計算] [支払スケジュール] [仕入諸掛]│
└──────────────────────────────────────────────────────────────────────────┘

📌 ポイント: この図はADメタデータ(AD_Field.XPosition, IsSameLine)から再現した実際のUI配置です。画面は2カラム構成で、左列(XPosition=1)と右列(XPosition=4)にフィールドが配置されます。

graph TD
    subgraph "発注伝票ウィンドウ (Window ID: 181)"
        T1["📋 発注伝票<br/>C_Order<br/>51項目"]
        T2["📦 発注伝票明細<br/>C_OrderLine<br/>36項目"]
        T3["🔗 発注照合<br/>M_MatchPO<br/>11項目"]
        T4["🔗 見積依頼伝票明細<br/>M_RequisitionLine<br/>10項目"]
        T5["📋 税額計算<br/>C_OrderTax<br/>8項目"]
        T6["📋 支払スケジュール<br/>C_OrderPaySchedule<br/>11項目"]
        T7["📋 仕入諸掛見積<br/>C_OrderLandedCost<br/>7項目"]
        T8["🔗 仕入諸掛見積配賦<br/>C_OrderLandedCostAllocation<br/>7項目"]
    end
    T1 --> T2
    T2 --> T3
    T2 --> T4
    T1 --> T5
    T1 --> T6
    T1 --> T7
    T7 --> T8

発注伝票ウィンドウ (Window ID: 181) 発注伝票 C_Order 51項目 発注伝票明細 C_OrderLine 36項目 発注照合 M_MatchPO 11項目 見積依頼伝票明細 M_RequisitionLine 10項目 税額計算 C_OrderTax 8項目 支払スケジュール C_OrderPaySchedule 11項目 仕入諸掛見積 C_OrderLandedCost 7項目 仕入諸掛見積配賦 C_OrderLandedCostAllocation 7項目

タブ名テーブル役割
発注伝票C_Orderヘッダー情報(仕入先・日付・伝票タイプ等)
発注伝票明細C_OrderLine品目・数量・単価の明細行
発注照合M_MatchPO入荷・請求との照合状況
見積依頼伝票明細M_RequisitionLine関連する購買依頼の明細
税額計算C_OrderTax税額の自動計算結果
支払スケジュールC_OrderPaySchedule分割払いのスケジュール
仕入諸掛見積C_OrderLandedCost仕入諸掛の見積配賦
仕入諸掛見積配賦C_OrderLandedCostAllocation諸掛の品目別配賦明細

📌 ポイント: 発注伝票明細タブの下に「発注照合」と「見積依頼伝票明細」が子タブとして存在します。ヘッダータブ(発注伝票)を選択した状態でのみ、税額計算・支払スケジュール・仕入諸掛見積タブにアクセスできます。

graph TD
    A["🚀 開始"] --> B["新規ボタンをクリック"]
    B --> C["ヘッダー情報を入力<br/>(伝票タイプ・仕入先・価格表・倉庫)"]
    C --> D["保存"]
    D --> E{"作成方法"}
    E -->|購買依頼から| F["購買依頼から発注作成<br/>メニューを実行"]
    E -->|受注から| G["受注伝票から発注伝票作成<br/>メニューを実行"]
    E -->|手動入力| H["発注伝票明細タブで<br/>品目・数量・単価を入力"]
    F --> I["明細行の確認・修正"]
    G --> I
    H --> I
    I --> J["注文プロセスボタンで<br/>「完了」を実行"]
    J --> K["✅ 発注伝票 完了"]
    K --> L["入荷伝票の作成へ"]
    K --> M["仕入請求書の作成へ"]

開始 新規ボタンをクリック ヘッダー情報を入力 (伝票タイプ・仕入先・価格表・倉庫) 保存 作成方法 購買依頼から発注作成 メニューを実行 受注伝票から発注伝票作成 メニューを実行 発注伝票明細タブで 品目・数量・単価を入力 明細行の確認・修正 注文プロセスボタンで 「完了」を実行 発注伝票 完了 入荷伝票の作成へ 仕入請求書の作成へ 購買依頼から 受注から 手動入力

💡 ヒント: 購買依頼や受注伝票から自動生成した場合でも、完了実行前に明細行の数量・単価を手動修正できます。仕入先との最終合意内容を反映してから完了してください。

メニューから「購買管理 > 発注伝票(標準)」を開きます。

📌 ポイント: 発注伝票(Purchase Order)は受注伝票(Sales Order)と同じ C_Order テーブルを共有しています。IsSOTrx = 'N' フラグで購買側として区別されます。

  1. 新規」ボタンをクリック
  2. ヘッダー情報を入力:
    • 伝票タイプ: 「標準発注伝票」を選択
    • 注文日付: 発注日を入力
    • 取引先(仕入先): 仕入先を選択
    • 価格表: 購買用価格表を選択
    • 倉庫: 入荷先の倉庫を選択
  3. 保存」をクリック
  4. 発注伝票明細」タブで明細行を入力:
    • 品目: 発注する品目を選択
    • 注文数量: 数量を入力
    • 単価: 仕入単価(価格表から自動取得、手動修正可)
  5. 注文プロセス」ボタンで「完了」を実行

⚠️ 注意: 完了後の発注伝票は直接編集できません。修正が必要な場合は「再アクティブ化」処理を行ってください。ただし、既に入荷済みの明細行は再アクティブ化できません。

  1. メニュー「購買管理 > 購買依頼から発注作成」を実行
  2. 対象の購買依頼を選択
  3. 発注伝票が自動生成される
  1. メニュー「販売管理 > 見積受注管理 > 受注伝票から発注伝票作成」を実行
  2. 対象の受注伝票を選択
  3. 仕入先ごとに発注伝票が自動生成される
項目名説明
伝票タイプ選択標準発注伝票 等
注文日付日付発注日
納品予定日日付仕入先からの納品予定日
取引先検索仕入先
価格表選択購買用価格表
倉庫選択入荷先の倉庫
支払条件選択仕入先との支払条件
明細行合計金額全明細行の合計金額(税抜)
総合計金額税込合計
項目名説明
品目検索発注する品目
注文数量数量発注数量
単価金額仕入単価
税率選択適用する税率
入荷済数量数量入荷済みの数量(自動更新)
請求済数量数量仕入請求済みの数量(自動更新)
行合計金額数量 x 単価

Q. 発注伝票から入荷伝票を作成するには?

Section titled “Q. 発注伝票から入荷伝票を作成するには?”

入荷伝票の画面で「受注伝票」フィールドに発注伝票を指定すると、発注内容が自動取り込みされます。または「入荷伝票(標準)」画面で「Create lines from」ボタンを使用します。

発注(Purchase Order)・入荷(Material Receipt)・仕入請求(Vendor Invoice)の3つを突合する仕組みです。「発注照合」タブと「マッチング」フォームで管理します。数量・金額の不一致を検出できます。

📌 ポイント: 3方マッチングは iDempiere の購買管理における重要な内部統制機能です。発注なしの不正な入荷・請求を防ぐほか、数量・単価の差異を早期検出できます。

完了済みの発注伝票に「無効」処理を実行します。ただし、既に入荷済み・請求済みの場合は先にそちらの処理が必要です。

graph TD
    A[購買依頼] -->|発注生成| B[発注伝票]
    Z[受注伝票] -->|連動発注| B
    B -->|入荷| C[入荷伝票]
    B -->|請求| D[仕入請求書]
    C <-->|マッチング| D

発注生成 連動発注 入荷 請求 マッチング 購買依頼 発注伝票 受注伝票 入荷伝票 仕入請求書


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

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


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

画面レイアウト(ヘッダータブ)

Section titled “画面レイアウト(ヘッダータブ)”
┌─ 発注伝票(Purchase Order)──────────────────────────────────────────────┐
│ │
│ クライアント [▼ Table Direct] 組織 [▼ Table Direct] │
│ 伝票番号 [________________] 注文参照 [________________] │
│ 説明 [_______________________________________________] │
│ │
│ ── 伝票タイプ・日付 ────────────────────────────────────────────────── │
│ 対象伝票タイプ [▼ Table] │
│ 注文日付 [📅 Date] 納品予定日 [📅 Date] │
│ │
│ ── 仕入先情報 ──────────────────────────────────────────────────────── │
│ 取引先(仕入先) [🔍 Search] 請求先 [🔍 Search] │
│ 取引先住所 [▼ Table Direct] 請求先住所 [▼ Table] │
│ 担当者 [▼ Table Direct] 請求先担当者 [▼ Table] │
│ │
│ ── 入荷・配送 ──────────────────────────────────────────────────────── │
│ 出荷ルール [▼ List] 倉庫 [▼ Table Direct] │
│ 配送方法 [▼ List] 運送会社 [▼ Table] │
│ │
│ ── 請求・支払 ──────────────────────────────────────────────────────── │
│ 価格表 [▼ Table Direct] 通貨 [▼ Table Direct] │
│ 支払方法 [▼ List] 支払条件 [▼ Table Direct] │
│ │
│ ── 合計・ステータス ────────────────────────────────────────────────── │
│ 明細行合計 [¥_________] 総合計 [¥_________] │
│ 伝票状態 [▼ List] 伝票タイプ [▼ Table Direct] │
│ [明細行コピー] [注文プロセス] │
│ │
│ [発注伝票] [発注明細] [発注照合] [税額計算] [支払スケジュール] [仕入諸掛]│
└──────────────────────────────────────────────────────────────────────────┘

📌 ポイント: この図はADメタデータ(AD_Field.XPosition, IsSameLine)から再現した実際のUI配置です。画面は2カラム構成で、左列(XPosition=1)と右列(XPosition=4)にフィールドが配置されます。

発注伝票は Document 型の伝票で、C_Order テーブルに IsSOTrx=N として格納されます。受注伝票と同じ MOrder クラス(3,287行)を共有しますが、購買固有のロジック(入荷マッチング、ランデッドコスト、購買依頼連携)が IsSOTrx フラグで分岐制御されます。DocAction インターフェースを実装しています。

classDiagram
    class MOrder {
        +prepareIt() String
        +completeIt() String
        +voidIt() boolean
        +closeIt() boolean
        +reverseCorrectIt() boolean
        +reserveStock() void
    }
    class X_C_Order {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    class DocAction {
        <<interface>>
    }
    MOrder --|> X_C_Order
    X_C_Order --|> PO
    MOrder ..|> DocAction
    MOrder --> MOrderLine : has many
    MOrder --> MOrderTax : has many

+prepareIt() String +completeIt() String +voidIt() boolean +closeIt() boolean +reverseCorrectIt() boolean +reserveStock() void <> <> <> > X_C_Order X_C_Order --

パッケージ: org.compiere.model ソースファイル: org.adempiere.base/src/org/compiere/model/MOrder.java

C_Order(発注ヘッダー、IsSOTrx=N)

Section titled “C_Order(発注ヘッダー、IsSOTrx=N)”

受注と同一テーブルを使用。IsSOTrx=N で購買として動作。

⚠️ 注意: 発注伝票は受注伝票と同じ C_Order テーブル・MOrder クラスを共有します。カスタム Model Validator で MOrder をフックする場合は、order.isSOTrx() で購買(false)か販売(true)かを必ず判別してください。判別なしに処理すると受注にも影響します。

カラム名必須説明備考
C_Order_IDIDPK発注ID主キー
IsSOTrxYesNoY販売取引フラグN=購買
DocumentNoStringY伝票番号
C_DocType_IDTableDirectY伝票タイプPOO(発注書)
C_DocTypeTarget_IDTableY対象伝票タイプ
DocStatusListY伝票状態DR/IP/CO/CL/VO/RE
C_BPartner_IDSearchY仕入先Callout: bPartner
DateOrderedDateY発注日付
DatePromisedDateN納品予定日
M_Warehouse_IDTableDirectY倉庫入荷先倉庫
M_PriceList_IDTableDirectY価格表購買価格表
C_Currency_IDTableDirectY通貨
TotalLinesAmountY明細行合計自動計算
GrandTotalAmountY総合計自動計算
M_Requisition_IDSearchN購買依頼購買依頼からの紐付け
カラム名必須説明
C_OrderLine_IDIDPK明細ID
C_Order_IDSearchYヘッダーFK
LineIntegerY行番号
M_Product_IDSearchN品目
QtyOrderedQuantityY発注数量
QtyDeliveredQuantityY入荷済数量
QtyInvoicedQuantityY請求済数量
PriceActualAmountY実単価
LineNetAmtAmountY行合計
C_Tax_IDTableDirectY税率
erDiagram
    C_Order ||--o{ C_OrderLine : "has"
    C_Order ||--o{ C_OrderTax : "has"
    C_Order }o--|| C_BPartner : "vendor"
    C_Order }o--|| M_PriceList : "purchase price"
    C_Order }o--|| M_Warehouse : "delivery to"
    C_OrderLine }o--|| M_Product : "references"
    C_Order ||--o{ M_InOut : "generates receipt"
    C_Order ||--o{ C_Invoice : "generates vendor invoice"
    C_OrderLine }o--o| M_RequisitionLine : "from requisition"
    M_InOut ||--o{ M_MatchPO : "3-way match"
    C_Invoice ||--o{ M_MatchInv : "3-way match"

purchase price delivery to generates receipt generates vendor invoice from requisition 3-way match

📌 ポイント: iDempiereの3-Way Matchingは M_MatchPO(発注-入荷照合)と M_MatchInv(入荷-請求照合)の2つのテーブルで管理されます。これらのレコードは入荷伝票・仕入請求書の完了時に自動生成されます。手動での INSERT/DELETE は原価計算に不整合を引き起こすため絶対に行わないでください。

iDempiereの購買プロセスでは、以下の3つの伝票を照合(マッチング)します:

  1. 発注伝票(Purchase Order): 発注数量・金額
  2. 入荷伝票(Material Receipt): 入荷数量
  3. 仕入請求書(Vendor Invoice): 請求数量・金額
graph TD
    PO[発注伝票] -->|M_MatchPO| MR[入荷伝票]
    PO -->|M_MatchPO| VI[仕入請求書]
    MR -->|M_MatchInv| VI

発注伝票 入荷伝票 仕入請求書

  • M_MatchPO: 発注と入荷/請求の照合レコード
  • M_MatchInv: 入荷と請求の照合レコード
  • 価格差異は会計転記時に差異勘定へ自動計上
  1. ModelValidator.TIMING_BEFORE_COMPLETE イベント発火
  2. 在庫の発注引当(reserveStock() で購買用の引当)
  3. 購買依頼(Requisition)のステータス更新
  4. ドロップシップの場合、受注への紐付け処理
  5. ModelValidator.TIMING_AFTER_COMPLETE イベント発火
stateDiagram-v2
    [*] --> Drafted : 新規作成
    Drafted --> InProgress : prepareIt()
    InProgress --> Completed : completeIt()
    Completed --> Closed : closeIt()
    Completed --> Voided : voidIt()
    Completed --> Reversed : reverseCorrectIt()

*

発注伝票の品目原価に、運賃・保険料・関税等の付随費用を按分配賦する仕組み:

  • C_LandedCost テーブルで付随費用を定義
  • 配賦方法: 数量按分、金額按分、重量按分、容積按分
  • 仕入請求書の完了時に M_CostDetail へ反映

受注伝票と同じ CalloutOrder を使用。IsSOTrx=N で購買用の動作に分岐。

💡 ヒント: CalloutOrder.bPartner は仕入先変更時に購買価格表・支払条件・通貨を自動セットします。仕入先ごとに異なるリードタイムや発注単位を自動セットしたい場合は M_Product_PO(品目仕入先情報)テーブルを参照するカスタム Callout の追加が有効です。

Calloutクラスメソッドトリガーフィールド処理内容
CalloutOrderdocTypeC_DocTypeTarget_ID購買用伝票タイプの初期値セット
CalloutOrderbPartnerC_BPartner_ID仕入先情報の自動セット
CalloutOrderpriceListM_PriceList_ID購買価格表・通貨の自動セット
CalloutOrderwarehouseM_Warehouse_ID入荷先倉庫の処理

Calloutソース: org.adempiere.base.callout/src/org/compiere/model/CalloutOrder.java

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

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

発注伝票に独自バリデーションを追加する最も安全な方法:

public class CustomPurchaseOrderValidator implements ModelValidator {
@Override
public String docValidate(PO po, int timing) {
if (po instanceof MOrder) {
MOrder order = (MOrder) po;
if (!order.isSOTrx() && timing == TIMING_BEFORE_COMPLETE) {
// 例: 発注金額に応じた承認チェック
if (order.getGrandTotal().compareTo(new BigDecimal("5000000")) > 0) {
// 承認フローの確認
if (!isApproved(order)) {
return "発注金額が500万円超のため承認が必要です";
}
}
}
}
return null;
}
}

M_Requisition からの発注自動生成プロセスをカスタマイズし、独自の仕入先選定ロジックを実装可能。

🔧 カスタマイズ: 購買承認フロー(金額閾値による上長承認など)を追加する場合は、TIMING_BEFORE_COMPLETE タイミングの Model Validator が最適です。承認状態はカスタムカラム(例: IsApproved)または AD_WF_Activity のワークフローで管理できます。承認なしで完了させた場合のロールバックは voidIt() を使用してください。

プロセス名説明
伝票アクション (DocAction)伝票の完了・無効・取消等
購買依頼から発注生成購買依頼を集約して発注伝票を生成
明細行コピー他の発注伝票から明細行をコピー

iDempiereの発注伝票は Model Validator や Callout で安全にカスタマイズできます。 承認フロー、仕入先自動選定、ランデッドコスト配賦をコア改変なしで拡張可能です。

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

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