コンテンツにスキップ

iDempiere 配送トランザクションの使い方|販売管理 操作マニュアル・技術仕様

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

配送トランザクション(Shipping Transaction)は、出荷伝票を運送会社のオンラインサービスへ連携するための伝票です。梱包の重量・寸法や配送オプションを登録し、送料照会(Rate Inquiry)・出荷登録(Process Shipment)・出荷取消(Void Shipment)を運送会社の API 経由で実行して、返ってきた追跡番号や送料を記録します。

📌 ポイント: この画面は運送会社との連携(Shipping Processor)を前提とした画面です。運送会社に対応する Shipping Processor が登録されていないと処理は実行できず、ShippingNoProcessor エラーとなります。

配送トランザクションでできること

Section titled “配送トランザクションでできること”
  • 出荷伝票・受注伝票・売上請求伝票を参照した配送依頼の作成
  • 梱包単位(箱)の重量・長さ・幅・高さの登録
  • 運送会社へのオンライン送料照会(Rate Inquiry)
  • 運送会社への出荷登録と追跡番号(トラックNo)の取得
  • 登録済み出荷のオンライン取消(Void Shipment)
  • 保険・代金引換(COD)・土曜配達・危険物などの配送オプション指定
  • 送料負担区分(元払い・着払い・第三者払い)と Incoterms(Freight Terms)の指定
  • 通知タイプ・配送確認タイプによる受取確認の指定
graph TD
    subgraph "配送トランザクションウィンドウ(Window ID: 200030)"
        T1["🚚 Shipping Transaction<br/>M_ShippingTransaction<br/>79項目"]
        T2["📦 Shipping Transaction Line<br/>M_ShippingTransactionLine<br/>16項目"]
    end
    T1 --> T2

配送トランザクションウィンドウ(Window ID: 200030) Shipping Transaction M_ShippingTransaction 79項目 Shipping Transaction Line M_ShippingTransactionLine 16項目

タブ名テーブル役割主な入力項目
Shipping TransactionM_ShippingTransactionヘッダー(運送会社・アクション・配送オプション・集計重量)運送会社、アクション、取引先、重量、寸法
Shipping Transaction LineM_ShippingTransactionLine梱包(箱)ごとの明細重量、寸法、価格、トラックNo

💡 ヒント: 1 つの出荷に複数の箱がある場合、箱ごとに明細行を作成します。明細行にはそれぞれ個別のトラックNo(TrackingNo)と、全体をまとめる Master Tracking No(MasterTrackingNo)が記録されます。

graph TD
    A["🚀 メニューから開く<br/>販売管理 > 出荷納品管理 ><br/>Shipping Transaction"] --> B["➕ 新規で運送会社を選択<br/>(M_Shipper_ID は必須)"]
    B --> C["🔗 出荷伝票・受注伝票などを参照<br/>(取引先・住所を設定)"]
    C --> D["⚖️ 重量・寸法・箱数を入力"]
    D --> E["⚙️ 配送オプションを指定<br/>(保険・COD・土曜配達など)"]
    E --> F{アクションを選択}
    F -->|送料を知りたい| G["💰 Rate Inquiry (RI)"]
    F -->|出荷を登録する| H["🚚 Process Shipment (PS)"]
    F -->|登録を取り消す| I["❌ Void Shipment (VS)"]
    G --> J["🌐 運送会社へオンライン送信<br/>Shipping Processor 経由"]
    H --> J
    I --> J
    J --> K{処理結果}
    K -->|成功| L["✅ 処理済み=Y<br/>トラックNo・価格・応答メッセージを記録"]
    K -->|失敗| M["⚠️ エラーメッセージを表示<br/>オンライン取引履歴に記録"]

メニューから開く 販売管理 > 出荷納品管理 > Shipping Transaction 新規で運送会社を選択 (M_Shipper_ID は必須) 出荷伝票・受注伝票などを参照 (取引先・住所を設定) 重量・寸法・箱数を入力 配送オプションを指定 (保険・COD・土曜配達など) Rate Inquiry (RI) Process Shipment (PS) Void Shipment (VS) 運送会社へオンライン送信 Shipping Processor 経由 処理済み=Y トラックNo・価格・応答メッセージを記録 エラーメッセージを表示 オンライン取引履歴に記録 アクションを選択 処理結果 送料を知りたい 出荷を登録する 登録を取り消す 成功 失敗

アクセス方法(メニューパス)

Section titled “アクセス方法(メニューパス)”

