iDempiere 受注伝票(Sales Order)|操作マニュアル・技術仕様
📖 販売管理の全体像: 販売管理の業務フロー全体図 も合わせてご覧ください。
受注伝票は、iDempiereの販売管理における中核機能です。得意先からの受注を管理し、受注状況・引当状況・出荷(納品)状況・請求状況を一元的に把握できます。
受注伝票は見積伝票も兼ねており、受注か見積かは伝票タイプにより決定されます。受注伝票の完成時に在庫の引当が行われ、出荷納品伝票の作成には受注伝票の指定が必須です。
受注伝票でできること
Section titled “受注伝票でできること”- 得意先からの受注情報(品目・数量・価格・納期)を登録・管理
- 見積伝票の作成と、見積から受注への変換
- 在庫の自動引当(伝票完成時)
- 出荷伝票・請求書の自動生成の起点
- 受注から発注への自動生成(直送・受注連動発注)
- 税額の自動計算、複数通貨での取引
🖥️ インタラクティブ画面レイアウト: AD メタデータから自動生成した 受注伝票の全タブ・全フィールド レイアウト(HTML版) で、実際の画面配置をご確認いただけます。
graph TD
subgraph "受注伝票ウィンドウ(Window ID: 143)"
T1["📋 受注伝票<br/>C_Order<br/>60項目"]
T2["📦 受注伝票明細<br/>C_OrderLine<br/>40項目"]
T3["💰 税額計算<br/>C_OrderTax<br/>8項目(読取専用)"]
T4["📅 支払スケジュール<br/>C_OrderPaySchedule<br/>11項目"]
T5["💳 POS支払<br/>C_POSPayment<br/>22項目"]
end
T1 --> T2
T1 --> T3
T1 --> T4
T1 --> T5
画面レイアウト(ヘッダータブ)
Section titled “画面レイアウト(ヘッダータブ)”以下は AD メタデータ(AD_Field.XPosition, IsSameLine)から再現した、受注伝票ヘッダーの実際のフィールド配置です。
┌─ 受注伝票(Sales Order)─────────────────────────────────────────────────┐│ ││ クライアント [▼ Table Direct] 組織 [▼ Table Direct] ││ 伝票番号 [________________] 注文参照 [________________] ││ 説明 [_______________________________________________] (3行テキスト) ││ ││ ── 伝票タイプ・日付 ────────────────────────────────────────────────── ││ 対象伝票タイプ [▼ Table] セルフサービス [☐] ││ 注文日付 [📅 Date] 納品予定日 [📅 Date] ││ ││ ── 取引先情報 ──────────────────────────────────────────────────────── ││ 取引先 [🔍 Search] 請求先 [🔍 Search] ││ 取引先住所 [▼ Table Direct] 請求先住所 [▼ Table] ││ 担当者 [▼ Table Direct] 請求先担当者 [▼ Table] ││ ││ ── 出荷・配送 ──────────────────────────────────────────────────────── ││ 出荷ルール [▼ List] 優先度 [▼ List] ││ 倉庫 [▼ Table Direct] 直送 [☐] ││ 配送方法 [▼ List] 運送会社 [▼ Table] ││ 運賃ルール [▼ List] 運賃カテゴリ [▼ Table Direct] ││ 運賃金額 [¥_________] ││ ││ ── 請求・支払 ──────────────────────────────────────────────────────── ││ 請求ルール [▼ List] ││ 価格表 [▼ Table Direct] 通貨 [▼ Table Direct] ││ 営業担当者 [▼ Table] 割引率印刷 [☐] ││ 支払方法 [▼ List] 支払条件 [▼ Table Direct] ││ ││ ── 会計セグメント ──────────────────────────────────────────────────── ││ プロジェクト [▼ Table Direct] 活動 [▼ Table Direct] ││ キャンペーン [▼ Table Direct] 取引組織 [▼ Table] ││ ││ ── 合計・ステータス ────────────────────────────────────────────────── ││ 明細行合計 [¥_________] 総合計 [¥_________] ││ 伝票状態 [▼ List] 伝票タイプ [▼ Table Direct] ││ [明細行コピー] [注文プロセス] ││ ││ ── タブ ────────────────────────────────────────────────────────────── ││ [受注伝票] [受注明細] [税額計算] [支払スケジュール] [POS支払] │└──────────────────────────────────────────────────────────────────────────┘📌 ポイント: 画面は2カラム構成です。左列(XPosition=1)と右列(XPosition=4)にフィールドが配置されます。「説明」フィールドは全幅(ColumnSpan=5)を使用します。
| タブ名 | テーブル | 役割 | 主な入力項目 |
|---|---|---|---|
| 受注伝票 | C_Order | ヘッダー情報(得意先・日付・伝票タイプ等) | 取引先、伝票タイプ、注文日付、価格表 |
| 受注伝票明細 | C_OrderLine | 品目・数量・単価の明細行 | 品目、数量、単価、税率 |
| 税額計算 | C_OrderTax | 税額の自動計算結果(読み取り専用) | 税率、税額 |
| 支払スケジュール | C_OrderPaySchedule | 分割払いのスケジュール | 支払予定日、金額 |
受注伝票の基本操作手順
Section titled “受注伝票の基本操作手順”graph TD
S1["① 新規作成"] --> S2["② ヘッダー入力<br/>取引先・伝票タイプ・日付"]
S2 --> S3["③ 保存"]
S3 --> S4["④ 明細タブへ<br/>品目・数量・単価"]
S4 --> S5["⑤ 明細保存"]
S5 --> S6{全行入力?}
S6 -->|No| S4
S6 -->|Yes| S7["⑥ ヘッダーに戻る"]
S7 --> S8["⑦ 完了処理<br/>注文プロセス → 完了"]
S8 --> S9["✅ 在庫引当・番号確定"]
アクセス方法
Section titled “アクセス方法”メニューから「販売管理 > 見積受注管理 > 受注伝票(標準)」を開きます。
- ツールバーの「新規」ボタンをクリック
- ヘッダー情報を入力:
- 伝票タイプ: 「標準受注伝票」を選択(見積の場合は「見積伝票」)
💡 ヒント: 伝票タイプを「見積伝票」にすると在庫の引当が行われません。確定していない商談には見積伝票を使い、受注確定後に標準受注伝票に変換するか、新規受注伝票を作成してください。
- 注文日付: 受注日を入力(デフォルト: 当日)
- 取引先: 得意先を選択(住所・担当者が自動セット)
- 価格表: 適用する価格表を選択
- 倉庫: 出荷元の倉庫を選択
- 「保存」をクリック
📐 画面レイアウト: ヘッダータブのフィールド配置は 画面レイアウト(ヘッダータブ) を参照してください。
- 「受注伝票明細」タブに移動
- 明細行を入力:
- 品目: 販売する品目を選択(単価が価格表から自動セット)
- 注文数量: 数量を入力
- 単価: 必要に応じて修正(価格表から自動取得済み)
- 税率: 取引先・品目に基づき自動セット
- 明細行ごとに「保存」をクリック
- 必要な明細行をすべて入力
📐 画面レイアウト: 明細タブの項目詳細は 受注伝票明細タブ を参照してください。
伝票処理(受注確定)
Section titled “伝票処理(受注確定)”- 「受注伝票」タブ(ヘッダー)に戻る
- 「注文プロセス」ボタンをクリック
- アクション「完了(Complete)」を選択
- 「OK」をクリック
完了処理により以下が自動実行されます:
- 在庫の引当(品目の予約)
- 伝票番号の確定
- 伝票ステータスが「完了」に変更
⚠️ 注意: 完了後の受注伝票は直接修正できません。数量変更・キャンセルが必要な場合は「無効」処理または「クローズ」処理を使います。詳細はFAQを参照してください。
項目リファレンス
Section titled “項目リファレンス”受注伝票タブ(ヘッダー)
Section titled “受注伝票タブ(ヘッダー)”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 伝票タイプ | - | リスト | 受注伝票の種類。標準受注伝票、見積伝票、クレジットオーダー等 |
| 注文日付 | - | 日付 | 受注日(デフォルト: 当日) |
| 納品予定日 | - | 日付 | 得意先への納品予定日 |
| 取引先 | - | 検索 | 得意先(取引先マスタから選択) |
| 取引先住所 | - | 選択 | 出荷先住所(取引先の住所から選択) |
| 請求先 | - | 検索 | 請求先が出荷先と異なる場合に指定 |
| 価格表 | - | 選択 | 適用する価格表(通貨も決定される) |
| 通貨 | 自動 | 選択 | 価格表により自動セット |
| 倉庫 | - | 選択 | 出荷元の倉庫 |
| 社内担当者 | - | 選択 | 営業担当者 |
| 出荷ルール | - | リスト | 出荷タイミング(強制、完全、在庫確認後 等) |
| 請求ルール | - | リスト | 請求タイミング(出荷後、即時、スケジュール 等) |
| 支払条件 | - | 選択 | 支払条件マスタから選択 |
| 支払方法 | - | リスト | 現金、小切手、クレジットカード、振込 等 |
| 直送 | - | チェック | 仕入先から得意先へ直接出荷する場合にチェック |
| 明細行合計 | 自動 | 金額 | 全明細行の合計金額(税抜) |
| 総合計 | 自動 | 金額 | 税込の合計金額 |
| 伝票状態 | 自動 | リスト | 起案、進行中、完了、取消 等 |
受注伝票明細タブ
Section titled “受注伝票明細タブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 品目 | - | 検索 | 販売する品目(品目マスタから選択) |
| 注文数量 | 必須 | 数量 | 受注数量 |
| 数量単位 | - | 選択 | 品目の数量単位(品目マスタから自動セット) |
| 単価 | - | 金額 | 販売単価(価格表から自動取得、手動修正可) |
| 営業定価 | - | 金額 | 価格表上の定価(参考表示) |
| 割引 % | - | 数値 | 値引率(単価と定価から自動計算) |
| 税率 | - | 選択 | 適用する税率(取引先・品目から自動判定) |
| 行合計 | 自動 | 金額 | 数量 x 単価の行合計 |
| 出荷済数量 | 自動 | 数量 | 出荷済みの数量 |
| 請求済数量 | 自動 | 数量 | 請求済みの数量 |
| 引当数量 | 自動 | 数量 | 在庫引当済みの数量 |
| 倉庫 | 必須 | 選択 | 出荷元倉庫(ヘッダーから初期値) |
| 納品予定日 | - | 日付 | 明細行単位の納品予定日 |
伝票タイプ一覧
Section titled “伝票タイプ一覧”📌 ポイント: 伝票タイプによって在庫引当の有無が異なります。見積段階では「見積伝票」を使い、受注確定時に「標準受注伝票」へ変換することで、在庫を適切なタイミングで引き当てられます。
| 伝票タイプ | 用途 | 在庫引当 |
|---|---|---|
| 標準受注伝票 | 通常の受注 | あり |
| 見積伝票 | 見積書の作成 | なし |
| クレジットオーダー | クレジット販売 | あり |
| POS受注伝票 | POS端末での販売 | あり |
| 倉庫間受注 | 拠点間の在庫移動 | あり |
| 受注返品伝票 | 返品処理 | あり(マイナス) |
伝票ステータスの遷移
Section titled “伝票ステータスの遷移”stateDiagram-v2
[*] --> 起案: 新規作成
起案 --> 完了: 完了処理
起案 --> 無効: 無効処理
完了 --> クローズ: クローズ処理
完了 --> 無効: 無効処理
完了 --> 取消: 取消処理
| ステータス | 説明 |
|---|---|
| 起案(Drafted) | 入力中。在庫引当なし |
| 完了(Completed) | 確定済み。在庫引当あり |
| クローズ(Closed) | 全出荷・請求完了 |
| 無効(Voided) | 取消。引当が解放される |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 受注伝票を完了した後に修正できますか?
Section titled “Q. 受注伝票を完了した後に修正できますか?”完了済みの受注伝票は直接修正できません。以下の方法で対応します:
- 数量の減少: 「クローズ」処理で未出荷分をキャンセル
- 取消: 「無効」処理で全体を取消(引当も解放)
- 再作成: 無効処理後に新しい受注伝票を作成
Q. 見積から受注に変換するには?
Section titled “Q. 見積から受注に変換するには?”- 伝票タイプ「見積伝票」で見積を作成し完了
- メニュー「販売管理 > 見積受注管理 > 見積から受注伝票作成」を実行
- 対象の見積伝票を選択して変換
Q. 受注伝票でエラーが出る場合は?
Section titled “Q. 受注伝票でエラーが出る場合は?”よくあるエラーと対処法:
| エラー | 原因 | 対処法 |
|---|---|---|
| 「在庫が不足しています」 | 出荷ルールが「完全」で在庫不足 | 出荷ルールを「在庫確認後」に変更、または入荷を待つ |
| 「価格が見つかりません」 | 品目が価格表に未登録 | 価格表に品目の価格を登録 |
| 「取引先の与信限度を超えています」 | 与信管理の制限 | 取引先マスタの与信限度額を確認 |
| 「伝票処理できません」 | 明細行が0行 | 最低1行の明細行を入力 |
Q. 受注伝票の権限設定は?
Section titled “Q. 受注伝票の権限設定は?”iDempiereでは「役割(Role)」単位でウィンドウへのアクセス権限を設定します。 メニュー「システム管理 > 基本ルール > セキュリティ > ロール」から対象の役割を開き、「ウィンドウアクセス」タブで設定してください。
Q. 受注から出荷伝票を作成するには?
Section titled “Q. 受注から出荷伝票を作成するには?”2つの方法があります:
- 自動生成: メニュー「販売管理 > 出荷納品管理 > 出荷納品伝票作成」で一括生成
- 個別生成: 受注伝票明細の「明細行毎に出荷納品伝票を作成」ボタンを使用
業務フロー上の位置づけ
Section titled “業務フロー上の位置づけ”graph TD
A[見積伝票] -->|変換| B[受注伝票]
B -->|出荷生成| C[出荷伝票]
B -->|請求生成| D[売上請求書]
B -->|発注生成| E[発注伝票]
C --> F[入出金]
D --> F
関連する仕様書
Section titled “関連する仕様書”OSS ERP導入についてのご相談
Section titled “OSS ERP導入についてのご相談”iDempiereの受注管理は、中小企業から大企業まで幅広い業務要件に対応できる柔軟な機能を備えています。 見積から受注、出荷、請求までの一連の業務フローを、オープンソースERPで実現しませんか?
As-Link株式会社では、iDempiereの導入支援・カスタマイズ開発を承っております。
🛠 技術仕様(開発者向け)
受注伝票は Document 型の伝票で、C_Order テーブルに格納されます。販売(IsSOTrx=Y)と購買(IsSOTrx=N)の両方で共用されます。MOrder クラス(3,287行)が中核ビジネスロジックを担い、DocAction インターフェースを実装しています。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MOrder {
+prepareIt() String
+completeIt() String
+voidIt() boolean
+closeIt() boolean
+reverseCorrectIt() boolean
+beforeSave() boolean
+validatePaySchedule() boolean
}
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
画面レイアウト(ヘッダータブ)
Section titled “画面レイアウト(ヘッダータブ)”以下は AD メタデータ(AD_Field.XPosition, IsSameLine)から再現した、受注伝票ヘッダーの実際のフィールド配置です。
┌─ 受注伝票(Sales Order)─────────────────────────────────────────────────┐│ ││ クライアント [▼ Table Direct] 組織 [▼ Table Direct] ││ 伝票番号 [________________] 注文参照 [________________] ││ 説明 [_______________________________________________] (3行テキスト) ││ ││ ── 伝票タイプ・日付 ────────────────────────────────────────────────── ││ 対象伝票タイプ [▼ Table] セルフサービス [☐] ││ 注文日付 [📅 Date] 納品予定日 [📅 Date] ││ ││ ── 取引先情報 ──────────────────────────────────────────────────────── ││ 取引先 [🔍 Search] 請求先 [🔍 Search] ││ 取引先住所 [▼ Table Direct] 請求先住所 [▼ Table] ││ 担当者 [▼ Table Direct] 請求先担当者 [▼ Table] ││ ││ ── 出荷・配送 ──────────────────────────────────────────────────────── ││ 出荷ルール [▼ List] 優先度 [▼ List] ││ 倉庫 [▼ Table Direct] 直送 [☐] ││ 配送方法 [▼ List] 運送会社 [▼ Table] ││ 運賃ルール [▼ List] 運賃カテゴリ [▼ Table Direct] ││ 運賃金額 [¥_________] ││ ││ ── 請求・支払 ──────────────────────────────────────────────────────── ││ 請求ルール [▼ List] ││ 価格表 [▼ Table Direct] 通貨 [▼ Table Direct] ││ 営業担当者 [▼ Table] 割引率印刷 [☐] ││ 支払方法 [▼ List] 支払条件 [▼ Table Direct] ││ ││ ── 会計セグメント ──────────────────────────────────────────────────── ││ プロジェクト [▼ Table Direct] 活動 [▼ Table Direct] ││ キャンペーン [▼ Table Direct] 取引組織 [▼ Table] ││ ││ ── 合計・ステータス ────────────────────────────────────────────────── ││ 明細行合計 [¥_________] 総合計 [¥_________] ││ 伝票状態 [▼ List] 伝票タイプ [▼ Table Direct] ││ [明細行コピー] [注文プロセス] ││ ││ ── タブ ────────────────────────────────────────────────────────────── ││ [受注伝票] [受注明細] [税額計算] [支払スケジュール] [POS支払] │└──────────────────────────────────────────────────────────────────────────┘📌 ポイント: 画面は2カラム構成です。左列(XPosition=1)と右列(XPosition=4)にフィールドが配置されます。「説明」フィールドは全幅(ColumnSpan=5)を使用します。
関連DBテーブル
Section titled “関連DBテーブル”C_Order(受注/発注ヘッダー)
Section titled “C_Order(受注/発注ヘッダー)”販売・購買の両方で使用。IsSOTrx カラムで区別。
⚠️ 注意:
C_Orderテーブルは販売(IsSOTrx=Y)と購買(IsSOTrx=N)で共用されています。カスタムクエリやレポートでは必ずIsSOTrx条件を付与してください。付け忘れると受注・発注が混在した結果になります。
| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_Order_ID | ID | PK | 受発注ID | 主キー |
| AD_Client_ID | TableDirect | Y | クライアント | |
| AD_Org_ID | TableDirect | Y | 組織 | Callout: organization |
| IsSOTrx | YesNo | Y | 販売取引フラグ | Y=販売, N=購買 |
| DocumentNo | String | Y | 伝票番号 | UNIQUE(DocumentNo, C_DocType_ID, C_BPartner_ID) |
| C_DocType_ID | TableDirect | Y | 伝票タイプ | 確定後の伝票タイプ |
| C_DocTypeTarget_ID | Table | Y | 対象伝票タイプ | Callout: docType |
| DocStatus | List | Y | 伝票状態 | DR/IP/CO/CL/VO/RE |
| DocAction | Button | Y | 伝票アクション | |
| C_BPartner_ID | Search | Y | 取引先 | Callout: bPartner |
| C_BPartner_Location_ID | TableDirect | Y | 取引先住所 | |
| Bill_BPartner_ID | Search | N | 請求先 | Callout: bPartnerBill |
| DateOrdered | Date | Y | 注文日付 | Callout: dateAcct, priceList |
| DatePromised | Date | N | 納品予定日 | |
| DateAcct | Date | Y | 転記日付 | |
| M_Warehouse_ID | TableDirect | Y | 倉庫 | Callout: warehouse |
| M_PriceList_ID | TableDirect | Y | 価格表 | Callout: priceList |
| C_Currency_ID | TableDirect | Y | 通貨 | 価格表から自動決定 |
| TotalLines | Amount | Y | 明細行合計 | 自動計算 |
| GrandTotal | Amount | Y | 総合計 | 自動計算 |
| DeliveryRule | List | Y | 出荷ルール | F/C/A/M/L/O |
| InvoiceRule | List | Y | 請求ルール | D/I/S/O/N |
| PaymentRule | List | Y | 支払方法 | |
| C_PaymentTerm_ID | TableDirect | N | 支払条件 | |
| SalesRep_ID | Table | N | 社内担当者 | |
| Processed | YesNo | Y | 処理済み | |
| Posted | Button | Y | 転記 |
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 | 出荷済数量 |
| QtyReserved | Quantity | Y | 引当数量 |
| QtyInvoiced | Quantity | Y | 請求済数量 |
| PriceActual | Amount | Y | 実単価 |
| PriceList | Amount | Y | 定価 |
| LineNetAmt | Amount | Y | 行合計 |
| C_Tax_ID | TableDirect | Y | 税率 |
| M_Warehouse_ID | Table | Y | 倉庫 |
erDiagram
C_Order ||--o{ C_OrderLine : "has"
C_Order ||--o{ C_OrderTax : "has"
C_Order ||--o{ C_OrderPaySchedule : "has"
C_Order }o--|| C_BPartner : "references"
C_Order }o--|| M_PriceList : "references"
C_Order }o--|| M_Warehouse : "references"
C_Order }o--|| C_DocType : "references"
C_OrderLine }o--|| M_Product : "references"
C_OrderLine }o--|| C_Tax : "references"
C_Order ||--o{ M_InOut : "generates"
C_Order ||--o{ C_Invoice : "generates"
インデックス
Section titled “インデックス”| 名前 | 種別 | カラム |
|---|---|---|
| c_order_pkey | UNIQUE | C_Order_ID |
| c_order_documentno | UNIQUE | DocumentNo, C_DocType_ID, C_BPartner_ID |
| c_order_bpartner | INDEX | C_BPartner_ID |
| c_order_processed | INDEX | Processed, AD_Client_ID |
| c_order_uu_idx | UNIQUE | C_Order_UU |
ビジネスロジック
Section titled “ビジネスロジック”保存時バリデーション(beforeSave)
Section titled “保存時バリデーション(beforeSave)”📌 ポイント: iDempiere の Document 型レコードでは
beforeSave()→prepareIt()→completeIt()の順でビジネスロジックが実行されます。beforeSave()は保存のたびに呼ばれ、prepareIt()/completeIt()は伝票アクション実行時のみ呼ばれます。カスタムバリデーションの配置を誤るとパフォーマンス悪化や意図しない挙動の原因になります。
MOrder.beforeSave() の主要チェック:
- 組織チェック: AD_Org_ID=0 の場合はコンテキストから補完
- クライアントチェック: AD_Client_ID=0 は不可
- 倉庫の必須チェック: M_Warehouse_ID 未設定で
FillMandatoryException - 倉庫-組織の整合性: 倉庫と伝票の組織が異なる場合は警告
- 倉庫変更チェック: 既存明細がある場合、倉庫変更を制限
- 取引先-住所の整合性: 取引先変更時に住所・担当者のBPIDを検証
- 支払方法の妥当性: PaymentRule のバリデーション
- 処理済み伝票の変更制限: 伝票タイプ・日付・価格表の変更を禁止
伝票処理フロー
Section titled “伝票処理フロー”stateDiagram-v2
[*] --> Drafted : 新規作成
Drafted --> InProgress : prepareIt()
InProgress --> Completed : completeIt()
Completed --> Closed : closeIt()
Completed --> Voided : voidIt()
Completed --> Reversed : reverseCorrectIt()
Drafted --> Voided : voidIt()
prepareIt() の主要処理
Section titled “prepareIt() の主要処理”ModelValidator.TIMING_BEFORE_PREPAREイベント発火- 会計期間のオープンチェック
- 配送方法が「運送会社」の場合、運送会社の必須チェック
- 明細行の存在チェック(0行は不可)
- 出荷ルール「完全」の場合、納品予定日の整合性チェック
- 各明細行の価格・税額の再計算
- 与信限度チェック(販売の場合)
ModelValidator.TIMING_AFTER_PREPAREイベント発火
completeIt() の主要処理
Section titled “completeIt() の主要処理”ModelValidator.TIMING_BEFORE_COMPLETEイベント発火- 在庫の引当(
reserveStock()) - 出荷伝票の自動生成(出荷ルールによる)
- 請求書の自動生成(請求ルールによる)
- プロジェクトへの紐付け更新
- 購買連動受注の場合、発注伝票の自動生成
ModelValidator.TIMING_AFTER_COMPLETEイベント発火
🔧 カスタマイズ:
TIMING_BEFORE_COMPLETE/TIMING_AFTER_COMPLETEタイミングでModelValidator.docValidate()をフックすることで、完了前承認チェックや完了後の外部システム連携を安全に追加できます。コアのMOrder.completeIt()は変更不要です。
voidIt() の主要処理
Section titled “voidIt() の主要処理”- 既に出荷・請求済みの場合は無効化不可
- 在庫引当の解放(
reserveStock()で数量0にリセット) - 各明細行の数量を0にセット
Callout
Section titled “Callout”| Calloutクラス | メソッド | トリガーフィールド | 処理内容 |
|---|---|---|---|
| CalloutOrder | docType | C_DocTypeTarget_ID | 伝票タイプに応じた初期値セット(IsSOTrx, 価格表等) |
| CalloutOrder | bPartner | C_BPartner_ID | 取引先情報の自動セット(住所、支払条件、価格表、担当者) |
| CalloutOrder | bPartnerBill | Bill_BPartner_ID | 請求先情報の自動セット |
| CalloutOrder | organization | AD_Org_ID | 組織変更時の倉庫リセット |
| CalloutOrder | priceList | M_PriceList_ID / DateOrdered | 通貨の自動セット |
| CalloutOrder | warehouse | M_Warehouse_ID | 倉庫変更時の処理 |
| CalloutEngine | dateAcct | DateOrdered | 転記日付を注文日付に同期 |
Calloutソース: org.adempiere.base/src/org/compiere/model/CalloutOrder.java
💡 ヒント:
IColumnCalloutインターフェースを実装した OSGi プラグインで追加の Callout を登録できます。既存のCalloutOrderクラスを継承する必要はなく、AD_Column の Callout フィールドにクラス名.メソッド名を追記するだけで動作します。複数の Callout をカンマ区切りで指定可能です。
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”受注伝票に独自バリデーションや後処理を追加する最も安全な方法:
public class CustomOrderValidator implements ModelValidator { @Override public int modelChange(PO po, int type) throws Exception { if (po instanceof MOrder) { MOrder order = (MOrder) po; if (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE) { // 例: 受注金額の上限チェック if (order.isSOTrx() && order.getGrandTotal().compareTo(new BigDecimal("10000000")) > 0) { throw new AdempiereException("受注金額が上限を超えています"); } } } return null; }
@Override public String docValidate(PO po, int timing) { if (po instanceof MOrder) { MOrder order = (MOrder) po; if (timing == TIMING_BEFORE_COMPLETE) { // 例: 完了前の承認チェック } } return null; }}Callout 追加
Section titled “Callout 追加”OSGi プラグインで CalloutOrder を拡張し、新しいフィールドの連動処理を追加:
- AD_Column の Callout フィールドにクラス名.メソッド名を設定
- プラグインの
IColumnCalloutを実装
⚠️ 注意:
MOrderクラスは3,287行を超える巨大クラスです。Fragment でコアを上書きする場合、iDempiere のバージョンアップ時にマージコンフリクトが発生しやすくなります。OSGi Model Validator による拡張を強く推奨します。
プロセス追加
Section titled “プロセス追加”受注伝票に紐づくバッチ処理を追加:
SvrProcessを継承したプロセスクラスを作成- AD_Process に登録
- ツールバーボタンまたは歯車メニューに配置
関連プロセス
Section titled “関連プロセス”| プロセス名 | AD_Process_ID | 説明 |
|---|---|---|
| 注文プロセス (DocAction) | 104 | 伝票の完了・無効・取消等 |
| 明細行コピー | 211 | 他の受注伝票から明細行をコピー |
| 支払スケジュール検証 | 53245 | 支払スケジュールの妥当性チェック |
| 明細行毎に出荷伝票作成 | 200007 | 個別明細から出荷伝票を生成 |
| 明細行毎に生産指図作成 | 200006 | 個別明細から生産指図を生成 |
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”iDempiereの受注伝票は Model Validator や Callout で安全にカスタマイズできます。 コア改変なしで業務要件に合わせた拡張が可能です。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。