*批量开启物料账期源代码
&---------------------------------------------------------------------*
*& Report ZBATCH_MMPV
*&---------------------------------------------------------------------*
*& BDC调用MMPV批量开物料帐账期
*&---------------------------------------------------------------------*
REPORT ZBATCH_MMPV .
TABLES:t000, marv.
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF messtab OCCURS 0.
INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF messtab.
DATA: BEGIN OF itab_log OCCURS 0,
message(132) TYPE c,
END OF itab_log.
DATA: datum TYPE sy-datum.
PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY MEMORY ID buk,
p_frdat TYPE sy-datum ,
p_todat TYPE sy-datum ,
p_mode LIKE ctu_params-dismode AS LISTBOX DEFAULT 'E'
VISIBLE LENGTH 16 OBLIGATORY .
INITIALIZATION.
CONCATENATE sy-datum(6) '01' INTO p_todat.
AT SELECTION-SCREEN OUTPUT.
%_p_bukrs_%_app_%-text = '公司代码'.
%_p_frdat_%_app_%-text = '当前期间'.
%_p_todat_%_app_%-text = '开到期间'.
%_p_mode_%_app_%-text = 'BDC运行模式'.
AT SELECTION-SCREEN ON p_bukrs.
ON CHANGE OF p_bukrs.
SELECT SINGLE * FROM marv
WHERE bukrs = p_bukrs.
IF sy-subrc = 0.
CONCATENATE marv-lfgja marv-lfmon '01' INTO p_frdat.
ELSE.
MESSAGE e000(oo) WITH '公司代码' p_bukrs '不存在物料帐数据'.
ENDIF.
LEAVE SCREEN.
ENDON.
START-OF-SELECTION.
IF p_frdat IS INITIAL OR p_frdat = '' OR
p_todat IS INITIAL OR p_todat = ''.
MESSAGE e000(oo) WITH '日期不可以为空'.
ENDIF.
SELECT SINGLE * FROM t000
WHERE mandt = sy-mandt AND
cccategory = 'P'.
IF sy-subrc = 0.
MESSAGE s000(oo) WITH '不可以在生产系统使用本程序'.
RETURN.
ENDIF.
p_frdat = p_frdat + 32.
CONCATENATE p_frdat(6) '01' INTO datum.
WHILE datum(6) <= p_todat(6).
PERFORM bdc.
datum = datum + 32.
datum+6(2) = '01'.
ENDWHILE.
MESSAGE S000(oo) WITH '完毕,请使用MMRV查看结果'.
LOOP AT itab_log.
WRITE / itab_log.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form bdc
*&---------------------------------------------------------------------*
FORM bdc.
DATA: option TYPE ctu_params .
option-dismode = p_mode.
option-racommit = 'X'.
CLEAR: bdcdata,bdcdata[].
PERFORM bdc_dynpro USING 'RMMMPERI' '1000'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ONLI'.
PERFORM bdc_field USING 'I_VBUKR' p_bukrs.
PERFORM bdc_field USING 'I_BBUKR' p_bukrs.
PERFORM bdc_field USING 'I_DATUM' datum.
PERFORM bdc_dynpro USING 'SAPMSSY0' '0120'.
PERFORM bdc_field USING 'BDC_OKCODE' '=&F03'.
PERFORM bdc_dynpro USING 'RMMMPERI' '1000'.
PERFORM bdc_field USING 'BDC_OKCODE' '/EE'.
CALL TRANSACTION 'MMPV' USING bdcdata
OPTIONS FROM option MESSAGES INTO messtab.
LOOP AT messtab.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = messtab-msgid
msgnr = messtab-msgnr
msgv1 = messtab-msgv1
msgv2 = messtab-msgv2
msgv3 = messtab-msgv3
msgv4 = messtab-msgv4
IMPORTING
message_text_output = itab_log-message.
APPEND itab_log.
CLEAR itab_log.
ENDLOOP.
ENDFORM. "bdc
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
CONDENSE bdcdata-fval.
APPEND bdcdata.
ENDFORM. "BDC_FIELD