1. 程式人生 > >odoo-OPENERP倉庫各類知識詳解

odoo-OPENERP倉庫各類知識詳解

一、複式庫存(DOUBLE-ENTRY STOCK MANAGEMENT)和庫存移動(STOCK MOVE)

OpenERP的庫存管理採取了獨特的複式庫存(Double-Entry Stock Management)。什麼是複式庫存?就是每一筆庫存變動,同時記錄庫存減少和庫存增加。例如賣了10輛自行車給客戶,OpenERP會在你的庫位(Location,這個概念後面再說)減去10輛自行車,再在客戶庫位(Customers Location)增加10輛自行車。因此,任何時候,OpenERP的所有庫位的庫存數量加起來總是為零。

系統中,複式庫存是通過記錄庫存移動(stock move)來實現的。例如,前面的賣10輛自行車給客戶,系統記錄的是:

產品 |數量 | 源庫位 | 目標庫位

自行車 | 10 | stock | Partner Locations > Customers

這條記錄的意思是,有10輛自行車從自己的庫位(stock)轉移到了客戶的庫位(Partner Locations > Customers)。任何一筆庫存變動,系統中都記錄了一筆如此形式的庫存移動。在OE中,“庫存變動”的概念非常廣泛,如庫存檔點發現盤虧了2輛自行車,系統記錄的是:

產品 |數量 | 源庫位 | 目標庫位

自行車 | 2 | stock | Virtual Locations > Inventory Loss

這條記錄的意思是,有2輛自行車從自己的庫位(stock)轉移到了“盤點庫位”(Virtual Locations > Inventory Loss)。反之,盤盈的話,就是從盤點庫位轉移到了stock。又如生產,生產領料系統記錄庫存移動:從原料庫位轉移到生產庫位(Produce Location)。成品入庫系統記錄庫存移動:從生產庫位(Produce Location)轉移到成品庫位。

二、實際庫存(REAL STOCK)和虛擬庫存(VIRTUAL STOCK OR FUTURE STOCK)

系統中不記錄各庫位的產品庫存數量,只記錄庫存變動,那麼,怎麼知道某庫位中某產品的數量呢?這個其實很容易,例如自行車在庫位A中的數量,移入庫位A(庫存移動的目標庫位是庫位A)使得自行車數量增加,反之,移出使得自行車數量減少。因此,只要統計自行車的庫存移動記錄中,目標庫位為A的數量,以及源庫位為A的數量,兩者相減,即得到庫位A中自行車的庫存數量。

現實中,庫存分實際庫存(Real Stock)和虛擬庫存(Virtual Stock or Future Stock)。實際庫存是庫位中實有數量,虛擬庫存是庫位中的將來數量。例如,採購時候,假設今天下單,採購物資要5天后到達。那麼,採購員考慮今天要不要下單,以及採購多少數量時候,他應該參考5天后的庫存數量來決定。在未來的5天中,有一部分產品已銷售出去,將在5天內出庫,還有一部分產品之前已下單(採購單或生產單),將在5天內入庫。實際庫存,加上未來一段時間將要入庫的數量,減去未來一段時間將要出庫的數量,就是虛擬庫存。注意,虛擬庫存的數量和時間相關,例如10天后的虛擬庫存顯然和5天后的虛擬庫存不同。

系統如何計算實際庫存和虛擬庫存呢?還是基於庫存移動記錄來計算,不過,要用到庫存移動記錄中的更多資訊。系統中實際記錄的庫存移動(Stock Move)記錄,還包括移動狀態和計劃移動日期、實際移動日期等欄位。統計實際庫存時,統計那些已經實際發生(移動狀態為Done)的庫存移動記錄的數量即得到。計算虛擬庫存時,統計那些實際已經發生的、以及將要發生(移動狀態為Valid,以及計劃移動日期在計算時間段內)但尚未發生(沒有實際移動日期)的移動記錄數量即得到。

三、倉庫(WAREHOUSE)和庫位(LOCATION)

倉庫是我們通常說的實際“倉庫”。一個實際倉庫中,通常分為若干貨區,如成品區、原料區、廢品區,貨區還分貨架、貨層等,貨區、貨架等形成樹狀層次結構,這個層次結構在OE中可以用庫位建模。

在OE的倉庫(Warehouse)設定中,一個倉庫分為三個庫位(Location):存貨庫位(Location Stock)、進貨庫位(Location Input)、出貨庫位(Location Output)。

存貨庫位:倉庫中存放貨物的貨區,下面還可按貨架、貨層等進一步細分。

