赛跑网

 找回密码
 注册

QQ登录

只需一步,快速开始

快捷登录

查看: 3463|回复: 9

一个批量创建物料的BDC程序

  [复制链接]
发表于 2011-7-17 22:53:19 | 显示全部楼层 |阅读模式
本帖最后由 wyzlt216123 于 2011-7-18 11:04 编辑

最近参照一些资料,总结了BDC的思路,这里共享一段代码,可以实现简单的BDC处理,和刚刚接触abap的朋友们一起学习下!(注:要上传的文件,为一个txt文档),代码中往bdcdata中加录屏所产生的数据的前提是通过录屏产生,在录屏时,只填写了物料描述和计量单位!至于要实现更为复杂的BDC处理,还请高手们,多多指导我们啊!!
简单的BDC代码
*定义存储录屏数据的内部表
DATA it_bdcdata TYPE STANDARD TABLE OF bdcdata.
DATA wa_bdcdata TYPE bdcdata.
*定义出消息的内部表
DATA it_bdcmsg TYPE STANDARD TABLE OF bdcmsgcoll.
DATA wa_bdcmsg TYPE bdcmsgcoll.
*如果用函数拼接消息,这个变量存储最后拼接好的变量
DATA g_message TYPE char200.
*要批量处理的数据存储的内表表
TYPES: BEGIN OF ty_upload,
             maktx(20)     TYPE c, "物料描述
         vrkme(4)      TYPE c, "计量单位
       END OF ty_upload.
DATA:it_upload TYPE STANDARD TABLE OF ty_upload.
DATA:wa_upload TYPE ty_upload.
PARAMETERS p_file TYPE rlgrap-filename OBLIGATORY.
*为屏幕定义的输出框添加搜索帮助
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
*动态选择要上传的文件
  PERFORM p_upload_data.
START-OF-SELECTION.
*上传数据到内部表
  PERFORM p_upload_table.
*批量导入数据
  PERFORM p_bdc_data.  
END-OF-SELECTION.
*输出处理消息
  PERFORM p_bdcmsg.
*&---------------------------------------------------------------------*
*&      Form  P_upload_data
*&---------------------------------------------------------------------*
FORM p_upload_data .
  DATA:  l_wk_rc        TYPE i,
           l_it_file     TYPE filetable,
           l_wa_ftbl     TYPE file_table.
  CLEAR: l_wk_rc.
  REFRESH: l_it_file.
  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      initial_directory       = 'C:'
    CHANGING
      file_table              = l_it_file
      rc                      = l_wk_rc
    EXCEPTIONS
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      not_supported_by_gui    = 4
      OTHERS                  = 5.
  IF sy-subrc = 0.
    READ TABLE l_it_file INDEX 1 INTO l_wa_ftbl.
    p_file = l_wa_ftbl-filename.
  ELSE.
    MESSAGE e999(fz) WITH 'Error for opening the dialog'.
  ENDIF.
ENDFORM.                    " P_upload_data
*&---------------------------------------------------------------------*
*&      Form  P_upload_table
*&---------------------------------------------------------------------*
FORM p_upload_table .
  DATA: l_filename TYPE string.
  l_filename = p_file.
  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename                      = l_filename
      filetype                      = 'ASC'
      has_field_separator           = 'X'
    TABLES
      data_tab                      = it_upload
   EXCEPTIONS
     file_open_error               = 1
     file_read_error               = 2
     no_batch                      = 3
     gui_refuse_filetransfer       = 4
     invalid_type                  = 5
     no_authority                  = 6
     unknown_error                 = 7
     bad_data_format               = 8
     header_not_allowed            = 9
     separator_not_allowed         = 10
     header_too_long               = 11
     unknown_dp_error              = 12
     access_denied                 = 13
     dp_out_of_memory              = 14
     disk_full                     = 15
     dp_timeout                    = 16
     OTHERS                        = 17            .
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.                    " P_upload_table
*&---------------------------------------------------------------------*
*&      Form  P_BDC_DATA
*&---------------------------------------------------------------------*
FORM p_bdc_data .
  LOOP AT it_upload INTO wa_upload.
