コンテンツにスキップ

iDempiere 受注伝票(Sales Order)|操作マニュアル・技術仕様

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

受注伝票は、iDempiereの販売管理における中核機能です。得意先からの受注を管理し、受注状況・引当状況・出荷(納品)状況・請求状況を一元的に把握できます。

受注伝票は見積伝票も兼ねており、受注か見積かは伝票タイプにより決定されます。受注伝票の完成時に在庫の引当が行われ、出荷納品伝票の作成には受注伝票の指定が必須です。

  • 得意先からの受注情報(品目・数量・価格・納期)を登録・管理
  • 見積伝票の作成と、見積から受注への変換
  • 在庫の自動引当(伝票完成時)
  • 出荷伝票・請求書の自動生成の起点
  • 受注から発注への自動生成(直送・受注連動発注)
  • 税額の自動計算、複数通貨での取引

🖥️ インタラクティブ画面レイアウト: 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

受注伝票ウィンドウ(Window ID: 143) 受注伝票 C_Order 60項目 受注伝票明細 C_OrderLine 40項目 税額計算 C_OrderTax 8項目(読取専用) 支払スケジュール C_OrderPaySchedule 11項目 POS支払 C_POSPayment 22項目

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

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分割払いのスケジュール支払予定日、金額
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["✅ 在庫引当・番号確定"]

① 新規作成 ② ヘッダー入力 取引先・伝票タイプ・日付 ③ 保存 ④ 明細タブへ 品目・数量・単価 ⑤ 明細保存 ⑥ ヘッダーに戻る ⑦ 完了処理 注文プロセス → 完了 在庫引当・番号確定 全行入力?

メニューから「販売管理 > 見積受注管理 > 受注伝票(標準)」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. ヘッダー情報を入力:
    • 伝票タイプ: 「標準受注伝票」を選択(見積の場合は「見積伝票」)

💡 ヒント: 伝票タイプを「見積伝票」にすると在庫の引当が行われません。確定していない商談には見積伝票を使い、受注確定後に標準受注伝票に変換するか、新規受注伝票を作成してください。

  • 注文日付: 受注日を入力(デフォルト: 当日)
  • 取引先: 得意先を選択(住所・担当者が自動セット)
  • 価格表: 適用する価格表を選択
  • 倉庫: 出荷元の倉庫を選択
  1. 保存」をクリック

📐 画面レイアウト: ヘッダータブのフィールド配置は 画面レイアウト(ヘッダータブ) を参照してください。

  1. 受注伝票明細」タブに移動
  2. 明細行を入力:
    • 品目: 販売する品目を選択(単価が価格表から自動セット)
    • 注文数量: 数量を入力
    • 単価: 必要に応じて修正(価格表から自動取得済み)
    • 税率: 取引先・品目に基づき自動セット
  3. 明細行ごとに「保存」をクリック
  4. 必要な明細行をすべて入力

📐 画面レイアウト: 明細タブの項目詳細は 受注伝票明細タブ を参照してください。

  1. 受注伝票」タブ(ヘッダー)に戻る
  2. 注文プロセス」ボタンをクリック
  3. アクション「完了(Complete)」を選択
  4. OK」をクリック

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

  • 在庫の引当(品目の予約)
  • 伝票番号の確定
  • 伝票ステータスが「完了」に変更

⚠️ 注意: 完了後の受注伝票は直接修正できません。数量変更・キャンセルが必要な場合は「無効」処理または「クローズ」処理を使います。詳細はFAQを参照してください。

