庫存管理機制

出自iDempiere zh
於 2014年10月5日 (日) 19:14 由 Peanutblake討論 | 貢獻 所做的修訂 (iDempiere Inventory Mechanism)
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)
前往:導覽搜尋

庫存管理是ERP的核心功能之一。在這裡我們一起探尋 iDempiere 庫存管理的機制。

庫存管理核心表

庫存管理核心的表有兩個類別,一類是記錄庫存事務的 ( Inventory Transaction ),一類是記錄庫存數量的 ( Storage )。

  • M_Transaction:庫存事務
  • M_StorageOnHand:在手庫存
  • M_StorageReservation:預留庫存

庫存管理非核心表

其他表可看成是非核心的,例如 M_InOut, M_Inventory,這些表(以及表背後的窗口、進程)不會直接改變庫存事務和庫存數量。

  • M_InOut:與銷售或採購相關的出入庫。
    • 相關窗口: Shipment ( Customer ) / 發貨給客戶, Material Receipt / 物料收貨, Customer Return / 客戶退貨, Return to Vender / 退貨給供應商
  • M_Inventory:內部領用或庫存檔點:
    • 相關窗口: Internal Use Inventory / 內部領用 , Physical Inventory / 庫存實盤
  • M_Movement:庫存調撥
    • 相關窗口:Inventory Move / 庫存調撥

需要注意的幾點

  • ADempiere 記錄庫存數量只有一張表 m_storage, iDempiere 則拆分成了兩張表 M_StorageOnHand, M_StorageReservation,而 m_storage 變成了視圖。原因是會導致資料庫鎖死和預留庫存為負。
  • 庫存事務、庫存數量兩者非常獨立,在數據表、窗口及後台處理上都是分開的,並不是通過庫存事務來改變庫存數量。換句話說,你在 MTransaction 類里找不到對 MStorageOnHand 類 或 M_StorageReservation 類的調用 。

典型代碼示例

org.compiere.model.MInOut.java
	public String completeIt()
	{
		MStorageReservation.add(); 		//  更新预留库存
		MStorageOnHand.add();	// 更新在手库存
		
		// 更新库存事务
		mtrx = new MTransaction ();
		mtrx.save(); 
	}
Cookies 幫助我們給予服務內容。依您有使用我們的服務,代表您同意我們使用 cookies。