iDempiere 仕入先返品出荷伝票の使い方|購買管理 操作マニュアル・技術仕様
📖 購買管理の全体像: 購買管理の全体図 も合わせてご覧ください。
仕入先返品出荷伝票(Return to Vendor)は、仕入先へ返品する品目を実際に出荷し、倉庫の在庫を払い出すための伝票です。入荷伝票と同じ M_InOut テーブルを使用しますが、移動タイプが「仕入先返品(V-)」となり、在庫が減少する方向に働きます。
📌 ポイント: この伝票を完了して初めて在庫が減ります。仕入先返品依頼伝票(Vendor RMA)を完了しただけでは在庫は動きません。返品依頼と返品出荷は必ずセットで運用してください。
仕入先返品出荷伝票でできること
Section titled “仕入先返品出荷伝票でできること”- 仕入先へ返品する品目・数量の出荷登録(在庫の払出)
- 仕入先返品依頼伝票(RMA)を参照した明細の取込
- 保管場所(ロケーター)を指定した在庫の引き落とし
- ロット・シリアル番号(属性セットインスタンス)単位の払出指定
- 入出荷確認伝票による実出荷数量・欠陥品数量の確認
- 運送会社・トラックNo・運送料など配送情報の記録
- 返品出荷をもとにした仕入請求伝票(貸方伝票)の生成
graph TD
subgraph "仕入先返品出荷伝票ウィンドウ(Window ID: 53098)"
T1["↩️ 仕入先返品出荷伝票<br/>M_InOut<br/>51項目"]
T2["📋 仕入先返品出荷伝票明細<br/>M_InOutLine<br/>27項目"]
T3["✅ 入出荷確認伝票<br/>M_InOutLineConfirm<br/>11項目"]
T4["🏷 属性<br/>M_InOutLineMA<br/>6項目"]
end
T1 --> T2
T2 --> T3
T2 --> T4
| タブ名 | テーブル | 役割 | 主な入力項目 |
|---|---|---|---|
| 仕入先返品出荷伝票 | M_InOut | ヘッダー(取引先・倉庫・伝票タイプ・配送情報) | 伝票タイプ、取引先、倉庫、移動日付、RMA |
| 仕入先返品出荷伝票明細 | M_InOutLine | 返品する品目・数量の明細 | 品目、保管場所、移動数量、RMA Line |
| 入出荷確認伝票 | M_InOutLineConfirm | 出荷実績の確認(差異・欠陥品) | 確認済(正常品)数量、欠陥品数量 |
| 属性 | M_InOutLineMA | ロット・シリアル別の払出数量割当 | 属性セットインスタンス、移動数量 |
💡 ヒント: 「入出荷確認伝票」タブと「属性」タブは明細タブの子タブです。属性セットで在庫を追跡していない品目の場合、「属性」タブは使用しません。
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 メニューから開く<br/>返品管理 > 仕入先返品出荷伝票"] --> B["➕ 新規でヘッダーを入力<br/>(伝票タイプ・取引先・倉庫)"]
B --> C["🔗 RMA を選択<br/>(仕入先返品依頼伝票)"]
C --> D["💾 保存"]
D --> E{明細の作り方}
E -->|RMA から取込| F["📥 Create lines from ボタン<br/>RMA 明細を取り込む"]
E -->|手動入力| G["✏️ 明細タブで品目・<br/>保管場所・移動数量を入力"]
F --> H["🏷 属性セット品目は<br/>属性タブでロット/シリアルを指定"]
G --> H
H --> I["▶️ 出荷プロセス(DocAction)<br/>完了 を実行"]
I --> J["📉 在庫が減少<br/>移動タイプ V- で在庫取引を記録"]
J --> K["🧾 必要に応じて<br/>仕入請求伝票(貸方)を生成"]
アクセス方法(メニューパス)
Section titled “アクセス方法(メニューパス)”メニューから「返品管理 > 仕入先返品出荷伝票」を開きます。
- ツールバーの「新規」ボタンをクリック
- ヘッダー情報を入力:
- 伝票タイプ: 仕入先返品用の伝票タイプを選択(必須)
- 取引先: 返品先の仕入先(必須。取引先住所も必須)
- 倉庫: 出荷元の倉庫(必須)
- 移動日付: 在庫が動く日付(必須。初期値は当日)
- 転記日付: 会計計上日(必須。移動日付から自動セット)
- RMA: 対象の仕入先返品依頼伝票を選択
- 移動タイプ: 仕入先返品(V-)(必須)
- 「保存」をクリック
- 「Create lines from」ボタンで RMA から明細を取り込む、または明細タブで手動入力
- 明細では 保管場所(ロケーター)と 移動数量 を必ず確認します
⚠️ 注意: ヘッダーの「発注伝票」と「RMA」はどちらか一方しか設定できません。両方を設定した状態で完了しようとすると
@OrderOrRMA@エラーとなり、伝票状態が「不正(Invalid)」になります。
伝票処理(DocAction)
Section titled “伝票処理(DocAction)”「出荷プロセス」ボタン(DocAction)から以下のアクションを実行します。伝票状態(DocStatus)の初期値は「起案(DR)」、伝票アクションの初期値は「完了(CO)」です。
| アクション | 処理内容 |
|---|---|
| 完了(Complete) | 検証後に在庫を払い出し、在庫取引を記録して「完了(CO)」へ |
| 無効(Void) | 未完了の伝票を無効化し、確認伝票も無効化 |
| クローズ(Close) | 完了済み伝票を締め、以降の参照生成を止める |
| 訂正取消(Reverse-Correct) | 完了済み伝票を打ち消す逆仕訳伝票を生成 |
| 再有効化(Re-activate) | 完了済み伝票を起案状態に戻す |
完了処理の前段では、発注伝票と RMA の排他・会計期間・与信・明細行の有無・属性セット必須品目の割当などが検証されます(詳細は技術仕様の prepareIt() を参照)。
項目リファレンス
Section titled “項目リファレンス”主要項目のみ掲載しています。全項目一覧はリファレンス参照
仕入先返品出荷伝票タブ(ヘッダー)
Section titled “仕入先返品出荷伝票タブ(ヘッダー)”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 伝票番号 | 必須 | 文字列 | 伝票番号(伝票タイプの採番ルールで自動採番) |
| 伝票タイプ | 必須 | 選択 | 仕入先返品用の伝票タイプ |
| 取引先 | 必須 | 検索 | 返品先の仕入先 |
| 取引先住所 | 必須 | 選択 | 出荷元として使用する取引先住所 |
| 倉庫 | 必須 | 選択 | 出荷元倉庫 |
| 移動日付 | 必須 | 日付 | 在庫が動いた日付(初期値=当日) |
| 転記日付 | 必須 | 日付 | 会計計上日(初期値=当日) |
| 移動タイプ | 必須 | リスト | 仕入先返品(V-) |
| RMA | - | 検索 | 参照する仕入先返品依頼伝票 |
| 発注伝票 | - | 検索 | 参照する発注伝票(RMA と排他) |
| 出荷ルール | 必須 | リスト | 出荷の可否判定(初期値=在庫available) |
| 配送方法 | 必須 | リスト | 配送手段(初期値=引取Pickup) |
| 送料負担ルール | 必須 | リスト | 送料の扱い(初期値=運賃込Freight included) |
| 運送会社 / トラックNo | - | 選択・文字列 | 運送会社と追跡番号 |
| 伝票状態 | 自動 | リスト | 起案(DR)/進行中(IP)/完了(CO)/クローズ(CL) 等 |
| 出荷プロセス | 必須 | ボタン | DocAction(完了・無効・クローズ等) |
仕入先返品出荷伝票明細タブ
Section titled “仕入先返品出荷伝票明細タブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 明細番号 | 必須 | 整数 | 行番号(自動で10刻み採番) |
| RMA Line | - | 選択 | 参照する仕入先返品依頼伝票明細 |
| 品目 | - | 検索 | 返品する品目 |
| 保管場所 | - | 選択 | 払出元のロケーター |
| 属性セットインスタンス | 必須 | 属性 | ロット・シリアル等の属性 |
| 入力数量 | 必須 | 数量 | 入力単位での数量(初期値=1) |
| 数量単位 | 必須 | 選択 | 入力数量の単位 |
| 移動数量 | 必須 | 数量 | 在庫の基本単位に換算した数量 |
| 確認済(正常品)数量 | - | 数量 | 確認済みの正常品数量 |
| 欠陥品数量 | - | 数量 | QA 不良として計上する数量(初期値=0) |
| 料金 | - | 選択 | 品目の代わりに計上する料金 |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 「発注伝票」と「RMA」を両方入力するとどうなりますか?
Section titled “Q. 「発注伝票」と「RMA」を両方入力するとどうなりますか?”完了処理時に @OrderOrRMA@ エラーとなり、伝票状態が「不正」になります。MInOut.prepareIt() は「発注伝票または RMA のどちらか一方だけを 1 つの入出荷伝票で処理できる」という制約を持っています。RMA 起点の返品出荷では「発注伝票」欄を空にしてください。
Q. 完了しようとすると @NoLines@ と表示されます。
Section titled “Q. 完了しようとすると @NoLines@ と表示されます。”明細行が 1 行もありません。「Create lines from」ボタンで RMA から明細を取り込むか、明細タブで手動登録してから再度完了してください。
Q. 属性セット(ロット・シリアル)品目でエラーになります。
Section titled “Q. 属性セット(ロット・シリアル)品目でエラーになります。”品目の属性セットが「出荷時に必須」に設定されている場合、明細の移動数量と「属性」タブ(M_InOutLineMA)で割り当てたロット/シリアル別数量の合計が一致していないと完了できません。属性タブで自動生成でない行の数量合計が、明細の移動数量と一致するよう調整してください。
Q. 入出荷確認伝票は必ず作らなければいけませんか?
Section titled “Q. 入出荷確認伝票は必ず作らなければいけませんか?”伝票タイプの設定に応じて、完了準備処理(prepareIt)の中で createConfirmation() が自動実行されます。確認伝票が生成された場合は、確認を処理するまで伝票が完了しません。運用上不要であれば伝票タイプ側の確認設定を見直してください。
- 仕入先返品依頼伝票(Vendor RMA)の使い方
- 入荷伝票(Material Receipt)の使い方
- 発注伝票(Purchase Order)の使い方
- 仕入請求書(Vendor Invoice)の使い方
- 得意先返品 RMA(Customer RMA)の使い方
- 画面リファレンス: 仕入先返品出荷伝票
🛠 技術仕様(開発者向け)
仕入先返品出荷伝票は Document 型の伝票で、出荷伝票・入荷伝票と共通の M_InOut テーブルに格納されます。ウィンドウ(AD_Window_ID: 53098)が異なるだけで、実体は同一のモデルクラス MInOut(3,644行)です。MInOut は DocAction と IDocsPostProcess を実装し、伝票ライフサイクルと会計連携を担います。仕入先返品は IsSOTrx=N・移動タイプ V-(Vendor Returns)で識別されます。
M_InOut のアクセスレベルは「組織(Organization)」、削除可(IsDeleteable=Y)です。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MInOut {
+prepareIt() String
+completeIt() String
+voidIt() boolean
+closeIt() boolean
+reverseCorrectIt() boolean
+reActivateIt() boolean
+getLines(boolean) MInOutLine[]
+createConfirmation() void
+getMovementType(ctx, C_DocType_ID, issotrx, trxName)$ String
}
class MInOutLine {
+beforeSave(boolean) boolean
+getOfRMALine(...)$ MInOutLine[]
+setM_Locator_ID(BigDecimal) void
}
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
MInOutLine --> MInOutLineMA : attribute allocation
MInOutLine --> MInOutLineConfirm : confirmation
MInOutLine --> MRMALine : references
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MInOut.java(3,644行)、MInOutLine.java(1,039行)、MInOutLineConfirm.java(210行)
関連DBテーブル
Section titled “関連DBテーブル”M_InOut(入出荷伝票ヘッダー)
Section titled “M_InOut(入出荷伝票ヘッダー)”📌 ポイント:
M_InOutは出荷・入荷・得意先返品・仕入先返品を 1 テーブルで扱います。Model Validator でフックする際はisSOTrx()とgetMovementType()の組み合わせで伝票の種類を判定してください。ウィンドウ ID だけで分岐すると、REST API やプロセス経由の生成を取りこぼします。
| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_InOut_ID | ID | PK | 入出荷伝票ID | 主キー |
| AD_Client_ID | TableDirect | Y | クライアント | 既定 @#AD_Client_ID@ |
| AD_Org_ID | TableDirect | Y | 組織 | callout CalloutOrder.organization |
| DocumentNo | String | Y | 伝票番号 | |
| C_DocType_ID | Table | Y | 伝票タイプ | callout CalloutInOut.docType |
| DocStatus | List | Y | 伝票状態 | 既定 DR |
| DocAction | Button | Y | 伝票アクション | 既定 CO |
| IsSOTrx | YesNo | Y | 販売取引フラグ | 既定 @IsSOTrx@。仕入先返品は N |
| MovementType | List | Y | 移動タイプ | 仕入先返品は V- |
| MovementDate | Date | Y | 移動日付 | 既定 @#Date@、callout CalloutEngine.dateAcct |
| DateAcct | Date | Y | 転記日付 | 既定 @#Date@ |
| C_BPartner_ID | Search | Y | 取引先 | callout CalloutInOut.bpartner |
| C_BPartner_Location_ID | TableDirect | Y | 取引先住所 | |
| M_Warehouse_ID | TableDirect | Y | 倉庫 | callout CalloutInOut.warehouse |
| M_RMA_ID | Search | N | 仕入先返品依頼伝票 | callout CalloutInOut.rma |
| C_Order_ID | Search | N | 発注伝票 | callout CalloutInOut.order。RMA と排他 |
| DeliveryRule / DeliveryViaRule | List | Y | 出荷ルール/配送方法 | 既定 A / P |
| FreightCostRule / PriorityRule | List | Y | 送料負担ルール/優先度 | 既定 I / 5 |
| Processed / Posted | YesNo / Button | Y | 処理済み/転記状態 |
M_InOutLine(入出荷伝票明細)
Section titled “M_InOutLine(入出荷伝票明細)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_InOutLine_ID | ID | PK | 明細ID | callout CalloutInOut.navigateInOutLine |
| M_InOut_ID | Search | Y | ヘッダーFK | |
| Line | Integer | Y | 明細番号 | 既定 SQL で最大値+10 |
| M_RMALine_ID | TableDirect | N | RMA明細FK | callout CalloutInOut.rmaLine |
| M_Product_ID | Search | N | 品目 | callout CalloutInOut.product |
| C_Charge_ID | TableDirect | N | 料金 | |
| M_Locator_ID | Locator | N | 保管場所 | callout CalloutFillLocator.fillLocator |
| M_AttributeSetInstance_ID | ProductAttribute | Y | 属性セットインスタンス | callout CalloutInOut.asi |
| QtyEntered / C_UOM_ID | Quantity / TableDirect | Y | 入力数量と単位 | 既定 1、callout CalloutInOut.qty |
| MovementQty | Quantity | Y | 移動数量 | 既定 1、callout CalloutInOut.qty |
| ConfirmedQty / ScrappedQty | Quantity | N | 確認済(正常品)数量/欠陥品数量 | ScrappedQty 既定 0 |
| C_OrderLine_ID | TableDirect | N | 発注明細FK | callout CalloutInOut.orderLine |
M_InOutLineConfirm / M_InOutLineMA
Section titled “M_InOutLineConfirm / M_InOutLineMA”| テーブル | 主要カラム | 役割 |
|---|---|---|
| M_InOutLineConfirm | M_InOutLine_ID, M_InOutConfirm_ID, TargetQty, ConfirmedQty, DifferenceQty, ScrappedQty | 出荷実績の確認と差異・欠陥品の記録 |
| M_InOutLineMA | M_InOutLine_ID, M_AttributeSetInstance_ID, MovementQty, DateMaterialPolicy, IsAutoGenerated | ロット・シリアル別の払出数量割当 |
erDiagram
M_InOut ||--o{ M_InOutLine : "has lines"
M_InOutLine ||--o{ M_InOutLineMA : "attribute allocation"
M_InOutLine ||--o{ M_InOutLineConfirm : "confirmation"
M_InOut }o--o| M_RMA : "vendor RMA"
M_InOutLine }o--o| M_RMALine : "RMA line"
M_InOut }o--|| C_BPartner : "vendor"
M_InOut }o--|| M_Warehouse : "ship from"
M_InOutLine }o--o| M_Product : "product"
M_InOutLine }o--o| M_Locator : "locator"
ビジネスロジック
Section titled “ビジネスロジック”伝票ライフサイクル
Section titled “伝票ライフサイクル”stateDiagram-v2
[*] --> Drafted : 新規作成(DocStatus=DR)
Drafted --> InProgress : prepareIt()
Drafted --> Invalid : 検証エラー
InProgress --> Completed : completeIt() 在庫払出
Completed --> Closed : closeIt()
Completed --> Reversed : reverseCorrectIt()
Completed --> Drafted : reActivateIt()
Drafted --> Voided : voidIt()
prepareIt() の主要検証(MInOut.java 1438行〜)
Section titled “prepareIt() の主要検証(MInOut.java 1438行〜)”| # | 検証 | 失敗時のメッセージ |
|---|---|---|
| 1 | TIMING_BEFORE_PREPARE の発火 | — |
| 2 | 発注伝票と RMA の排他(C_Order_ID != 0 && M_RMA_ID != 0) | @OrderOrRMA@ |
| 3 | 会計期間のオープン(MPeriod.isOpen()) | @PeriodClosed@ |
| 4 | 過去日付取引の許可(MAcctSchema.isBackDateTrxAllowed()) | @BackDateTrxNotAllowed@ |
| 5 | 参照先発注がクローズ済みでないこと(逆伝票時はスキップ) | OrderClosed |
| 6 | 与信チェック(Core.getCreditManager()) | Credit Manager のエラー |
| 7 | 明細行の存在 | @NoLines@ |
| 8 | 容積・重量の集計(setVolume() / setWeight()) | — |
| 9 | 属性セット必須品目の M_InOutLineMA 割当一致 | @M_AttributeSet_ID@ @IsMandatory@ |
| 10 | 確認伝票の自動生成(逆伝票以外で createConfirmation()) | — |
明細側は MInOutLine.beforeSave()(561行〜)で品目・料金・数量・保管場所の整合性が検証されます。MInOutLine.getOfRMALine() により RMA 明細に紐づく入出荷明細を取得でき、返品数量の重複計上チェックに利用されます。
移動タイプ(MovementType)
Section titled “移動タイプ(MovementType)”X_M_InOut に定義された定数のうち、購買・返品業務で使用する主な値は次のとおりです。
| 値 | 定数 | 意味 |
|---|---|---|
| V+ | MOVEMENTTYPE_VendorReceipts | 仕入先からの入荷(在庫増) |
| V- | MOVEMENTTYPE_VendorReturns | 仕入先への返品出荷(在庫減) |
| C- | MOVEMENTTYPE_CustomerShipment | 得意先への出荷 |
| C+ | MOVEMENTTYPE_CustomerReturns | 得意先からの返品受入 |
移動タイプは MInOut.getMovementType(ctx, C_DocType_ID, issotrx, trxName) により伝票タイプと販売取引フラグから決定されます。
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”返品出荷に固有の業務ルールを追加する場合は docValidate() の TIMING_BEFORE_COMPLETE でフックします。
public class CustomReturnToVendorValidator implements ModelValidator { @Override public String docValidate(PO po, int timing) { if (po instanceof MInOut && timing == TIMING_BEFORE_COMPLETE) { MInOut inout = (MInOut) po; // 仕入先返品のみを対象にする if (!inout.isSOTrx() && MInOut.MOVEMENTTYPE_VendorReturns.equals(inout.getMovementType())) { if (inout.getM_RMA_ID() == 0) { return "仕入先返品出荷には返品依頼伝票(RMA)の指定が必要です"; } } } return null; }}このテーブルの Callout
Section titled “このテーブルの Callout”| Calloutクラス | メソッド | トリガーカラム | 処理内容 |
|---|---|---|---|
| CalloutInOut | docType / bpartner / warehouse | C_DocType_ID / C_BPartner_ID / M_Warehouse_ID | 伝票タイプ・取引先・倉庫に応じた既定値のセット |
| CalloutInOut | order / rma | C_Order_ID / M_RMA_ID | 発注伝票・RMA からヘッダー情報を取込 |
| CalloutInOut | orderLine / rmaLine | C_OrderLine_ID / M_RMALine_ID | 発注明細・RMA 明細から品目・数量を取込 |
| CalloutInOut | product / asi | M_Product_ID / M_AttributeSetInstance_ID | 品目選択時の単位・属性のセット |
| CalloutInOut | qty | QtyEntered / MovementQty / C_UOM_ID | 入力数量と移動数量の単位換算 |
| CalloutInOut | navigateInOutLine | M_InOutLine_ID | 明細へのナビゲーション |
| CalloutEngine | dateAcct | MovementDate | 移動日付から転記日付を自動セット |
| CalloutFillLocator | fillLocator | M_Locator_ID | 既定ロケーターの自動補完 |
| CalloutOrder | organization | AD_Org_ID | 組織変更時の関連項目リセット |
MInOut はコアクラスのため直接改変せず、IModelFactory によるモデルクラス差し替え、または Model Validator によるフックを使用します。会計仕訳をカスタマイズする場合は IDocFactory を実装したプラグインを登録してください。
関連プロセス
Section titled “関連プロセス”| プロセス名 | 画面上のボタン | 説明 |
|---|---|---|
| Create lines from | CreateLinesFrom | RMA や既存伝票から明細を一括取込 |
| 入出荷確認伝票作成 | CreateConfirm | 確認伝票を手動生成 |
| パッケージ作成 | CreatePackage | 出荷用パッケージの作成 |
| 入荷伝票をもとに仕入請求伝票作成 | GenerateTo | 完了済み伝票から請求伝票を生成 |
| 出荷プロセス | DocAction | 完了・無効・クローズ・訂正取消・再有効化 |
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”仕入先返品出荷は在庫・会計・仕入先評価に直結するため、返品理由コードの追加や返品承認フローの組み込みといったカスタマイズ需要が多い領域です。
Model Validator と Callout を用いれば、コアの MInOut に手を入れずに自社の返品ルールを実装できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。