用户提了每月月底自动开启下个月物料账期的需求。我在网上找了下发现也有同学,实现了这个自动打开物料周期的功能,但不是我这种方式。我没有找到对应的BAPI,所以用了SHDB 录屏的方式来实现的。之前一直没有注意RACOMMIT 这参数,所以一直程序调用不成功,调试了好久,才发现是RACOMMIT 这参数没有设置的原因。因为这个事务代码的调用是没有按保存按钮的,所以要把RACOMMIT 这参数 = “X” 才会有一个提交保存的动作。
REPORT zmmpv_auto.
DATA: last_1_day TYPE sy-datum,
lv_month TYPE t009y-periv,
lv_year TYPE t009y-gjahr,
lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2.
START-OF-SELECTION.
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
day_in = sy-datum
IMPORTING
last_day_of_month = last_1_day.
CHECK last_1_day = sy-datum. " 如果当天不是最后一天
* Batchinputdata of single transaction
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
* messages of call transaction
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
* error session opened (' ' or 'X')
DATA: e_group_opened.
* message texts
TABLES: t100.
PERFORM bdc_dynpro USING 'RMMMPERI' '1000'.
PERFORM bdc_field USING 'BDC_CURSOR'
'I_LFMON'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ONLI'.
PERFORM bdc_field USING 'I_VBUKR'
'1000'.
PERFORM bdc_field USING 'I_BBUKR'
'1100'.
PERFORM bdc_field USING 'I_LFMON'
last_1_day+4(2)..
PERFORM bdc_field USING 'I_LFGJA'
last_1_day(4).
PERFORM bdc_field USING 'I_XCOMP'
'X'.
PERFORM bdc_transaction TABLES messtab USING 'MMPV' .
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.
*----------------------------------------------------------------------*
* Start new transaction according to parameters *
*----------------------------------------------------------------------*
FORM bdc_transaction TABLES messtab USING tcode.
DATA: l_mstring(480).
DATA: l_subrc LIKE sy-subrc.
DATA: lt_options TYPE TABLE OF ctu_params,
ls_options TYPE ctu_params.
ls_options-dismode = 'N'. "设置显示模式为'N'(无显示)
ls_options-updmode = 'S'. "设置更新模式为'S'(同步更新)
ls_options-racommit = 'X'. "设置RACOMMIT为'X'(提交后不等待)" 这个是关键没有这部程序调用不成功
REFRESH messtab.
CALL TRANSACTION tcode USING bdcdata
" MODE 'A' "A: show all dynpros
"E: show dynpro on error only
"N: do not display dynpro
" UPDATE 'L'
OPTIONS FROM ls_options
"S: synchronously
"A: asynchronously
"L: local
"SELECTION-SCREEN END OF LINE.
MESSAGES INTO messtab.
l_subrc = sy-subrc.
" IF smalllog <> 'X'.
WRITE: / 'CALL_TRANSACTION',
tcode,
'returncode:'(I05),
l_subrc,
'RECORD:',
sy-index.
SKIP.
" ENDIF.
REFRESH bdcdata.
ENDFORM.