今天接到乙個需求,mm模組對物料進行處理的時候,需要考慮物料的資訊記錄是否有效。
業務顧問給我提了個需求:
問題:zppr0001_new寄售**有時存在多**商庫存時,先消耗庫存少的**商庫存。當該**商物料寄售資訊記錄失效時,系統仍對其進行寄售**有。
現更改邏輯為:抓取寄售庫存時,排除資訊記錄失效的**商庫存。
滿足以下任一條件則判斷資訊記錄為失效,需排除:
1. 通過**商、物料關聯eina-lifnr、eina-matnr,eina-loekz為「x」。
2. 通過eina-infnr關聯eine-infnr且eine-werks為「1000」、eine-esokz為「2」,eine-loekz為「x」。
3. 通過**商、物料、工廠、資訊類別2關聯a017-lifnr、a017-matnr、a017-werks、a017-esokz,當前日期不在有效期間(有效從a017-datab,有效到a017-datbi)內。
4. 通過a017-knumh關聯konp-knumh,konp-loevm_ko為「x」或者konp-kbetr為「0」。
這個關關係圖和網上資料的一副關係圖有出入,原圖應該搞錯了。
然後我使用abap實現需求裡的東東,當我把**寫完後,突然想到,好像有bapi可以檢查資訊記錄,於是趕緊找了一下。
bapi_inforecord_getlist
這個bapi經我和mm業務顧問測試,可以用來檢查資訊記錄是否完整:
1. 如果沒有資訊記錄,bapi返回0條記錄.
2. 如果資訊記錄中的**有效期失效,bapi返回的記錄裡面,**是0.
那麼,還是用bapi優先吧
"---------------資訊記錄過期排除----------------------
data gt_purchorg like table of bapieine with header line.
data gs_purchorg like bapieine .
loop at t_mkol.
"物料號補零
call function 'conversion_exit_matn1_input'
exporting
input = t_mkol-matnr
importing
output = t_mkol-matnr.
"**商補0
call function 'conversion_exit_alpha_input'
exporting
input = t_mkol-lifnr
importing
output = t_mkol-lifnr.
call function 'bapi_inforecord_getlist'
exporting
vendor = t_mkol-lifnr
material = t_mkol-matnr
purch_org = '1000'
info_type = '2'
plant = t_mkol-werks
purchorg_data = 'x'
tables
inforecord_purchorg = gt_purchorg.
if gt_purchorg is initial.
delete t_mkol from t_mkol.
else.
read table gt_purchorg index 0 into gs_purchorg .
if gs_purchorg-net_price = 0.
delete t_mkol from t_mkol.
endif.
endif.
endloop.
"---------------資訊記錄過期排除----------------------
關於日誌的資訊記錄
private integer id id名稱 private string visittime 訪問的時間 訪問的時間會在插入資料庫的時候進行新增 private string executetime 執行方法的時間 private string url 訪問的路徑 private string ...
關於sap的字段和物件修改記錄的查詢
sap的字段和物件的修改都會儲存舊值,資料儲存在cdhdr和cdpos表中,對於提取舊值你可以採用兩種方法 1 使用sap的標準函式changedocument read headers 和changedocument read positions 2 使用select語句直接從表中讀取。直接使用s...
關於SAP的編碼範圍
1.numberrange的通用tcode snro 2.number range的通用讀取函式 number get next 3.如有跳號現象,可以禁用物件的buffer試試 4.幾個關於number range的函式組 snr0 online maint.of number ranges gr...