ZMMR103-数据批量导入

***********************************************************************
* Title : ZMMR103 *
* Application : MM   *
* Subject : PO vendor conform data upload *
* Requested by : 采购部 *
* Execution : any time *
* Ref no: : B179 *
* Author : rainy *
* Req Date : 20150605 *
***********************************************************************
* Production Order Variance Report *
***********************************************************************
***********************************************************************
*1.取数:
*2.输出: *
***********************************************************************
* MODIFICATIONS (latest entry at the top) *
* ------------------------------------------------------------------- *
* REL DATE NAME (COMPANY) DESCRIPTION TASK-NO *
* --- ---- ---- --------- ----------- ------- *
* *
***********************************************************************
REPORT zmmr103 MESSAGE-ID zmm_001.

TABLES:zmmt001,
sscrfields.

DATA:BEGIN OF it_text.
*INCLUDE STRUCTURE zmmt001.
DATA: "mandt LIKE ekpo-mandt,
ebeln LIKE ekpo-ebeln,
ebelp LIKE ekpo-ebelp,
zdate1 TYPE string, "zmmt001-zdate1,
zqty1 LIKE zmmt001-zqty1 ,
zdate2 TYPE string,"LIKE zmmt001-zdate2,
zqty2 LIKE zmmt001-zqty2 ,
ztext LIKE zmmt001-ztext ,
usnam LIKE zmmt001-usnam ,
datum LIKE zmmt001-datum ,
time LIKE zmmt001-time .
DATA:END OF it_text.
DATA:gt_text LIKE TABLE OF it_text WITH HEADER LINE,
wa_text LIKE gt_text.
DATA:gt_zmmt001 LIKE TABLE OF zmmt001 WITH HEADER LINE.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t1.

PARAMETERS: so_file(300).

SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN FUNCTION KEY 1.

*----------------------------------------------------------------------
* INITIALIZATION
*----------------------------------------------------------------------
INITIALIZATION.
t1 = ‘导入数据‘.
sscrfields-functxt_01 = ‘下载导入模板‘.

*----------------------------------------------------------------------
* AT SELECTION-SCREEN.
*----------------------------------------------------------------------
AT SELECTION-SCREEN.
*&下载模板
PERFORM frm_download_template.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_file.
PERFORM getdata USING so_file.

*----------------------------------------------------------------------
* START-OF-SELECTION.
*----------------------------------------------------------------------
START-OF-SELECTION.

*&S1.upload data.
PERFORM frm_upload.
* CHECK gt_text[] IS NOT INITIAL.
*&write text
PERFORM frm_exeupdate.

*&---------------------------------------------------------------------*
*& Form getdata
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->SO_FILE text
*----------------------------------------------------------------------*
FORM getdata USING so_file.
* Data for open dialog
DATA: l_filetab TYPE filetable,
l_rc TYPE i.
CLEAR l_filetab.
REFRESH l_filetab.

* Open dialog
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
* WINDOW_TITLE = ‘SAP Custom - Open File‘
* DEFAULT_EXTENSION =
default_filename = ‘*.xls‘
* FILE_FILTER = ‘*.xls‘
initial_directory = ‘d:\‘
multiselection = ‘‘
CHANGING
file_table = l_filetab
rc = l_rc
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
* Get file path
CHECK l_rc EQ 1.
READ TABLE l_filetab INDEX 1 INTO so_file.

ENDFORM. "getdata
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_upload .
DATA:BEGIN OF i_excel OCCURS 0.
INCLUDE STRUCTURE alsmex_tabline.
DATA:END OF i_excel.
DATA:l_answer(1) TYPE c,
l_culumn TYPE i,
l_pathname LIKE rlgrap-filename.
FIELD-SYMBOLS:<fs>.
DATA:it_raw TYPE truxs_t_text_data.

*&文件名赋值l_pathname.
MOVE so_file TO l_pathname.