*往bdcdata中加录屏所产生的数据
    PERFORM p_append_bdcdata USING:'SAPLMGMM' '0060' 'X' '' '',
                                   '' '' '' 'BDC_CURSOR' 'RMMG1-MATNR',
                                   '' '' '' 'BDC_OKCODE' '/00',
                                   '' '' '' 'RMMG1-MBRSH' 'M',
                                   '' '' '' 'RMMG1-MTART' 'VOLL',
                                   'SAPLMGMM' '0070' 'X' '' '',
                                   '' '' '' 'BDC_CURSOR' 'MSICHTAUSW-DYTXT(01)',
                                   '' '' '' 'BDC_OKCODE' '=ENTR',
                                   '' '' '' 'MSICHTAUSW-KZSEL(01' 'X',
                                   'SAPLMGMM' '4004' 'X' '' '',
                                   '' '' '' 'BDC_OKCODE' '=BU',
                                   '' '' '' 'MAKT-MAKTX' wa_upload-maktx,
                                   '' '' '' 'BDC_CURSOR' 'MARA-MEINS',
                                   '' '' '' 'MARA-MEINS' wa_upload-vrkme,
                                   '' '' '' 'MARA-MTPOS_MARA' 'VOLL'.

    CALL TRANSACTION 'MM01' USING it_bdcdata
                            MODE 'N'
                            MESSAGES INTO it_bdcmsg.
  ENDLOOP.

ENDFORM.                    " P_BDC_DATA
*&---------------------------------------------------------------------*
*&      Form  P_BDCMSG
*&---------------------------------------------------------------------*
FORM p_bdcmsg .
*函数MESSAGE_TEXT_BUILD实现将消息转化成文本,可以直接输出。
  LOOP AT it_bdcmsg INTO wa_bdcmsg.
    CLEAR g_message.
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'
      EXPORTING
        msgid               = wa_bdcmsg-msgid
        msgnr               = wa_bdcmsg-msgnr
        msgv1               = wa_bdcmsg-msgv1
        msgv2               = wa_bdcmsg-msgv2
        msgv3               = wa_bdcmsg-msgv3
        msgv4               = wa_bdcmsg-msgv4
      IMPORTING
        message_text_output = g_message.
    WRITE :/ wa_bdcmsg-msgtyp,g_message.
  ENDLOOP.
ENDFORM.                    " P_BDCMSG
*&---------------------------------------------------------------------*
*&      Form  p_append_bdcdata
*&---------------------------------------------------------------------*
FORM p_append_bdcdata  USING    p_program
                                p_dynpro
                                p_dynbegin
                                p_fnam
                                p_fval.
  CLEAR wa_bdcdata.
  wa_bdcdata-program  = p_program.
  wa_bdcdata-dynpro   = p_dynpro.
  wa_bdcdata-dynbegin = p_dynbegin.
  wa_bdcdata-fnam = p_fnam.
  wa_bdcdata-fval = p_fval.
  APPEND wa_bdcdata TO it_bdcdata.
ENDFORM.                    " p_append_bdcdata

最近访客

  • tbb1177
    2024-01-17
  • austin
    2022-03-23
  • chenc880
    2021-07-03




上一篇:[P3J14]FI的替代和检查
下一篇:学员如何听课
本楼点评(0) 收起
发表于 2011-7-17 23:36:01 | 显示全部楼层
自已写的?
本楼点评(0) 收起
 楼主| 发表于 2011-7-18 00:51:37 | 显示全部楼层
回复 2# admin


    是的,摸索了好几天!
本楼点评(0) 收起
发表于 2011-7-18 10:36:07 | 显示全部楼层
运行成功了?
本楼点评(0) 收起
 楼主| 发表于 2011-7-18 10:48:28 | 显示全部楼层
回复 4# admin


    成功了!代码是自己写的··
本楼点评(0) 收起
发表于 2011-7-18 12:45:02 | 显示全部楼层
回复 5# wyzlt216123


   
本楼点评(0) 收起
发表于 2013-2-5 16:50:04 | 显示全部楼层

本楼点评(0) 收起
发表于 2013-4-26 01:19:52 | 显示全部楼层

thanks

谢谢楼主楼主辛苦啦
本楼点评(0) 收起
发表于 2013-4-26 01:42:23 | 显示全部楼层

thanks

谢谢楼主楼主辛苦啦
本楼点评(0) 收起
发表于 2013-10-31 13:53:46 | 显示全部楼层
小白一个 顶一下
本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|联系我们|赛跑网 ( QQ:108519493QQfsq

GMT+8, 2024-5-5 23:16 , Processed in 0.303480 second(s), 63 queries .

Powered by 91SAP X3.4

© 2001-2023 91sap Team.

快速回复 返回顶部 返回列表