iDempiere 入荷伝票の使い方|購買管理 操作マニュアル・技術仕様
入荷伝票は、仕入先からの商品・資材の受入を記録する伝票です。出荷伝票と同じ M_InOut テーブルを使用しますが、入荷方向(MovementType=V+)で区別されます。入荷伝票の完成時に倉庫の在庫が増加します。
入荷伝票でできること
Section titled “入荷伝票でできること”- 仕入先からの入荷(受入)の記録
- 在庫の自動増加(完成時)
- 発注伝票との照合(数量・品目の突合)
- 仕入請求書との照合
- 入荷確認(検品)の管理
- ロット番号・シリアル番号の記録
🖥️ インタラクティブ画面レイアウト: AD メタデータから自動生成した 入荷伝票の全タブ・全フィールド レイアウト(HTML版) で、実際の画面配置をご確認いただけます。
📖 購買管理の全体像: 購買管理の業務フロー全体図 も合わせてご覧ください。
graph TD
subgraph "入荷伝票ウィンドウ (Window ID: 184)"
T1["📋 入荷伝票<br/>M_InOut<br/>47項目"]
T2["📦 入荷伝票明細<br/>M_InOutLine<br/>27項目"]
T3["🔗 確認明細<br/>M_InOutLineConfirm<br/>11項目"]
T4["🔗 属性<br/>M_InOutLineMA<br/>7項目"]
T5["🔗 発注照合<br/>M_MatchPO<br/>11項目"]
T6["🔗 請求書照合<br/>M_MatchInv<br/>10項目"]
end
T1 --> T2
T2 --> T3
T2 --> T4
T2 --> T5
T2 --> T6
| タブ名 | テーブル | 役割 |
|---|---|---|
| 入荷伝票 | M_InOut | ヘッダー情報(仕入先・倉庫・日付等) |
| 入荷伝票明細 | M_InOutLine | 品目・数量の明細行 |
| 入出荷確認伝票明細 | M_InOutLineConfirm | 検品確認の明細 |
| 属性 | M_InOutLineMA | ロット・シリアル番号の属性情報 |
| 発注照合 | M_MatchPO | 発注伝票との照合状況 |
| 請求書照合 | M_MatchInv | 仕入請求書との照合状況 |
📌 ポイント: 入荷伝票明細タブの下に「確認明細」「属性」「発注照合」「請求書照合」の4つの子タブがあります。これらは明細行ごとのデータを管理します。ロット管理品目では「属性」タブへの入力が在庫管理上必須です。
基本操作フロー
Section titled “基本操作フロー”graph TD
A["🚀 開始"] --> B["新規ボタンをクリック"]
B --> C["ヘッダー情報を入力<br/>(伝票タイプ・移動日付・倉庫)"]
C --> D{"発注伝票あり?"}
D -->|あり(推奨)| E["発注伝票フィールドに<br/>発注伝票を選択<br/>(仕入先等が自動セット)"]
D -->|なし| F["仕入先を手動入力"]
E --> G["保存"]
F --> G
G --> H{"明細の入力方法"}
H -->|自動取込| I["「Create lines from」ボタンで<br/>発注伝票から明細を取り込み"]
H -->|手動入力| J["入荷伝票明細タブで<br/>品目・数量・ロケーターを入力"]
I --> K["入荷数量を確認・修正"]
J --> K
K --> L["ロット・シリアル品目は<br/>属性タブに番号を入力"]
L --> M["伝票アクションボタンで<br/>「完了」を実行"]
M --> N["✅ 入荷伝票 完了"]
N --> O["在庫が自動増加"]
N --> P["発注伝票の入荷済数量が更新"]
N --> Q["発注照合レコードが自動作成"]
💡 ヒント: 「Create lines from」ボタンを使うと、発注伝票の未入荷数量が自動で明細に展開されます。部分入荷の場合は取り込んだ数量を実際の入荷数に修正してから完了してください。
基本操作手順
Section titled “基本操作手順”アクセス方法
Section titled “アクセス方法”メニューから「購買管理 > 入荷伝票(標準)」を開きます。
📌 ポイント: 入荷伝票(Material Receipt)は出荷伝票(Shipment)と同じ
M_InOutテーブルを共有しています。MovementType = 'V+'(仕入先からの入荷)で購買側として区別されます。
発注伝票からの作成(推奨)
Section titled “発注伝票からの作成(推奨)”- 「新規」ボタンをクリック
- ヘッダー情報を入力:
- 伝票タイプ: 入荷伝票を選択
- 発注伝票: 対象の発注伝票を選択(仕入先等が自動セット)
- 移動日付: 入荷日を入力
- 倉庫: 入荷先倉庫を確認
- 「保存」をクリック
- 「Create lines from」ボタンで発注伝票から明細を取り込み
- 入荷数量を確認・修正
- 「伝票アクション」ボタンで「完了」を実行
完了処理により:
- 在庫が増加(倉庫に入荷数量分を加算)
- 発注伝票の入荷済数量が更新
- 発注照合レコードが自動作成
⚠️ 注意: 入荷伝票を完了すると在庫が即座に増加します。数量や品目を誤って入力した場合は「無効」処理で在庫を元に戻せますが、既に仕入請求書との照合が済んでいる場合は先に請求書側の処理が必要です。
手動での新規登録
Section titled “手動での新規登録”発注伝票なしでも入荷伝票を作成できます。仕入先と品目・数量を手動入力します。
💡 ヒント: 手動入荷でも、後から「マッチング」フォームで発注伝票や仕入請求書と紐付け(照合)できます。発注なし入荷が業務上必要な場合(緊急入荷など)に活用できます。
項目リファレンス
Section titled “項目リファレンス”入荷伝票タブ(ヘッダー)
Section titled “入荷伝票タブ(ヘッダー)”| 項目名 | 型 | 説明 |
|---|---|---|
| 伝票タイプ | 選択 | 入荷伝票 |
| 発注伝票 | 検索 | 紐づく発注伝票 |
| 移動日付 | 日付 | 入荷日(在庫移動の日付) |
| 転記日付 | 日付 | 会計上の転記日付 |
| 取引先 | 検索 | 仕入先 |
| 倉庫 | 選択 | 入荷先の倉庫 |
入荷伝票明細タブ
Section titled “入荷伝票明細タブ”| 項目名 | 型 | 説明 |
|---|---|---|
| 品目 | 検索 | 入荷する品目 |
| 移動数量 | 数量 | 入荷数量 |
| ロケーター | 選択 | 倉庫内の保管場所 |
| 属性セットインスタンス | 選択 | ロット・シリアル番号 |
| 発注伝票明細 | 検索 | 紐づく発注明細行 |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 部分入荷はできますか?
Section titled “Q. 部分入荷はできますか?”はい。発注数量の一部だけを入荷伝票に記載して完了できます。残りは次回の入荷伝票で処理します。
Q. 入荷と発注の数量が合わない場合は?
Section titled “Q. 入荷と発注の数量が合わない場合は?”「発注照合」タブで差異を確認できます。また、メニュー「購買管理 > マッチング」フォームで発注・入荷・請求の3方マッチングを管理できます。
⚠️ 注意: 入荷数量が発注数量を超過している場合(過剰入荷)は、マッチング時に警告が表示されます。発注修正か入荷修正かを仕入先と確認してから処理してください。
Q. 入荷伝票を取り消すには?
Section titled “Q. 入荷伝票を取り消すには?”「無効」処理で在庫が戻り、発注伝票の入荷済数量も元に戻ります。
業務フロー上の位置づけ
Section titled “業務フロー上の位置づけ”graph TD
A[発注伝票] -->|入荷| B[入荷伝票]
B -->|マッチング| C[仕入請求書]
B -->|在庫更新| D[在庫台帳]
B -->|品質検査| E[入出荷確認]
OSS ERP導入についてのご相談
Section titled “OSS ERP導入についてのご相談”As-Link株式会社では、iDempiereの導入支援・カスタマイズ開発を承っております。
🛠 技術仕様(開発者向け)
入荷伝票は Document 型の伝票で、M_InOut テーブルに MovementType=V+(仕入先入荷)として格納されます。出荷伝票と同じ MInOut クラス(3,644行)を共有し、IsSOTrx=N で購買側の入荷として動作します。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(入荷ヘッダー、MovementType=V+)
Section titled “M_InOut(入荷ヘッダー、MovementType=V+)”出荷と同一テーブルを使用。IsSOTrx=N, MovementType=V+ で入荷として動作。
⚠️ 注意: 入荷伝票は出荷伝票と同じ
M_InOutテーブル・MInOutクラスを共有します。MovementTypeの値(C-=出荷,C+=返品入荷,V+=仕入先入荷,V-=仕入先返品)を正確に把握してクエリやバリデーションを記述してください。
| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_InOut_ID | ID | PK | 入荷ID | 主キー |
| IsSOTrx | YesNo | Y | 販売取引フラグ | N=入荷 |
| MovementType | List | Y | 移動タイプ | V+=仕入先入荷 |
| DocumentNo | String | Y | 伝票番号 | |
| C_DocType_ID | TableDirect | Y | 伝票タイプ | MMR(入荷伝票) |
| DocStatus | List | Y | 伝票状態 | DR/IP/CO/CL/VO/RE |
| MovementDate | Date | Y | 入荷日付 | |
| DateAcct | Date | Y | 転記日付 | |
| C_BPartner_ID | Search | Y | 仕入先 | |
| M_Warehouse_ID | TableDirect | Y | 入荷先倉庫 | |
| C_Order_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--|| C_BPartner : "vendor"
M_InOut }o--|| M_Warehouse : "received at"
M_InOut }o--o| C_Order : "from PO"
M_InOutLine }o--|| M_Locator : "stored at"
M_InOutLine }o--o| M_Product : "references"
M_InOutLine }o--o| C_OrderLine : "from PO line"
M_InOutLine ||--o{ M_MatchPO : "PO matching"
M_InOutLine ||--o{ M_MatchInv : "invoice matching"
M_InOut ||--o{ M_InOutConfirm : "confirmations"
ビジネスロジック
Section titled “ビジネスロジック”completeIt() の入荷固有処理
Section titled “completeIt() の入荷固有処理”ModelValidator.TIMING_BEFORE_COMPLETEイベント発火- 受入確認(Confirmation)の完了チェック
- 在庫の増加(
MStorageOnHandの更新) - ロケーターへの品目登録
- 発注マッチング(
M_MatchPOレコードの自動生成) - 発注の入荷済数量(QtyDelivered)更新
- 発注引当数量(QtyReserved)の解放
- 属性セットインスタンス(ロット番号、シリアル番号等)の登録
ModelValidator.TIMING_AFTER_COMPLETEイベント発火
伝票処理フロー
Section titled “伝票処理フロー”stateDiagram-v2
[*] --> Drafted : 新規作成
Drafted --> InProgress : prepareIt()
InProgress --> Completed : completeIt()
Completed --> Closed : closeIt()
Completed --> Voided : voidIt()
Completed --> Reversed : reverseCorrectIt()
発注マッチング(M_MatchPO)
Section titled “発注マッチング(M_MatchPO)”📌 ポイント:
M_MatchPOレコードは入荷伝票のcompleteIt()内で自動生成されます。このレコードが存在しないと3-Way Matching が機能せず、仕入請求書の原価照合が行われません。入荷伝票を完了せずに請求書を先に処理するワークフローはサポートされていません(発注直接請求を除く)。
入荷伝票の完了時に M_MatchPO レコードが自動生成され、発注との照合を記録:
- 発注明細ID(
C_OrderLine_ID)と入荷明細ID(M_InOutLine_ID)の紐付け - 入荷数量と発注数量の照合
- 価格差異の検出(標準原価計算方式の場合)
入荷時の品質検査フローは M_InOutConfirm(確認タイプ=QC)で管理:
- 検査結果の記録
- 不合格品の返品処理への連携
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 | orderLine | C_OrderLine_ID | 発注明細から品目・数量の自動セット |
| CalloutInOut | product | M_Product_ID | 品目情報の自動セット |
| CalloutInOut | qty | MovementQty | 数量変更時の単位変換 |
Calloutソース: org.adempiere.base.callout/src/org/compiere/model/CalloutInOut.java
💡 ヒント:
CalloutInOut.orderLineは発注明細選択時に品目・数量・ロケーターを自動セットします。ロット番号やシリアル番号の自動採番が必要な場合は、M_AttributeSetInstance_IDの Callout として実装し、MSequenceを利用した採番ロジックを追加できます。
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”入荷伝票に独自バリデーションを追加する最も安全な方法:
public class CustomReceiptValidator 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) { // 例: 品質検査の必須チェック MInOutLine[] lines = inout.getLines(false); for (MInOutLine line : lines) { if (line.getM_Product_ID() > 0) { MProduct product = MProduct.get(inout.getCtx(), line.getM_Product_ID()); if (product.isInspectionRequired() && !isInspected(line)) { return "品質検査が未完了の品目があります: " + product.getName(); } } } } } return null; }}ロケーター自動割当
Section titled “ロケーター自動割当”入荷時のロケーター自動割当ロジックをカスタマイズし、品目属性に基づく保管場所の自動決定を実装可能。
🔧 カスタマイズ:
ILocatorStrategyインターフェースを OSGi サービスとして実装することで、品目カテゴリ・温度帯・危険物区分などに基づくロケーター自動割当ルールを追加できます。コアのMLocator.getDefault()を変更する必要はありません。実装参考:org.adempiere.base/src/org/adempiere/model/ILocatorStrategy.java。
関連プロセス
Section titled “関連プロセス”| プロセス名 | 説明 |
|---|---|
| 伝票アクション (DocAction) | 伝票の完了・無効・取消等 |
| 発注から入荷伝票生成 | 発注伝票から入荷伝票を一括生成 |
| 受入確認 | 数量・品質の確認処理 |
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”iDempiereの入荷伝票は Model Validator や Callout で安全にカスタマイズできます。 品質検査フロー、ロケーター自動割当、発注マッチングをコア改変なしで拡張可能です。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。