SHDB 录屏
DATA: BEGIN OF ls_data, matnr TYPE mara-matnr, " 物料 werks TYPE marc-werks, " 工厂 verid TYPE mkal-verid, " 生产版本 adatu TYPE mkal-adatu, " 有效期自 bdatu TYPE mkal-bdatu, " 有效期至 stlal TYPE mkal-stlal, " 最小批量大小 stlan TYPE mkal-stlan, " 最大批量大小 END OF ls_data.ls_data = VALUE #( matnr = 'EODJ30556-A01' werks = '1000' verid = '010' adatu = '20220614' bdatu = '20220615' stlal = '10' stlan = '5')." BDC 创建生产版本DATA: lt_bdcdata TYPE TABLE OF bdcdata, " BDC执行内表 lt_msgtab TYPE TABLE OF bdcmsgcoll, " BDC返回信息表 lv_message TYPE string.DATA: lc_mode TYPE c VALUE 'A'. " BDC运行模式" SHDB 录屏" bdc_dynproAPPEND VALUE #( program = 'SAPLCMFV' dynpro = '1000' dynbegin = 'X' ) TO lt_bdcdata." bdc fieldAPPEND VALUE #( fnam = 'MKAL-WERKS' fval = |{ ls_data-matnr }| ) TO lt_bdcdata. " 工厂APPEND VALUE #( fnam = 'MKAL-MATNR' fval = |{ ls_data-werks }| ) TO lt_bdcdata. " 物料APPEND VALUE #( fnam = 'MKAL_ADMIN-STTAG' fval = |{ sy-datum }| ) TO lt_bdcdata.APPEND VALUE #( fnam = 'BDC_OKCODE' fval = '=ENTE' ) TO lt_bdcdata.APPEND VALUE #( program = 'SAPLCMFV' dynpro = '1000' dynbegin = 'X' ) TO lt_bdcdata.APPEND VALUE #( fnam = 'MKAL_EXPAND-MATNR(01)' fval = |{ ls_data-matnr }| ) TO lt_bdcdata. " 物料APPEND VALUE #( fnam = 'MKAL_EXPAND-VERID(01)' fval = |{ ls_data-verid }| ) TO lt_bdcdata. " 生产版本APPEND VALUE #( fnam = 'MKAL_EXPAND-TEXT1(01)' fval = |Generated Version| ) TO lt_bdcdata.APPEND VALUE #( fnam = 'MKAL_EXPAND-ADATU(01)' fval = |{ ls_data-adatu }| ) TO lt_bdcdata. " 有效期自APPEND VALUE #( fnam = 'MKAL_EXPAND-BDATU(01)' fval = |{ ls_data-bdatu }| ) TO lt_bdcdata. " 有效期至APPEND VALUE #( fnam = 'MKAL_EXPAND-STLAL(01)' fval = |{ ls_data-stlal }| ) TO lt_bdcdata. " 最小批量大小APPEND VALUE #( fnam = 'MKAL_EXPAND-STLAN(01)' fval = |{ ls_data-stlan }| ) TO lt_bdcdata. " 最大批量大小APPEND VALUE #( fnam = 'BDC_OKCODE' fval = '=ENTE' ) TO lt_bdcdata.APPEND VALUE #( program = 'SAPLCMFV' dynpro = '1000' dynbegin = 'X' ) TO lt_bdcdata.APPEND VALUE #( fnam = 'BDC_OKCODE' fval = '=SAVE' ) TO lt_bdcdata.CALL TRANSACTION 'C223' " BDC调用的事务码 USING lt_bdcdata " BDC执行内表 MODE lc_mode " BDC运行模式 MESSAGES INTO lt_msgtab " BDC返回信息表 UPDATE 'S'. " 批导更新模式(A = '异步',S = '同步')LOOP AT lt_msgtab INTO DATA(ls_msgtab) WHERE msgtyp = 'E' OR msgtyp = 'A'. EXIT.ENDLOOP.IF sy-subrc = 0. WRITE / 'ERROR' COLOR COL_NEGATIVE.ELSE. WRITE / 'SUCCESS' COLOR COL_POSITIVE.ENDIF.WRITE /.LOOP AT lt_msgtab INTO ls_msgtab. MESSAGE ID ls_msgtab-msgid TYPE ls_msgtab-msgtyp NUMBER ls_msgtab-msgnr WITH ls_msgtab-msgv1 ls_msgtab-msgv2 ls_msgtab-msgv3 ls_msgtab-msgv4 INTO lv_message. WRITE / lv_message .ENDLOOP.
FUNCTION 函数
*&---------------------------------------------------------------------**& Report ZSLTEST02*&---------------------------------------------------------------------**&*&---------------------------------------------------------------------*REPORT zsltest02.DATA: BEGIN OF ls_data, matnr TYPE mara-matnr, " 物料 werks TYPE marc-werks, " 工厂 verid TYPE mkal-verid, " 生产版本 adatu TYPE mkal-adatu, " 有效期自 bdatu TYPE mkal-bdatu, " 有效期至 stlal TYPE mkal-stlal, " 最小批量大小 stlan TYPE mkal-stlan, " 最大批量大小 END OF ls_data.ls_data = VALUE #( matnr = 'EODJ30556-A01' werks = '1000' verid = '010' adatu = '20220614' bdatu = '20220615' stlal = '10' stlan = '5').SELECT SINGLE rc~matnr, rc~werks, rc~dismm, ra~disst FROM marc AS rc LEFT JOIN mara AS ra ON ra~matnr = rc~matnr WHERE rc~matnr = @ls_data-matnr AND rc~werks = @ls_data-werks INTO @DATA(ls_more).DATA: ls_mkal TYPE mkal, lt_mkal TYPE TABLE OF mkal.DATA: lt_check_result TYPE TABLE OF mkal_result_tab.ls_mkal-matnr = ls_data-matnr.ls_mkal-werks = ls_data-werks.ls_mkal-verid = ls_data-verid.ls_mkal-text1 = 'Generated Version'.ls_mkal-adatu = ls_data-adatu.ls_mkal-bdatu = ls_data-bdatu.ls_mkal-stlal = ls_data-stlal.ls_mkal-stlan = ls_data-stlan." ... 其他字段略ls_mkal-prfg_f = ls_data-stlal. " 任务清单 1:绿灯ls_mkal-prfg_s = ls_data-stlan. " 物料清单 1:绿灯ls_mkal-prdat = sy-datum.CALL FUNCTION 'CM_FV_MKAL_CONSISTENCY_CHECK' EXPORTING mkal_imp = ls_mkal TABLES result_tab = lt_check_result EXCEPTIONS mkal_err = 1 plko_err = 2 stko_err = 3 other_err = 4 OTHERS = 5.LOOP AT lt_check_result INTO DATA(ls_check_result). IF ls_check_result-object_status NE space AND ls_check_result-object = 'S'. WRITE / 'SUCCESS' COLOR COL_POSITIVE. ENDIF. IF ls_check_result-object_status NE space AND ls_check_result-object = 'F'. WRITE / 'ERROR' COLOR COL_NEGATIVE. STOP. ENDIF.ENDLOOP.APPEND ls_mkal TO lt_mkal.CLEAR ls_mkal.CALL FUNCTION 'MKAL_SAVE' EXPORTING dismm = ls_more-dismm disst = ls_more-disst flgmkal_exi = '' matnr = ls_data-matnr werks = ls_data-werks TABLES vmkal = lt_mkal EXCEPTIONS mkal_delete_error = 1 mkal_insert_error = 2 OTHERS = 3.IF sy-subrc <> 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. MESSAGE 'SUCCESS' TYPE 'S' DISPLAY LIKE 'E'.ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. MESSAGE 'SUCCESS' TYPE 'S'.ENDIF.