コンテンツにスキップ

iDempiere 実地棚卸の使い方|在庫管理 操作マニュアル・技術仕様

実地棚卸は、倉庫の実際の在庫数量を確認し、帳簿在庫との差異を調整する機能です。棚卸表(カウントリスト)を自動生成し、実数を入力して差異を処理できます。

📖 在庫管理の全体像: 在庫管理の業務フロー全体図 も合わせてご覧ください。

  • 棚卸表(カウントリスト)の自動生成
  • 実数(実地棚卸数量)の入力
  • 帳簿在庫と実数の差異表示
  • 差異の自動調整(完了処理時に在庫を修正)
  • ロケーター単位・品目カテゴリ単位での棚卸

🖥️ インタラクティブ画面レイアウト: AD メタデータから自動生成した 棚卸伝票の全タブ・全フィールド レイアウト(HTML版) で、実際の画面配置をご確認いただけます。

graph TD
    subgraph "実地棚卸ウィンドウ(Window ID: 168)"
        T1["📋 棚卸伝票<br/>M_Inventory<br/>22項目"]
        T2["📝 棚卸伝票明細<br/>M_InventoryLine<br/>12項目"]
        T2a["&nbsp;&nbsp;└ 属性<br/>&nbsp;&nbsp;&nbsp;&nbsp;M_InventoryLineMA<br/>&nbsp;&nbsp;&nbsp;&nbsp;7項目"]
    end
    T1 --> T2
    T2 --> T2a

実地棚卸ウィンドウ(Window ID: 168) 棚卸伝票 M_Inventory 22項目 棚卸伝票明細 M_InventoryLine 12項目   └ 属性     M_InventoryLineMA     7項目

📌 ポイント: 棚卸明細行は「棚卸明細行の自動生成」ボタンで一括生成できます。倉庫・ロケーター・品目カテゴリを絞り込んで生成することも可能で、部分的な棚卸(ロケーション別棚卸等)にも対応しています。

タブ名テーブル役割
棚卸伝票M_Inventoryヘッダー(倉庫・日付・説明)
棚卸伝票明細M_InventoryLine品目ごとの帳簿数量・実数・差異
属性M_InventoryLineMAロット・シリアル番号の割当
graph TD
    A["① 棚卸計画<br/>(対象倉庫・<br/>基準日を決定)"] --> B["② 棚卸伝票作成<br/>倉庫・日付・<br/>説明を入力"]
    B --> C["③ 明細行の自動生成<br/>帳簿在庫が<br/>自動セットされる"]
    C --> D["④ 実地カウント<br/>現場で実数を<br/>数える"]
    D --> E["⑤ 実棚卸数量を入力<br/>差異が自動計算<br/>される"]
    E --> F{"差異あり?"}
    F -->|"あり"| G["⑥ 原因調査・<br/>上長承認"]
    F -->|"なし"| H["⑦ 完了処理"]
    G --> H
    H --> I["帳簿在庫更新<br/>+差異仕訳<br/>自動生成"]

① 棚卸計画 (対象倉庫・ 基準日を決定) ② 棚卸伝票作成 倉庫・日付・ 説明を入力 ③ 明細行の自動生成 帳簿在庫が 自動セットされる ④ 実地カウント 現場で実数を 数える ⑤ 実棚卸数量を入力 差異が自動計算 される 差異あり? あり ⑥ 原因調査・ 上長承認 なし ⑦ 完了処理 帳簿在庫更新 +差異仕訳 自動生成

⚠️ 注意: 完了処理を実行すると帳簿在庫が実数に書き換えられ、差異分の会計仕訳が自動生成されます。差異が大きい場合は原因調査・承認フローを経てから完了処理を行ってください。

💡 ヒント: 棚卸基準日の帳簿数量が自動セットされるため、棚卸中に入出庫が発生しても基準日時点の数量と比較できます。ただし差異の原因分析が複雑になるため、可能な限り棚卸中の入出庫は最小化することを推奨します。

