コンテンツにスキップ

iDempiere 出荷パッケージの使い方|販売管理 操作マニュアル・技術仕様

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

出荷パッケージは、出荷伝票の中身をどの箱に何をいくつ詰めたかという「梱包単位」で管理し、運送会社のオンラインサービスと連携するための画面です。箱ごとの重量・寸法・追跡番号を保持し、送料照会・出荷登録・出荷取消・ラベル印刷を画面上のボタンから実行できます。

📌 ポイント: 「Box Count」(箱数)を保存すると、MPackage.afterSave() が不足分の MPS 行(M_PackageMPS)を自動生成します。箱数を先に決めてから各箱の中身を登録するのが標準的な流れです。

  • 出荷伝票に対する梱包(パッケージ)の作成
  • 箱数(Box Count)に応じた MPS 行の自動生成
  • 箱ごとの重量・長さ・幅・高さ・追跡番号の管理
  • 箱ごとの梱包明細(どの出荷明細を何個詰めたか)の登録
  • 運送会社・出荷処理業者(Shipping Processor)・荷姿・ラベル種別の指定
  • 保険・代金引換(COD)・土曜配達・危険物などの配送オプション設定
  • 運送会社へのオンライン送料照会(Rate Inquiry)
  • オンラインでの出荷登録(Process Shipment)と出荷取消(Void Shipment)
  • 配送ラベルの印刷(Print Shipping Label)

出荷パッケージは、パッケージ → MPS 行 → 梱包明細の3階層構成です。

タブ名テーブル階層項目数役割
PackageM_Package0約70項目梱包のヘッダー(運送会社・オプション・オンライン処理)
MPS LinesM_PackageMPS1約17項目箱(Multi Piece Shipment)1個分の情報
Package LinesM_PackageLine2約8項目箱に詰めた出荷明細と数量
graph TD
    T1["📦 Package<br/>M_Package<br/>約70項目<br/>(運送会社・オプション・オンライン処理)"]
    T2["📦 MPS Lines<br/>M_PackageMPS<br/>約17項目<br/>(箱ごとの重量・寸法・追跡番号)"]
    T3["&nbsp;&nbsp;└ Package Lines<br/>&nbsp;&nbsp;&nbsp;&nbsp;M_PackageLine<br/>&nbsp;&nbsp;&nbsp;&nbsp;約8項目(品目・数量)"]
    T1 --> T2
    T2 --> T3

Package M_Package 約70項目 (運送会社・オプション・オンライン処理) MPS Lines M_PackageMPS 約17項目 (箱ごとの重量・寸法・追跡番号)   └ Package Lines     M_PackageLine     約8項目(品目・数量)

💡 ヒント: MPS は Multi Piece Shipment(複数個口出荷)の略です。1つの出荷を複数の箱に分けて送る場合、箱ごとに1つの MPS 行を作り、その配下に梱包明細を登録します。

graph TD
    A["🚀 メニューから開く<br/>販売管理 > 出荷納品管理 > Shipment Package"] --> B["➕ 新規でパッケージを作成<br/>(伝票番号・入出荷伝票)"]
    B --> C["🚚 運送会社を選択<br/>→ 荷姿・ラベル・住所等が自動セット"]
    C --> D["📦 Box Count(箱数)を入力"]
    D --> E["💾 保存<br/>→ MPS行が自動生成"]
    E --> F["⚖️ MPS Lines タブで<br/>箱ごとの重量・寸法を入力"]
    F --> G["📋 Package Lines タブで<br/>詰めた出荷明細と数量を登録"]
    G --> H{オンライン連携}
    H -->|送料を知りたい| I["💰 Online Shipping Rate Inquiry"]
    H -->|出荷確定| J["🚀 Process Shipment Online<br/>→ 追跡番号・送料を取得"]
    J --> K["🏷 Print Shipping Label"]
    J --> L["❌ 誤りがあれば<br/>Void Shipment Online"]

