SAP 工具箱多表导入程序

作者:ABAP技巧与实战 约 7 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发
目录

原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)

**点击蓝字** 关注我们

前言

前文介绍了一个通用导入程序及怎么配置通用导入程序的导入模板

> 通用导入程序 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 通用导入程序

> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486562&idx=1&sn=c128d7ca1cef276fa214d09f13ec7c43&chksm=cf5dd154f82a5842d6a8ed74f03135e82681c34097fca1df711c553226808291aba92a0fa5e6&token=1834654470&lang=zh_CN#rd)

公众号交流群有人回复通用导入程序只能导入单表,用处不大.因为大部分单据,主数据的都是多表结构.

这里说明一下

大部分配置表都是单表结构(文本表可以单独导入),可以直接导入数据.

之前介绍的通用导入程序只能导入到一个表中. 如果目标数据不是单表结构, 则需要创建一个临时存储表,先把数据导入到临时存储表中,

再调用处理程序写入正式表.这个更符合多表处理的实际情况.

**本文主要介绍通用导入程序的升级版: ZUPLOAD_TABLE_CONTENT_MUL.可以同时处理多表的导入**

场景描述

本文的示例场景中有三个表

ZTBCD_H 补差单-抬头

ZTBCD_I 补差单-明细(补差规则)

ZTBCD_I2 补差单-补差结果明细

需要通过程序同时把数据导入到这三个表中.

这个场景需要忽略掉三个表的相关性数据校验. 因为这个相关校验逻辑个性化太强,很难通过配置实现.

配置过程

多个相关表同时导入需要先配置,才能执行

_**01** _

**创建事务代码**

• 创建事务代码ZUP_BCD_MUL 调用多表导入程序:ZUPLOAD_TABLE_CONTENT_MUL

• 创建事务代码ZUP_BCD_H 调用单表导入程序: ZUPLOAD_TABLE_CONTENT

• 创建事务代码ZUP_BCD_I 调用单表导入程序: ZUPLOAD_TABLE_CONTENT

SAP 工具箱多表导入程序 - 封面图
SAP 工具箱多表导入程序 - 封面图
SAP 工具箱多表导入程序 - 封面图
SAP 工具箱多表导入程序 - 封面图
SAP 工具箱多表导入程序 - 封面图
SAP 工具箱多表导入程序 - 封面图

_**02** _

**配置多表关系**

在配置表ZTBC001D - EXCEL导入导出模板支持多表单(最多允许20个) 中配置事务代码和多表的关系.

每个TCODE 最多只能配置20个相关表.

多表关系可以直接配置表名,也可以配置TCODE ,通过配置ZTBC001获取表名.

下图的配置中

• ZUP_BCD_H 通过TCODE关联ZTBC001中的表

• ZUP_BCD_I 通过TCODE关联ZTBC001中的表

• ZTBCD_I2 直接使用表.

顺序字段内容控制了表在EXCEL中的标签顺序及导入后的屏幕界面呈现时的标签顺序

SAP 工具箱多表导入程序 - 封面图
SAP 工具箱多表导入程序 - 封面图

_**03** _

**配置ZTBC001**

在ZTBC001中维护TCODE 及相关的检查函数,出错保存等信息.

ZUP_BCD_MUL 表示总体处理的TCODE

ZUP_BCD_H 表示抬头表处理的TCODE

ZUP_BCD_I 表示行项目表出差的TCODE

因为ZTBCD_I2在ZTBC001D中直接配置的表名. 所以无需在ZTBC001中配置

SAP 工具箱多表导入程序 - 封面图
SAP 工具箱多表导入程序 - 封面图

_**04** _

**配置每个表的模板**

在配置表ZTBC001A为每个单独的表配置模板, 如果没有配置,则使用该表的全部字段.

> 具体配置方式详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 配置导入模板

> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486595&idx=1&sn=e42b7e6713689b36594d418f02454d1b&chksm=cf5dd1b5f82a58a379a76ea6e71ec2f278dd0aa8bcb2897e0669a60969276befa52c4b965cee&cur_album_id=1771862497143144448&scene=189#rd)

