SAP工具箱 配置导入模板

点击蓝字 关注我们

前言

前文介绍了通用导入程序

详见链接无峰,公众号:ABAP 技巧与实战SAP工具箱 通用导入程序

本文主要介绍怎么给特定表的导入配置模板及数据检查

为了讲解的更清楚,更有条理,本文以数据导入临时表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开发框架系列之 码表框架

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' 允许保存

02

ERR_IN_DATA = 'X'

如果配置了ZTBC001-ERR_IN_DATA = 'X'.则报错数据和正常数据一起显示,通过处理状态VPROC=A标记行存在错误.

此时允许保存所有数据.

十一

保存数据模板功能

ZTBC001- WITH_DATA = 'X' 表示允许把导入数据保存在模板中.

在数据导入后会出现按钮 保存数据模板.

点击后. 下次产生的模板会包含本次导入的数据. 如果要清空模板中的数据,只需要导入一次空数据,点击保存数据模板即可.

数据模板中附加的数据如未删除,也会作为正式数据写入表中

数据模板功能适用场景: 固定数据行,让用户填写特定字段的内容.

十二

保存跳转功能

点击保存按钮后,数据会写入ZTUP_MB表. 同时会调用ZTBC001- PROGNAME中配置的数据处理程序 ZUP_MB_PROC. 并且根据配置ZTBC001-SELSC 来判断

X 停留在程序的选择屏幕

空 跳过选择屏幕

数据导入程序与数据处理程序是通过文件ID传递导入的数据内容:在数据保存时,会分配一个文件ID给这些导入的数据,在处理程序中,读取文件ID相关的数据.

十三

数据单独处理

单独执行ZUP_MB_PROC也能通过搜索帮助找到该文件ID并选择处理

十四

总结

导入模板的配置功能是历经多个项目,不断总结用户需求,不断的改进,整合出来的框架功能.依据这个框架,开发了很多主数据或单据导入功能.

在项目实践中:

  • 可以用在上线前期初数据导入(处理程序中整合了多进程处理功能).

  • 可以为特定用户配置特殊模板,作为快速单据创建的一种方式.

  • 可以把接口传递的数据写入处理表,作为接口数据后续处理的方式.

处理程序整合多进程处理详见 文章(该文章无法链接,请自行在公众号中搜索) 

SAP工具箱之 快速调度并发后台作业

灵活运用导入模板,可以带来如下好处:

  • 简化数据导入操作

  • 提升数据导入质量

  • 记录数据导入痕迹

另外对于大数据导入的处理建议使用.TXT文件. 如果启用了数据检查,程序会把检查失败的数据内容在导入文件的目录中生成一个报错文件

命名规则:  原文件名+_ERR.TXT


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容