Z_BDC

REPORT z_bdc NO STANDARD PAGE HEADING MESSAGE-ID zm001.
TABLES : t100.

DATA: BEGIN OF inputdata_str ,
         matnr(18),
         mbrsh(1),
         mtart(04),
         maktx(40),
         meins(03),
       END OF inputdata_str,
       basicdatatab LIKE inputdata_str OCCURS 100 WITH HEADER LINE.

DATA:bdcdata LIKE bdcdata OCCURS WITH HEADER LINE,"定义BDC内表
     msgtab  LIKE bdcmsgcoll OCCURS WITH HEADER LINE,"定义消息内表
     l_mstring(480).   "消息字符串

*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME.
PARAMETERS: filenam1(128) TYPE c.
SELECTION-SCREEN END OF BLOCK blk1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR filenam1.
  PERFORM choose_input_file USING filenam1.

AT SELECTION-SCREEN.
  PERFORM check_file_whether_exist USING filenam1.


START-OF-SELECTION.

  PERFORM get_data_from_file TABLES basicdatatab USING filenam1.

  LOOP AT basicdatatab INTO inputdata_str.
    PERFORM proces_update_data USING inputdata_str.
    CLEAR bdcdata[].     "清空BDCDATA的所有数据
  ENDLOOP.

  PERFORM list_return_message.

END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&      Form  choose_input_file
*&---------------------------------------------------------------------*
FORM choose_input_file USING pfile.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      def_filename     = '*.xls'
      def_path         = 'D:\'
      mask             ',*.xls.'
      mode             'O'
      title            'Choose Input file'(002)
    IMPORTING
      filename         = pfile
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           5.
ENDFORM.                    " choose_input_file
*&---------------------------------------------------------------------*
*&      Form  check_file_whether_exist
*&---------------------------------------------------------------------*
FORM check_file_whether_exist USING filename.
  DATA: inputfile TYPE string,
        result TYPE c.

  inputfile = filename.
  CALL METHOD cl_gui_frontend_services=>file_exist
    EXPORTING
      file                 = inputfile
    RECEIVING
      result               = result
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      wrong_parameter      = 3
      not_supported_by_gui = 4
      OTHERS               5.

  IF result IS INITIAL.
    MESSAGE e000 WITH 'File' inputfile '  does not exist'.
  ENDIF.
ENDFORM.                    " check_file_whether_exist
*&---------------------------------------------------------------------*
*&      Form  proces_update_data
*&---------------------------------------------------------------------*
FORM proces_update_data USING record LIKE basicdatatab.

  PERFORM bdc_dynpro      USING 'SAPLMGMM' '0060'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'RMMG1-MTART'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'RMMG1-MATNR'
                                record-matnr.
  PERFORM bdc_field       USING 'RMMG1-MBRSH'
                                record-mbrsh.
  PERFORM bdc_field       USING 'RMMG1-MTART'
                                record-mtart.
  PERFORM bdc_dynpro      USING 'SAPLMGMM' '0070'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'MSICHTAUSW-DYTXT(02)'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=ENTR'.
  PERFORM bdc_field       USING 'MSICHTAUSW-KZSEL(01)'
                                'X'.
  PERFORM bdc_field       USING 'MSICHTAUSW-KZSEL(02)'
                                'X'.
  PERFORM bdc_dynpro      USING 'SAPLMGMM' '4004'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'MAKT-MAKTX'
                                record-maktx.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'MARA-MEINS'.
  PERFORM bdc_field       USING 'MARA-MEINS'
                                record-meins.
  PERFORM bdc_field       USING 'MARA-MTPOS_MARA'
                                'NORM'.
  PERFORM bdc_dynpro      USING 'SAPLMGMM' '4004'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'MAKT-MAKTX'.
  PERFORM bdc_field       USING 'MAKT-MAKTX'
                                record-maktx.
  PERFORM bdc_dynpro      USING 'SAPLSPO1' '0300'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=YES'.
  CALL TRANSACTION'MM01' USING bdcdata MODE 'N' MESSAGES INTO msgtab.

ENDFORM.                    " proces_update_data
*&---------------------------------------------------------------------*
*&      Form  list_return_message
*&---------------------------------------------------------------------*
FORM list_return_message .
***输出系统消息
  WRITE : / '消息类型'20 '消息内容'.
  LOOP AT msgtab.
    SELECT SINGLE *
    FROM t100
    WHERE sprsl = msgtab-msgspra
      AND arbgb = msgtab-msgid
      AND msgnr = msgtab-msgnr.

    IF sy-subrc = 0.
      l_mstring = t100-text.
      IF l_mstring CS '&1'.
        REPLACE '&1' WITH msgtab-msgv1 INTO l_mstring.
        REPLACE '&2' WITH msgtab-msgv2 INTO l_mstring.
        REPLACE '&3' WITH msgtab-msgv3 INTO l_mstring.
        REPLACE '&4' WITH msgtab-msgv4 INTO l_mstring.
      ELSE.
        REPLACE '&' WITH msgtab-msgv1 INTO l_mstring.
        REPLACE '&' WITH msgtab-msgv2 INTO l_mstring.
        REPLACE '&' WITH msgtab-msgv3 INTO l_mstring.
        REPLACE '&' WITH msgtab-msgv4 INTO l_mstring.
      ENDIF.
      CONDENSE l_mstring.
      WRITE: / msgtab-msgtyp, 20 l_mstring.
    ELSE.
      WRITE: / msgtab.
    ENDIF.
  ENDLOOP.

ENDFORM.                    " list_return_message
*&---------------------------------------------------------------------*
*&      Form  get_data_from_file
*&---------------------------------------------------------------------*
FORM get_data_from_file TABLES datatab USING inputfile .
  DATA: filename LIKE rlgrap-filename,
          datacont LIKE alsmex_tabline OCCURS WITH HEADER LINE,
          maxcolno TYPE i.
  FIELD-SYMBOLS <fs> TYPE ANY.

  REFRESH datatab. CLEAR datatab.

  DO.
    ASSIGN COMPONENT sy-index OF STRUCTURE datatab TO <fs>.
    IF sy-subrc NE 0.
      maxcolno = sy-index - 1.
      EXIT.
    ENDIF.
  ENDDO.

  filename = inputfile.
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = filename
      i_begin_col             = 1
      i_begin_row             = 3
      i_end_col               = maxcolno
      i_end_row               = 1000
    TABLES
      intern                  = datacont
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  3.

  LOOP AT datacont.
    AT NEW row.
      CLEAR datatab.
    ENDAT.
    ASSIGN COMPONENT datacont-col OF STRUCTURE datatab TO <fs>.
    <fs> = datacont-value.
    AT END OF row.
      APPEND datatab. CLEAR datatab.
    ENDAT.
  ENDLOOP.


ENDFORM.                    " get_data_from_file
*&---------------------------------------------------------------------*
*&      Form  bdc_dynpro
*&---------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.                    "BDC_DYNPRO
*&---------------------------------------------------------------------*
*&      Form  bdc_field
*&---------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
  CLEAR bdcdata.
  bdcdata-fnam = fnam.
  bdcdata-fval = fval.
  APPEND bdcdata.

ENDFORM.                    "BDC_FIELD
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值