iDempiere 配送トランザクションの使い方|販売管理 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 販売管理の全体像: 販売管理の全体図 も合わせてご覧ください。
配送トランザクション(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
| タブ名 | テーブル | 役割 | 主な入力項目 |
|---|---|---|---|
| Shipping Transaction | M_ShippingTransaction | ヘッダー(運送会社・アクション・配送オプション・集計重量) | 運送会社、アクション、取引先、重量、寸法 |
| Shipping Transaction Line | M_ShippingTransactionLine | 梱包(箱)ごとの明細 | 重量、寸法、価格、トラックNo |
💡 ヒント: 1 つの出荷に複数の箱がある場合、箱ごとに明細行を作成します。明細行にはそれぞれ個別のトラックNo(
TrackingNo)と、全体をまとめる Master Tracking No(MasterTrackingNo)が記録されます。
基本操作手順
Section titled “基本操作手順”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/>オンライン取引履歴に記録"]
アクセス方法(メニューパス)
Section titled “アクセス方法(メニューパス)”メニューから「販売管理 > 出荷納品管理 > Shipping Transaction」を開きます。
- ツールバーの「新規」ボタンをクリック
- 基本情報を入力:
- 運送会社(
M_Shipper_ID): 連携先の運送会社(必須) - アクション(
Action): 実行する処理(必須。送料照会/出荷登録/出荷取消) - Shipping Processor: 使用する連携処理(運送会社の設定に応じて選択)
- 取引先 / 取引先住所 / ユーザー: 届け先の情報
- 倉庫: 出荷元倉庫
- 入出荷伝票 / 受注伝票 / 売上請求伝票: 参照元の伝票
- 運送会社(
- 梱包情報を入力:
- 重量・計量単位重量、Length / Width / Height・計量単位長さ
- Box Count: 箱数(初期値は
1) - Shipper Packaging / Shipper Labels / Shipper Pickup Types: 運送会社が提供する梱包・ラベル・集荷区分
- 配送オプションを必要に応じて指定(保険、代金引換、土曜配達、危険物 等)
- 「保存」をクリック
- 箱が複数ある場合は「Shipping Transaction Line」タブで箱ごとの明細を登録
- 運送会社へのオンライン処理を実行し、結果(トラックNo・価格・応答メッセージ)を確認
⚠️ 注意: この伝票には伝票状態(DocStatus)や伝票アクション(DocAction)がありません。ワークフローによる承認フローは持たず、「アクション」欄で選んだ処理をオンライン実行し、成功すると「処理済み」(
Processed)がYになります。
アクションの種類
Section titled “アクションの種類”| アクション | 値 | 呼び出されるメソッド | 用途 |
|---|---|---|---|
| Process Shipment | PS | IShipmentProcessor.processShipment() | 運送会社に出荷を登録し、追跡番号・送料を取得 |
| Rate Inquiry | RI | IShipmentProcessor.rateInquiry() | 出荷前に送料を照会 |
| Void Shipment | VS | IShipmentProcessor.voidShipment() | 登録済みの出荷を取り消し |
上記以外の値が設定されている場合は ActionNotSupported 例外となります。
項目リファレンス
Section titled “項目リファレンス”主要項目のみ掲載しています。全項目一覧はリファレンス参照
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 Line タブ
Section titled “Shipping Transaction Line タブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| Shipping Transaction | 必須 | 検索 | ヘッダーへの参照 |
| シーケンスNo | - | 整数 | 明細の並び順 |
| 重量 / 計量単位重量 | - | 数量 | 当該梱包の重量と単位 |
| Length / Width / Height | - | 数量 | 当該梱包の寸法 |
| 価格 | - | 金額 | 当該梱包の送料 |
| トラックNo | - | 文字列 | 当該梱包の追跡番号 |
| Master Tracking No | - | 文字列 | 出荷全体をまとめる追跡番号 |
| Package MPS | - | 検索 | 対応する梱包(Multiple Package Shipment) |
| 処理済み | 自動 | チェック | 処理済みフラグ(初期値 N) |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”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)の選択に使用されます。
- 出荷伝票(Shipment)の使い方
- 受注伝票(Sales Order)の使い方
- 売上請求書(Sales Invoice)の使い方
- 倉庫・ロケーターの使い方
- 画面リファレンス: Shipping Transaction
🛠 技術仕様(開発者向け)
配送トランザクションは非 Document 型のトランザクションレコードで、M_ShippingTransaction テーブルに格納されます。MShippingTransaction(536行)は X_M_ShippingTransaction を継承するのみで DocAction を実装せず、運送会社連携(IShipmentProcessor)の呼び出しと、その結果の保持を担います。明細クラス MShippingTransactionLine(75行)はコンストラクタのみの薄いクラスで、独自ロジックを持ちません。
M_ShippingTransaction / M_ShippingTransactionLine のアクセスレベルは「クライアント+組織」、いずれも削除可(IsDeleteable=Y)です。
アーキテクチャ概要
Section titled “アーキテクチャ概要”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
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MShippingTransaction.java(536行)、MShippingTransactionLine.java(75行)
関連クラス: MShippingProcessor / MShippingProcessorCfg(運送会社連携の設定)、MShipper / MShipperFacade(運送会社情報)。
関連DBテーブル
Section titled “関連DBテーブル”M_ShippingTransaction(配送トランザクション)
Section titled “M_ShippingTransaction(配送トランザクション)”📌 ポイント: Yes-No 系のオプション項目(
IsHazMat,IsSaturdayDelivery,IsDryIceなど)は既定値Nですが、IsResidentialのみ既定値がYです。個人宅以外への配送が中心の運用では、既定値の見直しを検討してください。
| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_ShippingTransaction_ID | ID | PK | 配送トランザクションID | 主キー |
| AD_Client_ID | TableDirect | Y | クライアント | 既定 @#AD_Client_ID@ |
| AD_Org_ID | TableDirect | Y | 組織 | 既定 @#AD_Org_ID@ |
| M_Shipper_ID | Table | Y | 運送会社 | 連携先の決定に使用 |
| Action | List | Y | アクション | PS / RI / VS |
| M_ShippingProcessor_ID | Table | N | Shipping Processor | 連携実装の指定 |
| C_BPartner_ID | Search | N | 取引先 | |
| C_BPartner_Location_ID | TableDirect | N | 取引先住所 | 届け先 |
| M_Warehouse_ID | TableDirect | N | 倉庫 | 出荷元 |
| M_InOut_ID | Search | N | 入出荷伝票 | 参照元 |
| C_Order_ID | Search | N | 受注伝票 | 参照元 |
| C_Invoice_ID | Search | N | 売上請求伝票 | 参照元 |
| M_Package_ID | Search | N | 梱包 | |
| Weight / C_UOM_Weight_ID | Quantity / Table | N | 重量・単位 | |
| Length / Width / Height | Quantity | N | 寸法 | 単位は C_UOM_Length_ID |
| BoxCount | Integer | N | 箱数 | 既定 1 |
| Insurance / InsuredAmount | List / Amount | N | 保険 | 1=付保, 2=付保しない |
| FreightCharges | List | N | 送料負担区分 | Collect / 3rd Party / Consignee / Prepaid / Prepaid and Bill |
| FOB | List | N | Incoterms | FOB, EXW, CIF, CIP, CPT, DDP 等 |
| CashOnDelivery / CODAmount | YesNo / Costs+Prices | N | 代金引換 | 既定 N |
| DeliveryConfirmation / DeliveryConfirmationType | YesNo / List | N | 配送確認 | ADULT / DIRECT / INDIRECT / SERVICE_DEFAULT |
| IsHazMat / IsResidential | YesNo | Y | 危険物・個人宅配送 | 既定 N / Y |
| ShipperAccount / DutiesShipperAccount | String | N | 運送会社アカウント | 支払区分により使い分け |
| CustomsValue / FreightAmt / HandlingCharge / Surcharges | Costs+Prices / Amount | N | 通関価格・送料・手数料 | |
| TrackingNo / TrackingInfo / ShippingRespMessage | String / Text | N | 追跡番号・追跡情報・応答メッセージ | 連携結果 |
| Processed | YesNo | Y | 処理済み | 既定 N |
M_ShippingTransactionLine(配送トランザクション明細)
Section titled “M_ShippingTransactionLine(配送トランザクション明細)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_ShippingTransactionLine_ID | ID | PK | 明細ID | 主キー |
| M_ShippingTransaction_ID | Search | Y | ヘッダーFK | |
| SeqNo | Integer | N | 並び順 | 既定 SQL は M_PackageMPS を参照 |
| Weight / C_UOM_Weight_ID | Quantity / Table | N | 重量・単位 | |
| Length / Width / Height | Quantity | N | 寸法 | |
| C_UOM_Length_ID | Table | N | 長さの単位 | |
| Price | Costs+Prices | N | 梱包ごとの送料 | |
| TrackingNo | String | N | 追跡番号 | |
| MasterTrackingNo | String | N | 親追跡番号 | |
| M_PackageMPS_ID | Search | N | 梱包(MPS) | |
| Processed | YesNo | Y | 処理済み | 既定 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"
ビジネスロジック
Section titled “ビジネスロジック”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 で結果を保存して返却"]
処理の要点は次のとおりです。
MShipperFacade(getMShipper())を生成し、Core.getShipmentProcessor(sf)でIShipmentProcessor実装を解決。解決できない場合はShippingNoProcessorをエラーにセットしてfalseを返すActionの値によりprocessShipment()/rateInquiry()/voidShipment()を呼び分け、未対応値はAdempiereException("ActionNotSupported")- 失敗時は運送会社名と応答メッセージを連結したエラー文を生成、例外発生時は
ShippingNotProcessedに例外メッセージを連結 - 成否にかかわらず
MOnlineTrxHistoryを生成し、AD_Table_ID/Record_ID/IsError/Processed/TextMsg(応答またはエラー+実行アクション)をsaveCrossTenantSafeEx()でトランザクション外に保存 - 最後に
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 も同様に実装}OSGi Model Validator
Section titled “OSGi Model Validator”保存前チェックを追加する場合は 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; }}Callout
Section titled “Callout”M_ShippingTransaction / M_ShippingTransactionLine の全カラムに AD 上の callout 定義はありません。運送会社選択時に既定値を補完したい場合などは、独自 callout を追加してください。
関連プロセス
Section titled “関連プロセス”このウィンドウには専用のプロセスボタンは定義されていません。運送会社との通信は MShippingTransaction.processOnline() を通じて行われ、実行結果は C_OnlineTrxHistory(オンライン取引履歴)に記録されます。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”配送トランザクションは IShipmentProcessor を実装するだけで、国内の運送会社 API とも連携できる拡張ポイントが用意されています。
送り状発行、追跡番号の自動取込、送料の自動計上などをコア改変なしで実現できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。