BDC笔记

REPORT ZTS_XSY_TEST17.
INCLUDE ZTS_XSY_TEST17TOP.
INCLUDE ZTS_XSY_TEST17F01.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILES."F4帮助
  PERFORM GET_FILENAME.

START-OF-SELECTION.
*&---------------------------------------------------------------------*
*&  数据导入
*&---------------------------------------------------------------------*
*         BANFN TYPE EBAN-BANFN,          "采购申请编号
*         BNFPO TYPE RM06B-BNFPO,         "出现在一览屏幕上的字段
*         TCSELFLAG TYPE RM06B-TCSELFLAG, "表控制的检查框
*         TXZ01 TYPE EBAN-TXZ01,          "短文本
*         LGORT TYPE EBAN-LGORT,          "库存地点
*         MENGE TYPE EBAN-MENGE,          "采购申请数量
*         EEIND TYPE RM06B-EEIND,         "交货日期
*         LPEIN TYPE RM06B-LPEIN,         "交货日期的类别
*         EKGRP TYPE EBAN-EKGRP,          "采购组
*         BEDNR TYPE EBAN-BEDNR,          "需求跟踪号
*         DISPO TYPE EBAN-DISPO,          "MRP 控制者(物料计划人)
*         FRGDT TYPE EBAN-FRGDT,          "采购申请批准日期
*         WEBAZ TYPE EBAN-WEBAZ,          "以天计的收货处理时间
*         FIXKZ TYPE EBAN-FIXKZ,          "采购申请是固定的
*         REPOS TYPE EBAN-REPOS,          "发票收据标识

*  CLEAR gs_material.
*  gs_material-BANFN = '1009701508'.
*  gs_material-BNFPO = '10'.
*  gs_material-TCSELFLAG = 'X'.
*  gs_material-TXZ01 = '编码器_EK1-46B-1911_PCBA_环'.
*  gs_material-LGORT = '3001'.
*  gs_material-MENGE = '10000'.
*  gs_material-EEIND = '2021.05.06'.
*  gs_material-LPEIN = 'D'.
*  gs_material-EKGRP = '908'.
*  gs_material-BEDNR = '程序修改'.
*  gs_material-DISPO = '002'.
*  gs_material-FRGDT = '2021.04.22'.
*  gs_material-WEBAZ = '2'.
*  gs_material-FIXKZ = 'X'.
*  gs_material-REPOS = 'X'.
*  APPEND GS_MATERIAL TO GT_MATERIAL.

IF P_FILES IS NOT INITIAL.
   FIND '.TXT' IN P_FILES.
    IF SY-SUBRC = 0 .
       PERFORM TXT_UPLOAD.
    ELSE.
       PERFORM EXCEL_UPLOAD.
    ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*&  数据BDC处理
*&---------------------------------------------------------------------*
END-OF-SELECTION.
PERFORM APPEND_BDCDATA.
*&---------------------------------------------------------------------*
*&  包含                ZTS_XSY_TEST17TOP
*&---------------------------------------------------------------------*
DATA bdcdata TYPE TABLE OF bdcdata WITH HEADER LINE.
DATA messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.


TYPES: BEGIN OF gty_material,
         BANFN TYPE EBAN-BANFN,          "采购申请编号
         BNFPO TYPE RM06B-BNFPO,         "出现在一览屏幕上的字段
         TCSELFLAG TYPE RM06B-TCSELFLAG, "表控制的检查框
         TXZ01 TYPE EBAN-TXZ01,          "短文本
         LGORT TYPE EBAN-LGORT,          "库存地点
         MENGE TYPE EBAN-MENGE,          "采购申请数量
         EEIND TYPE RM06B-EEIND,         "交货日期
         LPEIN TYPE RM06B-LPEIN,         "交货日期的类别
         EKGRP TYPE EBAN-EKGRP,          "采购组
         BEDNR TYPE EBAN-BEDNR,          "需求跟踪号
         DISPO TYPE EBAN-DISPO,          "MRP 控制者(物料计划人)
         FRGDT TYPE EBAN-FRGDT,          "采购申请批准日期
         WEBAZ TYPE EBAN-WEBAZ,          "以天计的收货处理时间
         FIXKZ TYPE EBAN-FIXKZ,          "采购申请是固定的
         REPOS TYPE EBAN-REPOS,          "发票收据标识
       END OF gty_material.

DATA gt_material TYPE TABLE OF gty_material.
DATA gs_material TYPE gty_material.

PARAMETERS p_files TYPE rlgrap-filename.
*&---------------------------------------------------------------------*
*&  包含                ZTS_XSY_TEST17F01
*&---------------------------------------------------------------------*
FORM APPEND_BDCDATA.

 CLEAR: BDCDATA,BDCDATA[],MESSTAB,MESSTAB[].

LOOP AT gt_material INTO gs_material .

perform bdc_dynpro      using 'SAPMM06B' '0105'.
perform bdc_field       using 'BDC_CURSOR'
                              'EBAN-BANFN'.
perform bdc_field       using 'BDC_OKCODE'
                              '/00'.
perform bdc_field       using 'EBAN-BANFN'
                              gs_material-BANFN.
perform bdc_dynpro      using 'SAPMM06B' '0106'.
perform bdc_field       using 'BDC_CURSOR'
                              'EBAN-BNFPO(08)'.
perform bdc_field       using 'BDC_OKCODE'
                              '=LB'.