進貨庫位:倉庫中收貨的暫存貨區,例如存放已收貨但尚未驗收的臨時存放區。簡單情況,不需要臨時收貨區,進貨庫位可以和存放庫位設定成同一個庫位。

出貨庫位:倉庫中發貨的暫存貨區,例如存放已發貨等待裝運的臨時存放區。簡單情況,不需要臨時發貨區,出貨庫位可以和存放庫位設定成同一個庫位。

庫位類似於倉庫裡面的貨區,用於存放產品(注意,OE的產品包括原料、消耗品、成品等一切物資)。庫存移動中記錄的源庫位、目標庫位都是庫位,不可用倉庫。OE的庫位概念非常靈活,可以是實際庫位(庫區),也可以是虛擬庫位。虛擬庫位是物理上不存在,僅用於複式庫存的庫存移動記錄的需要。例如,盤虧時候的庫存移動記錄,目標庫位是“盤點庫位”,該庫位就是一種虛擬庫位。OE的庫存移動概念非常廣泛,對應的庫位也有多種型別。

供應商庫位(Supplier Location): 用於從供應商處收貨時的庫存移動的源庫位,是一種虛擬庫位。

檢視庫位(View): 庫位樹狀結構的中間節點,用於組織庫位樹狀結構。該種檢視不可在庫存移動中使用,但可用於庫存統計,即統計其下面的各個庫位的總庫存。

內部庫位(Internal Location): 倉庫中實際存放貨物的庫位,即庫區。

客戶庫位(Customer Location): 用於供貨給客戶時的庫存移動的目標庫位,是一種虛擬庫位。

盤點庫位(Inventory): 用於盤虧時的目標庫位,或者盤盈時的源庫位。注意,新上OE系統時候也是從該庫位中“移動”產品至各庫位,以建立期初庫存。

補貨庫位(Procurement): 產品補貨單(Procurement Order,這個概念很重要,後面再講)引起的庫存移動的“臨時”源庫位或目標庫位。當系統初次生成補貨單時候,系統不能確定補貨的來源(不確定是通過購買還是通過生產補貨)。只有當系統執行完補貨排程計劃(Procurement Scheduler)後,才知道補貨來源。預設情況下,系統每天執行一次補貨排程計劃,當然,你可以在任何時候手動執行補貨排程計劃。補貨庫位用於初次生成的補貨單中的庫存移動。每當執行完補貨排程計劃後,該庫位庫存數量應為零。

生產庫位(Production): 生產時候,生產領料或成品入庫時候的目標庫位或源庫位,是一種虛擬庫位。

多公司中間庫位(Transit Location for Inter-Companies Transfers): 多公司時候,用於庫存移動時候的中間庫位。

四、庫位鏈(LOCATION CHAIN)

OE的庫位間可以串聯起來形成庫位鏈。舉個簡單例子,你希望收到貨物後先進入質檢區,經質檢人員確認後再入庫。要實現這個業務,一個簡單辦法是利用庫位鏈。設定一個質檢庫位,該庫位連結到你的存貨庫位,每當貨物進入質檢庫位時候(系統記錄到一個目標庫位為質檢庫位的庫存移動),系統自動生成一個從質檢庫位到存貨庫位的移動單,要求質檢人員確認該單子。

庫位鏈中,從前一庫位到下一庫位的移動,有三種移動方式:

手動轉移(Manual Operation):系統自動生成一張到下一庫位的移動單,要求操作員確認後才實際移動。

自動轉移(Automatic Move):系統自動生成一張到下一庫位的移動單,不需要操作員確認,直接移動。此時通常還會指定庫鏈提前時間(Chaining Lead Time),該時間表示,貨物進入庫位後,等待該時間,再進入下一庫位。這個概念可以用於建模物流路徑結點及其時間。

自動跳移(Automatic No Step Added):系統不生成到下一庫位的移動單,而是直接修改原庫存移動的目標庫位為下一庫位。

可以利用OE靈活的庫位及庫位鏈的概念建模物流處理過程。如:

銷售發貨的多次確認:例如,系統預設的銷售發貨過程是兩次確認,一次是出庫前確認待發貨產品合格,其次是客戶收到貨物後聯絡客戶確認收貨無誤。第一次確認在銷售單確認時系統自動產生的裝箱單(Packing List,其內容是存貨庫位Stock到出貨庫位Output的庫存移動)上確認,第二次在第一次確認後產生的運輸單(Delivery Order,其內容是從出貨庫位Output到客戶庫位Cusomer的庫存移動)上確認。如果不需要第二次確認,那麼,只要將Output -> Customer設定成自動轉移庫位鏈,則第二次將自動移動,無需確認。

