iDempiere 出荷伝票(Shipment)|操作マニュアル・技術仕様
📖 販売管理の全体像: 販売管理の業務フロー全体図 も合わせてご覧ください。
出荷伝票は、得意先への商品出荷を記録する伝票です。出荷伝票の完成時に倉庫の在庫が減少し、受注伝票の引当が解除されます。
出荷伝票を起票するには、あらかじめ受注伝票が完成されている必要があります。出荷伝票は倉庫単位で作成され、ピッキングや出荷の確認を「入出荷確認伝票」に記録することもできます。
出荷伝票でできること
Section titled “出荷伝票でできること”- 受注伝票に基づく出荷の記録
- 在庫の自動引落し(完成時)
- 出荷確認(ピッキング・パッキング・出荷)の管理
- パッケージ情報・トラッキング番号の記録
- 部分出荷(受注数量の一部だけ出荷)への対応
- 直送(Drop Shipment)の管理
🖥️ インタラクティブ画面レイアウト: AD メタデータから自動生成した 出荷納品伝票の全タブ・全フィールド レイアウト(HTML版) で、実際の画面配置をご確認いただけます。
graph TD
subgraph "出荷納品伝票ウィンドウ(Window ID: 169)"
T1["🚚 出荷納品伝票<br/>M_InOut<br/>60項目"]
T2["📦 出荷納品伝票明細<br/>M_InOutLine<br/>29項目"]
T3["✅ 確認<br/>M_InOutLineConfirm<br/>11項目"]
T4["🏷️ 属性<br/>M_InOutLineMA<br/>7項目"]
T5["📫 パッケージ<br/>M_Package<br/>70項目"]
T6["📋 MPSライン<br/>M_PackageMPS<br/>17項目"]
T7["📦 パッケージ明細<br/>M_PackageLine<br/>8項目"]
end
T1 --> T2
T2 --> T3
T2 --> T4
T1 --> T5
T5 --> T6
T6 --> T7
| タブ名 | テーブル | 役割 | 主な入力項目 |
|---|---|---|---|
| 出荷納品伝票 | M_InOut | ヘッダー情報(得意先・倉庫・日付等) | 受注伝票、取引先、倉庫、移動日付 |
| 出荷納品伝票明細 | M_InOutLine | 品目・数量の明細行 | 品目、移動数量、ロケーター |
| 入出荷確認伝票明細 | M_InOutLineConfirm | ピッキング・出荷確認の明細 | 確認数量、差異数量 |
| パッケージ | M_Package | 出荷パッケージ情報 | トラッキング番号、重量 |
出荷伝票の基本操作手順
Section titled “出荷伝票の基本操作手順”graph TD
S1["① 出荷伝票作成<br/>受注から一括生成 or 手動"] --> 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 “受注からの一括生成(推奨)”通常は個別に出荷伝票を作成するのではなく、受注伝票から一括生成します。
- メニュー「販売管理 > 出荷納品管理 > 出荷納品伝票作成」を開く
- 対象の倉庫、取引先、受注日等の条件を指定
- 「OK」をクリックして出荷伝票を自動生成
手動での新規登録
Section titled “手動での新規登録”- ツールバーの「新規」ボタンをクリック
- ヘッダー情報を入力:
- 伝票タイプ: 出荷伝票を選択
- 受注伝票: 対象の受注伝票を選択(取引先等が自動セット)
- 移動日付: 出荷日を入力
- 倉庫: 出荷元倉庫を確認
- 「保存」をクリック
- 「出荷納品伝票明細」タブに移動
- 明細行を入力:
- 品目: 出荷する品目を選択
- 移動数量: 出荷数量を入力
- ロケーター: 倉庫内のロケーション(在庫保管場所)
- 明細行ごとに「保存」をクリック
📐 画面レイアウト: ヘッダータブのフィールド配置は 画面構成 セクションのレイアウト図を参照してください。
伝票処理(出荷確定)
Section titled “伝票処理(出荷確定)”- 「出荷納品伝票」タブ(ヘッダー)に戻る
- 「伝票アクション」ボタンをクリック
- アクション「完了(Complete)」を選択
- 「OK」をクリック
完了処理により以下が自動実行されます:
- 在庫の引落し(倉庫から出荷数量分を減算)
- 受注伝票の引当数量の減算
- 受注伝票の出荷済数量の更新
⚠️ 注意: 完了後の出荷伝票は直接修正できません。取り消す場合は「無効」処理を実行してください。なお、既に請求書が発行済みの場合は、先に請求書の処理(無効化)が必要です。
📌 ポイント: 出荷伝票の完了により在庫が減少しますが、売上の計上は行われません。売上・売掛金を計上するには、別途「売上請求書」の完了が必要です。
項目リファレンス
Section titled “項目リファレンス”出荷納品伝票タブ(ヘッダー)
Section titled “出荷納品伝票タブ(ヘッダー)”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 伝票タイプ | - | 選択 | 出荷納品伝票、返品受入伝票 等 |
| 受注伝票 | - | 検索 | 紐づく受注伝票(選択すると得意先等が自動セット) |
| 移動日付 | - | 日付 | 出荷日(在庫移動の日付) |
| 転記日付 | - | 日付 | 会計上の転記日付 |
| 取引先 | - | 検索 | 出荷先の得意先 |
| 取引先住所 | - | 選択 | 出荷先住所 |
| 倉庫 | - | 選択 | 出荷元の倉庫 |
| 出荷ルール | - | リスト | 完全出荷、部分出荷、在庫確認後 等 |
| 配送方法 | - | リスト | ピックアップ、配送 等 |
| 運送会社 | - | 選択 | 配送業者 |
| トラックNo | - | 文字列 | 配送追跡番号 |
| 運送料 | - | 金額 | 運賃 |
出荷納品伝票明細タブ
Section titled “出荷納品伝票明細タブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 品目 | - | 検索 | 出荷する品目 |
| 移動数量 | 必須 | 数量 | 出荷数量 |
| ロケーター | 必須 | 選択 | 倉庫内の保管場所 |
| 属性セットインスタンス | - | 選択 | ロット番号・シリアル番号等 |
| 受注伝票明細 | - | 検索 | 紐づく受注伝票の明細行 |
| 説明 | - | テキスト | 備考 |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 部分出荷はできますか?
Section titled “Q. 部分出荷はできますか?”はい。受注数量の一部だけを出荷伝票に記載して完了できます。残りは次回の出荷伝票で処理します。受注伝票は全数量が出荷されるまで「完了」状態のまま残ります。
Q. 出荷伝票を取り消すには?
Section titled “Q. 出荷伝票を取り消すには?”完了済みの出荷伝票に対して「無効」処理を実行すると、在庫が戻り、受注伝票の出荷済数量も元に戻ります。既に請求書が発行されている場合は、先に請求書の処理が必要です。
Q. 在庫が足りない場合はどうなりますか?
Section titled “Q. 在庫が足りない場合はどうなりますか?”出荷ルールの設定により動作が異なります:
- 完全: 全数量の在庫がないと出荷不可
- 在庫確認後: 在庫がある分だけ出荷可能
- 強制: 在庫がなくても出荷可能(マイナス在庫)
💡 ヒント: ロット・シリアル番号で在庫を管理している場合は、明細タブの「属性セットインスタンス」で対象ロットを指定してください。指定しないと出荷完了時にエラーになることがあります。
業務フロー上の位置づけ
Section titled “業務フロー上の位置づけ”graph TD
A[受注伝票] -->|出荷生成| B[出荷伝票]
B -->|確認| C[入出荷確認]
B -->|請求| D[売上請求書]
B -->|在庫更新| E[在庫台帳]
OSS ERP導入についてのご相談
Section titled “OSS ERP導入についてのご相談”iDempiereの出荷管理は、在庫引当・ピッキング確認・パッケージ管理まで対応した本格的な物流管理機能を提供します。
As-Link株式会社では、iDempiereの導入支援・カスタマイズ開発を承っております。
🛠 技術仕様(開発者向け)
出荷伝票は Document 型の伝票で、M_InOut テーブルに格納されます。販売出荷(MovementType=C-)と購買入荷(MovementType=V+)の両方で共用されます。MInOut クラス(3,644行)が中核ビジネスロジックを担い、DocAction および IDocsPostProcess インターフェースを実装しています。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MInOut {
+prepareIt() String
+completeIt() String
+voidIt() boolean
+closeIt() boolean
+reverseCorrectIt() boolean
+createConfirmation() MInOutConfirm
}
class X_M_InOut {
<<generated>>
}
class PO {
<<abstract>>
}
class DocAction {
<<interface>>
}
class IDocsPostProcess {
<<interface>>
}
MInOut --|> X_M_InOut
X_M_InOut --|> PO
MInOut ..|> DocAction
MInOut ..|> IDocsPostProcess
MInOut --> MInOutLine : has many
MInOut --> MInOutConfirm : has many
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MInOut.java
関連DBテーブル
Section titled “関連DBテーブル”M_InOut(出荷/入荷ヘッダー)
Section titled “M_InOut(出荷/入荷ヘッダー)”出荷・入荷の両方で使用。MovementType と IsSOTrx カラムで区別。
⚠️ 注意:
M_InOutテーブルは出荷(IsSOTrx=Y, MovementType=C-)と入荷(IsSOTrx=N, MovementType=V+)で共用されています。カスタムバリデーターではinout.isSOTrx()による分岐を必ず行い、販売・購買それぞれの処理に絞り込んでください。
| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_InOut_ID | ID | PK | 出荷/入荷ID | 主キー |
| AD_Client_ID | TableDirect | Y | クライアント | |
| AD_Org_ID | TableDirect | Y | 組織 | |
| IsSOTrx | YesNo | Y | 販売取引フラグ | Y=出荷, N=入荷 |
| DocumentNo | String | Y | 伝票番号 | |
| C_DocType_ID | TableDirect | Y | 伝票タイプ | |
| DocStatus | List | Y | 伝票状態 | DR/IP/CO/CL/VO/RE |
| DocAction | Button | Y | 伝票アクション | |
| MovementType | List | Y | 移動タイプ | C-=出荷, V+=入荷 |
| MovementDate | Date | Y | 移動日付 | |
| DateAcct | Date | Y | 転記日付 | |
| C_BPartner_ID | Search | Y | 取引先 | |
| C_BPartner_Location_ID | TableDirect | Y | 取引先住所 | |
| M_Warehouse_ID | TableDirect | Y | 倉庫 | |
| C_Order_ID | Search | N | 受注伝票 | 受注からの出荷時に設定 |
| DeliveryRule | List | Y | 出荷ルール | F/C/A/M/L/O |
| FreightCostRule | List | Y | 運賃ルール | |
| C_Invoice_ID | Search | N | 請求書 | |
| Processed | YesNo | Y | 処理済み | |
| Posted | Button | Y | 転記 |
M_InOutLine(出荷/入荷明細)
Section titled “M_InOutLine(出荷/入荷明細)”| カラム名 | 型 | 必須 | 説明 |
|---|---|---|---|
| M_InOutLine_ID | ID | PK | 明細ID |
| M_InOut_ID | Search | Y | ヘッダーFK |
| Line | Integer | Y | 行番号 |
| M_Product_ID | Search | N | 品目 |
| M_Locator_ID | TableDirect | Y | ロケーター |
| MovementQty | Quantity | Y | 移動数量 |
| QtyEntered | Quantity | Y | 入力数量 |
| C_OrderLine_ID | Search | N | 受注明細FK |
| M_AttributeSetInstance_ID | PAttribute | N | 属性セットインスタンス |
erDiagram
M_InOut ||--o{ M_InOutLine : "has"
M_InOut ||--o{ M_InOutConfirm : "has"
M_InOut }o--|| C_BPartner : "references"
M_InOut }o--|| M_Warehouse : "references"
M_InOut }o--|| C_DocType : "references"
M_InOut }o--o| C_Order : "references"
M_InOutLine }o--|| M_Locator : "stored at"
M_InOutLine }o--o| M_Product : "references"
M_InOutLine }o--o| C_OrderLine : "references"
M_InOut ||--o{ C_Invoice : "generates"
M_InOut ||--o{ M_PackageMPS : "packages"
ビジネスロジック
Section titled “ビジネスロジック”prepareIt() の主要処理
Section titled “prepareIt() の主要処理”ModelValidator.TIMING_BEFORE_PREPAREイベント発火- 会計期間のオープンチェック
- 明細行の存在チェック(0行は不可)
- 各明細行の品目・ロケーター妥当性チェック
- 出荷確認(Confirmation)の生成
ModelValidator.TIMING_AFTER_PREPAREイベント発火
completeIt() の主要処理
Section titled “completeIt() の主要処理”ModelValidator.TIMING_BEFORE_COMPLETEイベント発火- 出荷確認の完了チェック
- 在庫の引落/増加(
MStorageOnHandの更新) - 受注の出荷済数量(QtyDelivered)更新
- 受注引当数量(QtyReserved)の解放
- 請求書の自動生成(請求ルールに応じて)
- パッケージ管理の更新
ModelValidator.TIMING_AFTER_COMPLETEイベント発火
📌 ポイント:
completeIt()内の在庫引落(ステップ3)はMStorageOnHandテーブルを直接更新します。在庫関連のカスタムロジックはTIMING_AFTER_COMPLETEタイミングで追加することで、コアの在庫更新処理が完了した後の確実な状態で動作させることができます。
伝票処理フロー
Section titled “伝票処理フロー”stateDiagram-v2
[*] --> Drafted : 新規作成
Drafted --> InProgress : prepareIt()
InProgress --> Completed : completeIt()
Completed --> Closed : closeIt()
Completed --> Voided : voidIt()
Completed --> Reversed : reverseCorrectIt()
Drafted --> Voided : voidIt()
voidIt() の主要処理
Section titled “voidIt() の主要処理”- 出荷済みの場合は在庫を戻す(逆仕訳)
- 受注の出荷済数量・引当数量をリセット
- 各明細行の数量を0にセット
Callout
Section titled “Callout”| Calloutクラス | メソッド | トリガーフィールド | 処理内容 |
|---|---|---|---|
| CalloutInOut | order | C_Order_ID | 受注情報の自動セット(取引先、倉庫等) |
| CalloutInOut | docType | C_DocType_ID | 伝票タイプに応じた初期値セット |
| CalloutInOut | bpartner | C_BPartner_ID | 取引先住所の自動セット |
| CalloutInOut | warehouse | M_Warehouse_ID | 倉庫変更時のロケーター更新 |
| CalloutInOut | product | M_Product_ID | 品目情報の自動セット(UOM等) |
| CalloutInOut | qty | MovementQty | 数量変更時の単位変換 |
| CalloutInOut | asi | M_AttributeSetInstance_ID | 属性セットの処理 |
Calloutソース: org.adempiere.base.callout/src/org/compiere/model/CalloutInOut.java
💡 ヒント:
IColumnCalloutを実装した OSGi プラグインで追加 Callout を登録可能です。品目選択時(M_Product_ID)にロット管理や賞味期限チェックを追加する場合は、CalloutInOut.productに連鎖させるより独立した Callout として実装するほうが保守性が高くなります。
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”出荷伝票に独自バリデーションや後処理を追加する最も安全な方法:
public class CustomShipmentValidator implements ModelValidator { @Override public String docValidate(PO po, int timing) { if (po instanceof MInOut) { MInOut inout = (MInOut) po; if (inout.isSOTrx() && timing == TIMING_BEFORE_COMPLETE) { // 例: ピッキング確認チェック MInOutConfirm[] confirms = inout.getConfirmations(false); for (MInOutConfirm confirm : confirms) { if (!confirm.isProcessed()) { return "出荷確認が未完了です"; } } } } return null; }}Callout 追加
Section titled “Callout 追加”IColumnCallout インターフェースを実装し、品目選択時のロット管理やシリアル番号チェックを追加可能。
🔧 カスタマイズ:
voidIt()をカスタマイズする場合は Fragment よりも Model Validator のTIMING_BEFORE_VOID/TIMING_AFTER_VOIDタイミングを活用してください。コアの在庫戻しロジックは変更せずに、独自の補正処理(外部WMS連携など)を安全に追加できます。
プロセス追加
Section titled “プロセス追加”出荷伝票に紐づくバッチ処理(一括出荷、ピッキングリスト出力等)を SvrProcess で実装。
関連プロセス
Section titled “関連プロセス”| プロセス名 | 説明 |
|---|---|
| 伝票アクション (DocAction) | 伝票の完了・無効・取消等 |
| 受注から出荷伝票生成 | 受注伝票から出荷伝票を一括生成 |
| 出荷確認 | ピッキング・出荷の確認処理 |
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”iDempiereの出荷伝票は Model Validator や Callout で安全にカスタマイズできます。 在庫引落ロジックやピッキング確認フローをコア改変なしで拡張可能です。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。