メニューから「在庫管理 > 棚卸伝票」を開きます。

  1. 新規」ボタンをクリック
  2. ヘッダー情報を入力:
    • 倉庫: 棚卸対象の倉庫
    • 移動日付: 棚卸基準日
    • 説明: 「2026年3月期末棚卸」等
  3. 保存」をクリック
  4. 棚卸明細行の自動生成」ボタンで棚卸表を自動作成
    • 倉庫内の在庫品目が自動的に明細行として生成される
    • 帳簿数量(Book Quantity)が自動セット
  5. 棚卸伝票明細」タブに移動
  6. 各品目の実数を入力:
    • 実棚卸数量(QtyCount): 実際に数えた数量
    • 差異(= 実数 - 帳簿数量)が自動計算
  7. 全品目の実数入力後、「伝票アクション」で「完了」を実行

完了処理により:

  • 帳簿在庫が実数に修正される
  • 差異分の在庫調整仕訳が自動生成

📐 画面レイアウト: ヘッダータブのフィールド配置は 画面構成 セクションのレイアウト図を参照してください。

項目名必須説明
倉庫必須選択棚卸対象の倉庫
移動日付必須日付棚卸基準日
説明-テキスト棚卸の目的・備考
項目名説明
ロケーター選択保管場所
品目検索対象品目
帳簿数量数量システム上の在庫数量(自動セット)
実棚卸数量数量実際に数えた数量(入力)
差異数量数量実数 - 帳簿数量(自動計算)
属性セットインスタンス選択ロット・シリアル番号

Q. 棚卸明細を手動で追加できますか?

Section titled “Q. 棚卸明細を手動で追加できますか?”

はい。自動生成後に手動で明細行を追加できます。帳簿数量が0の品目(帳簿上は在庫なしだが実物がある場合)を追加する際に使用します。

Q. 差異が出た場合の会計処理は?

Section titled “Q. 差異が出た場合の会計処理は?”

完了処理時に「在庫差異」勘定に自動仕訳されます。差異勘定は品目カテゴリの会計パラメータで設定します。

Q. 棚卸中に出荷・入荷を止める必要はありますか?

Section titled “Q. 棚卸中に出荷・入荷を止める必要はありますか?”

理想的には棚卸中は入出庫を停止すべきですが、iDempiereでは棚卸基準日の帳簿数量を使用するため、厳密な在庫凍結は必須ではありません。ただし差異の原因分析が複雑になる場合があります。

  • 実地棚卸: 帳簿と実数を比較し差異を調整
  • 在庫増減: 理由が明確な在庫の増減(社内使用、廃棄等)を記録
graph TD
    A[棚卸計画] -->|棚卸表生成| B[棚卸伝票作成]
    B -->|実地カウント| C[実数入力]
    C -->|差異確認| D{差異あり?}
    D -->|あり| E[原因調査]
    E -->|承認| F[完了処理]
    D -->|なし| F
    F -->|在庫修正| G[帳簿在庫更新]
    F -->|会計仕訳| H[在庫差異勘定]

差異あり? 棚卸表生成 実地カウント 差異確認 あり 承認 なし 在庫修正 会計仕訳 棚卸計画 棚卸伝票作成 実数入力 原因調査 完了処理 帳簿在庫更新 在庫差異勘定


As-Link株式会社では、iDempiereの導入支援・カスタマイズ開発を承っております。

OSS ERP導入サービスの詳細はこちら


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

棚卸は Document 型の伝票で、M_Inventory テーブルに格納されます。実地棚卸の結果を記録し、帳簿在庫と実在庫の差異を調整します。MInventory クラス(1,354行)が中核ビジネスロジックを担い、DocAction インターフェースを実装しています。

