SAP對絕大部分庫存table都有建立相應的歷史記錄table,用來記錄每個月月末的歷史庫存,其更新規則如下:
次月第一筆異動時,會向歷史記錄table中寫入異動前庫存的數量狀態,以及上月的年月信息。
需要注意的是:
1,以MARD為例,料號100-100第一次寫入時,會自動往MARDH寫入一筆數量為0,年月為當前物料帳期的前一期。
2,如果本月(M月)內都無異動,則上個月的月末庫存是不會結出來,因為月末庫存=當前庫存,直至后續第N月異動時,會結出N-1月的月末庫存。
則從MàN-1月的庫存都是相同的,都為N-1的月末庫存,當然如果一直遞歸到當前月都沒有,則MàN-1的異動都為當前系統的實時庫存。
計算歷史庫存,無非是用歷史庫存針對異動進行加減,所以根據如上規則,我們可以整理出四種情況出來
①有月初歷史庫存,無月末歷史庫存
②有月初歷史庫存,有月末歷史庫存
③無月初歷史庫存,無月末歷史庫存
④無月初歷史庫存,有月末歷史庫存
根據注意項2的邏輯看:
狀況①和狀況②可以合并
無月末庫存可以用遞歸方式抓取到月末庫存。
然后比較查詢日期距月初月末的天數,如果距月初近,則用月初庫存為起點,計算期間異動。
反之,則以月末算(至月末天數需要用查詢日+1來計算)。
狀況③和狀況④亦可以合并。
因為無月初庫存(即上月月末庫存),說明此月內無異動,抓月末庫存即可。
如果無月末庫存,則用遞歸的方式查找即可。
之前不太理解,為什么SAP沒有異動就不結月末庫存,現在這樣看,還是為計算歷史庫存埋下伏筆。
起碼以狀況③和狀況④來看,計算起來會比較簡單。
若和TIPTOP的IMK一樣,③和④還是要抓一次異動。
最后附注一點在DEV的小發現。
DEV上2182的帳期還在2009年03,如果這個時候作一筆料件異動,他更新的可不是2010/02的歷史庫存。
他會結出一筆2009/02的歷史庫存,同時寫入一筆2009/03的歷史庫存。
如果同料號再作異動,SAP修改當前庫存的同時,也會修改2009/03的歷史庫存。
所以并不是歷史庫存寫入之后就不會變動,這個應該是配合SAP物料帳的開關所需要。
這個并不影響計算歷史庫存,所以不再贅述。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13325851/viewspace-629083/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13325851/viewspace-629083/