BDC批量修改物料描述

一、定义变量

type-POOLs:TRUXS,slis.

TYPES: BEGIN OF ty_input ,
        matnr  TYPE  mara-matnr ,  " 物料号
        maktx  TYPE  makt-maktx,"物料描述
      END OF ty_input .

DATA: gt_input TYPE STANDARD TABLE OF ty_input.
FIELD-SYMBOLS: <gs_input> TYPE ty_input.         
DATA: gt_bdcdata TYPE STANDARD TABLE OF bdcdata,"bdc
      gt_msg TYPE STANDARD TABLE OF bdcmsgcoll,"消息
      gs_msg TYPE bdcmsgcoll."消息

TYPES: BEGIN OF ty_message ,
        matnr  TYPE  mara-matnr ,  " 物料号
        maktx TYPE makt-maktx, "描述
        msg    TYPE  string ,
      END OF ty_message .

DATA: gt_message TYPE STANDARD TABLE OF ty_message,
      gs_message TYPE ty_message.
*alv
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv.
DATA: gs_fieldcat TYPE LINE OF slis_t_fieldcat_alv.
DATA: gs_layout TYPE slis_layout_alv.


 

二、屏幕元素

SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE text-001.      "选择文件路径
PARAMETERS: p_ufile LIKE rlgrap-filename OBLIGATORY MEMORY ID p_ufile.
SELECTION-SCREEN END OF BLOCK bk1.

三、调用代码

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ufile.
  PERFORM get_filepath.

START-OF-SELECTION.

  PERFORM upload_data. "上载文本资料

  PERFORM f_bdc.

END-OF-SELECTION.

  PERFORM f_alv_fieldcat.
  PERFORM f_layout.
  PERFORM f_display.

四、调用的form

FORM get_filepath .

  CALL FUNCTION 'TB_LIMIT_WS_FILENAME_GET'
    EXPORTING
      def_path         = ''
      mask             = ',Excel Files,*.xls,All Files,*.*.'
      title            = 'Select the File'
    IMPORTING
      filename         = p_ufile
    EXCEPTIONS
      selection_cancel = 1
      selection_error  = 2
      OTHERS           = 3.
  IF sy-subrc <> 0.
    MESSAGE '请输入文件名' TYPE 'S'.
  ELSEIF sy-subrc = 0.
    MESSAGE '成功' TYPE 'S'.
  ENDIF.

ENDFORM.

 

FORM upload_data .

  DATA:t_raw_data TYPE truxs_t_text_data.

  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'    "读取excel到sap的函数
    EXPORTING
      i_line_header        = 'X'
      i_tab_raw_data       = t_raw_data
      i_filename           = p_ufile
    TABLES
      i_tab_converted_data = gt_input
    EXCEPTIONS
      conversion_failed    = 1
      OTHERS               = 2.
  IF sy-subrc <> 0.
  ENDIF.


  IF gt_input IS INITIAL.
    MESSAGE '无数据' TYPE 'S' DISPLAY LIKE 'E'.
  ENDIF.

ENDFORM.                    " UPLOAD_DATA


FORM f_bdc .

  DATA: inx TYPE sy-tabix.

  LOOP AT gt_input ASSIGNING <gs_input>.

    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
      EXPORTING
        input        = <gs_input>-matnr
      IMPORTING
        output       = <gs_input>-matnr
      EXCEPTIONS
        length_error = 1
        OTHERS       = 2.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.

    FREE:gt_bdcdata,gt_msg.