メニューから開く 販売管理 > 出荷納品管理 > Shipment Package 新規でパッケージを作成 (伝票番号・入出荷伝票) 運送会社を選択 → 荷姿・ラベル・住所等が自動セット Box Count(箱数)を入力 保存 → MPS行が自動生成 MPS Lines タブで 箱ごとの重量・寸法を入力 Package Lines タブで 詰めた出荷明細と数量を登録 Online Shipping Rate Inquiry Process Shipment Online → 追跡番号・送料を取得 Print Shipping Label 誤りがあれば Void Shipment Online オンライン連携 送料を知りたい 出荷確定

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

💡 ヒント: 出荷伝票側の処理からパッケージを自動生成することもできます(MPackage.create())。この場合、出荷明細が自動的に梱包明細へ展開され、箱数は 1 に設定されます。

新規登録(パッケージのヘッダー)

Section titled “新規登録(パッケージのヘッダー)”
  1. ツールバーの「新規」ボタンをクリック
  2. 必須項目を入力:
    • 伝票番号: パッケージの番号(30文字まで)
    • 入出荷伝票: 対象の出荷伝票(M_InOut)。更新不可
    • 運送会社: 配送を依頼する運送会社
  3. 運送会社を選択すると、Callout により次の項目が自動セットされます:
    • Shipper Packaging(荷姿)、Shipper Labels(ラベル種別)、Shipper Pickup Types(集荷種別)
    • Shipper Account Number / Duties Shipper Account(運送会社口座)
    • 取引先住所、追跡情報 URL、Residential、Saturday Delivery
  4. Box Count(箱数)を入力(既定値 1)
  5. 必要に応じて配送オプションを設定(次表)
  6. 保存」をクリック
分類項目内容
集荷・配達Latest Pickup Time / 出荷日最終集荷時刻・出荷日
配達条件Saturday Delivery / Saturday Pickup / Future Day Shipment土曜配達・土曜集荷・先日付出荷
宅配Residential / Home Delivery Premium Type / Phone Number / プレミアム宅配日個人宅配送とプレミアム宅配の指定
料金運賃(FreightCharges)/ Frieght Terms(FOB)/ 手数料 / Added Handling運賃負担区分と手数料
保険・決済Insurance / Insured Amount / 代金引換 / 支払方法保険と代金引換
通知送信確認 / 配送確認タイプ / 口頭確認 / 通知タイプ / 通知メッセージ配送確認と通知
危険物Hazardous Materials / Dot Hazard Class or Division / Cargo Aircraft Only / Accessible / Dry Ice / Dry Ice Weight危険物・ドライアイス輸送
保留・通関Hold At Location / Hold Address / Dutiable / Ignore Zip State Not Match / Ignore Zip Not Found営業所止め・通関・住所検証の緩和
  1. MPS Lines」タブへ移動。Box Count に応じて生成された行を選択します
  2. 箱ごとの情報を入力:
    • シーケンスNo: 箱の連番(未入力なら自動採番)
    • 重量 / 計量単位重量: 箱の重量と単位
    • Length / Width / Height / 計量単位長さ: 寸法と単位
    • Estimated Weight: 推定重量
    • Master Tracking No / トラックNo: 追跡番号
  3. Package Lines」タブへ移動し、その箱に詰めた内容を登録:
    • 入出荷明細: 対象の出荷明細行(必須)
    • 数量: 詰めた数量(必須)
    • 品目 / 説明: 参考情報
  4. 既存伝票をもとに明細行を作成」(CreateFrom)ボタンで、出荷明細から一括生成することもできます

⚠️ 注意: MPS 行の重量を空欄または 0 のまま保存すると、MPackageMPS.beforeSave() が梱包明細の重量合計(ビュー X_PackageLineWeight)から自動計算してセットします。手入力した重量を優先したい場合は、0 以外の値を明示的に入力してください。

オンライン処理(運送会社連携)

Section titled “オンライン処理(運送会社連携)”

