点击蓝字 关注我们
一
前言
数据导入,是一个简单的应用场景:
用户按规定格式准备好数据文件,批量导入系统创建主数据或者单据.
开发框架系列中写了一篇文章介绍了一个数据导入框架.
详见链接
无峰,公众号:ABAP开发技巧SAP开发框架系列之 数据导入
基于这个框架开发了一系列的数据导入程序,用于满足项目上的数据导入需求.如图一 .
所有这些数据导入程序都使用了一个核心程序 ZUPLOAD_TABLE_CONTENT.
本文主要介绍这个通用导入程序 ZUPLOAD_TABLE_CONTENT
图一
二
执行过程
简单介绍一下通用导入程序的执行过程
01
执行程序
事务码SE38,程序名ZUPLOAD_TABLE_CONTENT
或者执行事务代码: ZUPLOAD_TABLE_CON
进入程序的选择屏幕
输入表名 ZTTS_H
输入模板文件名 D:\ZTTS_H.XLSX
如果直接点击下载模板,将会使用默认选项进入下载模板过程
02
选择模板类型
可以勾选复选框产生模板,展开模板的详细选项
下载模板时优先获取用户通过SMW0上传的模板(同名TCODE): 用户可以使用SMW0上载一个预先定义好的EXCEL模板文件文件,然后直接下载该模板. 如果没有则进入选择字段界面. 文件后缀调整为 .xls
下载复杂模板(附带码表字段值,附带模板的字段内容限制: 下载复杂模板,附带了码表及值限制,更多模板功能可以通过配置表配置(后续文章会介绍模板配置) .文件后缀调整为 .xlsx
产生模板的时候,附带表的所有数据: 产生模板的时候,可以附带表中的所有数据(后续可以考虑通过动态选择限制附带的数据内容)
03
字段选择
点击下载模板或勾选产生模板点击执行, 进入一个字段清单. (前提条件是没有SMW0预先上载的模板).此时可以勾选需要进入模板的字段,产生EXCEL模板.
04
打开模板文件
点击确定后,自动打开模板文件.
复杂模板:
模板文件中附加了一个码表内容标签 图二 ,
该标签中主要附带这个表中存在码表的字段及码表内容 图三.
同时会对字段添加下拉输入,并校验输入数据的正确性(通过#分割编码部分和描述部分) 图四
简单模板: 只有字段名和字段描述信息 图五
码表的概念详见链接
无峰,公众号:ABAP开发技巧SAP开发框架系列之 码表框架
图二
图三
图四
图五
05
添加数据
在模板中添加要导入的数据,对于有码表限制的字段,会有数据合法性校验, 此时可以通过选择输入(EXCEL的有效值选择有点麻烦),也可以在EXCEL无关字段中输入编码,粘贴过来. 导入程序会去掉#及以后的内容.
06
导入数据
去掉勾选产生模板复选框.点击执行按钮.
上传数据到内表并呈现数据. 这种导入数据的方式没有执行数据校验(数据校验依赖于配置的数据模板,后续文章会详细介绍, 检查数据复选框是数据校验的一个开关).
07
数据保存
点击保存,数据写入表ZTTS_H
三
导入文件格式
通用导入程序兼容 .txt .xls .xlsx 三种文件后缀.
.txt 后缀
数据量较大的时候(一般情况下,超过10万条),推荐使用.txt后缀, 这样产生的模板文件实际上是制表符分割的文本文件,这种情况几乎没有记录数的限制.
.xls 后缀
使用 .xls 依赖于函数
ALSM_EXCEL_TO_INTERNAL_TABLE. 原函数中限定了行,列长度为4位(图六),也就是说最大记录数限定为1万条.
改写的函数
ZALSM_EXCEL_TO_INTERNAL_TABLE使用了新的定义(图七),理论上没有最大记录数的限定,但是因为这个函数的性能问题, 还是限制了最大访问5万条记录.
.xlsx后缀
使用了 开源项目 ABAP2XLSX
详见链接
最大条目数依赖于xlsx文件的限制. 新版本的EXCEL允许的上限是 1048576 (数据来自百度).
图六
图七
四
总结
通用导入程序是一个简单实用的程序.
根据输入的表名及勾选的模板字段动态生成内表,并输出该内表到EXCEL显示. 再把EXCEL中的内容载入到内表中显示,最后保存到数据库表中.
理论上只能处理单表. 适用于自定义配置表的导入或简单表的导入.
同时它又是整个导入框架的核心程序. 所有的数据导入都是通过这个程序把数据载入到一个临时表,再调用处理程序执行生成主数据或者单据.
THE
END
约定
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
(如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)
公众号 : syjf1976_abap
ABAP开发技巧
微信号 : 392077
请微信联系管理员:
syjf1976
sharry_xlp
Yannick_Duan 申请进入公众号讨论群