iDempiere 社内使用在庫伝票の使い方|在庫管理 操作マニュアル・技術仕様
📖 在庫管理の全体像: 在庫管理の業務フロー全体図 も合わせてご覧ください。
社内使用在庫伝票(Inventory Decrease/Increase)は、販売・移動以外の理由で在庫を増減させる伝票です。サンプル提供、消耗品の社内払出、破損・廃棄など、「社内使用(Internal Use)」として在庫を減らし、その相手勘定を料金(Charge)で指定して費用計上します。
📌 ポイント: 各明細で「料金(C_Charge_ID)」の指定が必須です。社内使用による在庫減少は棚卸差異とは異なり、指定した料金の勘定科目(例: サンプル費、消耗品費)に振り替えられます。
社内使用在庫伝票でできること
Section titled “社内使用在庫伝票でできること”- サンプル・販促品としての在庫払出(費用振替)
- 消耗品・備品の社内使用による在庫減少
- 破損・廃棄品の在庫からの除去
- 料金(Charge)による費用勘定の指定(明細ごと)
- ロット・シリアル管理品目の属性セットインスタンス指定
- 完了・無効化・訂正赤伝(Reverse Correct)等の伝票処理と会計転記
社内使用在庫伝票は3階層のタブ構成です。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| 社内使用在庫伝票 | M_Inventory | 約19項目 | ヘッダー(倉庫・移動日付・伝票タイプ・伝票状態) |
| 社内使用在庫伝票明細 | M_InventoryLine | 約10項目 | 品目・保管場所・社内使用数量・料金 |
| 品目属性 | M_InventoryLineMA | 約7項目 | 明細ごとの属性セットインスタンス別数量内訳 |
💡 ヒント:
M_Inventory/M_InventoryLineテーブルは実地棚卸(Physical Inventory)と共用です。どちらの伝票として動作するかは、ヘッダーの「伝票タイプ」に設定された在庫サブタイプ(DocSubTypeInv)で決まります。本ウィンドウでは社内使用(Internal Use Inventory)タイプの伝票タイプを選択してください。
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 メニューから開く<br/>在庫管理 > 社内使用在庫伝票"] --> B["➕ ヘッダーを新規作成<br/>(倉庫・移動日付・伝票タイプ)"]
B --> C["📋 明細タブで品目を登録<br/>(保管場所・社内使用数量・料金)"]
C --> D{ロット/シリアル<br/>管理品目?}
D -->|あり| E["🏷️ 属性セットインスタンスを指定<br/>または品目属性タブで内訳登録"]
D -->|なし| F["💾 保存"]
E --> F
F --> G["✅ 棚卸プロセスボタンで<br/>「完了」を実行"]
G --> H["📉 在庫数量が減少<br/>(QtyInternalUse 分)"]
H --> I["📒 転記で会計仕訳作成<br/>(料金の勘定科目へ振替)"]
⚠️ 注意: 移動日付は会計期間のオープンチェック対象です(伝票ベースタイプ: 実地棚卸)。クローズ済み期間の日付では完了処理がエラーになります。
アクセス方法
Section titled “アクセス方法”メニューから「在庫管理 > 社内使用在庫伝票」を開きます。
- ツールバーの「新規」ボタンをクリック
- ヘッダー情報を入力:
- 伝票番号: 自動採番(変更可)
- 倉庫: 在庫を減少させる倉庫
- 移動日付: 在庫移動の計上日(オープン期間内であること)
- 伝票タイプ: 社内使用タイプの伝票タイプを選択
- 「保存」をクリック
- 「社内使用在庫伝票明細」タブに移動し、明細を登録:
- 品目: 払出す品目(必須)
- 保管場所: 払出元の保管場所
- 社内使用数量: 在庫から減らす数量(必須・0不可)
- 料金: 費用計上先の料金(必須。例: サンプル費)
- 属性セットインスタンス: ロット・シリアル管理品目の場合に指定
- 明細を保存(明細番号は自動で10刻みに採番)
ヘッダーの「棚卸プロセス」ボタン(DocAction)から伝票処理を実行します。
| アクション | 処理内容 |
|---|---|
| 準備(Prepare) | 明細存在チェック・期間チェック・属性セットインスタンス必須チェックを実行し「進行中」へ |
| 完了(Complete) | 社内使用数量分の在庫を減少させ、伝票を「完了」に。未承認の場合は暗黙承認 |
| 無効化(Void) | 未完了伝票を取消(数量をゼロ化) |
| 訂正赤伝(Reverse Correct) | 完了済伝票を同日付の反対仕訳伝票で取消 |
| 訂正赤伝-日付(Reverse Accrual) | 完了済伝票を当日日付の反対仕訳伝票で取消 |
| クローズ(Close) | 伝票をクローズし以後の変更を禁止 |
| 再アクティブ化(Re-Activate) | 完了済伝票を進行中に戻す |
完了処理(completeIt)では、伝票タイプの在庫サブタイプが「社内使用」の場合、各明細の社内使用数量(QtyInternalUse)の符号を反転した値が在庫変動量として適用されます(=正の数量を入力すると在庫が減少します)。
完了後は「転記」ボタンで会計仕訳を作成できます(自動転記が有効な場合は不要)。
⚠️ 注意: 完了済(Processed)のヘッダーには明細を追加できません。再アクティブ化するか、新しい伝票を作成してください。
項目リファレンス
Section titled “項目リファレンス”社内使用在庫伝票タブ(ヘッダー)
Section titled “社内使用在庫伝票タブ(ヘッダー)”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 伝票番号 | 必須 | 文字列 | 伝票の連番(自動採番) |
| 倉庫 | - | 選択 | 対象倉庫 |
| 移動日付 | 必須 | 日付 | 在庫増減の計上日(期間オープンチェックあり) |
| 伝票タイプ | 必須 | 選択 | 在庫サブタイプ「社内使用」の伝票タイプ |
| 説明 | - | 文字列 | 任意の説明 |
| プロジェクト | - | 選択 | 関連プロジェクト(分析軸) |
| アクティビティ | - | 選択 | 業務アクティビティ(分析軸) |
| 承認済み | 必須 | チェック | 承認状態(完了時に暗黙承認) |
| 伝票状態 | 必須 | リスト | 起票/進行中/完了/無効/取消済 等(初期値: 起票) |
| 棚卸プロセス | 必須 | ボタン | 伝票処理の実行(初期値: 完了) |
| 転記 | 必須 | ボタン | 会計転記の状態・実行 |
社内使用在庫伝票明細タブ
Section titled “社内使用在庫伝票明細タブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 棚卸伝票 | 必須 | 選択 | 親ヘッダー(自動セット) |
| 明細番号 | - | 整数 | 10刻みで自動採番 |
| 品目 | 必須 | 選択 | 払出す品目 |
| 保管場所 | - | ロケーター | 払出元保管場所(品目のデフォルトを自動セット) |
| 属性セットインスタンス | 必須* | 属性 | ロット・シリアル等(*属性管理品目のみ実質必須) |
| 社内使用数量 | 必須 | 数量 | 在庫から減らす数量(0では保存不可) |
| 料金 | 必須 | 選択 | 費用計上先の料金(社内使用では必須) |
| 説明 | - | 文字列 | 明細の説明 |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 明細保存時に「料金が必要」というエラーになります
Section titled “Q. 明細保存時に「料金が必要」というエラーになります”社内使用在庫伝票の明細では料金(C_Charge_ID)が必須です(ソース上のエラーコード: InternalUseNeedsCharge)。在庫減少の相手勘定となる料金(例: サンプル費、消耗品費、廃棄損)を事前に料金マスタへ登録し、明細で選択してください。
Q. 社内使用数量に 0 を入力すると保存できません
Section titled “Q. 社内使用数量に 0 を入力すると保存できません”仕様どおりの動作です。MInventoryLine.beforeSave() で社内使用数量が 0 の明細は保存エラーになります(無効化処理時を除く)。数量を入力するか、不要な明細は削除してください。また、社内使用タイプの伝票では帳簿数量(QtyBook)・実棚数量(QtyCount)に値が入っているとエラーになります(これらは実地棚卸専用の項目です)。
Q. 完了時に「属性セットインスタンスが必須」エラーになります
Section titled “Q. 完了時に「属性セットインスタンスが必須」エラーになります”品目に属性セット(ロット・シリアル必須設定)が定義されている場合、準備/完了処理時に検証されます。明細の属性セットインスタンスを指定するか、「品目属性」タブで属性セットインスタンス別の数量内訳を登録し、内訳の合計が社内使用数量と一致するようにしてください(自動生成された内訳行は合計対象外です)。
Q. 実地棚卸と同じテーブルなのに何が違うのですか?
Section titled “Q. 実地棚卸と同じテーブルなのに何が違うのですか?”M_Inventory は伝票タイプの在庫サブタイプ(DocSubTypeInv)で動作が分岐します。「実地棚卸」では帳簿数量と実棚数量の差が在庫調整され、「社内使用」では社内使用数量がそのまま在庫減少・料金勘定への振替になります。ウィンドウ・伝票タイプが別々に用意されているため、用途に合わせて使い分けてください。
Q. 完了した伝票を取り消すには?
Section titled “Q. 完了した伝票を取り消すには?”伝票処理から「訂正赤伝(Reverse Correct)」を実行すると、反対数量の取消伝票が自動作成され在庫が復元されます。会計日付を当日にしたい場合は「訂正赤伝-日付(Reverse Accrual)」を使用します。
- 実地棚卸(Physical Inventory)の使い方
- 在庫移動(Inventory Move)の使い方
- 品目マスタ(Product)の使い方
- 属性セットインスタンスの使い方
- 画面リファレンス: 社内使用在庫伝票
🛠 技術仕様(開発者向け)
社内使用在庫伝票は Document 型(DocAction/DocStatus あり)のウィンドウ(AD_Window_ID: 341)で、実地棚卸と共用の M_Inventory / M_InventoryLine / M_InventoryLineMA テーブルに格納されます。モデルクラスは MInventory(1,354行・DocAction 実装)、MInventoryLine(544行)、MInventoryLineMA(285行)。伝票タイプの DocSubTypeInv により社内使用(InternalUseInventory)/実地棚卸(PhysicalInventory)/原価調整(CostAdjustment)に処理が分岐します。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MInventory {
+getLines(boolean) MInventoryLine[]
+processIt(String) boolean
+prepareIt() String
+completeIt() String
+voidIt() boolean
+reverseCorrectIt() boolean
+reverseAccrualIt() boolean
+reActivateIt() boolean
}
class MInventoryLine {
#beforeSave(boolean) boolean
+isInternalUseInventory() boolean
+getMovementQty() BigDecimal
+setQtyInternalUse(BigDecimal)
}
class MInventoryLineMA {
+get(ctx, line_ID, trx) MInventoryLineMA[]
}
class X_M_Inventory {
<<generated>>
}
class DocAction {
<<interface>>
}
class PO {
<<abstract>>
}
MInventory --|> X_M_Inventory
X_M_Inventory --|> PO
MInventory ..|> DocAction
MInventory --> MInventoryLine : has many
MInventoryLine --> MInventoryLineMA : ASI breakdown
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MInventory.java / MInventoryLine.java / MInventoryLineMA.java
関連DBテーブル
Section titled “関連DBテーブル”M_Inventory(ヘッダー・実地棚卸と共用)
Section titled “M_Inventory(ヘッダー・実地棚卸と共用)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_Inventory_ID | ID | PK | 伝票ID | 主キー |
| DocumentNo | String(30) | Y | 伝票番号 | 識別子 |
| C_DocType_ID | TableDirect | Y | 伝票タイプ | DocSubTypeInv で処理分岐 |
| M_Warehouse_ID | TableDirect | N | 倉庫 | |
| MovementDate | Date | Y | 移動日付 | default @#Date@、callout: CalloutEngine.checkPeriodOpen |
| DocStatus | List(2) | Y | 伝票状態 | default DR |
| DocAction | Button | Y | 伝票アクション | default CO |
| Posted | Button | Y | 転記状態 | |
| IsApproved | YesNo | Y | 承認済み | completeIt で暗黙承認 |
| Processed | YesNo | Y | 処理済み | |
| Reversal_ID | Search | N | 赤伝相手の伝票ID | |
| CostingMethod | List | N | 原価計算方法 | 原価調整サブタイプ用 |
| C_Project_ID / C_Activity_ID / C_Campaign_ID | TableDirect | N | 分析軸 |
M_InventoryLine(明細・実地棚卸と共用)
Section titled “M_InventoryLine(明細・実地棚卸と共用)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_InventoryLine_ID | ID | PK | 明細ID | |
| M_Inventory_ID | Search | Y | 親FK | isparent |
| Line | Integer | N | 明細番号 | default: MAX(Line)+10 |
| M_Product_ID | Search | Y | 品目 | callout: CalloutInventory.product |
| M_Locator_ID | Locator | N | 保管場所 | callout: CalloutFillLocator.fillLocator; CalloutInventory.product |
| M_AttributeSetInstance_ID | ProductAttribute | Y | 属性セットインスタンス | callout: CalloutInventory.product |
| QtyInternalUse | Quantity | N | 社内使用数量 | 社内使用では実質必須(0不可) |
| QtyBook / QtyCount | Quantity | Y | 帳簿/実棚数量 | 社内使用では 0 強制 |
| C_Charge_ID | TableDirect | N | 料金 | 社内使用では必須 |
| InventoryType | List(1) | Y | 在庫差異タイプ | default D、社内使用では C(ChargeAccount) に強制 |
| ReversalLine_ID | Search | N | 赤伝相手の明細ID |
M_InventoryLineMA(属性セットインスタンス内訳)
Section titled “M_InventoryLineMA(属性セットインスタンス内訳)”| カラム名 | 型 | 必須 | 説明 |
|---|---|---|---|
| M_InventoryLine_ID | Search | PK(親) | 明細FK |
| M_AttributeSetInstance_ID | ProductAttribute | PK(親) | 属性セットインスタンス |
| DateMaterialPolicy | Date | PK(親) | FIFO/LIFO 在庫方針用の入庫日付 |
| MovementQty | Quantity | Y | 当該インスタンスの数量(default 1) |
| IsAutoGenerated | YesNo | N | 自動生成フラグ(default N) |
ビジネスロジック
Section titled “ビジネスロジック”MInventoryLine.beforeSave()(社内使用分岐)
Section titled “MInventoryLine.beforeSave()(社内使用分岐)”伝票タイプの DocSubTypeInv = InternalUseInventory の場合:
- 親が処理済みなら新規明細を拒否(
ParentComplete) InventoryTypeをChargeAccountに強制セットC_Charge_ID = 0なら保存エラー(InternalUseNeedsCharge)QtyBook/QtyCountが 0 以外なら保存エラー(実地棚卸専用項目のため)QtyInternalUse = 0なら保存エラー(無効化処理時を除く)- 料金未指定時は明細の組織を親ヘッダーの組織に揃える
MInventory.prepareIt()
Section titled “MInventory.prepareIt()”TIMING_BEFORE_PREPAREの Model Validator 実行- 期間オープンチェック(
MPeriod.testPeriodOpen、ベースタイプ: MaterialPhysicalInventory)+ バックデート取引チェック - 明細 0 件なら
@NoLines@で Invalid - ASI 必須検証(IDEMPIERE-1770): 明細の ASI が未指定かつ品目が ASI 必須の場合、
M_InventoryLineMAの手動登録行(IsAutoGenerated=N)の数量合計が社内使用数量と一致しなければ Invalid
MInventory.completeIt()(在庫変動量の決定)
Section titled “MInventory.completeIt()(在庫変動量の決定)”if (DOCSUBTYPEINV_InternalUseInventory) qtyDiff = line.getQtyInternalUse().negate(); // 正数入力 → 在庫減少else if (DOCSUBTYPEINV_PhysicalInventory) qtyDiff = line.getQtyCount().subtract(line.getQtyBook());その後、確定伝票番号の採番(setDefiniteDocumentNo)、暗黙承認、赤伝でない場合のバックデート期間チェックを経て、明細ごとに在庫(M_StorageOnHand)を更新します。
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”docValidate() の TIMING_BEFORE_COMPLETE で社内使用伝票に独自チェックを追加できます:
@Overridepublic String docValidate(PO po, int timing) { if (po instanceof MInventory && timing == TIMING_BEFORE_COMPLETE) { MInventory inv = (MInventory) po; for (MInventoryLine line : inv.getLines(false)) { if (line.isInternalUseInventory() && line.getQtyInternalUse().compareTo(new BigDecimal(100)) > 0) { return "社内使用数量が100を超える場合は承認が必要です"; } } } return null;}標準 Callout
Section titled “標準 Callout”| カラム | Callout | 役割 |
|---|---|---|
| M_Inventory.MovementDate | org.compiere.model.CalloutEngine.checkPeriodOpen | 期間オープン警告 |
| M_Inventory.AD_Org_ID | org.compiere.model.CalloutOrder.organization | 組織変更時の関連値更新 |
| M_InventoryLine.M_Product_ID / M_AttributeSetInstance_ID | org.compiere.model.CalloutInventory.product | 品目変更時の在庫情報セット |
| M_InventoryLine.M_Locator_ID | org.idempiere.model.CalloutFillLocator.fillLocator | デフォルト保管場所の補完 |
関連プロセス
Section titled “関連プロセス”| プロセス | 説明 |
|---|---|
| 棚卸プロセス(DocAction) | 伝票の準備・完了・無効化・赤伝処理 |
| 転記(Posting) | 完了済伝票の会計仕訳作成(料金勘定への振替) |
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”社内使用在庫伝票は Model Validator により、承認ワークフローや数量上限などの独自ルールをコア改変なしで追加できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。