classDiagram
    class MInventory {
        +prepareIt() String
        +completeIt() String
        +voidIt() boolean
        +closeIt() boolean
        +reverseCorrectIt() boolean
        +getLines(requery) MInventoryLine[]
    }
    class X_M_Inventory {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    class DocAction {
        <<interface>>
    }
    MInventory --|> X_M_Inventory
    X_M_Inventory --|> PO
    MInventory ..|> DocAction
    MInventory --> MInventoryLine : has many

+prepareIt() String +completeIt() String +voidIt() boolean +closeIt() boolean +reverseCorrectIt() boolean +getLines(requery) MInventoryLine[] <> <> <> > X_M_Inventory X_M_Inventory --

パッケージ: org.compiere.model ソースファイル: org.adempiere.base/src/org/compiere/model/MInventory.java

⚠️ 注意: M_Inventory テーブルは IsInternalUseInventory カラムで通常の棚卸差異調整(N)と社内使用消費(Y)を兼用しています。社内消費は QtyInternalUse を入力して在庫を費用化する処理で、棚卸とは全く異なるユースケースです。Model Validator でのフック時は IsInternalUseInventory を必ず確認してください。

カラム名必須説明備考
M_Inventory_IDIDPK棚卸ID主キー
AD_Client_IDTableDirectYクライアント
AD_Org_IDTableDirectY組織
DocumentNoStringY伝票番号
C_DocType_IDTableDirectY伝票タイプMMI(棚卸)
DocStatusListY伝票状態DR/IP/CO/CL/VO/RE
DocActionButtonY伝票アクション
MovementDateDateY棚卸日付
DescriptionTextN説明
M_Warehouse_IDTableDirectY倉庫棚卸対象倉庫
C_Charge_IDTableDirectN科目差異調整の費用科目
ProcessedYesNoY処理済み
PostedButtonY転記
IsInternalUseInventoryYesNoY社内使用Y=社内消費, N=棚卸差異
カラム名必須説明備考
M_InventoryLine_IDIDPK明細ID
M_Inventory_IDSearchYヘッダーFK
LineIntegerY行番号
M_Product_IDSearchY品目
M_Locator_IDTableDirectYロケーター
QtyBookQuantityY帳簿数量システム上の在庫数量
QtyCountQuantityY実数量実地棚卸の数量
QtyInternalUseQuantityN社内使用数量IsInternalUseInventory=Y時
M_AttributeSetInstance_IDPAttributeN属性セットインスタンス
DescriptionTextN説明差異理由等
InventoryTypeListN棚卸タイプD=差異, C=科目
erDiagram
    M_Inventory ||--o{ M_InventoryLine : "has"
    M_Inventory }o--|| M_Warehouse : "target warehouse"
    M_Inventory }o--|| C_DocType : "references"
    M_Inventory }o--o| C_Charge : "expense account"
    M_InventoryLine }o--|| M_Product : "references"
    M_InventoryLine }o--|| M_Locator : "location"
    M_Inventory ||--o{ Fact_Acct : "posted"
    M_InventoryLine }o--o| M_AttributeSetInstance : "attributes"

target warehouse expense account

📌 ポイント: カウントリスト生成プロセスは M_StorageOnHand の時点在庫を QtyBook としてスナップショットします。カウントリスト生成後に他の伝票(出荷・入荷等)が処理されても QtyBook は更新されません。棚卸中の在庫異動は最小化し、生成後は速やかに実数入力・完了させることが重要です。

棚卸明細の一括生成プロセス:

  1. 対象倉庫のロケーターを選択
  2. 品目カテゴリ、品目等でフィルタリング
  3. M_StorageOnHand から現在の帳簿数量(QtyBook)を取得
  4. M_InventoryLine を自動生成(QtyCount は空欄)
  5. 棚卸担当者が実数量(QtyCount)を入力
  1. ModelValidator.TIMING_BEFORE_PREPARE イベント発火
  2. 会計期間のオープンチェック
  3. 明細行の存在チェック
  4. 各明細行の品目・ロケーター妥当性チェック
  5. ModelValidator.TIMING_AFTER_PREPARE イベント発火
  1. ModelValidator.TIMING_BEFORE_COMPLETE イベント発火
  2. 各明細行の差異計算(QtyCount - QtyBook)
  3. 在庫数量の調整MStorageOnHand の更新)
    • 差異がプラス: 在庫増加
    • 差異がマイナス: 在庫減少
  4. 社内使用在庫の場合: QtyInternalUse 分の在庫減少
  5. 会計転記用データの生成(差異金額の計算)
  6. 原価明細(M_CostDetail)の更新
  7. ModelValidator.TIMING_AFTER_COMPLETE イベント発火
