# SAP工具箱 配置导入模板
原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)
__ _ _ _ _
**点击蓝字** 关注我们
一
前言
前文介绍了通用导入程序
> 详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 通用导入程序
> ](http://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486562&idx=1&sn=c128d7ca1cef276fa214d09f13ec7c43&chksm=cf5dd154f82a5842d6a8ed74f03135e82681c34097fca1df711c553226808291aba92a0fa5e6#rd)
**本文主要介绍怎么给特定表的导入配置模板及数据检查**
为了讲解的更清楚,更有条理,本文以数据导入临时表ZTUP_MB(商品凭证导入)为例.
二
导入表定义
ZTUP_MB表是用来临时存储需要产生商品凭证的数据.为了让商品凭证产生的过程可记录,可重试. 所以创建一个特定结构的表来记录导入的数据
• UPLID: 生成的序号,用来记录上传的文件ID
• LINEID: 行号,记录数据在原文件中的序号
• MBLNR_CR/MJAHR_CR: 用来记录后续成功创建的商品凭证号
• ZSUP_MB: 商品凭证需要的业务数据,字段不再赘述. 详见图二.
• ZSMATNR_IDENTIFY: 额外的商品识别方式
• ZSSIZE: 尺码作为列的导入(允许一般商品+多尺码信息在一行中同时导入单据,形成单据中的一般商品及下层的变式商品. 该逻辑后续专门撰文说明.
• ZSBC008: 后续处理产生商品凭证的程序实用,记录相关日期,时间,操作者等内容,详见图三
图一
图二
图三
三
辅助表定义
ZTUP_HEADER 是一个辅助表, 主要用来记录上传文件ID的一些特殊属性.
这是一个通用辅助表, 所有临时保存数据的表ZTUP_*都会把文件ID写入ZTUP_HEADER 中.
主要用于记录文件ID对应的文件名(FILENAME),导入日期,导入人员等信息.
当然,如果导入的表是数据最终要进入的表, 则无需这个辅助表.
四
创建TCODE
为通用导入程序ZUPLOAD_TABLE_CONTENT 创建一个TCODE: ZUP_MB . 具体产生模板或导入时,会通过TCODE读取配置信息.
五
配置表ZTBC001
ZTBC001中主要配置TCODE 与表的对应及一些通常的控制信息
大部分字段的描述已经足以说明字段含义了. 个别字段会在后面重点介绍一下.
• **TCODE** 事务代码
• **TABNAME** 表名
• **FUNCNAME** 函数名:配置调用的数据校验函数
• **PROGNAMEABAP** 程序名 :配置数据导入后跳转的处理程序
• **TYPENAME** 字典类型的名称 (废弃)
• **SEPARATOR** 分隔符 :如果是文本文件导入, 指定分割符号.如果没有指定, 实用制表符分割
• **BAPI_NO_AUTHCHECK** 跳过BAPI执行中的授权检查(需要BAPI函数支持)
• **CMFLG** 尺码横向显示功能标记
• **SELSC** 跳转到处理程序时,留在选择屏幕上
• **ERRSAVE** 带错误保存标记: 勾选: 文件存在错误的情况下,允许保存处理正确的部分. 未勾选,文件存在错误就不允许保存.
• **DISPT** 显示特定字段的文本(字段必须有码表检查标记才能显示),数据导入显示时,补充编码的描述
• **ERR_IN_DATA** 检查出错的数据也保存在上传表中(标记为A).
• **WITH_DATA** 允许附加数据产生模板: 勾选后,允许产生带有数据的模板.
• **UPD_NUM** 更新表时分包处理的每个包的条目数(个别表发现无法一次性更新,需要按指定条目数多次写入数据库)
• **FILENAME** 模板文件名(如果为空,使用表名)
• **KEEP_LINEID** 保留文件中的行号(如果存在报错并允许保存:勾选,保留文件中的行号,不勾选,正确内容重写行号)
_**01** _
**FUNCNAME**
函数名:配置调用的数据校验函数
通过定义并配置一个固定结构的函数,在函数中执行商品凭证导入的特殊逻辑(校验或数据补偿). 可以配置通用检查函数Z_BC_UP_COMM_CHECK.
也可以用这个函数复制一个函数
Z_BC_UP_MB_CHECK,在基本检查的基础上,再补充商品凭证导入的特殊检查逻辑
下面是两个基本检查逻辑
• Z_BC_UP_FIELD_EMPTY_CHECK 基于配置的检查
• Z_BC_UP_COMMON_DATUM_CHECK 日期检查
_**02** _
**PROGNAME**
ABAP 程序名 :配置数据导入后跳转的处理程序
• 如果导入数据记录的表是最终目标表, 则无需配置处理程序.
• 如果记录的表是临时表, 还需要通过特定的程序执行写入正式表(或者调用BAPI产生主数据或单据). 则需要配置一个处理程序.
处理程序大致需要一个相对固定的选择屏幕
_**03** _
**ERR_IN_DATA**
检查出错的数据也保存在上传表中(标记为VPROC=A).
• 勾选后:错误部分的数据与正确的数据一起显示并写入目标表(附加错误标记).此时视同ERRSAVE='X'.
• 未勾选:错误数据单独显示. 此时如果允许出错保存(ERRSAVE='X'). 保存后,会丢弃错误部分的数据. .如果ERRSAVE=''. 如果有错误的数据,则不允许保存
六
配置ZTBC001后的效果
执行TCODE: ZUP_MB . 会读取配置表ZTBC001中的表写入表名字段(不允许修改). 同时文件名依据配置字段FILENAME的内容+<_时间戳>
点击下载模板后,不再弹出字段字段选择屏幕,会直接下载产生模板文件(模板文件内容依赖于配置表ZTBC001A,如果未配置, 则使用表中所有字段).
**需要注意的是:** 选择屏幕中的 检查数据复选框是一个总控开关,可以通过取消勾选,取消数据导入模板中配置的所有检查逻辑.(
**可信赖的大数据量导入时,去掉检查数据可以极大的提高导入性能** )
七
配置表ZTBC001A
该配置表用于配置特定的事务代码或表的模板内容及导入检查等.
• **TABNAME** 表名或者TCODE名称,或者接口编号
• **FIELDNAME** 字段名
• **FIELDTEXT** 表字段描述
• **SORTK** 字段顺序
• **EXCMB** 模版中排除该字段(标记了的字段从模版中排除,并且字段检查失效)
• **NOZERO** 字段非空检查
• **DUP_CHECK** 上传文件内容重复性检查(所有设置了该标记的字段参与重复性检查)
• **MBCHK** 码表检查
• **MBNOEXCEL** 码表限制在EXCEL模版的表现方式
• **DISPT** 显示特定字段的文本(字段必须有码表检查标记才能显示)
• **AUTHCHK** 授权检查标记
• **AUTHOBJ** 权限对象
• **AUTHCHK_S** 简单授权检查
• **NROBJ** 编号范围对象名称
• **NRNR** 序号区间编号
• **DEFAULT_VALUE** 字段的默认值
• **WITH_DATAE_TEXT** 如果FIELD_LONG_TEXT 为空且添加了标记, 则获取数据元素长文本作为批注
• **FIELD_LONG_TEXT** 字段详细描述,体现在EXCEL的批注中
• **ZZBDS_CHECK** 正则表达式检查(输入字段内容检查的正则表达式)
_**01** _
**TABNAME**
表名或者TCODE名称,或者接口编号
如果一个表的导入配置了多个事务代码入口. 可以为这些事务代码分别配置模板(TABNAME中填写事务代码).
也可以让这些事务代码共用一个模板,(TABNAME填写表名).
_**02** _
**NOZERO**
字段非空检查
勾选后:模板中的该字段将红色显示,同时描述中添加* 提醒用户该字段必须输入内容. 数据上传后,如果该字段内容为空, 会报错
_**03** _
**EXCMB**
模版中排除该字段(标记了的字段从模版中排除,并且字段检查失效)
_**04** _
**DUP_CHECK**
上传文件内容重复性检查(所有设置了该标记的字段参与重复性检查)
比如期初库存导入时, 可以为商品,地点,库位字段勾选该标记. 这样默认检查逻辑会根据这三个字段检查文件中是否有重复的数据, 如果有重复数据,报错.
_**05** _
**MBCHK**
码表检查
勾选后, 输入进入系统中会执行数据有效性检查.有效性检查依赖于码表配置,
> 详见链接 无峰,公众号:ABAP开发技巧 [ SAP开发框架系列之 码表框架
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247485048&idx=1&sn=76518aafb6203e7e88a21fa7775c6375&chksm=cf5ddb4ef82a5258b668deae7cb3eac48564369f66f851da68d6247f1db7767126065cf7e480&token=1141083882&lang=zh_CN#rd)
_**06** _
**MBNOEXCEL**
码表限制在EXCEL模版的表现方式
• N 码表不输出EXCEL
• E 码表输出EXCEL,字段检查报错显示
• W 码表输出EXCEL,字段检查警告显示
• I 码表输出EXCEL,字段检查消息显示
• 空 码表输出EXCEL,字段检查报错显示
_**07** _
**AUTHCHK/AUTHOBJ**
授权检查标记/权限对象
通过勾选AUTHCHK 并且维护权限对象,启用标准的授权检查.检查的活动ACTVT默认 01,检查的字段名就是当前字段名
该配置模式非常灵活, 只需要找到该字段的标准授权对象,就可以通过配置启用导入的该字段内容的授权检查.
_**08** _
**AUTHCHK_S**
简单授权检查
有别于标准授权体系的一套自定义授权检查体系. 该体系与标准授权检查并存,可以作为标准授权检查体系的一个补充.
用来减少标准授权体系的维护量. 或者取代标准授权体系,实现授权检查.
_**09** _
**NROBJ/ NRNR**
编号范围对象名称/序号区间编号
对于特定的字段,可以通过配置号码对象,区间编号在导入时通过函数NUBER_GET_NEXT获取一个编号赋值到字段中.
这个配置可以为一些简单的表赋予关键字号码.
**_10_ **
**DEFAULT_VALUE**
字段的默认值
允许在模板中给一些字段定义默认值.
通过字段默认值,可以进一步的简化导入模板.
• 为特定的移动类型, 比如期初库存导入设定单独的模板, 该模板中,可以设置移动类型默认值561. 设置BUDAT=当前日期.
• 为特定的工厂设置特殊的模板,在该模板中,可以把为WERKS字段设置默认值.
_**11** _
**FIELD_LONG_TEXT**
字段详细描述,体现在EXCEL的批注中
产生模板时,可以为字段设置详细的描述, 该描述会放到字段的批注中.
勾选WITH_DATAE_TEXT
且未维护FIELD_LONG_TEXT,则会把字段数据元素的描述作为字段的批注(数据元素未必能详细解释该字段,还是建议手工添加描述).
**_12_ **
**ZZBDS_CHECK**
正则表达式检查(输入字段内容检查的正则表达式)
为特定的字段维护正则表达式可以进一步校验数据的合法性. 帮助文档中给出了一些常用的正则表达式的写法.
八
配置示例
下图是一个商品凭证导入的模板配置示例. 这个配置使用了表名ZTUP_MB.意味着如果没有特定的事务代码的配置,
所有ZTUP_MB表相关的TCODE都会使用下图模板.
九
数据检查
所有配置中的检查,如未特别说明的, 都是在数据导入的时候执行.
也可以在函数Z_BC_UP_MB_CHECK补充检查逻辑. 比如下图,是在PO导入时补充检查调拨单的发货库位必须输入.
**注意: 导入程序选择屏幕上的 数据检查 复选框是一个总控开关**
十
数据检查的表现
根据配置项ZTBC001-ERR_IN_DATA的内容不同.数据检查的表现形式也不一样.
_**01** _
**ERR_IN_DATA=''**
配置ZTBC001- ERR_IN_DATA= ''.报错数据,分开显示.
序号 是记录在原文件中的行号.
如果有错误数据,会提示报错,并且显示会有错误按钮,点击该按钮可以看到所有报错信息
一行中的多个错误都会显示在错误信息字段中,
此时根据ZTBC001- ERRSAVE判断是否能够保存正确的数据
' ' 不允许保存
'X' 允许保存
.textContent = new Date().getFullYear();