項目名必須説明
伝票タイプ-リスト受注伝票の種類。標準受注伝票、見積伝票、クレジットオーダー等
注文日付-日付受注日(デフォルト: 当日)
納品予定日-日付得意先への納品予定日
取引先-検索得意先(取引先マスタから選択)
取引先住所-選択出荷先住所(取引先の住所から選択)
請求先-検索請求先が出荷先と異なる場合に指定
価格表-選択適用する価格表(通貨も決定される)
通貨自動選択価格表により自動セット
倉庫-選択出荷元の倉庫
社内担当者-選択営業担当者
出荷ルール-リスト出荷タイミング(強制、完全、在庫確認後 等)
請求ルール-リスト請求タイミング(出荷後、即時、スケジュール 等)
支払条件-選択支払条件マスタから選択
支払方法-リスト現金、小切手、クレジットカード、振込 等
直送-チェック仕入先から得意先へ直接出荷する場合にチェック
明細行合計自動金額全明細行の合計金額(税抜)
総合計自動金額税込の合計金額
伝票状態自動リスト起案、進行中、完了、取消 等
項目名必須説明
品目-検索販売する品目(品目マスタから選択)
注文数量必須数量受注数量
数量単位-選択品目の数量単位(品目マスタから自動セット)
単価-金額販売単価(価格表から自動取得、手動修正可)
営業定価-金額価格表上の定価(参考表示)
割引 %-数値値引率(単価と定価から自動計算)
税率-選択適用する税率(取引先・品目から自動判定)
行合計自動金額数量 x 単価の行合計
出荷済数量自動数量出荷済みの数量
請求済数量自動数量請求済みの数量
引当数量自動数量在庫引当済みの数量
倉庫必須選択出荷元倉庫(ヘッダーから初期値)
納品予定日-日付明細行単位の納品予定日

📌 ポイント: 伝票タイプによって在庫引当の有無が異なります。見積段階では「見積伝票」を使い、受注確定時に「標準受注伝票」へ変換することで、在庫を適切なタイミングで引き当てられます。

伝票タイプ用途在庫引当
標準受注伝票通常の受注あり
見積伝票見積書の作成なし
クレジットオーダークレジット販売あり
POS受注伝票POS端末での販売あり
倉庫間受注拠点間の在庫移動あり
受注返品伝票返品処理あり(マイナス)
stateDiagram-v2
    [*] --> 起案: 新規作成
    起案 --> 完了: 完了処理
    起案 --> 無効: 無効処理
    完了 --> クローズ: クローズ処理
    完了 --> 無効: 無効処理
    完了 --> 取消: 取消処理

*

ステータス説明
起案(Drafted)入力中。在庫引当なし
完了(Completed)確定済み。在庫引当あり
クローズ(Closed)全出荷・請求完了
無効(Voided)取消。引当が解放される

Q. 受注伝票を完了した後に修正できますか?

Section titled “Q. 受注伝票を完了した後に修正できますか?”

完了済みの受注伝票は直接修正できません。以下の方法で対応します:

  • 数量の減少: 「クローズ」処理で未出荷分をキャンセル
  • 取消: 「無効」処理で全体を取消(引当も解放)
  • 再作成: 無効処理後に新しい受注伝票を作成

Q. 見積から受注に変換するには?

Section titled “Q. 見積から受注に変換するには?”
  1. 伝票タイプ「見積伝票」で見積を作成し完了
  2. メニュー「販売管理 > 見積受注管理 > 見積から受注伝票作成」を実行
  3. 対象の見積伝票を選択して変換

Q. 受注伝票でエラーが出る場合は?

Section titled “Q. 受注伝票でエラーが出る場合は?”

よくあるエラーと対処法:

エラー原因対処法
「在庫が不足しています」出荷ルールが「完全」で在庫不足出荷ルールを「在庫確認後」に変更、または入荷を待つ
「価格が見つかりません」品目が価格表に未登録価格表に品目の価格を登録
「取引先の与信限度を超えています」与信管理の制限取引先マスタの与信限度額を確認
「伝票処理できません」明細行が0行最低1行の明細行を入力

iDempiereでは「役割(Role)」単位でウィンドウへのアクセス権限を設定します。 メニュー「システム管理 > 基本ルール > セキュリティ > ロール」から対象の役割を開き、「ウィンドウアクセス」タブで設定してください。

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

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

2つの方法があります:

  1. 自動生成: メニュー「販売管理 > 出荷納品管理 > 出荷納品伝票作成」で一括生成
  2. 個別生成: 受注伝票明細の「明細行毎に出荷納品伝票を作成」ボタンを使用
graph TD
    A[見積伝票] -->|変換| B[受注伝票]
    B -->|出荷生成| C[出荷伝票]
    B -->|請求生成| D[売上請求書]
    B -->|発注生成| E[発注伝票]
    C --> F[入出金]
    D --> F

変換 出荷生成 請求生成 発注生成 見積伝票 受注伝票 出荷伝票 売上請求書 発注伝票 入出金


iDempiereの受注管理は、中小企業から大企業まで幅広い業務要件に対応できる柔軟な機能を備えています。 見積から受注、出荷、請求までの一連の業務フローを、オープンソースERPで実現しませんか?

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

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


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

