MR21批量修改价格

前两天吃中饭时同事说MR21修改价格用LSMW导入,每次只能导入一条商品价格,而每一个商品价格的修改都会产生一个凭证,问是否能批量导入。先去找了下BAPI,看了下BAPI_MATVAL_PRICE_CHANGE和BAPI_M_REVAL_CREATEPRICECHANGE两个BAPI,发现前一个每次只能修改一个商品价格,后一个根本就跑不起来,不知道咋回事,只能回头用SHDB解决问题。

  REPORT zmr21
       NO STANDARD PAGE HEADING LINE-SIZE 255.

INCLUDE bdcrecx1.

PARAMETERS: dataset(132) LOWER CASE.
***    DO NOT CHANGE the generated data section DO NOT CHANGE    ***
*
  If it is nessesary to change the data section use the rules:
  1.) Each definition of field exists of two lines
  2.) The first line shows exactly the comment
      '* data element: followed with the data element
      which describes the field.
      If you don't have data element use the
      comment without data element name
  3.) The second line shows the fieldname of the
      structure, the fieldname must consist of
      fieldname and optional the character '_' and
      three numbers and the field length in brackets
  4.) Each field must be type C.
*
*** Generated data section with specific formatting DO NOT CHANGE  ***
DATA: BEGIN OF record OCCURS 0,
data element: BUDAT
        budat_001(010),
data element: BUKRS
        bukrs_002(004),
data element: WERKS_D
        werks_003(004),
data element: SCREEN_VARIANT
        screen_variant_004(030),
data element: SCREEN_VARIANT
        screen_variant_005(030),
data element: MATNR
        matnr_01_006(018),
data element: VALPR
        newvalpr_01_007(015),

      END OF record.

*** End generated data section ***

START-OF-SELECTION.

 PERFORM open_dataset USING dataset.
  PERFORM of_getexcel.
  PERFORM open_group.
  PERFORM of_processdata.
  PERFORM close_group.
 PERFORM close_dataset USING dataset.

FORM of_processdata.
  DATA: li_cur TYPE VALUE 0,
      li_mod TYPE i,
      ls_fname(30) TYPE c,
      ls_temp(2) TYPE c,
      li_len TYPE i,
      li_inex TYPE VALUE 0.
  li_mod LINES( record ).
  break ypcheng.
  LOOP AT record.
    li_cur li_cur 1.
    li_inex li_inex 1.
    IF li_inex 1.
      PERFORM bdc_dynpro      USING 'SAPRCKM_MR21' '0201'.
      PERFORM bdc_field       USING 'BDC_CURSOR'  'MR21HEAD-WERKS'.
      PERFORM bdc_field       USING 'MR21HEAD-BUDAT' record-budat_001.
      PERFORM bdc_field       USING 'MR21HEAD-BUKRS' record-bukrs_002.
      PERFORM bdc_field       USING 'MR21HEAD-WERKS' record-werks_003.
    ENDIF.
    MOVE li_cur TO ls_temp.
    li_len STRLEN( ls_temp ).
    IF li_len 1.
      CONCATENATE '0' ls_temp INTO ls_temp.
    ENDIF.
    PERFORM bdc_dynpro      USING 'SAPRCKM_MR21' '0201'.
    PERFORM bdc_field       USING 'BDC_OKCODE' '=ENTR'.
    PERFORM bdc_field USING 'MR21HEAD-SCREEN_VARIANT' 'MR21_LAGERMATERIAL_0250'.
    CONCATENATE 'CKI_MR21_0250-MATNR(' ls_temp ')' INTO ls_fname.
    PERFORM bdc_field       USING ls_fname record-matnr_01_006.
    CONCATENATE 'CKI_MR21_0250-NEWVALPR(' ls_temp ')' INTO ls_fname.
    PERFORM bdc_field       USING ls_fname record-newvalpr_01_007.
    li_mod li_cur MOD 9.
    IF li_mod 0.
      CLEAR li_cur.
      PERFORM bdc_dynpro      USING 'SAPRCKM_MR21' '0201'.
      PERFORM bdc_field USING 'BDC_OKCODE' '=DOWN'.
    ENDIF.
  ENDLOOP.
  PERFORM bdc_dynpro USING 'SAPRCKM_MR21' '0201'.
  PERFORM bdc_field USING 'BDC_OKCODE' '=SAVE'.
  PERFORM bdc_transaction USING 'MR21'.
ENDFORM.                    "of_processdata

*&---------------------------------------------------------------------*
*&      Form  of_getexcel
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
FORM of_getexcel.
  DATA: filenm TYPE rlgrap-filename VALUE 'e:\mr21.xls'.
  FIELD-SYMBOLS: <fs1>.
  DATA: BEGIN OF iexcel OCCURS 0.
          INCLUDE STRUCTURE alsmex_tabline.
  DATA: END OF iexcel.
  DATA: ls_colname TYPE string,
        li_currow TYPE i.
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                filenm
      i_begin_col             1
      i_begin_row             1
      i_end_col               14
      i_end_row               30000
    TABLES
      intern                  iexcel
    EXCEPTIONS
      inconsistent_parameters 1
      upload_ole              2
      OTHERS                  3.
  IF sy-subrc <> 0.
    WRITE: 'EXCEL UPLOAD FAILED ', filenm, sy-subrc.
  ELSE.
    SORT iexcel BY row col.
    DELETE iexcel WHERE row '0001'.
    LOOP AT iexcel.
      CASE iexcel-col.
        WHEN '0001'.
          record-budat_001 iexcel-value.
        WHEN '0002'.
          record-bukrs_002 iexcel-value.
        WHEN '0003'.
          record-werks_003 iexcel-value.
        WHEN '0004'.
          record-matnr_01_006 iexcel-value.
        WHEN '0005'.
          record-newvalpr_01_007 iexcel-value.
      ENDCASE.
      AT END OF row.
        APPEND record.
        CLEAR: record.
      ENDAT.
    ENDLOOP.
  ENDIF.
ENDFORM.                    "of_getexcel

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值