メニューから「販売管理 > 出荷納品管理 > Shipping Transaction」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. 基本情報を入力:
    • 運送会社M_Shipper_ID): 連携先の運送会社(必須)
    • アクションAction): 実行する処理(必須。送料照会/出荷登録/出荷取消)
    • Shipping Processor: 使用する連携処理(運送会社の設定に応じて選択)
    • 取引先 / 取引先住所 / ユーザー: 届け先の情報
    • 倉庫: 出荷元倉庫
    • 入出荷伝票 / 受注伝票 / 売上請求伝票: 参照元の伝票
  3. 梱包情報を入力:
    • 重量計量単位重量Length / Width / Height計量単位長さ
    • Box Count: 箱数(初期値は 1
    • Shipper Packaging / Shipper Labels / Shipper Pickup Types: 運送会社が提供する梱包・ラベル・集荷区分
  4. 配送オプションを必要に応じて指定(保険、代金引換、土曜配達、危険物 等)
  5. 保存」をクリック
  6. 箱が複数ある場合は「Shipping Transaction Line」タブで箱ごとの明細を登録
  7. 運送会社へのオンライン処理を実行し、結果(トラックNo・価格・応答メッセージ)を確認

⚠️ 注意: この伝票には伝票状態(DocStatus)や伝票アクション(DocAction)がありません。ワークフローによる承認フローは持たず、「アクション」欄で選んだ処理をオンライン実行し、成功すると「処理済み」(Processed)が Y になります。

アクション呼び出されるメソッド用途
Process ShipmentPSIShipmentProcessor.processShipment()運送会社に出荷を登録し、追跡番号・送料を取得
Rate InquiryRIIShipmentProcessor.rateInquiry()出荷前に送料を照会
Void ShipmentVSIShipmentProcessor.voidShipment()登録済みの出荷を取り消し

上記以外の値が設定されている場合は ActionNotSupported 例外となります。

主要項目のみ掲載しています。全項目一覧はリファレンス参照

Shipping Transaction タブ(ヘッダー)

Section titled “Shipping Transaction タブ(ヘッダー)”
項目名必須説明
運送会社必須選択連携先の運送会社
アクション必須リストProcess Shipment / Rate Inquiry / Void Shipment
Shipping Processor-選択使用する配送処理(運送会社連携の実装)
取引先-検索届け先の取引先
取引先住所-選択届け先住所
倉庫-選択出荷元倉庫
入出荷伝票-検索参照する出荷伝票
受注伝票-検索参照する受注伝票
売上請求伝票-検索参照する売上請求伝票
重量 / 計量単位重量-数量総重量とその単位
Length / Width / Height-数量梱包寸法
Box Count-整数箱数(初期値 1)
Insurance / Insured Amount-リスト・金額保険の要否(1=付保、2=付保しない)と保険金額
運賃-リスト送料負担区分(元払い・着払い・第三者払い等)
Frieght Terms-リストIncoterms(FOB、EXW、CIF 等)
代金引換 / COD Amount-チェック・金額代金引換の要否と金額
配送確認タイプ-リストADULT / DIRECT / INDIRECT / SERVICE_DEFAULT
Hazardous Materials / Residential-チェック危険物の有無(初期値 N)・個人宅配送(初期値 Y)
トラックNo / 応答メッセージ自動文字列・テキスト運送会社から返る追跡番号と応答内容
価格 / 追加料金自動金額照会・登録の結果として返る送料
処理済み自動チェックオンライン処理の成否(初期値 N)
項目名必須説明
Shipping Transaction必須検索ヘッダーへの参照
シーケンスNo-整数明細の並び順
重量 / 計量単位重量-数量当該梱包の重量と単位
Length / Width / Height-数量当該梱包の寸法
価格-金額当該梱包の送料
トラックNo-文字列当該梱包の追跡番号
Master Tracking No-文字列出荷全体をまとめる追跡番号
Package MPS-検索対応する梱包(Multiple Package Shipment)
処理済み自動チェック処理済みフラグ(初期値 N)

Q. 処理しようとすると「Shipping Processor がない」というエラーになります。

Section titled “Q. 処理しようとすると「Shipping Processor がない」というエラーになります。”

MShippingTransaction.processOnline() は、指定された運送会社(M_Shipper_ID)から MShipperFacade を組み立て、Core.getShipmentProcessor() で連携実装を解決します。解決できない場合は ShippingNoProcessor メッセージがエラー欄にセットされ、処理は行われません。運送会社に対応する Shipping Processor(M_ShippingProcessor)の設定を確認してください。

Q. 処理に失敗しても記録は残りますか?

Section titled “Q. 処理に失敗しても記録は残りますか?”

残ります。processOnline() は成否にかかわらず MOnlineTrxHistory(オンライン取引履歴)レコードをトランザクション外で保存します。履歴にはエラーフラグ、応答メッセージまたはエラーメッセージ、実行したアクションが記録されるため、失敗時の調査に利用できます。

Q. 伝票を「完了」する操作はありますか?

Section titled “Q. 伝票を「完了」する操作はありますか?”

ありません。この伝票は DocStatus / DocAction を持たない非 Document 型です。「アクション」欄で処理内容を選び、オンライン処理が成功すると Processed=Y になります。承認フローが必要な場合は参照元の出荷伝票側で管理してください。

Q. 国際配送かどうかはどう判定されますか?

Section titled “Q. 国際配送かどうかはどう判定されますか?”

MShippingTransaction.isInternational() が送り元と届け先の情報から判定します。国際配送では通関価格(Customs Value)や Frieght Terms(Incoterms)、品目ごとの HS コード(getHarmonizedCode())、原産国(getCountryOfManufacture())などが運送会社へ送信されます。

Q. 送料は誰が負担する設定になりますか?

Section titled “Q. 送料は誰が負担する設定になりますか?”

「運賃」(FreightCharges)で指定します。元払い(Prepaid)、着払い(Collect)、第三者払い(3rd Party)、Consignee、Prepaid and Bill から選択でき、isPayBySender() / isCollect() / is3rdParty() が支払口座(ShipperAccount / DutiesShipperAccount)の選択に使用されます。

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

配送トランザクションは非 Document 型のトランザクションレコードで、M_ShippingTransaction テーブルに格納されます。MShippingTransaction(536行)は X_M_ShippingTransaction を継承するのみで DocAction を実装せず、運送会社連携(IShipmentProcessor)の呼び出しと、その結果の保持を担います。明細クラス MShippingTransactionLine(75行)はコンストラクタのみの薄いクラスで、独自ロジックを持ちません。

M_ShippingTransaction / M_ShippingTransactionLine のアクセスレベルは「クライアント+組織」、いずれも削除可(IsDeleteable=Y)です。

classDiagram
    class MShippingTransaction {
        +processOnline() boolean
        +getLines(String) MShippingTransactionLine[]
        +getMShipper() MShipper
        +isInternational() boolean
        +isPayBySender() boolean
        +isCollect() boolean
        +is3rdParty() boolean
        +getPayorAccount() String
        +getSenderInfo() PartyInfo
        +getRecipientInfo() PartyInfo
        +setErrorMessage(String) void
    }
    class MShippingTransactionLine {
        <<thin wrapper>>
    }
    class X_M_ShippingTransaction {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    class IShipmentProcessor {
        <<interface>>
        +processShipment(...) boolean
        +rateInquiry(...) boolean
        +voidShipment(...) boolean
    }
    MShippingTransaction --|> X_M_ShippingTransaction
    X_M_ShippingTransaction --|> PO
    MShippingTransaction --> MShippingTransactionLine : has many
    MShippingTransaction --> IShipmentProcessor : delegates
    MShippingTransaction --> MShipperFacade : builds
    MShippingTransaction --> MOnlineTrxHistory : logs

+processOnline() boolean +getLines(String) MShippingTransactionLine[] +getMShipper() MShipper +isInternational() boolean +isPayBySender() boolean +isCollect() boolean +is3rdParty() boolean +getPayorAccount() String +getSenderInfo() PartyInfo +getRecipientInfo() PartyInfo +setErrorMessage(String) void <> <> <> <> +processShipment(...) boolean +rateInquiry(...) boolean +voidShipment(...) boolean > X_M_ShippingTransaction X_M_ShippingTransaction --

パッケージ: org.compiere.model ソースファイル: org.adempiere.base/src/org/compiere/model/MShippingTransaction.java(536行)、MShippingTransactionLine.java(75行)

関連クラス: MShippingProcessor / MShippingProcessorCfg(運送会社連携の設定)、MShipper / MShipperFacade(運送会社情報)。

M_ShippingTransaction(配送トランザクション)

Section titled “M_ShippingTransaction(配送トランザクション)”

📌 ポイント: Yes-No 系のオプション項目(IsHazMat, IsSaturdayDelivery, IsDryIce など)は既定値 N ですが、IsResidential のみ既定値が Y です。個人宅以外への配送が中心の運用では、既定値の見直しを検討してください。

カラム名必須説明備考
M_ShippingTransaction_IDIDPK配送トランザクションID主キー
AD_Client_IDTableDirectYクライアント既定 @#AD_Client_ID@
AD_Org_IDTableDirectY組織既定 @#AD_Org_ID@
M_Shipper_IDTableY運送会社連携先の決定に使用
ActionListYアクションPS / RI / VS
M_ShippingProcessor_IDTableNShipping Processor連携実装の指定
C_BPartner_IDSearchN取引先
C_BPartner_Location_IDTableDirectN取引先住所届け先
M_Warehouse_IDTableDirectN倉庫出荷元
M_InOut_IDSearchN入出荷伝票参照元
C_Order_IDSearchN受注伝票参照元
C_Invoice_IDSearchN売上請求伝票参照元
M_Package_IDSearchN梱包
Weight / C_UOM_Weight_IDQuantity / TableN重量・単位
Length / Width / HeightQuantityN寸法単位は C_UOM_Length_ID
BoxCountIntegerN箱数既定 1
Insurance / InsuredAmountList / AmountN保険1=付保, 2=付保しない
FreightChargesListN送料負担区分Collect / 3rd Party / Consignee / Prepaid / Prepaid and Bill
FOBListNIncotermsFOB, EXW, CIF, CIP, CPT, DDP 等
CashOnDelivery / CODAmountYesNo / Costs+PricesN代金引換既定 N
DeliveryConfirmation / DeliveryConfirmationTypeYesNo / ListN配送確認ADULT / DIRECT / INDIRECT / SERVICE_DEFAULT
IsHazMat / IsResidentialYesNoY危険物・個人宅配送既定 N / Y
ShipperAccount / DutiesShipperAccountStringN運送会社アカウント支払区分により使い分け
CustomsValue / FreightAmt / HandlingCharge / SurchargesCosts+Prices / AmountN通関価格・送料・手数料
TrackingNo / TrackingInfo / ShippingRespMessageString / TextN追跡番号・追跡情報・応答メッセージ連携結果
ProcessedYesNoY処理済み既定 N

M_ShippingTransactionLine(配送トランザクション明細)

Section titled “M_ShippingTransactionLine(配送トランザクション明細)”
カラム名必須説明備考
M_ShippingTransactionLine_IDIDPK明細ID主キー
M_ShippingTransaction_IDSearchYヘッダーFK
SeqNoIntegerN並び順既定 SQL は M_PackageMPS を参照
Weight / C_UOM_Weight_IDQuantity / TableN重量・単位
Length / Width / HeightQuantityN寸法
C_UOM_Length_IDTableN長さの単位
PriceCosts+PricesN梱包ごとの送料
TrackingNoStringN追跡番号
MasterTrackingNoStringN親追跡番号
M_PackageMPS_IDSearchN梱包(MPS)
ProcessedYesNoY処理済み既定 N

⚠️ 注意: M_ShippingTransactionLine.SeqNo の既定値 SQL は M_PackageMPS テーブルを参照しています(SELECT NVL(MAX(SeqNo),0)+10 FROM M_PackageMPS WHERE M_Package_ID=@M_Package_ID@)。配送トランザクション明細を直接追加した場合、コンテキストに @M_Package_ID@ が無いと既定値が算出されないため、シーケンスNoは手入力が必要です。

erDiagram
    M_ShippingTransaction ||--o{ M_ShippingTransactionLine : "has lines"
    M_ShippingTransaction }o--|| M_Shipper : "carrier"
    M_ShippingTransaction }o--o| M_ShippingProcessor : "processor"
    M_ShippingTransaction }o--o| M_InOut : "shipment"
    M_ShippingTransaction }o--o| C_Order : "order"
    M_ShippingTransaction }o--o| C_Invoice : "invoice"
    M_ShippingTransaction }o--o| M_Package : "package"
    M_ShippingTransaction }o--o| C_BPartner : "ship to"
    M_ShippingTransactionLine }o--o| M_PackageMPS : "package MPS"