需要注意的是

如果ZTBC001D中配置的是表名,则单表的模板, 字段ZTBC001A-TABNAME 中只能填写表名.

如果ZTBC001D中配置的是TCODE, 单表模板配置里可以填写事务代码或表名.

如下图,只为两个表配置了模板字段,个别字段加了非空检查,关键字段设置了重复性检查

SAP 工具箱多表导入程序 - 封面图
SAP 工具箱多表导入程序 - 封面图

执行多表导入

执行的过程与单表导入的过程差不多. 界面样式稍有差异.

_**01** _

**调用TCODE**

调用之前创建的TCODE ZUP_BCD_MUL 表名位置会填ZTBC001- FILENAME(模板文件名).

SAP 工具箱多表导入程序 - 封面图
SAP 工具箱多表导入程序 - 封面图

_**02** _

**产生模板**

勾选产生模板,然后执行产生EXCEL模板,产生的模板中包含了三个表的字段模板(其中,前两个是根据配置表获取, 第三个表没有配置,获取所有表中字段)

SAP 工具箱多表导入程序 - 封面图
SAP 工具箱多表导入程序 - 封面图
SAP 工具箱多表导入程序 - 封面图
SAP 工具箱多表导入程序 - 封面图

_**03** _

**导入数据**

在模板中输入需要导入的数据,保存后, 在程序选择屏幕去掉产生模板复选框.执行导入数据

SAP 工具箱多表导入程序 - 封面图
SAP 工具箱多表导入程序 - 封面图

_**04** _

**显示导入的数据**

导入的数据会呈现在屏幕上,通过标签页区分不同的表

根据选择屏幕上的复选框 'X' 错误数据和正确数据一起显示 '' 错误数据单独显示

控制报错数据的显示方式

• 图一 报错数据单独显示

• 图二 报错数据和正常数据一起显示

SAP 工具箱多表导入程序 - 封面图
SAP 工具箱多表导入程序 - 封面图

图一

SAP 工具箱多表导入程序 - 封面图
SAP 工具箱多表导入程序 - 封面图

图二

_**05** _

**保存数据**

点击保存后 ,数据会分别写入相应的表ZTBCD_H/ZTBCD_I/ZTBCD_I2

总结

程序ZUPLOAD_TABLE_CONTENT_MUL 是在程序ZUPLOAD_TABLE_CONTENT的基础上,增加了同时处理多表的功能.

两个程序同时支持模板配置中的所有显示规则,检查规则. 具体的配置逻辑可以理解为先为每个单表完成配置

> 详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 配置导入模板

> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486595&idx=1&sn=e42b7e6713689b36594d418f02454d1b&chksm=cf5dd1b5f82a58a379a76ea6e71ec2f278dd0aa8bcb2897e0669a60969276befa52c4b965cee&cur_album_id=1771862497143144448&scene=189#rd)

然后在多个单表配置的基础上, 再通过ZTBC001D配置表把所有单表配置的TCODE整合到一个多表TCODE中.

需要注意的是

单表TCODE,调用ZUPLOAD_TABLE_CONTENT

多表TCODE,调用

ZUPLOAD_TABLE_CONTENT_MUL

目前尚未在项目中实际使用过这个多表导入.

究其原因是实际很少有多表同时导入的场景.因为表间关系比较复杂,往往需要先把多表数据导入一个临时表(主从表),再通过程序处理写入多表.

** THE **

** END **

**约定**

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.

( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.

越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )

SAP 工具箱多表导入程序 - 封面图
SAP 工具箱多表导入程序 - 封面图

**公众号 : syjf1976_abap**

**ABAP开发技巧**

**微信号 : 392077**

请微信联系管理员

syjf1976

sharry_xlp

Yannick_Duan 申请进入公众号讨论群

ABAP技巧与实战

关于作者:ABAP技巧与实战

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「SAP工具箱多表导入程序.md」整理生成,仅用于内部技术分享与学习交流。