如何实现自动开启物料周期(录屏调用事务 MMPV)的程序?

        用户提了每月月底自动开启下个月物料账期的需求。我在网上找了下发现也有同学,实现了这个自动打开物料周期的功能,但不是我这种方式。我没有找到对应的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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值