CALL FUNCTION ‘TEXT_CONVERT_XLS_TO_SAP‘
EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = ‘X‘
i_tab_raw_data = it_raw
i_filename = l_pathname
TABLES
i_tab_converted_data = gt_text
* EXCEPTIONS
* CONVERSION_FAILED = 1
* OTHERS = 2
.
* CALL FUNCTION ‘TEXT_CONVERT_XLS_TO_SAP‘
* EXPORTING
** I_FIELD_SEPERATOR =
** I_LINE_HEADER =
* i_tab_raw_data =
* i_filename =
* TABLES
* i_tab_converted_data =
** EXCEPTIONS
** CONVERSION_FAILED = 1
** OTHERS = 2
* .

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF gt_text[] IS INITIAL.
CALL FUNCTION ‘POPUP_TO_CONFIRM_WITH_MESSAGE‘
EXPORTING
* DEFAULTOPTION = ‘Y‘
diagnosetext1 = ‘No data in excel‘
* DIAGNOSETEXT2 = ‘ ‘
* DIAGNOSETEXT3 = ‘ ‘
textline1 = ‘No data in excel‘
* TEXTLINE2 = ‘ ‘
titel = ‘Confirm‘
* START_COLUMN = 25
* START_ROW = 6
* CANCEL_DISPLAY = ‘X‘
IMPORTING
answer = l_answer.
*&OUT
EXIT.
ENDIF.
ENDIF.

*&删除标题行
*DELETE gt_text FROM 1 TO 1.

ENDFORM. " FRM_UPLOAD
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_download_template .
DATA: ls_key TYPE wwwdatatab,
lv_temp TYPE c,
lv_file TYPE string VALUE ‘\ZM103.xlsx‘,
lv_filepath TYPE rlgrap-filename,
lv_result TYPE abap_bool,
lv_path TYPE string,
lv_msg TYPE string.
DATA:l_rc TYPE sy-subrc.

CASE sscrfields-ucomm.
WHEN ‘FC01‘.

CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title = ‘选择文件目录‘
* initial_folder = ‘C:\TEMP‘
CHANGING
selected_folder = lv_path
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
CONCATENATE lv_path lv_file INTO lv_file.

CALL METHOD cl_gui_frontend_services=>file_exist
EXPORTING
file = lv_file
RECEIVING
result = lv_result
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
wrong_parameter = 3
not_supported_by_gui = 4
OTHERS = 5.
IF lv_result = ‘X‘.
CONCATENATE ‘模板‘ lv_file ‘已存在!‘ INTO lv_msg.
MESSAGE lv_msg TYPE ‘S‘.
STOP.
ELSE.
ls_key-relid = ‘MI‘.
ls_key-objid = ‘ZM103‘. "SMW0定义的对象名称
lv_filepath = lv_file.
CALL FUNCTION ‘DOWNLOAD_WEB_OBJECT‘
EXPORTING
key = ls_key
destination = lv_filepath
IMPORTING
rc = l_rc.
IF l_rc <> 0.
MESSAGE ‘下载模板失败!‘ TYPE ‘E‘.
ELSE.
MESSAGE s000 WITH ‘成功下载模板至目录:‘ lv_filepath.
ENDIF.
ENDIF.
ENDIF.

ENDCASE.
ENDFORM. " FRM_DOWNLOAD_TEMPLATE
*&---------------------------------------------------------------------*
*& Form FRM_EXEUPDATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_exeupdate .
FIELD-SYMBOLS:<fs_text> LIKE LINE OF gt_text.
DATA: lv_upd(1).
DATA:lv_date LIKE sy-datum,
lv_day(2) TYPE n,
lv_month(2) TYPE n,
lv_year(4) TYPE n,
lv_calc_date TYPE d.
DATA:l_line TYPE string.

SORT gt_text BY ebeln ebelp.

*&S1.处理数据
LOOP AT gt_text ASSIGNING <fs_text>.

CLEAR:lv_day,
lv_month,
lv_year.
*&S1.1PO#加前导0
CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘
EXPORTING
input = <fs_text>-ebeln
IMPORTING
output = <fs_text>-ebeln.