has lines ship to package MPS

processOnline()(MShippingTransaction.java 121行〜)

Section titled “processOnline()(MShippingTransaction.java 121行〜)”
flowchart TD
    A[processOnline] --> B[エラーメッセージをクリア]
    B --> C[MShipperFacade を生成<br/>Core.getShipmentProcessor]
    C --> D{Processor が解決できた?}
    D -->|No| E[ShippingNoProcessor<br/>return false]
    D -->|Yes| F{Action}
    F -->|PS| G[processShipment]
    F -->|RI| H[rateInquiry]
    F -->|VS| I[voidShipment]
    F -->|その他| J[ActionNotSupported 例外]
    G --> K{成功?}
    H --> K
    I --> K
    K -->|No| L[運送会社名+応答メッセージを<br/>エラーとして格納]
    K -->|Yes| M[応答メッセージを保持]
    L --> N[MOnlineTrxHistory を<br/>トランザクション外で保存]
    M --> N
    N --> O["setProcessed で結果を保存して返却"]

setProcessed で結果を保存して返却 Processor が解決できた? 成功? その他 エラーメッセージをクリア MShipperFacade を生成 Core.getShipmentProcessor ShippingNoProcessor return false ActionNotSupported 例外 運送会社名+応答メッセージを エラーとして格納 応答メッセージを保持 MOnlineTrxHistory を トランザクション外で保存