跟蹤貨物進出口的海運路徑:例如,假設某產品從美國公司A進口,A公司發貨後2天到達美國西岸港口,1個月後到達上海港口,5天后應到達公司倉庫。為了跟蹤該物流過程,可以建立庫位鏈:Supplier A -> 西岸港 -> 上海港 -> Input -> Stock,並設定該庫位鏈各環節的庫鏈提前時間,則系統可以自動產生庫存移動供使用者確認貨物是否按時到達各節點。

管理單個產品的物流路徑:安裝Location_Path模組後,OE支援為每個產品設定特定的物流路徑。

管理出租產品:例如某裝置A出租給某客戶A 3個月,可以為裝置A設定庫位鏈:Stock -> Output -> Customer A -> Input ->Stock,並將Customer A -> Input環節的庫鏈提前時間設定為3個月。這樣,系統將於3個月後自動產生庫存移動單供使用者確認裝置A是否按時歸還。

管理委託產品:委託產品是指,存放於客戶或供應商處,但產權屬於自己的產品,或者,存放於本公司倉庫,但產權不屬於本公司的產品。例如,對於產權屬於自己,但存放於客戶處的產品,可以在自己公司的總存貨庫位下設定一個“客戶庫位”,用於記錄該類產品庫存。

五、產品補貨(PROCUREMENT)

銷售缺貨時需要及時“補貨”,這個補貨過程在OE裡叫產品補貨(Procurement)。OE的補貨,是通過手動或自動生成補貨單(Procurement Order)來實現。有多種情況會引發補貨:

1)倉管員發現某產品庫存太低,他可以手動生成一張補貨單(Procurement Order)。在產品畫面,右邊有個“Make Procurement”連結,當檢視庫存時發現產品庫存太低,可以點選該連結手工填寫補貨單。

2)按庫存生產(Make to Stock)的產品,當該產品庫存低於最低庫存(minimum stock rules)時,系統會自動生成補貨單。系統有一個批處理Job,該Job會定期執行(預設為一天一次),該Job根據設定的最低庫存規則(minimum stock rules),如果庫存不夠時,自動生成補貨單。

3)按訂單生產(Make to Order)的產品,確認銷售訂單時候,系統會自動生成補貨單。

4)按庫存生產(Make to Stock)的產品,根據主生產計劃(master production schedule)生成補貨單。

隨著補貨單的執行,系統會產生一系列的動作。如自動生成採購單(Purchase Order),自動生成製造單(Manufacturing Order),自動生成任務(Task)。具體採取什麼動作,取決於產品(Product)的供應方法(Supply Method)、補貨方法(Procurement Method)、產品型別(Product Type)三個屬性的設定。

OE支援兩種產品補貨方法:按庫存生產(Make to Stock)、按訂單生產(Make to Order)。

按庫存生產(Make to Stock): 表示從倉庫取貨供給客戶的產品,如分銷商的情況,或者季節性產品。

按訂單生產(Make to Order): 表示有銷售訂單時,根據訂單去採購或生產的產品,該種產品不會入庫。

OE支援兩種產品供應方法:生產(Produce)、購買(Buy)。

生產(Produce): 表示該產品通過自己生產來供應,或者該服務是通過內部資源來提供。

購買(Buy): 表示該產品或服務通過購買來供應。

OE支援三種產品型別:可庫存品(Stockable)、消耗品(Cosumable)、服務(Service)

可庫存品(Stockable):需要計量其庫存數量的物資,通常的有形產品都是該型別。

消耗品(Cosumable):不需要計量其庫存數量的物資,通常是低值易耗品,如小螺釘等。

服務(Service):非有形物,OE中將服務也看做產品。如諮詢服務、軟體開發服務。

對於可庫存產品,補貨單(Procurement Order)的後續動作:

補貨方法 | 供應方法(Produce) | 供應方法(Buy)

MTS | 等待 | 等待

MTO | 自動生成生產單 | 自動生成採購單

對於服務產品,補貨單(Procurement Order)的後續動作:

補貨方法 | 供應方法(Produce) | 供應方法(Buy)

MTS | - | -

MTO | 自動生成專案任務 | 自動生成服務外包合同

下面舉個複雜點的例子說明OE的補貨(Procurement)過程:

1)銷售出某MTO的產品A

2)銷售單(SO:Sale Order)確認時候,系統自動生成產品A的補貨單(PO:Procurement Order)

3)該PO導致系統生成產品A的製造單(MO:Manufacturing Order)

