Skip to content

iDempiere 社内使用在庫伝票の使い方|在庫管理 操作マニュアル・技術仕様

This content is not available in your language yet.

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

社内使用在庫伝票(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)タイプの伝票タイプを選択してください。

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/>(料金の勘定科目へ振替)"]

メニューから開く 在庫管理 > 社内使用在庫伝票 ヘッダーを新規作成 (倉庫・移動日付・伝票タイプ) 明細タブで品目を登録 (保管場所・社内使用数量・料金) 属性セットインスタンスを指定 または品目属性タブで内訳登録 保存 棚卸プロセスボタンで 「完了」を実行 在庫数量が減少 (QtyInternalUse 分) 転記で会計仕訳作成 (料金の勘定科目へ振替) ロット/シリアル 管理品目? あり なし

⚠️ 注意: 移動日付は会計期間のオープンチェック対象です(伝票ベースタイプ: 実地棚卸)。クローズ済み期間の日付では完了処理がエラーになります。

メニューから「在庫管理 > 社内使用在庫伝票」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. ヘッダー情報を入力:
    • 伝票番号: 自動採番(変更可)
    • 倉庫: 在庫を減少させる倉庫
    • 移動日付: 在庫移動の計上日(オープン期間内であること)
    • 伝票タイプ: 社内使用タイプの伝票タイプを選択
  3. 保存」をクリック
  4. 社内使用在庫伝票明細」タブに移動し、明細を登録:
    • 品目: 払出す品目(必須)
    • 保管場所: 払出元の保管場所
    • 社内使用数量: 在庫から減らす数量(必須・0不可)
    • 料金: 費用計上先の料金(必須。例: サンプル費)
    • 属性セットインスタンス: ロット・シリアル管理品目の場合に指定
  5. 明細を保存(明細番号は自動で10刻みに採番)

ヘッダーの「棚卸プロセス」ボタン(DocAction)から伝票処理を実行します。

アクション処理内容
準備(Prepare)明細存在チェック・期間チェック・属性セットインスタンス必須チェックを実行し「進行中」へ
完了(Complete)社内使用数量分の在庫を減少させ、伝票を「完了」に。未承認の場合は暗黙承認
無効化(Void)未完了伝票を取消(数量をゼロ化)
訂正赤伝(Reverse Correct)完了済伝票を同日付の反対仕訳伝票で取消
訂正赤伝-日付(Reverse Accrual)完了済伝票を当日日付の反対仕訳伝票で取消
クローズ(Close)伝票をクローズし以後の変更を禁止
再アクティブ化(Re-Activate)完了済伝票を進行中に戻す

完了処理(completeIt)では、伝票タイプの在庫サブタイプが「社内使用」の場合、各明細の社内使用数量(QtyInternalUse)の符号を反転した値が在庫変動量として適用されます(=正の数量を入力すると在庫が減少します)。

完了後は「転記」ボタンで会計仕訳を作成できます(自動転記が有効な場合は不要)。

⚠️ 注意: 完了済(Processed)のヘッダーには明細を追加できません。再アクティブ化するか、新しい伝票を作成してください。

社内使用在庫伝票タブ(ヘッダー)

Section titled “社内使用在庫伝票タブ(ヘッダー)”
項目名必須説明
伝票番号必須文字列伝票の連番(自動採番)
倉庫-選択対象倉庫
移動日付必須日付在庫増減の計上日(期間オープンチェックあり)
伝票タイプ必須選択在庫サブタイプ「社内使用」の伝票タイプ
説明-文字列任意の説明
プロジェクト-選択関連プロジェクト(分析軸)
アクティビティ-選択業務アクティビティ(分析軸)
承認済み必須チェック承認状態(完了時に暗黙承認)
伝票状態必須リスト起票/進行中/完了/無効/取消済 等(初期値: 起票)
棚卸プロセス必須ボタン伝票処理の実行(初期値: 完了)
転記必須ボタン会計転記の状態・実行
項目名必須説明
棚卸伝票必須選択親ヘッダー(自動セット)
明細番号-整数10刻みで自動採番
品目必須選択払出す品目
保管場所-ロケーター払出元保管場所(品目のデフォルトを自動セット)
属性セットインスタンス必須*属性ロット・シリアル等(*属性管理品目のみ実質必須)
社内使用数量必須数量在庫から減らす数量(0では保存不可)
料金必須選択費用計上先の料金(社内使用では必須)
説明-文字列明細の説明

全項目一覧はリファレンス参照

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)」を使用します。

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

社内使用在庫伝票は 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)に処理が分岐します。

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

+getLines(boolean) MInventoryLine[] +processIt(String) boolean +prepareIt() String +completeIt() String +voidIt() boolean +reverseCorrectIt() boolean +reverseAccrualIt() boolean +reActivateIt() boolean #beforeSave(boolean) boolean +isInternalUseInventory() boolean +getMovementQty() BigDecimal +setQtyInternalUse(BigDecimal) +get(ctx, line_ID, trx) MInventoryLineMA[] <> <> <> > X_M_Inventory X_M_Inventory --

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

