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.