1 製造模塊剖析
mrp算法
爲了方便說明,給一個最簡單的生產模式
m1-p1
也就是由原材料m1直接加工生產p1,比例是1:1
我們設m1的庫存量是1000,最低庫存200,採購提前期6天,p1的庫存是900個,最低庫存100
現在接到一個訂單,2月2號要2000個p1發運(ofbiz是按照發運期來算提前量的),該怎麼算呢
很顯然,我們立刻得出,應該生產p1 1200個
但我們的實際生產量並不一定是1200,我們應該先找一下已經安排下的p1的生產單,看有多少
好,找到一個生產單,1月30號生產完畢300個,這樣,我們只需要生產900個p1就能滿足2月2號的需求
那什麼時候開始生產,就需要計算製造提前期,ofbiz是按照工藝路線*數量來計算的,比設一個固定的製造提前期要精確的多,經過計算,需要1月26號開始生產
爲了生產p1我們需要多少m1呢,如果不考慮損耗率,應該是900個,現在m1的庫存是1000個,能滿足需要麼
不能,因爲m1的最低庫存是200個,也就是最多隻有800個m1可用,那我們是不是還需要採購100個
和生產一樣,先要查一下有沒有在1月26號前到貨的採購訂單,這次發現沒有,那我們就要給供應商發一個採購訂單,訂購600個,爲什麼是600個
這裏有一個採購批量的概念,也就是說採購不是你需要多少就訂多少,供應商有一個批量規則,比如m1的供應商的要求是每次訂購必須是一箱,一箱是多少呢,600個
ofbiz並沒有給出採購批量的算法,只是給出了接口,保證了最大的靈活性,因爲實際中,對每一個採購訂單計算批量可能導致過大的採購量
比如,現在mrp運算得出 1月26號採購到貨100個m1,2月2號採購到貨300個m1,2月6號採購到貨200個m1,批量是600
在實際中採購員會把數量彙總,給供應商發出一張1月26號到貨的採購600個m1的訂單,這張訂單應該提前6天發出去,因爲採購提前期是6天,考慮到日曆的休息日,實際應該是提前6個工作日
如果按每張訂單分別來,同時考慮批量,就會是1月26號採購600個m1,2月2號採購600個m1,2月6號採購600個m1
以上流程分析清楚了,mrp算法就是一個大循環,先把需求按產品排序,然後按llc循環,計算實際生產或採購需求量,對於需要生產和採購的就生成採購建議和生產建議
代碼裏也有一些小技巧決定了運行的速度,比如要避免使用遞歸函數,一遍循環就要全部算完
製造模塊還有一些比較細緻的設計,比如考慮產品屬性,考慮產品配置bom(這兩個功能很重要),考慮虛擬件,引入非庫存件的概念
以庫存件和非庫存件的概念分析一下
我們考慮如下的生產模式
m1-p1_2-p1_1-p1
由原材料m1加工成半成品p1_2,再由p1_2加工成p1_1,最後由p1_1加工成成品p1
按很多erp的設計,先是領料m1,生產p1_2,然後將生產出來的p1_2入庫,然後領料p1_2,生產p1_1,將生產出來的p1_1入庫,然後領料p1_1,生產p1
看上去不是很嚴謹麼
問題在與,在車間的實際生產中,生產出p1_2,就直接拿去生產p1_1了,根本不會做什麼入庫再領料的操作,不然,一天要輸多少單據,如果所有半成品都嚴格要求做要出入庫操作的話,就會不符合實際的車間生產情況
所以,非庫存件是一個非常好的設計,我們把p1_2和p1_1設置成非庫存件,可以很好的適應實際的生產管理的需要
當然,還有其他需要考慮的,比如,如果非庫存件生產有結餘要入庫也需要處理
2 庫存成本的計算和移動平均法
庫存成本就是銷貨成本(COGS),在對組織機構設置財務選項時就需要確定COGS,一般有先進先出,後進先出,移動平均和個別計價法
我們看一個例子
2月2號購入原材料m1 1000 個,價格100 $
2月6號,購入原材料m1 1000 個,價格 200 $
2月8日,賣出原材料m1 600個,那成本是多少呢
按移動平均法,成本是 (1000*100+1000*200)/2000 = 150 $
按後進先出,成本是就是200 $
按先進先出,成本是就是100 $
有了成本,就可以立刻得到銷售利潤
但是在實際的業務中,由於有進貨,退貨,各種庫存移動,物理庫存變動,因此,庫存成本的計算要比上面描述的要複雜,一般分爲即時計算和月末計算
即時計算是業務發生時就立刻計算這時的移動平均價或後進先出法 先進先出的價格,並寫入銷售單據(出庫單據),對計算速度要求高,並要求軟件邏輯必須考慮全面
月末計算是業務發生時不計算成本,到月末時,把入庫單據和出庫單據按時間順序排列,從頭開始計算成本,並回寫到出庫單據,一般要計算比較長的時間,有的erp單獨設置了 存貨覈算模塊
對於即時計算來說,我們需要有一張表,保存着所有產品的移動平均價 當前數量
比如在該表中,產品m1,當前數量 20000,當前移動平均價 150 $
現在入庫m1 10000 個,價格 300 $
那麼 當前移動平均價=(20000*150+10000*300)/(20000+10000)= 200 $,當前數量變成 30000
3 自動生成憑證
主要發生在採購 銷售 和 生產 的業務發生後,自動生成財務憑證
採購業務的會計分錄
入庫時
借:庫存商品 (1243)
貸:材料採購 (1201)
收到發票時
借:材料採購 (1201)
應交稅費-應交增值稅(進項稅)(21710101)
貸:應付賬款 (2121)
付款時
借:應付賬款 (2121)
貸:銀行存款 (1002)
銷售業務的會計分錄
銷售出庫時
借:主營業務成本 (6401)
貸:庫存商品 (1243)
開出發票時
借:應收賬款 (1131)
貸:主營業務收入 (6001)
應交稅費-應交增值稅(銷項稅)(21710105)
對方付款時
借:銀行存款(1002)
貸:應收賬款 (1131)
在銷售 出庫 收款時,系統都能自動生成會計憑證,金額從單據中提取,而記賬科目則需要預先定義,也就是說,你要指定你的科目表中的哪個科目對應主營業務收入,比如6001,哪個對應應收賬款,比如1131,那個對應應交增值稅(銷項稅),一般都是2171
生產則涉及到 原材料科目(比如1211),在產品科目(1241),生產成本科目(4101),製造費用科目(4105)的指定
由於國外erp軟件一般沒有委外加工的功能,需要做變通處理,可以設置虛擬倉庫,紀錄委外發出原材料,科目上相應的要設置 委託加工物資 科目
發出材料時
借:在途物資
貸:原材料
收到委外加工產品時
借:委託加工物資
貸:在途物資
一個比較複雜的問題就是,商品入庫時,沒有收到發票,就會以訂單價格或標準價格入庫,入庫後下月收到發票,如果發票價格與入庫價格不一致,國外軟件一般計入庫存差異,而國內是計入 材料成本差異 科目,另外,應收應付賬款是出入庫確定,還是開票確認,也會涉及到不同的會計處理,需要增加 庫存商品-銷售及 應計負債(未稅價)等中間科目
==================================
附錄
ofbiz快速操作流程
1 建立一個類型爲原材料的產品m1,和類型爲成品的產品p1
2 建立一個角色類型爲供應商的客戶組g1,和類型爲客戶的客戶k1
3 設置產品m1 p1的價格和供應商價格
4 設置產品m1 p1的倉庫爲ofbiz的webstore,位置,並初始化庫存各6000個
5 建立一個銷售訂單,銷售p1給k1,店鋪爲ofbiz的電子商務店鋪,從webstore出貨
6 建立一個貨運計劃,交付p1
7 到倉庫執行分揀和驗證包裝
8 建立一個銷售發票,和銷售付款,與發票匹配
9 建立一個採購訂單,從g1採購原材料m1
10 到倉庫接受庫存m1
11 開採購發票,採購付款,與採購發票匹配
12 新建一個規程任務rtask1
13 新建一個p1的物料清單,子項爲m1,數量1,規程任務rtask1
14 建立一個生產單,生產p1, 選擇規程任務,然後開始,從倉庫領料m1,完成,將生產的p1入庫
15 到倉庫裏可以看庫存明細,也可以做倉庫調撥和貨位移動
16 在總帳裏關閉已有的會計期間,新建一個當月的會計期間
快速流程走過一遍,就可以做比較複雜的配置,比如可定製產品,虛擬,變型,特性的配置