M_Inventory(ヘッダー・実地棚卸と共用)

Section titled “M_Inventory(ヘッダー・実地棚卸と共用)”
カラム名必須説明備考
M_Inventory_IDIDPK伝票ID主キー
DocumentNoString(30)Y伝票番号識別子
C_DocType_IDTableDirectY伝票タイプDocSubTypeInv で処理分岐
M_Warehouse_IDTableDirectN倉庫
MovementDateDateY移動日付default @#Date@、callout: CalloutEngine.checkPeriodOpen
DocStatusList(2)Y伝票状態default DR
DocActionButtonY伝票アクションdefault CO
PostedButtonY転記状態
IsApprovedYesNoY承認済みcompleteIt で暗黙承認
ProcessedYesNoY処理済み
Reversal_IDSearchN赤伝相手の伝票ID
CostingMethodListN原価計算方法原価調整サブタイプ用
C_Project_ID / C_Activity_ID / C_Campaign_IDTableDirectN分析軸

M_InventoryLine(明細・実地棚卸と共用)

Section titled “M_InventoryLine(明細・実地棚卸と共用)”
カラム名必須説明備考
M_InventoryLine_IDIDPK明細ID
M_Inventory_IDSearchY親FKisparent
LineIntegerN明細番号default: MAX(Line)+10
M_Product_IDSearchY品目callout: CalloutInventory.product
M_Locator_IDLocatorN保管場所callout: CalloutFillLocator.fillLocator; CalloutInventory.product
M_AttributeSetInstance_IDProductAttributeY属性セットインスタンスcallout: CalloutInventory.product
QtyInternalUseQuantityN社内使用数量社内使用では実質必須(0不可)
QtyBook / QtyCountQuantityY帳簿/実棚数量社内使用では 0 強制
C_Charge_IDTableDirectN料金社内使用では必須
InventoryTypeList(1)Y在庫差異タイプdefault D、社内使用では C(ChargeAccount) に強制
ReversalLine_IDSearchN赤伝相手の明細ID

M_InventoryLineMA(属性セットインスタンス内訳)

Section titled “M_InventoryLineMA(属性セットインスタンス内訳)”
カラム名必須説明
M_InventoryLine_IDSearchPK(親)明細FK
M_AttributeSetInstance_IDProductAttributePK(親)属性セットインスタンス
DateMaterialPolicyDatePK(親)FIFO/LIFO 在庫方針用の入庫日付
MovementQtyQuantityY当該インスタンスの数量(default 1)
IsAutoGeneratedYesNoN自動生成フラグ(default N)

MInventoryLine.beforeSave()(社内使用分岐)

Section titled “MInventoryLine.beforeSave()(社内使用分岐)”

伝票タイプの DocSubTypeInv = InternalUseInventory の場合:

  1. 親が処理済みなら新規明細を拒否(ParentComplete
  2. InventoryTypeChargeAccount に強制セット
  3. C_Charge_ID = 0 なら保存エラー(InternalUseNeedsCharge
  4. QtyBook / QtyCount が 0 以外なら保存エラー(実地棚卸専用項目のため)
  5. QtyInternalUse = 0 なら保存エラー(無効化処理時を除く)
  6. 料金未指定時は明細の組織を親ヘッダーの組織に揃える
  1. TIMING_BEFORE_PREPARE の Model Validator 実行
  2. 期間オープンチェック(MPeriod.testPeriodOpen、ベースタイプ: MaterialPhysicalInventory)+ バックデート取引チェック
  3. 明細 0 件なら @NoLines@ で Invalid
  4. 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 “拡張ポイント(カスタマイズ箇所)”

docValidate()TIMING_BEFORE_COMPLETE で社内使用伝票に独自チェックを追加できます:

@Override
public 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役割
M_Inventory.MovementDateorg.compiere.model.CalloutEngine.checkPeriodOpen期間オープン警告
M_Inventory.AD_Org_IDorg.compiere.model.CalloutOrder.organization組織変更時の関連値更新
M_InventoryLine.M_Product_ID / M_AttributeSetInstance_IDorg.compiere.model.CalloutInventory.product品目変更時の在庫情報セット
M_InventoryLine.M_Locator_IDorg.idempiere.model.CalloutFillLocator.fillLocatorデフォルト保管場所の補完
プロセス説明
棚卸プロセス(DocAction)伝票の準備・完了・無効化・赤伝処理
転記(Posting)完了済伝票の会計仕訳作成(料金勘定への振替)

社内使用在庫伝票は Model Validator により、承認ワークフローや数量上限などの独自ルールをコア改変なしで追加できます。

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

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