MOVE-CORRESPONDING <fs_text> TO gt_zmmt001.
IF <fs_text>-zdate1 CS ‘.‘.
*&zdate1 中. 去除
REPLACE ‘.‘ WITH ‘‘ INTO <fs_text>-zdate1.
REPLACE ‘.‘ WITH ‘‘ INTO <fs_text>-zdate1.
CONDENSE <fs_text>-zdate1 NO-GAPS.
lv_day = <fs_text>-zdate1(2).
lv_month = <fs_text>-zdate1+2(2).
lv_year = <fs_text>-zdate1+4(4).
*&换成系统标准 年月日.
CONCATENATE lv_year lv_month lv_day INTO gt_zmmt001-zdate1.
ENDIF.

IF <fs_text>-zdate2 CS ‘.‘.
*&zdate1 中. 去除
REPLACE ‘.‘ WITH ‘‘ INTO <fs_text>-zdate2.
REPLACE ‘.‘ WITH ‘‘ INTO <fs_text>-zdate2.
CONDENSE <fs_text>-zdate2 NO-GAPS.
lv_day = <fs_text>-zdate2(2).
lv_month = <fs_text>-zdate2+2(2).
lv_year = <fs_text>-zdate2+4(4).
CONCATENATE lv_year lv_month lv_day INTO gt_zmmt001-zdate2.
ENDIF.
gt_zmmt001-mandt = sy-mandt.
APPEND gt_zmmt001.
CLEAR gt_zmmt001.
ENDLOOP.

*&S2.创建人信息
gt_zmmt001-usnam = sy-uname.
gt_zmmt001-datum = sy-datum.
gt_zmmt001-time = sy-uzeit.
gt_zmmt001-mandt = sy-mandt.
MODIFY gt_zmmt001 TRANSPORTING usnam datum time mandt WHERE ebeln IS NOT INITIAL.
l_line = lines( gt_zmmt001[] ).

*&S3.更新数据表
CLEAR lv_upd.
TRY .
MODIFY zmmt001 FROM TABLE gt_zmmt001.
CATCH cx_sy_open_sql_db.
lv_upd = ‘F‘.
ENDTRY.

IF lv_upd EQ ‘ ‘.
COMMIT WORK.
MESSAGE s000 WITH ‘成功上传‘ l_line ‘条数据!‘.
ELSE.
ROLLBACK WORK.
MESSAGE e006.
ENDIF.

ENDFORM. " FRM_EXEUPDATE

* CALL FUNCTION ‘ZALSM_EXCEL_TO_INTERNAL_TABLE‘
* EXPORTING
* filename = l_pathname
* i_begin_col = n_begin_col
* i_begin_row = n_begin_row
* i_end_col = n_end_col
* i_end_row = n_end_row
* TABLES
* intern = i_excel
* EXCEPTIONS
* inconsistent_parameters = 1
* upload_ole = 2
* OTHERS = 3.
* IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* ELSE.
* IF i_excel[] IS INITIAL.
* CALL FUNCTION ‘POPUP_TO_CONFIRM_WITH_MESSAGE‘
* EXPORTING
* diagnosetext1 = ‘No data in excel‘
* textline1 = ‘No data in excel‘
* titel = ‘Confirm‘
* IMPORTING
* answer = l_answer.
* ELSE.
* DELETE i_excel WHERE row = ‘0001‘.
* SORT i_excel BY row col.
* LOOP AT i_excel.
* MOVE i_excel-col TO l_column.
* ASSIGN COMPONENT l_column OF STRUCTURE it_text TO <fs>.
* MOVE i_excel-value TO <fs>.
* AT END OF row.
* APPEND gt_text.
* CLEAR gt_text.
* ENDAT.
* ENDLOOP.
* ENDIF.
* ENDIF.

时间: 2024-08-03 17:57:30

ZMMR103-数据批量导入的相关文章

将ACCESS数据批量导入SQL SERVER

代码: IF OBJECT_ID('Sp_InputAccesstoSQL') IS NOT NULL     DROP PROC Sp_InputAccesstoSQL GO CREATE PROC Sp_InputAccesstoSQL @dir NVARCHAR(100),--ACCESS文件存放路径:如D:\Files @tabname NVARCHAR(50) --定义导入到数据库中的表名,如果存在就不需要创建 AS SET NOCOUNT ON DECLARE @cmd NVARCH

c#如何将dataset中的数据批量导入oracle数据库