stateDiagram-v2
    [*] --> Drafted : カウントリスト生成
    Drafted --> InProgress : prepareIt()
    InProgress --> Completed : completeIt()
    Completed --> Closed : closeIt()
    Completed --> Voided : voidIt()
    Completed --> Reversed : reverseCorrectIt()

*

棚卸差異の会計転記パターン:

差異タイプ借方貸方
棚増(実数 > 帳簿)棚卸資産勘定棚卸差異勘定
棚減(実数 < 帳簿)棚卸差異勘定棚卸資産勘定
社内消費費用科目(C_Charge)棚卸資産勘定

IsInternalUseInventory=Y の場合、棚卸ではなく社内消費として処理:

  • QtyInternalUse で消費数量を入力
  • C_Charge_ID で費用科目を指定
  • 在庫を減少させ、費用を計上
Calloutクラスメソッドトリガーフィールド処理内容
CalloutInventoryproductM_Product_ID品目選択時の帳簿数量自動セット

Calloutソース: org.adempiere.base.callout/src/org/compiere/model/CalloutInventory.java

💡 ヒント: CalloutInventory.product は品目選択時に M_StorageOnHand を集計して QtyBook を自動セットします。手動で明細行を追加する場合に帳簿数量が表示されない場合は、このCallout が正しく動作しているか AD_Column の Callout 設定を確認してください。

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

Section titled “拡張ポイント(カスタマイズ箇所)”

棚卸に独自バリデーションを追加する最も安全な方法:

public class CustomInventoryValidator implements ModelValidator {
@Override
public String docValidate(PO po, int timing) {
if (po instanceof MInventory) {
MInventory inventory = (MInventory) po;
if (timing == TIMING_BEFORE_COMPLETE) {
// 例: 大量差異の警告チェック
MInventoryLine[] lines = inventory.getLines(false);
for (MInventoryLine line : lines) {
BigDecimal diff = line.getQtyCount().subtract(line.getQtyBook());
BigDecimal threshold = line.getQtyBook().multiply(new BigDecimal("0.1"));
if (diff.abs().compareTo(threshold) > 0) {
// 10%以上の差異は承認が必要
if (!isApproved(inventory)) {
return "棚卸差異が10%を超えています。承認が必要です: 行 " + line.getLine();
}
}
}
}
}
return null;
}
}

カウントリストのカスタマイズ

Section titled “カウントリストのカスタマイズ”

カウントリスト生成プロセスを拡張し、ABC分析に基づく循環棚卸や、ロケーション別の棚卸スケジュール管理を実装可能。

🔧 カスタマイズ: 大量の棚卸差異が発生した場合の承認フロー追加は TIMING_BEFORE_COMPLETE で差異率を計算する Model Validator が最適です。差異率の許容閾値はカスタムの AD_SysConfig キー(例: INVENTORY_VARIANCE_THRESHOLD)で外部化しておくと、本番後の閾値変更が容易になります。MSysConfig.getValue() で参照できます。

プロセス名説明
伝票アクション (DocAction)伝票の完了・無効・取消等
カウントリスト生成帳簿在庫から棚卸明細を一括生成
在庫帳簿数量更新帳簿数量を最新状態に更新

iDempiereの棚卸機能は Model Validator や Callout で安全にカスタマイズできます。 循環棚卸、差異承認フロー、社内消費管理をコア改変なしで拡張可能です。

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

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