4)隨著該MO的執行,系統會根據BOM計算產品零部件的補貨單

5)零部件補貨單會導致系統生成庫間移動單(INT:Internal Moves,相當於領料單)

6)如果零部件是MTO的產品,該INT又會觸發新的PO及MO,如果該零部件是MTS的,且庫存不足領料數量,則系統將處於待料狀態(Waiting)

7)待料狀態下,等待一天後,最小庫存規則會自動引發該零部件的補貨單,該補貨單又會產生採購單(PO:Purchase Order)

8)採購員確認系統生成的採購單,且採購零部件入庫後,待料狀態結束,生產可以繼續進行。

從上述補貨過程可以看出,有多種原因會導致補貨過程中斷(Procurement Exception),補貨單會記錄導致異常的原因。設定錯誤是導致自動補貨異常的最常見原因。

產品未定義BOM(No bill of materials defined for production): 這種情況,需要定義BOM,或者將產品的供應方法改成購買(Buy)。

找不到採購單的供應商(No supplier available for a purchase): 這中情況是因為沒有定義產品的供應商,需要在Product介面的Supplier頁定義產品預設供應商。

找不到供應商的地址(No address defined on the supplier partner):這種情況,需要設定該供應商的地址,系統自動生成採購單時需要該地址。

庫存不足(No quantity available in stock):這種情況需要定義最小庫存規則,以使系統能夠自動補貨,或者手工錄入補貨單補足庫存。

六、庫存價值(STOCK VALUATION)

庫存價值計算比較難,財務經理給出的庫存價值往往和庫管經理給出的庫存價值相差很多,所謂庫存“兩張皮”現象。在OE中,非常巧妙的將“兩張皮”統一成了一張皮。OE中統一“兩張皮”的辦法是,每一筆庫存移動都會自動生成會計上的一筆庫存移動分錄。因為系統自動生成,避免了人為錯誤,故而會計分錄和庫存移動能夠保持一致,財務經理從會計分錄計算的庫存價值和庫管經理從庫存移動計算出的庫存價值總是相等的。

為了統一庫存價值的“兩張皮”,在OE中需要設定如下一些基礎引數:產品(Product)畫面的Stock Input Account、Stock Output Account,庫位(Location)畫面的Stock Input Account、Stock Output Account。

產品的Stock Input Account:該產品入庫時,入庫分錄的貸方。產品入庫時候,借方通常固定是“庫存商品”。

產品的Stock Output Account:該產品出庫時,出庫分錄的借方。產品出庫時候,貸方通常固定是“庫存商品”。

庫位的Stock Input Account:產品入該庫位時,入庫分錄的借方。該引數通常是“庫存商品”下的以庫位名命名的二級科目,如“A庫”。但如果是“盤點庫位”或“生產庫位”,不要設定成“庫存商品”的二級科目,你可以設定該引數為“盤點庫”、“生產庫”,或者不設。

庫位的Stock Output Account:產品出該庫位時,出庫分錄的貸方。該引數通常也是“庫存商品”下的以庫位名命名的二級科目,如“A庫”。

考慮如下例子,

產品“自行車”的Stock Input Account=“外庫”,Stock Output Account=“外庫”

A庫位的Stock Input Account=“庫存商品 - A庫”,Stock Output Account=“庫存商品 - A庫”

盤點庫位的Stock Input Account=“盤庫”,Stock Output Account=“盤庫”

自行車單價200元,期初自行車庫存數量為0,依次發生業務:1)採購入庫自行車10輛,入A庫位;2)銷售出庫自行車5輛,從A庫出;3)月末盤點盤虧1輛自行車。

當確認上述庫存移動時候,系統會自動生成如下會計分錄:

1)採購入庫

產品 |數量 | 源庫位 | 目標庫位

自行車 | 10 | Supplier | A庫位

會計分錄

借:庫存商品 - A庫 2000

貸:外庫 2000

2)銷售出庫

產品 |數量 | 源庫位 | 目標庫位

自行車 | 5 | A庫位 | Customer

會計分錄

借:外庫 1000

貸:庫存商品 - A庫 1000

3)盤虧

產品 |數量 | 源庫位 | 目標庫位

自行車 | 1 | A庫位 | 盤點庫位

會計分錄

借:盤庫 200

貸:庫存商品 - A庫 200

從系統的記錄中,庫管經理很容易得出結論:A庫位4輛(10輛-5輛-1輛),盤點庫位1輛。

財務經理很容易得出結論:A庫位價值800元(2000元-1000元-200元),盤點庫位價值200元。

盤點庫位的價值表示盤虧了200元。