不要写insert语句,因为数据库字段太多了,有什么简单点的效率高的方法吗 public void MultiInsertData(DataSet ds) { string connt = "Oracle的连接字符串"; string sql = "select id,name,- from tablename";必须与ds中的一致 DataTable dt = ds.Defaults[0]; OracleConnection conn = new OracleCo

数据批量导入HBase

测试数据: datas 1001 lilei 17 13800001111 1002 lily 16 13800001112 1003 lucy 16 13800001113 1004 meimei 16 13800001114 数据批量导入使用mr,先生成HFile文件然后在用completebulkload工具导入. 1.需要先在hbase 创建表名: hbase> create 'student', {NAME => 'info'} maven pom.xml配置文件如下: <de

用java实现excel数据批量导入数据库

不管是做软件还是做网站,相信很多人在做的时候都要用到数据库,而数据库的数据从何而来呢,可以使手动添加的,但是大多数情况下我们使用的是已有的数据,我们想借助开发的工具管理目前已有的数据,如果是小量的数据,手动录入也无妨,但是对于大量数据呢,手动录入显然已经不显示,而且,更多的时候,我们呢想在软件上增加一个数据的批量导入,这样不管是谁在用这款软件,都可以方便的管理已有数据,那么我们最常用的数据管理器是什么呢,毫无疑问Excel,但是我们做软件是几乎没有人会使用Excel作为DB,所以我们遇到的问题就

java把excel数据批量导入到数据库

java把excel数据批量导入到数据库中,java导入excel数据代码如下 1.    public List<Choice> GetFromXls(String xlsname){ 2. 3.        List<Choice> choices = new ArrayList<Choice>(); 4.        Choice choice=null; 5.        try { 6.            java.io.File file=new

mysql中把一个表的数据批量导入另一个表中(不同情况)

mysql中把一个表的数据批量导入另一个表中 不管是在网站开发还是在应用程序开发中,我们经常会碰到需要将MySQL某个表的数据批量导入到另一个表的情况,甚至有时还需要指定导入字段. 本文就将以MySQL数据库为例,介绍如何通过SQL命令行将某个表的所有数据或指定字段的数据,导入到目标表 中. 类别一. 如果两张张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法:(此方法只适合导出两表在同一database) INSERT INTO 目标表 SELECT * FROM 来源表;

Excel数据批量导入到数据库

1.今天做批量导入网上找了个例子,改了改,运行起来了.用POI实现Excel的读取,需要jar包. 2.ReadExcel.java读取数据 /** * */ package com.b510.excel; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import

Shp数据批量导入Postgresql工具的原理和设计

1.背景 在制作整体的开源工具箱产品中,数据入库是一个重要的环节.虽然PostGIS提供了数据入库界面化操作,但是毕竟此工具无法集成至我方工具箱中,并且该工具界面.操作都不是很理想,也无法定制化完成一些具体需求.所以,自制一个shp入库工具还是比较有必要的. 2.思路 2.1  shp导入思路 Shp导入至数据库中,无论是Postgresql.mysql.oracle等,均是先将Shp转换成符合对应数据库的sql,然后再导入进去对应数据库. 针对Postgresql,在PG的安装路径下有pgsq

将mysql表数据批量导入redis zset结构中

工作中有这样一个需求,要将用户的魅力值数据做排行,生成榜单展示前40名,每隔5分钟刷新一次榜单.这样的需求用redis的zset是很方便实现的.但是数据存在mysql的表中,有400多万条,怎么将其快速的放入redis中呢? 一般我们想到是通过程序把数据从mysql中查出来,然后存入redis,但是这样不仅耗时,而且不能保证写入redis的数据的准确性,这中间存在一个部署的时差.通过google老师一查原来redis提供了批量导入数据的功能,原帖地址: http://baijian.github

Django model中数据批量导入bulk_create()

在Django中需要向数据库中插入多条数据(list).使用如下方法,每次save()的时候都会访问一次数据库.导致性能问题: for i in resultlist: p = Account(name=i) p.save() 在django1.4以后加入了新的特性.使用django.db.models.query.QuerySet.bulk_create()批量创建对象,减少SQL查询次数.改进如下: querysetlist=[] for i in resultlist: querysetl