ヘッダータブの以下のボタンから、運送会社の Web サービスを呼び出します。

ボタンカラム動作
Online Shipping Rate InquiryShippingRateInquiry送料を照会し、料金問い合わせメッセージに結果を格納
Process Shipment OnlineOProcessing出荷を登録し、価格・追加料金・追跡番号を取得して「処理済み」に更新
Void Shipment OnlineVoidIt登録済み出荷を取り消す
Print Shipping LabelLabelPrint配送ラベルを印刷

⚠️ 注意: これらのボタンは運送会社に対応する Shipping Processor(出荷処理業者)の設定が前提です。処理結果は「応答メッセージ」(ShippingRespMessage)に記録され、返却された添付ファイル(ラベル等)はパッケージの添付として保存されます。設定と実行の詳細は 配送トランザクション も参照してください。

項目リファレンス(Package タブ・主要項目)

Section titled “項目リファレンス(Package タブ・主要項目)”
項目名必須説明
伝票番号必須文字列(30)パッケージの番号。更新不可
入出荷伝票必須検索対象の出荷伝票。更新不可
運送会社必須選択配送を依頼する運送会社。Callout で既定値を展開
Shipping Processor-選択オンライン連携する出荷処理業者。更新不可
Box Count-整数箱数。既定値 1。保存時に MPS 行を自動生成
重量 / 計量単位重量-数量 / 選択総重量と単位
Length / Width / Height-数量寸法
出荷日-日付出荷日
Latest Pickup Time-時刻最終集荷時刻
取引先住所-選択配送先住所
トラックNo-文字列(255)追跡番号
追跡情報-文字列(255)追跡 URL 等
価格 / 追加料金 / Total Price-価格オンライン処理で取得した送料
応答メッセージ-テキスト運送会社からの応答
料金問い合わせメッセージ-テキスト送料照会の結果
受入日付 / 受付情報-日付 / 文字列荷受け確認
処理済み必須チェックオンライン出荷登録の完了フラグ

全項目(配送オプション約40項目を含む)は 画面リファレンス: 出荷パッケージ を参照してください。

Q. Box Count を増やしたら MPS 行が勝手に増えました

Section titled “Q. Box Count を増やしたら MPS 行が勝手に増えました”

仕様です。MPackage.afterSave() が現在の MPS 行数と Box Count を比較し、不足分の M_PackageMPS レコードを自動生成します。逆に Box Count を減らしても MPS 行は自動削除されないため、不要な行は手動で削除してください。

Q. 重量を入力しても保存すると別の値になります

Section titled “Q. 重量を入力しても保存すると別の値になります”

重量が空欄または 0 の場合のみ、MPackage.beforeSave() / MPackageMPS.beforeSave() がビュー X_PackageLineWeight の合計(梱包明細から算出した重量)をセットします。0 以外の値を入力していれば上書きされません。

Q. パッケージを削除すると明細も消えますか?

Section titled “Q. パッケージを削除すると明細も消えますか?”

消えます。MPackage.beforeDelete() が配下の M_PackageLineM_PackageMPS を SQL で一括削除します。同様に MPackageMPS.beforeDelete() はその箱の M_PackageLine を削除します。削除は取り消せないため、実行前に内容を確認してください。

Q. 出荷伝票からパッケージを自動生成できますか?

Section titled “Q. 出荷伝票からパッケージを自動生成できますか?”

MPackage.create(shipment, shipper, shipDate) が用意されており、出荷伝票の明細をもとにパッケージ・MPS 行・梱包明細を一括生成します。BOM 品目で「ピッキングリストに明細を印刷する」設定がある場合は、構成部品に展開して梱包明細が作られます。運賃品目(クライアント情報の M_ProductFreight_ID)は梱包明細から除外されます。

Q. 「入出荷伝票」を後から変更できますか?

Section titled “Q. 「入出荷伝票」を後から変更できますか?”