処理の要点は次のとおりです。

  1. MShipperFacade(getMShipper()) を生成し、Core.getShipmentProcessor(sf)IShipmentProcessor 実装を解決。解決できない場合は ShippingNoProcessor をエラーにセットして false を返す
  2. Action の値により processShipment() / rateInquiry() / voidShipment() を呼び分け、未対応値は AdempiereException("ActionNotSupported")
  3. 失敗時は運送会社名と応答メッセージを連結したエラー文を生成、例外発生時は ShippingNotProcessed に例外メッセージを連結
  4. 成否にかかわらず MOnlineTrxHistory を生成し、AD_Table_ID / Record_ID / IsError / Processed / TextMsg(応答またはエラー+実行アクション)を saveCrossTenantSafeEx() でトランザクション外に保存
  5. 最後に setProcessed(processed) を実行

支払・国際配送の判定ヘルパー

Section titled “支払・国際配送の判定ヘルパー”
メソッド用途
isInternational()国際配送かどうかの判定
isPayBySender() / isCollect() / is3rdParty()送料負担区分の判定
getPayorAccount() / getDutiesPayorAccount() / getPayorCountryCode()請求先アカウント・国コードの解決
getCommodityShipment(M_Product_ID) / getHarmonizedCode() / getExportLicenseNum() / getCountryOfManufacture()通関書類向けの品目情報取得
getSenderInfo() / getRecipientInfo()送り主・届け先の PartyInfo(会社名・担当者・電話・メール・住所ID)を組み立て
isPrintLabelAsImage() / isPrintZebraLabel() / isPrintEltronLabel()ラベル出力形式の判定

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

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