"这些步骤都是根据bdc里面生成的来写的,类似BDC_SUBSCR之类的可以省去不写

    PERFORM f_bdcdata TABLES gt_bdcdata  USING : 'SAPLMGMM' '0060' 'X' '' ''."打开屏幕
    PERFORM f_bdcdata TABLES gt_bdcdata  USING : '' '' '' 'BDC_CURSOR' 'RMMG1-MATNR'. "光标
    PERFORM f_bdcdata TABLES gt_bdcdata  USING : '' '' '' 'BDC_OKCODE' '=ENTR'."操作按钮(回车)
    PERFORM f_bdcdata TABLES gt_bdcdata  USING : '' '' '' 'RMMG1-MATNR' <gs_input>-matnr."输入数据(物料号)
    "PERFORM f_bdcdata TABLES gt_bdcdata  USING : '' '' '' 'R62CLORD-FLG_OVIEW' 'X'.

    PERFORM f_bdcdata TABLES gt_bdcdata  USING : 'SAPLMGMM' '0070' 'X' '' ''."打开屏幕
    PERFORM f_bdcdata TABLES gt_bdcdata  USING : '' '' '' 'BDC_OKCODE' '=ENTR'."操作按钮(回车)
    PERFORM f_bdcdata TABLES gt_bdcdata  USING : '' '' '' 'MSICHTAUSW-KZSEL(01)' 'X'."选择视图01(基本数据)
   " PERFORM f_bdcdata TABLES gt_bdcdata  USING : '' '' '' 'R62CLORD-FLG_OVIEW' 'X'.

    PERFORM f_bdcdata TABLES gt_bdcdata  USING : 'SAPLMGMM' '4004' 'X' '' ''.
    PERFORM f_bdcdata TABLES gt_bdcdata  USING : '' '' '' 'BDC_OKCODE' '=BU'."操作组件按钮
    PERFORM f_bdcdata TABLES gt_bdcdata  USING : '' '' '' 'MAKT-MAKTX' <gs_input>-maktx."输入数据(物料描述)


    FREE: gt_msg.
    CALL TRANSACTION 'MM02' USING gt_bdcdata
                            MODE  'N'    "执行事务,传递bdc参数,模式为后台模式
                            "MODE  'A'       "前台模式,用户可以看到执行的过程,需要自己点enter键
                            MESSAGES INTO gt_msg.  "message可省去
    READ TABLE gt_msg INTO gs_msg WITH KEY msgtyp = 'E'.
    IF sy-subrc = 0.
      MOVE-CORRESPONDING <gs_input> TO gs_message.
      LOOP AT gt_msg INTO gs_msg.
        DATA: return TYPE  bapiret2.
        CLEAR: return.
        PERFORM f_msg USING gs_msg-msgtyp gs_msg-msgid gs_msg-msgnr gs_msg-msgv1 gs_msg-msgv2 gs_msg-msgv3 gs_msg-msgv4 CHANGING return.
        IF return-message IS NOT INITIAL.
          gs_message-msg = return-message.
        ENDIF.
        APPEND gs_message TO gt_message.
      ENDLOOP.
      ROLLBACK WORK.
    ELSE.
      CLEAR: gs_message.
      MOVE-CORRESPONDING <gs_input> TO gs_message.
      gs_message-msg = 'OK'.
      APPEND gs_message TO gt_message.
      COMMIT WORK.
    ENDIF.


  ENDLOOP.

 

ENDFORM.

FORM f_alv_fieldcat .

  DATA: pos TYPE i.


  DEFINE fieldcat.
    clear gs_fieldcat.
    pos = pos + 1.
    gs_fieldcat-col_pos = pos.
    gs_fieldcat-fieldname = &1.
    gs_fieldcat-ref_tabname = &2.
    gs_fieldcat-ref_fieldname = &3.
*    gs_fieldcat-seltext_l = &4.
*    gs_fieldcat-no_zero = &5.
*    gs_fieldcat-key = &6.
    gs_fieldcat-just = 'L'.
    append gs_fieldcat to gt_fieldcat.
  END-OF-DEFINITION.


  fieldcat 'MATNR' 'MARA' 'MATNR'.
  fieldcat 'MAKTX' 'MAKT' 'MAKTX' .
  fieldcat 'MSG' '' '消息' .

ENDFORM.

FORM f_layout .
  gs_layout-zebra = 'X'.
  gs_layout-colwidth_optimize = 'X'.
*  gs_layout-box_fieldname = 'BOX'.
ENDFORM.

FORM f_display .

*  可以保存格式
  DATA:gs_variant   TYPE disvariant.
  gs_variant-report = sy-repid.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program          = sy-repid
      i_save                      = 'A'         "可以保存格式
      is_variant                  = gs_variant  "LAYOUT参数 可以保存格式
      is_layout                   = gs_layout
      it_fieldcat                 = gt_fieldcat
    TABLES
      t_outtab                    = gt_message
    EXCEPTIONS
      program_error               = 1
      OTHERS                      = 2.

ENDFORM.


FORM f_msg USING itype icl inumber ipar1 ipar2 ipar3 ipar4 CHANGING return.

  DATA: type          TYPE  bapireturn-type,
        cl            TYPE  sy-msgid,
        number        TYPE  sy-msgno,
        par1          TYPE  sy-msgv1,
        par2          TYPE  sy-msgv2,
        par3          TYPE  sy-msgv3,
        par4          TYPE  sy-msgv4.

  CLEAR: type,cl,number,par1,par2,par3,par4.

  type   = itype.
  cl     = icl.
  number = inumber.
  par1   = ipar1.
  par2   = ipar2.
  par3   = ipar3.
  par4   = ipar4.

  CALL FUNCTION 'BALW_BAPIRETURN_GET2'
    EXPORTING
      type   = type
      cl     = cl
      number = number
      par1   = par1
      par2   = par2
      par3   = par3
      par4   = par4
    IMPORTING
      return = return.

ENDFORM.

FORM f_bdcdata TABLES gt_bdcdata STRUCTURE bdcdata
                USING p_program
                      p_dynpro
                      p_dynbegin
                      p_fnam
                      p_fval.
  DATA: gs_bdcdata TYPE bdcdata.

  CLEAR gs_bdcdata.

  gs_bdcdata-program = p_program.
  gs_bdcdata-dynpro = p_dynpro.
  gs_bdcdata-dynbegin = p_dynbegin.
  gs_bdcdata-fnam = p_fnam.
  gs_bdcdata-fval = p_fval.
  APPEND gs_bdcdata TO gt_bdcdata.

ENDFORM.
原文地址:https://www.cnblogs.com/cindyLu/p/3397153.html