できません。M_InOut_IDIsUpdateable=N として定義されています。誤った出荷伝票に作成した場合は、パッケージを削除して作り直してください。

Q. オンライン処理が失敗したときの原因はどこで確認しますか?

Section titled “Q. オンライン処理が失敗したときの原因はどこで確認しますか?”

「応答メッセージ」(ShippingRespMessage)と「料金問い合わせメッセージ」(RateInquiryMessage)に運送会社からの応答が格納されます。運送会社に対応する Shipping Processor が未設定の場合は処理自体が実行できません。

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

出荷パッケージは M_Package(テーブル名: Package、説明: Shipment Package、アクセスレベル 1 = Organization、削除可)を頂点に、M_PackageMPS(アクセスレベル 3)と M_PackageLine(アクセスレベル 1、説明: The detail content of the Package)で構成されます。

モデルクラスは MPackage(667行)、MPackageMPS(115行)、MPackageLine(102行)です。MPackage は Document 型ではありませんが(DocStatus / DocAction を持たない)、processOnline() により運送会社の Web サービスを呼び出し、MShippingTransaction を生成する点が特徴です。

classDiagram
    class MPackage {
        +create(MInOut, MShipper, Timestamp)$ MPackage
        +createPackage(MInOut, MShipper, Timestamp)$ MPackage
        +beforeSave(boolean) boolean
        +afterSave(boolean, boolean) boolean
        +beforeDelete() boolean
        +processOnline(String, boolean) boolean
        +createShippingTransaction(...) MShippingTransaction
        +setErrorMessage(String) void
        +getErrorMessage() String
    }
    class MPackageMPS {
        +beforeSave(boolean) boolean
        +beforeDelete() boolean
    }
    class MPackageLine {
        +setInOutLine(MInOutLine) void
    }
    class X_M_Package {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    class MShippingTransaction {
        +processOnline() boolean
    }
    MPackage --|> X_M_Package
    X_M_Package --|> PO
    MPackage --> MPackageMPS : has many
    MPackageMPS --> MPackageLine : has many
    MPackage --> MShippingTransaction : creates
    MPackageLine --> MInOutLine : references

+create(MInOut, MShipper, Timestamp)$ MPackage +createPackage(MInOut, MShipper, Timestamp)$ MPackage +beforeSave(boolean) boolean +afterSave(boolean, boolean) boolean +beforeDelete() boolean +processOnline(String, boolean) boolean +createShippingTransaction(...) MShippingTransaction +setErrorMessage(String) void +getErrorMessage() String +beforeSave(boolean) boolean +beforeDelete() boolean +setInOutLine(MInOutLine) void <> <> +processOnline() boolean > X_M_Package X_M_Package --

パッケージ: org.compiere.model ソースファイル: org.adempiere.base/src/org/compiere/model/MPackage.java(667行)/ MPackageMPS.java(115行)/ MPackageLine.java(102行) Callout: org.compiere.model.CalloutPackage.afterShipperSetDefaults / CalloutPackage.afterShipperM_Shipper_ID 列)

M_Package(パッケージ)主要カラム

Section titled “M_Package(パッケージ)主要カラム”
カラム名必須説明備考
M_Package_IDIDPKパッケージID主キー
M_Package_UUUUID(36)NUUID
DocumentNoString(30)Y伝票番号更新不可
M_InOut_IDSearchY入出荷伝票更新不可
M_Shipper_IDTableY運送会社Callout: CalloutPackage.afterShipperSetDefaults; CalloutPackage.afterShipper
M_ShippingProcessor_IDTableN出荷処理業者更新不可
BoxCountIntegerN箱数既定値 1。afterSave で MPS 生成
Weight / Length / Width / HeightQuantityN重量・寸法重量は空/0 なら自動計算
C_UOM_Weight_ID / C_UOM_Length_IDTableN重量・長さの単位
ShipDateDateN出荷日
LatestPickupTimeTimeN最終集荷時刻
C_BPartner_Location_IDTableDirectN取引先住所Callout で自動セット
C_BP_ShippingAcct_IDTableDirectN取引先配送口座
TrackingNo / TrackingInfoString(255)N追跡番号・追跡情報
Price / Surcharges / TotalPriceCosts+PricesN送料・追加料金・合計TotalPrice更新不可
RateInquiryMessage / ShippingRespMessageText(2000)N照会・応答メッセージ
ShippingRateInquiry / OProcessing / VoidIt / LabelPrintButtonNオンライン処理ボタン
ProcessedYesNoY処理済み既定値 N

