SAP 取月度期初库存和月度期末库存(历史库存)
mard里記載的是當前庫存的數量,但是期間并不一定是當月。比如你物料4月一整月都沒有庫存數量變化(沒收沒發),那么5月初你看mard里的條目期間數還是4月而非5月。
當某個期間發生貨物移動的時候,系統在更新mard數據的之前(這個表是實時更新的),會檢查此筆業務過賬期間和mard里對應記錄的期間是否一致,也就是看這是不是本期間第一筆移動。如果是,copy表mard里對應記錄到mardh,然后把mard記錄改成當期(也可能是先刪后建),然后再作更新數量數據的操作。如果不是第一筆記錄,也就是mard期間和mseg期間一致,則不作copy記錄只更新mard數量。
這樣處理貌似減少了冗余數據,不過給編程取歷史庫存增加了很大的工作量,個人覺得不算明智之舉。
庫存方面的表
mbew? --當前庫存
mbewh? --歷史庫存
EBEWH? --銷售訂單庫存的評估:歷史
mard--查主庫存
mardh--主庫存歷史記錄
mslb--特殊庫存O
mkol--特殊庫存K/M
mska--特殊庫存E
msku--特殊庫存V/W
mcha
mchb?
有很多人在做庫存進銷存的時候,感覺期初庫存和期末庫存比較難搞定,感覺要去取貨物移動的數據來獲取期初庫存和期末庫存,其實不然,只要理解原理就可以快速取出期初庫存和期末庫存
庫存表:MARDH MARD MSKUH MSKU MSLBH MSLB MSKAH MSKA
下面以MARDH MARD為例,如果一個物料在2011年9月份做了一筆貨物移動,則會自動在MARDH中更新2011年8月份的期末庫存,假如在2011年9月份一直沒有做貨物移動,則不會更新MARDH中8月份的期末庫存
?
假如我想獲得2011年7月份的庫存,則需要先在MARH中查找7月份的庫存,找不到找8月份的庫存,找不到找9月份的庫存,以此類推,最后都找不到,則用MARD中的庫存
?
* 下面代碼為獲取8月份的期初庫存和8月份的期末庫存
?
PARAMETERS:
*?會計年度
??p_gjahr??LIKE?bkpf-gjahr?OBLIGATORY?DEFAULT?'2011',
*?期間
??p_monat??LIKE?bkpf-monat?OBLIGATORY?DEFAULT?'08'.
?
DATA:
??v_gjahr??LIKE?bkpf-gjahr,????"?上月期間年度
??v_monat??LIKE?bkpf-monat.???"?上月期間月份
?
*?獲取上月度年度和月份
??IF?p_monat?=?'01'.
????v_monat?=?'12'.
????v_gjahr?=?p_gjahr?-?1.
??ELSE.
????v_monat?=?p_monat?-?1.
????v_gjahr?=?p_gjahr.
??ENDIF.
?
??DATA:?BEGIN?OF?typ_mardh,
????????p_string(6)?TYPE?c.
??????????INCLUDE?STRUCTURE?mardh?.
??DATA:?END?OF?typ_mardh.
??DATA:?i_mardh?LIKE?TABLE?OF?typ_mardh?WITH?HEADER?LINE.?????"?期末數據
??DATA:?n_mardh?LIKE?TABLE?OF?typ_mardh?WITH?HEADER?LINE.?????"?當前庫存
??DATA:?m_mardh?LIKE?TABLE?OF?typ_mardh?WITH?HEADER?LINE.?????"?上月期初數據
?
*?查找庫存歷史表
??SELECT?? *
????FROM?mardh
????INTO?CORRESPONDING?FIELDS?OF?TABLE?m_mardh
???WHERE?(?lfgja?>?v_gjahr?OR?(?lfgja?=?v_gjahr?AND?lfmon?>=?v_monat?)?).
??LOOP?AT?m_mardh?.
????CONCATENATE?m_mardh-lfgja?m_mardh-lfmon?INTO?m_mardh-p_string?.
????MODIFY?m_mardh?.
????IF?m_mardh-p_string?>=?p_estring?.
??????MOVE-CORRESPONDING?m_mardh?TO?i_mardh.
??????APPEND?i_mardh?.
????ENDIF.
??ENDLOOP.
?
??SELECT?? *
????FROM?mard
????INTO?CORRESPONDING?FIELDS?OF?TABLE?n_mardh .
?
??LOOP?AT?n_mardh?.
????CONCATENATE?n_mardh-lfgja?n_mardh-lfmon?INTO?n_mardh-p_string?.
????MODIFY?n_mardh?.
????MOVE-CORRESPONDING?n_mardh?TO?m_mardh.
????APPEND?m_mardh?.
????MOVE-CORRESPONDING?n_mardh?TO?i_mardh.
????APPEND?i_mardh?.
??ENDLOOP.
?
* 期初庫存都在表M_MARDH
??SORT?m_mardh?BY?matnr?werks?lgort?lfgja?lfmon?.
??DELETE?ADJACENT?DUPLICATES?FROM?m_mardh?COMPARING?matnr?werks?lgort.
*?期末庫存都在表I_MARDH
??SORT?i_mardh?BY?matnr?werks?lgort?lfgja?lfmon?.
??DELETE?ADJACENT?DUPLICATES?FROM?i_mardh?COMPARING?matnr?werks?lgort.
?
下面在獲取數據的時候,直接可以READ TABLE ........??BINARY?SEARCH?.
?
?
?
?轉載地址:http://blog.csdn.net/lbxp521/article/month/2011/08
總結
以上是生活随笔為你收集整理的SAP 取月度期初库存和月度期末库存(历史库存)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP中采购订单状态与MRP的关系
- 下一篇: ORA-12516 TNS: 监听程序找