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_dynpro
APPEND VALUE #( program = 'SAPLCMFV' dynpro = '1000' dynbegin = 'X' ) TO lt_bdcdata.
" bdc field
APPEND 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.