受注伝票は Document 型の伝票で、C_Order テーブルに格納されます。販売(IsSOTrx=Y)と購買(IsSOTrx=N)の両方で共用されます。MOrder クラス(3,287行)が中核ビジネスロジックを担い、DocAction インターフェースを実装しています。

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

+prepareIt() String +completeIt() String +voidIt() boolean +closeIt() boolean +reverseCorrectIt() boolean +beforeSave() boolean +validatePaySchedule() boolean <> <> <> > X_C_Order X_C_Order --

パッケージ: 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)を使用します。

販売・購買の両方で使用。IsSOTrx カラムで区別。

⚠️ 注意: C_Order テーブルは販売(IsSOTrx=Y)と購買(IsSOTrx=N)で共用されています。カスタムクエリやレポートでは必ず IsSOTrx 条件を付与してください。付け忘れると受注・発注が混在した結果になります。

カラム名必須説明備考
C_Order_IDIDPK受発注ID主キー
AD_Client_IDTableDirectYクライアント
AD_Org_IDTableDirectY組織Callout: organization
IsSOTrxYesNoY販売取引フラグY=販売, N=購買
DocumentNoStringY伝票番号UNIQUE(DocumentNo, C_DocType_ID, C_BPartner_ID)
C_DocType_IDTableDirectY伝票タイプ確定後の伝票タイプ
C_DocTypeTarget_IDTableY対象伝票タイプCallout: docType
DocStatusListY伝票状態DR/IP/CO/CL/VO/RE
DocActionButtonY伝票アクション
C_BPartner_IDSearchY取引先Callout: bPartner
C_BPartner_Location_IDTableDirectY取引先住所
Bill_BPartner_IDSearchN請求先Callout: bPartnerBill
DateOrderedDateY注文日付Callout: dateAcct, priceList
DatePromisedDateN納品予定日
DateAcctDateY転記日付
M_Warehouse_IDTableDirectY倉庫Callout: warehouse
M_PriceList_IDTableDirectY価格表Callout: priceList
C_Currency_IDTableDirectY通貨価格表から自動決定
TotalLinesAmountY明細行合計自動計算
GrandTotalAmountY総合計自動計算
DeliveryRuleListY出荷ルールF/C/A/M/L/O
InvoiceRuleListY請求ルールD/I/S/O/N
PaymentRuleListY支払方法
C_PaymentTerm_IDTableDirectN支払条件
SalesRep_IDTableN社内担当者
ProcessedYesNoY処理済み
PostedButtonY転記
カラム名必須説明
C_OrderLine_IDIDPK明細ID
C_Order_IDSearchYヘッダーFK
LineIntegerY行番号
M_Product_IDSearchN品目
QtyOrderedQuantityY注文数量
QtyDeliveredQuantityY出荷済数量
QtyReservedQuantityY引当数量
QtyInvoicedQuantityY請求済数量
PriceActualAmountY実単価
PriceListAmountY定価
LineNetAmtAmountY行合計
C_Tax_IDTableDirectY税率
M_Warehouse_IDTableY倉庫
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"
名前種別カラム
c_order_pkeyUNIQUEC_Order_ID
c_order_documentnoUNIQUEDocumentNo, C_DocType_ID, C_BPartner_ID
c_order_bpartnerINDEXC_BPartner_ID
c_order_processedINDEXProcessed, AD_Client_ID
c_order_uu_idxUNIQUEC_Order_UU

保存時バリデーション(beforeSave)

Section titled “保存時バリデーション(beforeSave)”

📌 ポイント: iDempiere の Document 型レコードでは beforeSave()prepareIt()completeIt() の順でビジネスロジックが実行されます。beforeSave() は保存のたびに呼ばれ、prepareIt()/completeIt() は伝票アクション実行時のみ呼ばれます。カスタムバリデーションの配置を誤るとパフォーマンス悪化や意図しない挙動の原因になります。

MOrder.beforeSave() の主要チェック:

  1. 組織チェック: AD_Org_ID=0 の場合はコンテキストから補完
  2. クライアントチェック: AD_Client_ID=0 は不可
  3. 倉庫の必須チェック: M_Warehouse_ID 未設定で FillMandatoryException
  4. 倉庫-組織の整合性: 倉庫と伝票の組織が異なる場合は警告
  5. 倉庫変更チェック: 既存明細がある場合、倉庫変更を制限
  6. 取引先-住所の整合性: 取引先変更時に住所・担当者のBPIDを検証
  7. 支払方法の妥当性: PaymentRule のバリデーション
  8. 処理済み伝票の変更制限: 伝票タイプ・日付・価格表の変更を禁止
