iDempiere 売上返品 RMA(Customer RMA)|操作マニュアル・技術仕様
📖 販売管理の全体像: 販売管理の業務フロー全体図 も合わせてご覧ください。
得意先返品承認(RMA: Return Material Authorization)は、得意先からの返品を受け付け、返品処理を管理するための伝票です。RMAを使うことで、返品受入と貸方メモ(Credit Memo)の作成を体系的に管理できます。
得意先返品承認でできること
Section titled “得意先返品承認でできること”- 得意先からの返品依頼の受付・記録
- 出荷伝票を参照した返品明細の自動作成
- 返品受入伝票(Customer Return)の生成
- 貸方メモ(売上請求書の減額)の生成
- 返品理由・返品タイプの管理
graph TD
subgraph "得意先返品承認ウィンドウ(Window ID: 320)"
T1["↩️ 顧客返品受付伝票<br/>M_RMA<br/>17項目"]
T2["📋 顧客返品受付伝票明細<br/>M_RMALine<br/>15項目"]
T3["💰 税額計算<br/>M_RMATax<br/>8項目(読取専用)"]
end
T1 --> T2
T1 --> T3
| タブ名 | テーブル | 役割 | 主な入力項目 |
|---|---|---|---|
| 顧客返品受付伝票 | M_RMA | ヘッダー(返品元・対象出荷等) | 伝票タイプ、出荷伝票、取引先 |
| 顧客返品受付伝票明細 | M_RMALine | 返品品目・数量の明細 | 品目、数量、金額 |
| 税額計算 | M_RMATax | 税額の自動計算結果 | 税率、税額 |
基本操作手順
Section titled “基本操作手順”graph TD
S1["① 新規RMA作成"] --> S2["② ヘッダー入力<br/>出荷伝票・RMA Type"]
S2 --> S3["③ 保存"]
S3 --> S4["④ 明細取込<br/>Create lines from<br/>または手動入力"]
S4 --> S5["⑤ 完了処理<br/>Process RMA → 完了"]
S5 --> S6["⑥ 返品受入伝票の作成<br/>Customer Return"]
S6 --> S7["⑦ 返品受入完了<br/>在庫に戻る"]
S5 --> S8["⑧ 貸方メモの作成<br/>Create Order From RMA"]
S8 --> S9["✅ 売掛金の減額"]
アクセス方法
Section titled “アクセス方法”メニューから「返品管理 > 得意先返品受付伝票」を開きます。
- 「新規」ボタンをクリック
- ヘッダー情報を入力:
- 伝票タイプ: 得意先返品承認を選択
- RMA Type: 返品タイプ(交換、返金、修理 等)を選択
- 出荷伝票: 元の出荷伝票を選択(取引先が自動セット)
- 名称: 返品の件名
- 説明: 返品理由・備考
- 「保存」をクリック
- 「Create lines from」ボタンで出荷伝票から明細を取り込み、または手動で明細入力
- 「Process RMA」ボタンで「完了」を実行
📌 ポイント: 元の出荷伝票を「Create lines from」で参照すると、品目・数量・単価が自動的に取り込まれます。部分返品の場合は取り込み後に数量を手動で修正してください。
返品受入伝票の作成
Section titled “返品受入伝票の作成”RMA完了後:
- メニュー「返品管理 > 得意先返品」を開く
- 完了済みのRMAを参照して返品受入伝票を作成
- 完了処理で在庫が戻る
貸方メモの作成
Section titled “貸方メモの作成”- RMA画面で「Create Order From RMA」ボタンをクリック
- 受注伝票(返品用)が自動生成される
- 売上貸方伝票を作成して得意先の債権を減額
項目リファレンス
Section titled “項目リファレンス”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 伝票タイプ | - | 選択 | 得意先返品承認 |
| RMA Type | - | 選択 | 返品タイプ(交換、返金、修理等) |
| 出荷伝票 | - | 検索 | 返品対象の元の出荷伝票 |
| 取引先 | - | 検索 | 返品元の得意先 |
| 社内担当者 | - | 検索 | 対応する営業担当者 |
| 受注伝票 | - | 検索 | 元の受注伝票(参照) |
| 金額 | - | 金額 | 返品金額 |
| 伝票状態 | 自動 | リスト | 起案、完了 等 |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. RMAを使わずに返品処理できますか?
Section titled “Q. RMAを使わずに返品処理できますか?”直接「得意先返品」伝票を作成することも可能ですが、RMAを経由することで返品の承認フローを管理でき、トレーサビリティが向上します。
💡 ヒント: RMAを使う運用では「RMAが承認されるまで実際の返品受入を行わない」というコントロールが可能です。承認フローが必要な業務にはRMAを使うことを推奨します。
Q. 部分返品は可能ですか?
Section titled “Q. 部分返品は可能ですか?”はい。RMA明細で返品数量を出荷数量より少なく設定することで、部分返品に対応できます。
Q. 返品時の在庫はどうなりますか?
Section titled “Q. 返品時の在庫はどうなりますか?”返品受入伝票(Customer Return)を完了した時点で、返品品目が倉庫の在庫に戻ります。
⚠️ 注意: RMAを完了しただけでは在庫は戻りません。在庫に戻すには必ず「返品受入伝票(Customer Return)」を別途作成・完了する必要があります。また、売掛金の減額には「貸方メモ」の作成も別途必要です。
業務フロー上の位置づけ
Section titled “業務フロー上の位置づけ”graph TD
A[出荷伝票] -->|返品依頼| B[RMA]
B -->|返品受入| C[返品受入伝票]
B -->|減額| D[貸方メモ]
C -->|在庫戻し| E[在庫台帳]
D -->|消込| F[入出金]
OSS ERP導入についてのご相談
Section titled “OSS ERP導入についてのご相談”As-Link株式会社では、iDempiereの導入支援・カスタマイズ開発を承っております。
🛠 技術仕様(開発者向け)
得意先返品(Return Material Authorization)は Document 型の伝票で、M_RMA テーブルに格納されます。出荷済み商品の返品受付を管理し、返品入荷伝票やクレジットメモ(訂正請求書)の生成元となります。MRMA クラス(1,008行)が中核ビジネスロジックを担い、DocAction インターフェースを実装しています。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MRMA {
+prepareIt() String
+completeIt() String
+voidIt() boolean
+closeIt() boolean
+reverseCorrectIt() boolean
+getLines() MRMALine[]
}
class X_M_RMA {
<<generated>>
}
class PO {
<<abstract>>
}
class DocAction {
<<interface>>
}
MRMA --|> X_M_RMA
X_M_RMA --|> PO
MRMA ..|> DocAction
MRMA --> MRMALine : has many
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MRMA.java
関連DBテーブル
Section titled “関連DBテーブル”M_RMA(返品ヘッダー)
Section titled “M_RMA(返品ヘッダー)”📌 ポイント:
M_RMAテーブルはIsSOTrxカラムで得意先返品(Y)と仕入先返品(N)を区別します。MRMAクラスは単一クラスで両方向の返品を処理します。ModelValidator でのフック時は必ずrma.isSOTrx()で方向を確認してください。
| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_RMA_ID | ID | PK | 返品ID | 主キー |
| AD_Client_ID | TableDirect | Y | クライアント | |
| AD_Org_ID | TableDirect | Y | 組織 | |
| DocumentNo | String | Y | 伝票番号 | |
| IsSOTrx | YesNo | Y | 販売取引フラグ | Y=得意先返品, N=仕入先返品 |
| C_DocType_ID | TableDirect | Y | 伝票タイプ | |
| DocStatus | List | Y | 伝票状態 | DR/IP/CO/CL/VO/RE |
| DocAction | Button | Y | 伝票アクション | |
| Name | String | Y | 名前 | 返品理由の概要 |
| Description | Text | N | 説明 | |
| C_BPartner_ID | Search | Y | 取引先 | |
| M_InOut_ID | Search | Y | 元出荷伝票 | 返品対象の出荷 |
| C_Order_ID | Search | N | 受注伝票 | |
| SalesRep_ID | Table | Y | 担当者 | |
| Amt | Amount | Y | 返品金額 | 自動計算 |
| Processed | YesNo | Y | 処理済み |
M_RMALine(返品明細)
Section titled “M_RMALine(返品明細)”| カラム名 | 型 | 必須 | 説明 |
|---|---|---|---|
| M_RMALine_ID | ID | PK | 明細ID |
| M_RMA_ID | Search | Y | ヘッダーFK |
| Line | Integer | Y | 行番号 |
| M_InOutLine_ID | Search | Y | 元出荷明細 |
| Qty | Quantity | Y | 返品数量 |
| Amt | Amount | Y | 返品金額 |
| Description | Text | N | 説明 |
| QtyDelivered | Quantity | Y | 返品入荷済数量 |
erDiagram
M_RMA ||--o{ M_RMALine : "has"
M_RMA }o--|| C_BPartner : "references"
M_RMA }o--|| M_InOut : "original shipment"
M_RMA }o--o| C_Order : "references"
M_RMALine }o--|| M_InOutLine : "original line"
M_RMA ||--o| M_InOut : "generates return receipt"
M_RMA ||--o| C_Invoice : "generates credit memo"
ビジネスロジック
Section titled “ビジネスロジック”返品業務フロー
Section titled “返品業務フロー”stateDiagram-v2
[*] --> Drafted : RMA新規作成
Drafted --> InProgress : prepareIt()
InProgress --> Completed : completeIt()
Completed --> ReturnReceipt : 返品入荷伝票生成
ReturnReceipt --> CreditMemo : クレジットメモ生成
Completed --> Closed : closeIt()
Completed --> Voided : voidIt()
prepareIt() の主要処理
Section titled “prepareIt() の主要処理”ModelValidator.TIMING_BEFORE_PREPAREイベント発火- 会計期間のオープンチェック
- 明細行の存在チェック
- 元出荷伝票の妥当性検証
- 返品数量が出荷数量を超えていないかチェック
ModelValidator.TIMING_AFTER_PREPAREイベント発火
completeIt() の主要処理
Section titled “completeIt() の主要処理”ModelValidator.TIMING_BEFORE_COMPLETEイベント発火- 返品金額の最終計算
- RMAステータスの更新
ModelValidator.TIMING_AFTER_COMPLETEイベント発火
クレジットメモ生成フロー
Section titled “クレジットメモ生成フロー”⚠️ 注意: RMA は「承認」にすぎず、完了しただけでは在庫は戻りません。在庫回復には返品入荷伝票(
M_InOut, MovementType=C+)を別途完了させる必要があります。クレジットメモ生成もそれとは独立しています。自動化する場合はプロセスまたは Model Validator で明示的にこれらの伝票を生成・完了させる実装が必要です。
RMA完了後、以下の手順でクレジットメモ(訂正請求書)を生成:
- RMAから返品入荷伝票(
M_InOut, MovementType=C+)を生成 - 返品入荷伝票の完了で在庫が増加
- RMAからクレジットメモ(
C_Invoice, DocBaseType=ARC)を生成 - クレジットメモの完了で売掛金が減少
Callout
Section titled “Callout”| Calloutクラス | メソッド | トリガーフィールド | 処理内容 |
|---|---|---|---|
| CalloutInOut | rma | M_RMA_ID | RMA情報から出荷明細の自動セット |
| CalloutInOut | rmaLine | M_RMALine_ID | RMA明細から品目・数量の自動セット |
Calloutソース: org.adempiere.base.callout/src/org/compiere/model/CalloutInOut.java
💡 ヒント: RMA 承認フローを追加する場合は、
TIMING_BEFORE_COMPLETEタイミングで承認状態を確認する Model Validator が最もシンプルです。AD_WF_Activityベースのワークフローと組み合わせることで、多段階承認も実現できます。デバッグはAD_WF_Processテーブルを確認してください。
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”返品伝票に独自バリデーションを追加する最も安全な方法:
public class CustomRMAValidator implements ModelValidator { @Override public String docValidate(PO po, int timing) { if (po instanceof MRMA) { MRMA rma = (MRMA) po; if (timing == TIMING_BEFORE_COMPLETE) { // 例: 返品理由の必須チェック if (Util.isEmpty(rma.getDescription())) { return "返品理由の入力は必須です"; } // 例: 返品金額の上限チェック if (rma.getAmt().compareTo(new BigDecimal("100000")) > 0) { return "返品金額が上限を超えています。承認が必要です"; } } } return null; }}プロセス追加
Section titled “プロセス追加”RMAからの返品入荷伝票生成やクレジットメモ生成を自動化するプロセスを SvrProcess で実装可能。
🔧 カスタマイズ: 返品理由コードのマスタ管理が必要な場合、
AD_Reference/AD_Ref_Listでカスタム選択肢を定義し、M_RMAにカスタムカラム(例:ReturnReason)を追加する方法が iDempiere の標準的なアプローチです。2Pack でメタデータを管理してください。
関連プロセス
Section titled “関連プロセス”| プロセス名 | 説明 |
|---|---|
| 伝票アクション (DocAction) | 伝票の完了・無効・取消等 |
| RMAから返品入荷伝票生成 | 返品入荷伝票の自動生成 |
| RMAからクレジットメモ生成 | 訂正請求書の自動生成 |
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”iDempiereの得意先返品は Model Validator や Callout で安全にカスタマイズできます。 返品承認フローや自動クレジットメモ生成をコア改変なしで拡張可能です。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。