主要な配送オプション列(いずれも既定値 N、IsResidential のみ既定値 Y): IsSaturdayDelivery / IsSaturdayPickup / IsFutureDayShipment / IsResidential / IsHazMat / IsCargoAircraftOnly / IsAccessible / IsDryIce / IsHoldAtLocation / IsDutiable / IsAddedHandling / CashOnDelivery / DeliveryConfirmation / IsVerbalConfirmation / IsIgnoreZipStateNotMatch / IsIgnoreZipNotFound

カラム名必須説明備考
M_PackageMPS_IDIDPKMPS行ID主キー
M_Package_IDSearchYパッケージFK更新不可
SeqNoIntegerNシーケンスNo既定値は MAX(SeqNo)+10 の SQL
Weight / Length / Width / HeightQuantityN重量・寸法重量は空/0 なら自動計算
EstimatedWeightQuantityN推定重量更新不可
MasterTrackingNo / TrackingNoString(255)N追跡番号
PriceCosts+PricesN価格
CreateFromButtonN既存伝票から明細作成
ProcessedYesNoY処理済み既定値 N
カラム名必須説明備考
M_PackageLine_IDIDPK梱包明細ID主キー
M_Package_IDSearchYパッケージFK更新不可
M_PackageMPS_IDSearchNMPS行FK
M_InOutLine_IDTableDirectY出荷明細FK更新不可
QtyQuantityY数量
M_Product_IDSearchN品目
DescriptionString(255)N説明
erDiagram
    M_InOut ||--o{ M_Package : "packages"
    M_Package ||--o{ M_PackageMPS : "boxes"
    M_PackageMPS ||--o{ M_PackageLine : "contents"
    M_Package ||--o{ M_PackageLine : "all contents"
    M_PackageLine }o--|| M_InOutLine : "shipment line"
    M_Package }o--|| M_Shipper : "shipper"
    M_Package }o--o| M_ShippingProcessor : "online processor"
    M_Package ||--o{ M_ShippingTransaction : "online transactions"

all contents shipment line online processor online transactions

MPackage.create()(出荷伝票からの自動生成)

Section titled “MPackage.create()(出荷伝票からの自動生成)”

静的メソッド create(MInOut shipment, MShipper shipper, Timestamp shipDate) の処理:

  1. createPackage() でパッケージを生成(BoxCount=0 で保存)
  2. MPackageMPS を1件生成(SeqNo=10
  3. 出荷明細(MInOutLine)を走査し、次の条件で梱包明細を生成
    • 品目が設定されており、かつクライアント情報の運賃品目(M_ProductFreight_ID)でないこと
    • 品目が BOM かつ検証済みかつ IsPickListPrintDetails=Y の場合は、既定 BOM の構成部品ごとに明細を作成し、数量は QtyEntered × QtyBOM
    • それ以外は出荷明細1行につき梱包明細1行(数量は MPackageLine.setInOutLine() により MovementQty
  4. BoxCount=1 を設定して保存

重量が null または 0 の場合、SELECT SUM(LineWeight) FROM X_PackageLineWeight plw WHERE plw.M_Package_ID=? の結果(null なら 0)を重量にセットします。

M_PackageMPS の件数を数え、BoxCount - 現在の件数 > 0 の場合、その差分だけ MPackageMPS を新規生成します。箱数を増やすと MPS 行が自動的に補充される仕組みです(減らしても削除はされません)。

配下データを SQL で直接削除します。

DELETE FROM M_PackageLine
WHERE M_PackageMPS_ID IN (SELECT M_PackageMPS_ID FROM M_PackageMPS WHERE M_Package_ID = ?);
DELETE FROM M_PackageMPS WHERE M_Package_ID = ?;
  • beforeSave(): SeqNo が 0 の場合 COALESCE(MAX(SeqNo),0)+10 で自動採番。重量が null または 0 の場合、X_PackageLineWeight の該当 MPS 行の合計をセット
  • beforeDelete(): DELETE FROM M_PackageLine WHERE M_PackageMPS_ID = ? を実行

オンライン連携の中核メソッドです。

  1. エラーメッセージをクリアし、専用トランザクション(spt- プレフィクス)を開始
  2. createShippingTransaction(action, isPriviledgedRate, trxName)MShippingTransaction を生成
  3. MShippingTransaction.processOnline() を実行し保存
  4. アクションが ACTION_ProcessShipment の場合、応答メッセージを格納。成功時は価格・追加料金・追跡番号をパッケージへ反映し Processed=true に更新。運送会社から返却された添付(ラベル等)も取り込みます

M_Shipper_ID 列に2つの Callout が設定されています。

  • afterShipperSetDefaults: Shipper Labels / Shipper Packaging / Shipper Pickup Types の既定値、取引先住所、追跡情報 URL、Residential、Saturday Delivery をセット
  • afterShipper: Shipper Account Number / Duties Shipper Account をセット

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

Section titled “拡張ポイント(カスタマイズ箇所)”
public class CustomPackageValidator implements ModelValidator {
@Override
public int modelChange(PO po, int type) throws Exception {
if (po instanceof MPackage && (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE)) {
MPackage pkg = (MPackage) po;
// 例: 危険物指定時は Dot Hazard Class を必須にする
if (pkg.isHazMat() && Util.isEmpty(pkg.getDotHazardClassOrDivision())) {
throw new AdempiereException("危険物の場合は Dot Hazard Class を指定してください");
}
}
if (po instanceof MPackageLine && type == TYPE_BEFORE_NEW) {
MPackageLine line = (MPackageLine) po;
// 例: 梱包数量が出荷数量を超えないかチェック
MInOutLine ioLine = new MInOutLine(line.getCtx(), line.getM_InOutLine_ID(), line.get_TrxName());
if (line.getQty().compareTo(ioLine.getMovementQty()) > 0) {
throw new AdempiereException("梱包数量が出荷数量を超えています");
}
}
return null;
}
}

運送会社連携(Shipping Processor)の追加

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

新しい運送会社に対応する場合は、MShippingTransaction が呼び出す出荷処理業者の実装を OSGi サービスとして追加します。MPackage.processOnline() 自体を書き換える必要はありません。

M_Shipper_ID 列には既に2つの Callout がセミコロン区切りで登録されています。独自 Callout を追加する場合は、既存の記述を消さずに末尾へ追記してください。

重量はビュー X_PackageLineWeight から集計されます。独自の重量計算(緩衝材込み等)が必要な場合は、Model Validator の TYPE_BEFORE_NEW / TYPE_BEFORE_CHANGE で重量を明示的にセットする(0 以外にする)ことで、コアの自動計算をバイパスできます。

ボタン/プロセスカラム説明
Online Shipping Rate InquiryShippingRateInquiry運送会社へ送料を照会
Process Shipment OnlineOProcessing運送会社へ出荷を登録
Void Shipment OnlineVoidIt登録済み出荷を取消
Print Shipping LabelLabelPrint配送ラベルを印刷
既存伝票をもとに明細行を作成CreateFrom(MPS Lines タブ)出荷明細から梱包明細を生成

運送会社ごとの API 仕様や梱包ルールは各社各様です。Shipping Processor の実装追加と Model Validator により、コア改変なしで自社の物流フローに合わせられます。

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

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