運送会社連携の追加(IShipmentProcessor

Section titled “運送会社連携の追加(IShipmentProcessor)”

新しい運送会社と連携する場合は IShipmentProcessor を実装し、OSGi サービスとして登録します。Core.getShipmentProcessor(MShipperFacade) がファサードから実装を解決するため、コアの MShippingTransaction を変更する必要はありません。

public class MyCarrierShipmentProcessor implements IShipmentProcessor {
@Override
public boolean processShipment(Properties ctx, MShippingTransaction st, String trxName) {
// 運送会社APIへ送信し、結果を配送トランザクションへ書き戻す
st.setTrackingNo("...");
st.setPrice(...);
st.setShippingRespMessage("...");
return true;
}
// rateInquiry / voidShipment も同様に実装
}

保存前チェックを追加する場合は modelChange() を使用します。この伝票は Document 型ではないため、docValidate() は使用しません。

public class CustomShippingTransactionValidator implements ModelValidator {
@Override
public int modelChange(PO po, int type) throws Exception {
if (po instanceof MShippingTransaction
&& (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE)) {
MShippingTransaction st = (MShippingTransaction) po;
if (st.getWeight() == null || st.getWeight().signum() <= 0) {
throw new AdempiereException("配送トランザクションには重量の入力が必要です");
}
}
return null;
}
}

M_ShippingTransaction / M_ShippingTransactionLine の全カラムに AD 上の callout 定義はありません。運送会社選択時に既定値を補完したい場合などは、独自 callout を追加してください。

このウィンドウには専用のプロセスボタンは定義されていません。運送会社との通信は MShippingTransaction.processOnline() を通じて行われ、実行結果は C_OnlineTrxHistory(オンライン取引履歴)に記録されます。


配送トランザクションは IShipmentProcessor を実装するだけで、国内の運送会社 API とも連携できる拡張ポイントが用意されています。 送り状発行、追跡番号の自動取込、送料の自動計上などをコア改変なしで実現できます。

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

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