一个简单的BDC程序(Create Material)

*&---------------------------------------------------------------------*
*& Report  YH_BDC_MM01_V1
*&
*&---------------------------------------------------------------------*
REPORT  YH_BDC_MM01_V1 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 0 WITH HEADER LINE,"定义BDC内表
     msgtab LIKE BDCMSGCOLL OCCURS 0 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
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  --&gt  p1        text
*  *----------------------------------------------------------------------*
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
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  --&gt  p1        text
*  *----------------------------------------------------------------------*
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
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM. get_data_from_file tables datatab USING inputfile .
DATA: filename LIKE rlgrap-filename,
        datacont LIKE alsmex_tabline OCCURS 0 WITH HEADER LINE,
        maxcolno TYPE i.
  FIELD-SYMBOLS TYPE ANY.

  REFRESH datatab. CLEAR datatab.

  DO.
    ASSIGN COMPONENT sy-index OF STRUCTURE datatab TO .
    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 .
    = 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.

*&---------------------------------------------------------------------*
*&      Form  bdc_field
*&---------------------------------------------------------------------*
FORM. BDC_FIELD USING FNAM FVAL.
    CLEAR BDCDATA.
    BDCDATA-FNAM = FNAM.
    BDCDATA-FVAL = FVAL.
    APPEND BDCDATA.

ENDFORM.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13547743/viewspace-680397/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13547743/viewspace-680397/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值