iDempiere 発注伝票の使い方|購買管理 操作マニュアル・技術仕様
発注伝票は、仕入先への発注を管理する伝票です。受注伝票と同じ C_Order テーブルを使用しますが、伝票タイプ(IsSOTrx=N)で購買側として区別されます。発注伝票から入荷伝票や仕入請求書を生成できます。
発注伝票でできること
Section titled “発注伝票でできること”- 仕入先への発注情報(品目・数量・価格・納期)の登録・管理
- 購買依頼(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
| タブ名 | テーブル | 役割 |
|---|---|---|
| 発注伝票 | C_Order | ヘッダー情報(仕入先・日付・伝票タイプ等) |
| 発注伝票明細 | C_OrderLine | 品目・数量・単価の明細行 |
| 発注照合 | M_MatchPO | 入荷・請求との照合状況 |
| 見積依頼伝票明細 | M_RequisitionLine | 関連する購買依頼の明細 |
| 税額計算 | C_OrderTax | 税額の自動計算結果 |
| 支払スケジュール | C_OrderPaySchedule | 分割払いのスケジュール |
| 仕入諸掛見積 | C_OrderLandedCost | 仕入諸掛の見積配賦 |
| 仕入諸掛見積配賦 | C_OrderLandedCostAllocation | 諸掛の品目別配賦明細 |
📌 ポイント: 発注伝票明細タブの下に「発注照合」と「見積依頼伝票明細」が子タブとして存在します。ヘッダータブ(発注伝票)を選択した状態でのみ、税額計算・支払スケジュール・仕入諸掛見積タブにアクセスできます。
基本操作フロー
Section titled “基本操作フロー”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["仕入請求書の作成へ"]
💡 ヒント: 購買依頼や受注伝票から自動生成した場合でも、完了実行前に明細行の数量・単価を手動修正できます。仕入先との最終合意内容を反映してから完了してください。
基本操作手順
Section titled “基本操作手順”アクセス方法
Section titled “アクセス方法”メニューから「購買管理 > 発注伝票(標準)」を開きます。
📌 ポイント: 発注伝票(Purchase Order)は受注伝票(Sales Order)と同じ
C_Orderテーブルを共有しています。IsSOTrx = 'N'フラグで購買側として区別されます。
- 「新規」ボタンをクリック
- ヘッダー情報を入力:
- 伝票タイプ: 「標準発注伝票」を選択
- 注文日付: 発注日を入力
- 取引先(仕入先): 仕入先を選択
- 価格表: 購買用価格表を選択
- 倉庫: 入荷先の倉庫を選択
- 「保存」をクリック
- 「発注伝票明細」タブで明細行を入力:
- 品目: 発注する品目を選択
- 注文数量: 数量を入力
- 単価: 仕入単価(価格表から自動取得、手動修正可)
- 「注文プロセス」ボタンで「完了」を実行
⚠️ 注意: 完了後の発注伝票は直接編集できません。修正が必要な場合は「再アクティブ化」処理を行ってください。ただし、既に入荷済みの明細行は再アクティブ化できません。
購買依頼からの生成
Section titled “購買依頼からの生成”- メニュー「購買管理 > 購買依頼から発注作成」を実行
- 対象の購買依頼を選択
- 発注伝票が自動生成される
受注からの連動発注
Section titled “受注からの連動発注”- メニュー「販売管理 > 見積受注管理 > 受注伝票から発注伝票作成」を実行
- 対象の受注伝票を選択
- 仕入先ごとに発注伝票が自動生成される
項目リファレンス
Section titled “項目リファレンス”発注伝票タブ(ヘッダー)
Section titled “発注伝票タブ(ヘッダー)”| 項目名 | 型 | 説明 |
|---|---|---|
| 伝票タイプ | 選択 | 標準発注伝票 等 |
| 注文日付 | 日付 | 発注日 |
| 納品予定日 | 日付 | 仕入先からの納品予定日 |
| 取引先 | 検索 | 仕入先 |
| 価格表 | 選択 | 購買用価格表 |
| 倉庫 | 選択 | 入荷先の倉庫 |
| 支払条件 | 選択 | 仕入先との支払条件 |
| 明細行合計 | 金額 | 全明細行の合計金額(税抜) |
| 総合計 | 金額 | 税込合計 |
発注伝票明細タブ
Section titled “発注伝票明細タブ”| 項目名 | 型 | 説明 |
|---|---|---|
| 品目 | 検索 | 発注する品目 |
| 注文数量 | 数量 | 発注数量 |
| 単価 | 金額 | 仕入単価 |
| 税率 | 選択 | 適用する税率 |
| 入荷済数量 | 数量 | 入荷済みの数量(自動更新) |
| 請求済数量 | 数量 | 仕入請求済みの数量(自動更新) |
| 行合計 | 金額 | 数量 x 単価 |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 発注伝票から入荷伝票を作成するには?
Section titled “Q. 発注伝票から入荷伝票を作成するには?”入荷伝票の画面で「受注伝票」フィールドに発注伝票を指定すると、発注内容が自動取り込みされます。または「入荷伝票(標準)」画面で「Create lines from」ボタンを使用します。
Q. 3方マッチングとは?
Section titled “Q. 3方マッチングとは?”発注(Purchase Order)・入荷(Material Receipt)・仕入請求(Vendor Invoice)の3つを突合する仕組みです。「発注照合」タブと「マッチング」フォームで管理します。数量・金額の不一致を検出できます。
📌 ポイント: 3方マッチングは iDempiere の購買管理における重要な内部統制機能です。発注なしの不正な入荷・請求を防ぐほか、数量・単価の差異を早期検出できます。
Q. 発注伝票を取り消すには?
Section titled “Q. 発注伝票を取り消すには?”完了済みの発注伝票に「無効」処理を実行します。ただし、既に入荷済み・請求済みの場合は先にそちらの処理が必要です。
業務フロー上の位置づけ
Section titled “業務フロー上の位置づけ”graph TD
A[購買依頼] -->|発注生成| B[発注伝票]
Z[受注伝票] -->|連動発注| B
B -->|入荷| C[入荷伝票]
B -->|請求| D[仕入請求書]
C <-->|マッチング| D
OSS ERP導入についてのご相談
Section titled “OSS ERP導入についてのご相談”As-Link株式会社では、iDempiereの導入支援・カスタマイズ開発を承っております。
🛠 技術仕様(開発者向け)
画面レイアウト(ヘッダータブ)
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 インターフェースを実装しています。
アーキテクチャ概要
Section titled “アーキテクチャ概要”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
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MOrder.java
関連DBテーブル
Section titled “関連DBテーブル”C_Order(発注ヘッダー、IsSOTrx=N)
Section titled “C_Order(発注ヘッダー、IsSOTrx=N)”受注と同一テーブルを使用。IsSOTrx=N で購買として動作。
⚠️ 注意: 発注伝票は受注伝票と同じ
C_Orderテーブル・MOrderクラスを共有します。カスタム Model Validator でMOrderをフックする場合は、order.isSOTrx()で購買(false)か販売(true)かを必ず判別してください。判別なしに処理すると受注にも影響します。
| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_Order_ID | ID | PK | 発注ID | 主キー |
| IsSOTrx | YesNo | Y | 販売取引フラグ | N=購買 |
| DocumentNo | String | Y | 伝票番号 | |
| C_DocType_ID | TableDirect | Y | 伝票タイプ | POO(発注書) |
| C_DocTypeTarget_ID | Table | Y | 対象伝票タイプ | |
| DocStatus | List | Y | 伝票状態 | DR/IP/CO/CL/VO/RE |
| C_BPartner_ID | Search | Y | 仕入先 | Callout: bPartner |
| DateOrdered | Date | Y | 発注日付 | |
| DatePromised | Date | N | 納品予定日 | |
| M_Warehouse_ID | TableDirect | Y | 倉庫 | 入荷先倉庫 |
| M_PriceList_ID | TableDirect | Y | 価格表 | 購買価格表 |
| C_Currency_ID | TableDirect | Y | 通貨 | |
| TotalLines | Amount | Y | 明細行合計 | 自動計算 |
| GrandTotal | Amount | Y | 総合計 | 自動計算 |
| M_Requisition_ID | Search | N | 購買依頼 | 購買依頼からの紐付け |
C_OrderLine(発注明細)
Section titled “C_OrderLine(発注明細)”| カラム名 | 型 | 必須 | 説明 |
|---|---|---|---|
| C_OrderLine_ID | ID | PK | 明細ID |
| C_Order_ID | Search | Y | ヘッダーFK |
| Line | Integer | Y | 行番号 |
| M_Product_ID | Search | N | 品目 |
| QtyOrdered | Quantity | Y | 発注数量 |
| QtyDelivered | Quantity | Y | 入荷済数量 |
| QtyInvoiced | Quantity | Y | 請求済数量 |
| PriceActual | Amount | Y | 実単価 |
| LineNetAmt | Amount | Y | 行合計 |
| C_Tax_ID | TableDirect | Y | 税率 |
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"
3-Way Matching(三方照合)
Section titled “3-Way Matching(三方照合)”📌 ポイント: iDempiereの3-Way Matchingは
M_MatchPO(発注-入荷照合)とM_MatchInv(入荷-請求照合)の2つのテーブルで管理されます。これらのレコードは入荷伝票・仕入請求書の完了時に自動生成されます。手動での INSERT/DELETE は原価計算に不整合を引き起こすため絶対に行わないでください。
iDempiereの購買プロセスでは、以下の3つの伝票を照合(マッチング)します:
- 発注伝票(Purchase Order): 発注数量・金額
- 入荷伝票(Material Receipt): 入荷数量
- 仕入請求書(Vendor Invoice): 請求数量・金額
graph TD
PO[発注伝票] -->|M_MatchPO| MR[入荷伝票]
PO -->|M_MatchPO| VI[仕入請求書]
MR -->|M_MatchInv| VI
M_MatchPO: 発注と入荷/請求の照合レコードM_MatchInv: 入荷と請求の照合レコード- 価格差異は会計転記時に差異勘定へ自動計上
ビジネスロジック
Section titled “ビジネスロジック”completeIt() の購買固有処理
Section titled “completeIt() の購買固有処理”ModelValidator.TIMING_BEFORE_COMPLETEイベント発火- 在庫の発注引当(
reserveStock()で購買用の引当) - 購買依頼(Requisition)のステータス更新
- ドロップシップの場合、受注への紐付け処理
ModelValidator.TIMING_AFTER_COMPLETEイベント発火
伝票処理フロー
Section titled “伝票処理フロー”stateDiagram-v2
[*] --> Drafted : 新規作成
Drafted --> InProgress : prepareIt()
InProgress --> Completed : completeIt()
Completed --> Closed : closeIt()
Completed --> Voided : voidIt()
Completed --> Reversed : reverseCorrectIt()
ランデッドコスト(Landed Cost)
Section titled “ランデッドコスト(Landed Cost)”発注伝票の品目原価に、運賃・保険料・関税等の付随費用を按分配賦する仕組み:
C_LandedCostテーブルで付随費用を定義- 配賦方法: 数量按分、金額按分、重量按分、容積按分
- 仕入請求書の完了時に
M_CostDetailへ反映
Callout
Section titled “Callout”受注伝票と同じ CalloutOrder を使用。IsSOTrx=N で購買用の動作に分岐。
💡 ヒント:
CalloutOrder.bPartnerは仕入先変更時に購買価格表・支払条件・通貨を自動セットします。仕入先ごとに異なるリードタイムや発注単位を自動セットしたい場合はM_Product_PO(品目仕入先情報)テーブルを参照するカスタム Callout の追加が有効です。
| Calloutクラス | メソッド | トリガーフィールド | 処理内容 |
|---|---|---|---|
| CalloutOrder | docType | C_DocTypeTarget_ID | 購買用伝票タイプの初期値セット |
| CalloutOrder | bPartner | C_BPartner_ID | 仕入先情報の自動セット |
| CalloutOrder | priceList | M_PriceList_ID | 購買価格表・通貨の自動セット |
| CalloutOrder | warehouse | M_Warehouse_ID | 入荷先倉庫の処理 |
Calloutソース: org.adempiere.base.callout/src/org/compiere/model/CalloutOrder.java
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”発注伝票に独自バリデーションを追加する最も安全な方法:
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; }}購買依頼との連携
Section titled “購買依頼との連携”M_Requisition からの発注自動生成プロセスをカスタマイズし、独自の仕入先選定ロジックを実装可能。
🔧 カスタマイズ: 購買承認フロー(金額閾値による上長承認など)を追加する場合は、
TIMING_BEFORE_COMPLETEタイミングの Model Validator が最適です。承認状態はカスタムカラム(例:IsApproved)またはAD_WF_Activityのワークフローで管理できます。承認なしで完了させた場合のロールバックはvoidIt()を使用してください。
関連プロセス
Section titled “関連プロセス”| プロセス名 | 説明 |
|---|---|
| 伝票アクション (DocAction) | 伝票の完了・無効・取消等 |
| 購買依頼から発注生成 | 購買依頼を集約して発注伝票を生成 |
| 明細行コピー | 他の発注伝票から明細行をコピー |
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”iDempiereの発注伝票は Model Validator や Callout で安全にカスタマイズできます。 承認フロー、仕入先自動選定、ランデッドコスト配賦をコア改変なしで拡張可能です。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。