perform bdc_field       using 'RM06B-BNFPO'
                              gs_material-BNFPO.
perform bdc_field       using 'RM06B-TCSELFLAG(08)'
                              gs_material-TCSELFLAG.
perform bdc_dynpro      using 'SAPMM06B' '0102'.
perform bdc_field       using 'BDC_CURSOR'
                              'EBAN-MENGE'.
perform bdc_field       using 'BDC_OKCODE'
                              '=LB'.
perform bdc_field       using 'EBAN-TXZ01'
                              gs_material-TXZ01.
perform bdc_field       using 'EBAN-LGORT'
                              gs_material-LGORT.
perform bdc_field       using 'EBAN-MENGE'
                              gs_material-MENGE.
perform bdc_field       using 'RM06B-EEIND'
                              gs_material-EEIND.
perform bdc_field       using 'RM06B-LPEIN'
                              gs_material-LPEIN.
perform bdc_field       using 'EBAN-EKGRP'
                              gs_material-EKGRP.
perform bdc_field       using 'EBAN-BEDNR'
                              gs_material-BEDNR.
perform bdc_field       using 'EBAN-DISPO'
                              gs_material-DISPO.
perform bdc_field       using 'EBAN-FRGDT'
                              gs_material-FRGDT.
perform bdc_field       using 'EBAN-WEBAZ'
                              gs_material-WEBAZ.
perform bdc_field       using 'EBAN-FIXKZ'
                              gs_material-FIXKZ.
perform bdc_field       using 'EBAN-REPOS'
                              gs_material-REPOS.
perform bdc_dynpro      using 'SAPLM61Q' '0115'.
perform bdc_field       using 'BDC_OKCODE'
                              '=VRPG'.
perform bdc_field       using 'BDC_CURSOR'
                              'MDPM-MATNR(01)'.
perform bdc_dynpro      using 'SAPLM61Q' '0115'.
perform bdc_field       using 'BDC_OKCODE'
                              '=BACK'.
perform bdc_field       using 'BDC_CURSOR'
                              'MDPM-MATNR(01)'.
perform bdc_dynpro      using 'SAPMM06B' '0106'.
perform bdc_field       using 'BDC_CURSOR'
                              'EBAN-BNFPO(08)'.
perform bdc_field       using 'BDC_OKCODE'
                              '=BU'.
perform bdc_field       using 'RM06B-BNFPO'
                              gs_material-BNFPO.


    CALL TRANSACTION 'ME52' USING bdcdata  "使用内表调用
*                               OPTIONS FROM GS_OPTION   " CTU_PARAMS
*                               UPDATE 'S' "更新模式, s同步 A 异步
                               MODE 'A' "显示模式: A前台  N 后台 E只显示错误.
                               MESSAGES INTO messtab.


ENDLOOP.

      LOOP AT MESSTAB.
          WRITE:/ MESSTAB-MSGV1, MESSTAB-MSGV2.
      ENDLOOP.


ENDFORM.


FORM bdc_dynpro USING  VALUE(p_program)
                          VALUE(p_dynpro).
  CLEAR bdcdata.
  bdcdata-program = p_program.
  bdcdata-dynpro  = p_dynpro.
  bdcdata-dynbegin ='X'.
  APPEND bdcdata .
ENDFORM.


FORM bdc_field USING VALUE(p_field)
                        VALUE(p_value).
  CLEAR bdcdata.

  bdcdata-fnam    = p_field.
  bdcdata-fval   = p_value.
  APPEND bdcdata.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  GET_FILENAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_filename .

*1.获取本地文件路径
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
*     DEF_FILENAME     = ' '  "默认的文件名称
*     DEF_PATH         = ' ' " 默认的文件路径
      mask             = ',excel.xlsx,*.xlsx,text.txt,*.txt.' ",excel.xlsx,*.xlsx,text.txt,
      mode             = 'O' " S 保存  O打开
      title            = '打开文件' "窗口的新手名称
    IMPORTING
      filename         = p_files
*     RC               =
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  TXT_UPLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM txt_upload .

 DATA lv_files TYPE string.
  CHECK p_files IS NOT INITIAL.
      lv_files = p_files.

CALL FUNCTION 'GUI_UPLOAD'
      EXPORTING
        filename                = lv_files
*       FILETYPE                = 'ASC'
        has_field_separator     = 'X'
*       HEADER_LENGTH           = 0
*       READ_BY_LINE            = 'X'
*       DAT_MODE                = ' '
*       CODEPAGE                = ' '
*       IGNORE_CERR             = ABAP_TRUE
*       REPLACEMENT             = '#'
*       CHECK_BOM               = ' '
*       VIRUS_SCAN_PROFILE      =
*       NO_AUTH_CHECK           = ' '
*   IMPORTING
*       FILELENGTH              =
*       HEADER                  =
      TABLES
        data_tab                = gt_material
*   CHANGING
*       isscanperformed         = ' '
      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.
* Implement suitable error handling here
    ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  EXCEL_UPLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM excel_upload .

  DATA lt_raw TYPE truxs_t_text_data.
*EXCEL文件上传
      CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
        EXPORTING
          i_field_seperator    = 'X'
          i_line_header        = 'X'
          i_tab_raw_data       = lt_raw
          i_filename           = p_files
        TABLES
          i_tab_converted_data = gt_material
       EXCEPTIONS
         CONVERSION_FAILED          = 1
         OTHERS                     = 2
      .
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值