stateDiagram-v2
    [*] --> Drafted : 新規作成
    Drafted --> InProgress : prepareIt()
    InProgress --> Completed : completeIt()
    Completed --> Closed : closeIt()
    Completed --> Voided : voidIt()
    Completed --> Reversed : reverseCorrectIt()
    Drafted --> Voided : voidIt()

*

  1. ModelValidator.TIMING_BEFORE_PREPARE イベント発火
  2. 会計期間のオープンチェック
  3. 配送方法が「運送会社」の場合、運送会社の必須チェック
  4. 明細行の存在チェック(0行は不可)
  5. 出荷ルール「完全」の場合、納品予定日の整合性チェック
  6. 各明細行の価格・税額の再計算
  7. 与信限度チェック(販売の場合)
  8. ModelValidator.TIMING_AFTER_PREPARE イベント発火
  1. ModelValidator.TIMING_BEFORE_COMPLETE イベント発火
  2. 在庫の引当(reserveStock()
  3. 出荷伝票の自動生成(出荷ルールによる)
  4. 請求書の自動生成(請求ルールによる)
  5. プロジェクトへの紐付け更新
  6. 購買連動受注の場合、発注伝票の自動生成
  7. ModelValidator.TIMING_AFTER_COMPLETE イベント発火

🔧 カスタマイズ: TIMING_BEFORE_COMPLETE / TIMING_AFTER_COMPLETE タイミングで ModelValidator.docValidate() をフックすることで、完了前承認チェックや完了後の外部システム連携を安全に追加できます。コアの MOrder.completeIt() は変更不要です。

  1. 既に出荷・請求済みの場合は無効化不可
  2. 在庫引当の解放(reserveStock() で数量0にリセット)
  3. 各明細行の数量を0にセット
Calloutクラスメソッドトリガーフィールド処理内容
CalloutOrderdocTypeC_DocTypeTarget_ID伝票タイプに応じた初期値セット(IsSOTrx, 価格表等)
CalloutOrderbPartnerC_BPartner_ID取引先情報の自動セット(住所、支払条件、価格表、担当者)
CalloutOrderbPartnerBillBill_BPartner_ID請求先情報の自動セット
CalloutOrderorganizationAD_Org_ID組織変更時の倉庫リセット
CalloutOrderpriceListM_PriceList_ID / DateOrdered通貨の自動セット
CalloutOrderwarehouseM_Warehouse_ID倉庫変更時の処理
CalloutEnginedateAcctDateOrdered転記日付を注文日付に同期

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

💡 ヒント: IColumnCallout インターフェースを実装した OSGi プラグインで追加の Callout を登録できます。既存の CalloutOrder クラスを継承する必要はなく、AD_Column の Callout フィールドに クラス名.メソッド名 を追記するだけで動作します。複数の Callout をカンマ区切りで指定可能です。

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

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

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

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;
}
}

OSGi プラグインで CalloutOrder を拡張し、新しいフィールドの連動処理を追加:

  1. AD_Column の Callout フィールドにクラス名.メソッド名を設定
  2. プラグインの IColumnCallout を実装

⚠️ 注意: MOrder クラスは3,287行を超える巨大クラスです。Fragment でコアを上書きする場合、iDempiere のバージョンアップ時にマージコンフリクトが発生しやすくなります。OSGi Model Validator による拡張を強く推奨します。

受注伝票に紐づくバッチ処理を追加:

  1. SvrProcess を継承したプロセスクラスを作成
  2. AD_Process に登録
  3. ツールバーボタンまたは歯車メニューに配置
プロセス名AD_Process_ID説明
注文プロセス (DocAction)104伝票の完了・無効・取消等
明細行コピー211他の受注伝票から明細行をコピー
支払スケジュール検証53245支払スケジュールの妥当性チェック
明細行毎に出荷伝票作成200007個別明細から出荷伝票を生成
明細行毎に生産指図作成200006個別明細から生産指図を生成

iDempiereの受注伝票は Model Validator や Callout で安全にカスタマイズできます。 コア改変なしで業務要件に合わせた拡張が可能です。

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

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