ABAP CS02物料BOM相关性分配实现
一.SAP前台界面操作
二.代码实现
DATA:bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA:messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE,
lv_mtype TYPE c,
lv_retmsg(220) TYPE c.
DATA:gt_stpox LIKE stpox OCCURS 0 WITH HEADER LINE,
gs_cstmat LIKE cstmat.
DATA:BEGIN OF gt_item OCCURS 0,
selpo TYPE rc29p-selpo,
knnam TYPE rcukd-knnam,
END OF gt_item.
MESSAGE ID 'SV' TYPE 'E' NUMBER '050' WITH 'xxx'.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_werks LIKE mast-werks, "工厂
p_matnr LIKE mast-matnr, "物料
p_stlan LIKE mast-stlan, "用途
p_stlal LIKE mast-stlal, "可选bom
p_datuv LIKE stko-datuv OBLIGATORY DEFAULT sy-datum. "有效起始日期
PARAMETERS ctumode LIKE ctu_params-dismode DEFAULT 'N'.
PARAMETERS cupdate LIKE ctu_params-updmode DEFAULT 'L'.
SELECTION-SCREEN END OF BLOCK b1.
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
capid = 'PP01'
datuv = p_datuv
mtnrv = p_matnr
stlal = p_stlal
stlan = p_stlan
werks = p_werks
mktls = 'X'
IMPORTING
topmat = gs_cstmat
TABLES
stb = gt_stpox
EXCEPTIONS
alt_not_found = 1
call_invalid = 2
material_not_found = 3
missing_authorization = 4
no_bom_found = 5
no_plant_data = 6
no_suitable_bom_found = 7
OTHERS = 8.
IF sy-subrc EQ 0.
LOOP AT gt_stpox.
gt_item-selpo = gt_stpox-posnr.
gt_item-knnam = 'Z_COLOR_BLUE'.
APPEND gt_item.
ENDLOOP.
PERFORM bdc_dynpro USING 'SAPLCSDI' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RC29N-STLAL'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'RC29N-MATNR' gs_cstmat-matnr.
PERFORM bdc_field USING 'RC29N-WERKS' gs_cstmat-werks.
PERFORM bdc_field USING 'RC29N-STLAN' gs_cstmat-stlan.
PERFORM bdc_field USING 'RC29N-STLAL' gs_cstmat-stlal.
PERFORM bdc_field USING 'RC29N-DATUV' gs_cstmat-datuv.
LOOP AT gt_item.
PERFORM bdc_dynpro USING 'SAPLCSDI' '0150'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RC29P-POSNR(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SETP'.
PERFORM bdc_dynpro USING 'SAPLCSDI' '0708'.
PERFORM bdc_field USING 'BDC_OKCODE' '=CLWI'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RC29P-SELPO'.
PERFORM bdc_field USING 'RC29P-SELPO' gt_item-selpo. "行项目
PERFORM bdc_dynpro USING 'SAPLCSDI' '0150'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RC29P-AUSKZ(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=WIZU'.
PERFORM bdc_field USING 'RC29P-AUSKZ(01)' 'X'.
PERFORM bdc_dynpro USING 'SAPLCUKD' '0130'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RCUKD-KNNAM(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SICH'.
PERFORM bdc_field USING 'RCUKD-KNNAM(01)' gt_item-knnam. "相关性名称
PERFORM bdc_dynpro USING 'SAPLCUKD' '0130'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RCUKD-KNNAM(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SICH'.
ENDLOOP.
PERFORM bdc_dynpro USING 'SAPLCSDI' '0150'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RC29P-POSNR(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=FCBU'.
CALL TRANSACTION 'CS02' WITH AUTHORITY-CHECK USING bdcdata
MODE ctumode
UPDATE cupdate
MESSAGES INTO messtab.
PERFORM frm_bapi_commit TABLES messtab CHANGING lv_mtype lv_retmsg.
WRITE:lv_mtype,/ lv_retmsg.
ELSE.
WRITE:'E',/ '无BOM数据'.
ENDIF.
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM.
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
* IF fval <> nodata.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
* ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BAPI_COMMIT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LT_MESSTAB
*& <-- LS_DATA_MTYPE1
*& <-- LS_DATA_MCONT1
*&---------------------------------------------------------------------*
FORM frm_bapi_commit TABLES lt_return STRUCTURE bdcmsgcoll
CHANGING lv_mtype
lv_retmsg.
DATA: ls_return TYPE bdcmsgcoll .
DATA: lv_msg TYPE bapi_msg .
LOOP AT lt_return INTO ls_return WHERE msgtyp = 'E' OR msgtyp = 'A' .
CLEAR lv_msg .
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = ls_return-msgid
msgnr = ls_return-msgnr
msgv1 = ls_return-msgv1
msgv2 = ls_return-msgv2
msgv3 = ls_return-msgv3
msgv4 = ls_return-msgv4
IMPORTING
message_text_output = lv_msg.
IF NOT lv_msg IS INITIAL .
CONCATENATE lv_retmsg lv_msg INTO lv_retmsg SEPARATED BY space .
ENDIF .
ENDLOOP .
IF sy-subrc EQ 0 .
lv_mtype = 'E' . lv_retmsg = 'BOM相依性分配失败' .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
ELSE.
lv_mtype = 'S' . lv_retmsg = 'BOM相依性分配成功' .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF .
ENDFORM.
post SAP-Garson
原文链接:https://blog.csdn.net/qq_38238303/article/details/122342763文章来自于网络,如果侵犯了您的权益,请联系站长删除!