MM03分類視圖中相關表:
INOB:在內部編號和對象之間的鏈接。KLART字段對應“類別種類”,OBTAB='MARA'代表主數據配置,OBTAB=‘MCH1’代表批次數據(OBJEK=物料號&&批次)
KSSK:分配表: 對象到單個類。KSSK-OBJEK=AUSP-OBJEK,KSSK-OBJEK=INOB-CUOBJ(左邊補0)
KLAH:類表頭數據。CLASS字段對應“分配-類別”
KSML:類的特性。KSML-IMERK = AUSP-ATINN
AUSP:特征值。ATWRT字段對應“常規-特征值”
CABN:特征
CABNT:特性描述
批次相關表:
MCH1:批量(如果批次管理多工廠)。CHARG字段對應“批號”
相關設置操作-SAP MM批次管理(4)批次分類
https://blog.csdn.net/kangliujie/article/details/76129894
維護物料的批次特征值用到以下2個BAPI函數
BAPI_OBJCL_GETDETAIL
BAPI_OBJCL_CHANGE
如下代碼主要實現入庫自動創建采購訂單,並根據ITEM_TEXT字段值更新批次特征值。
FUNCTION zsrm_create_mb01. *"---------------------------------------------------------------------- *"*"本地接口: *" EXPORTING *" VALUE(BKERRMSG) TYPE BKK_ERRMSG *" TABLES *" IT_ITEM STRUCTURE ZMM_MB01 OPTIONAL *" IT_RESULT STRUCTURE ZMM_MB01_RESULT OPTIONAL *"---------------------------------------------------------------------- DATA: BEGIN OF gmhead. INCLUDE STRUCTURE bapi2017_gm_head_01. DATA: END OF gmhead. DATA: BEGIN OF gmcode. INCLUDE STRUCTURE bapi2017_gm_code. DATA: END OF gmcode. DATA: BEGIN OF mthead. INCLUDE STRUCTURE bapi2017_gm_head_ret. DATA: END OF mthead. DATA: BEGIN OF itab OCCURS 100. INCLUDE STRUCTURE bapi2017_gm_item_create. DATA: END OF itab. DATA: BEGIN OF errmsg OCCURS 10. INCLUDE STRUCTURE bapiret2. DATA: END OF errmsg. DATA: ls_item TYPE zmm_mb01, ls_result TYPE zmm_mb01_result. DATA: lv_status TYPE string VALUE 'E', lv_ebeln TYPE ebeln. DATA: errflag. DATA: lv_classtype TYPE bapi1003_key-classtype, lv_classnum TYPE bapi1003_key-classnum, lv_objectkey TYPE bapi1003_key-object, lt_allocvaluesnum TYPE bapi1003_alloc_values_num OCCURS 0, lt_allocvalueschar TYPE bapi1003_alloc_values_char OCCURS 0, lt_allocvaluescurr TYPE bapi1003_alloc_values_curr OCCURS 0, lt_return TYPE bapiret2 OCCURS 0, ls_return TYPE bapiret2, lv_obj TYPE ausp-objek, lv_clint TYPE kssk-clint, lv_imerk TYPE ksml-imerk, ls_allocvalueschar TYPE bapi1003_alloc_values_char. DATA ls_ausp LIKE ausp. READ TABLE it_item INTO ls_item INDEX 1. gmhead-pstng_date = ls_item-pstng_date. gmhead-doc_date = ls_item-pstng_date. gmhead-pr_uname = sy-uname. gmcode-gm_code = '01'. "01 - MB01 - Goods Receipts for Purchase Order LOOP AT it_item INTO ls_item. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = ls_item-material IMPORTING output = ls_item-material. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = ls_item-vendor IMPORTING output = ls_item-vendor. itab-move_type = ls_item-move_type. itab-mvt_ind = 'B'. itab-plant = ls_item-plant. itab-material = ls_item-material. itab-entry_qnt = ls_item-entry_qnt. itab-entry_uom = ls_item-entry_uom. itab-move_stloc = ls_item-move_stloc. itab-stge_loc = ls_item-move_stloc. itab-vendor = ls_item-vendor. itab-item_text = ls_item-item_text. itab-batch = ls_item-batch. APPEND itab. ENDLOOP. CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = gmhead goodsmvt_code = gmcode IMPORTING goodsmvt_headret = mthead TABLES goodsmvt_item = itab return = errmsg. CLEAR errflag. LOOP AT errmsg. IF errmsg-type EQ 'E'. errflag = 'X'. bkerrmsg = bkerrmsg && errmsg-message. ELSE. ENDIF. ENDLOOP. IF errflag IS INITIAL. COMMIT WORK AND WAIT. IF sy-subrc NE 0. bkerrmsg = bkerrmsg && 'Error in updating'. EXIT. ELSE. lv_status = 'S'. WRITE:/ mthead-mat_doc, mthead-doc_year. SELECT SINGLE ebeln INTO lv_ebeln FROM mseg WHERE mblnr = mthead-mat_doc AND mjahr = mthead-doc_year. ENDIF. ENDIF. LOOP AT it_item INTO ls_item. MOVE-CORRESPONDING ls_item TO ls_result. ls_result-status = lv_status. ls_result-mblnr = mthead-mat_doc. ls_result-ebeln = lv_ebeln. IF lv_status = 'S'. CLEAR: lv_classtype,lv_classnum,lv_obj. REFRESH: lt_allocvaluesnum,lt_allocvalueschar,lt_allocvaluescurr,lt_return. SELECT SINGLE klart INTO lv_classtype FROM inob WHERE obtab = 'MARA' AND objek = ls_item-material. lv_objectkey = ls_item-material && ls_item-batch. SELECT SINGLE cuobj INTO lv_obj FROM inob WHERE obtab = 'MCH1' AND objek = lv_objectkey. SELECT SINGLE clint INTO lv_clint FROM kssk WHERE objek = lv_obj AND klart = lv_classtype. SELECT SINGLE imerk INTO lv_imerk FROM ksml WHERE clint = lv_clint. SELECT SINGLE class INTO lv_classnum FROM klah WHERE klart = lv_classtype. IF lv_classtype > ' ' AND lv_classnum > ' '. CALL FUNCTION 'BAPI_OBJCL_GETDETAIL' EXPORTING objectkey = lv_objectkey objecttable = 'MCH1' classnum = lv_classnum classtype = lv_classtype TABLES allocvaluesnum = lt_allocvaluesnum allocvalueschar = lt_allocvalueschar allocvaluescurr = lt_allocvaluescurr return = lt_return. READ TABLE lt_return INTO ls_return INDEX 1. IF ls_return-type = 'S'. READ TABLE lt_allocvalueschar INTO ls_allocvalueschar INDEX 1. IF sy-subrc = 0. ls_allocvalueschar-value_char = ls_item-item_text+00(30). ls_allocvalueschar-value_neutral = ls_item-item_text+00(30). MODIFY lt_allocvalueschar FROM ls_allocvalueschar INDEX 1. CALL FUNCTION 'BAPI_OBJCL_CHANGE' EXPORTING objectkey = lv_objectkey objecttable = 'MCH1' classnum = lv_classnum classtype = lv_classtype status = '1' keydate = sy-datum TABLES allocvaluesnumnew = lt_allocvaluesnum allocvaluescharnew = lt_allocvalueschar allocvaluescurrnew = lt_allocvaluescurr return = lt_return. READ TABLE lt_return INTO ls_return WITH KEY type = 'E'. IF sy-subrc = 0. bkerrmsg = bkerrmsg && ls_return-message. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ENDIF. ELSE. CLEAR ls_ausp. ls_ausp-objek = lv_obj. ls_ausp-atinn = lv_imerk. ls_ausp-atzhl = '001'. ls_ausp-mafid = 'O'. ls_ausp-klart = lv_classtype. ls_ausp-adzhl = '0000'. ls_ausp-atwrt = ls_item-item_text+00(30). ls_ausp-atcod = '1'. INSERT INTO ausp VALUES ls_ausp. ENDIF. ENDIF. ENDIF. ENDIF. APPEND ls_result TO it_result. ENDLOOP. ENDFUNCTION.