SAP 小技巧动态内表的定义及使用

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

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

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

前言

一般情况下,为了程序适用性更好,我们需要定义动态内表.来获取并呈现数据.

标准事务代码SE16N就是一个动态内表的典型应用.

动态报表中大量使用了动态内表定义.

> 详见链接-动态报表简介 无峰,公众号:ABAP 技巧与实战 [ 动态报表简介

> ](http://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247484349&idx=1&sn=7160806c652949599e972738b3f27f33&chksm=cf5dde8bf82a579d930094caea2792af92886b0bf0f4307839b9b0f0f20eeb51fbced0b1c78b#rd)

**本文主要介绍动态内表的定义及使用方式**

定义方式一

参考数据字典结构定义, 这种方式比较简单, 但是不够灵活. 在一些特定场景推荐使用.

SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图

定义方式二

调用静态类方法

cl_alv_table_create=>create_dynamic_table 定义. 这种方式定义动态内表在一个进程中最多只能定义36次.

超过36次会报错.

其中 传递的内表 IT_FIELDCATALOG 可以通过函数

LVC_FIELDCATALOG_MERGE 传入表或结构获取

**36次限制原因及处理方式**

**SPRING**

该静态类方法中使用临时生成代码的方式产生数据的定义(这种办法也可以用来创建函数,计算逻辑表达式的结果或者计算表达式的结果,以后又机会写文介绍一下).

这种临时生成的代码池在一个进程中有次数限制. 可以使用SUBMIT <过度程序> 或 CALL FUNCTION IN NEW TASK

启动新的进程解决这个限制.

SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图

定义方式三

调用静态类方法 cl_abap_tabledescr=>create 定义. 这种方法没有最大次数限制.推荐使用.

使用该方法,重要是构造内表LT_COMPS.

该内表参考类型ABAP_COMPONENTDESCR 定义.(图一)

其中

• NAME 用来方字段名称

• TYPE 用来方字段类型.

TYPE 可以通过类方法

CL_ABAP_ELEMDESCR=>DESCRIBE_BY_NAME 传入一个数据元素定义. 暂时没有发现通过基本类型及长度来定义 TYPE 的方法

图二. 暂时把这个作为这种方式定义动态内表的局限.(如果你有不同的看法, 欢迎加微信392077沟通).

SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图

图一

SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图

图二

SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图

定义动态哈希内表

上述方式定义的都是标准内表. 如果需要定义哈希内表.只需要 在定义好的动态内存基础上, 补充主键部分即可.

SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图

动态内表的处理

因为内表是动态定义的, 所以对字段的访问也必须使用动态的方式.

如下图 循环动态内表 ASSSIGN 到一个 工作区指针

通过 ASSIGN COMPONENT <字段名> OF STRUCTURE TO FIELD-SYMBOL(<FS>)

动态把指定字段的内容写入指针<FS> . 对指针<FS>的修改将会影响内表中该字段的值.

也可以使用索引的方式动态访问工作区. 详情见ASSIGN 语句的语法帮助.

SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图

整合定义动态内表的类

因为常规动态内表的定义方式二与方式三各有优劣,所以通过类整合了动态内表的定义, 一般情况下,使用方式三, 当方式三无法处理时, 使用方式二.

同时整合了动态哈希内表的定义

SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图

总结

动态内表的使用将给程序带来极大的灵活性.

使用动态内表,结合动态SQL语句,动态选择屏幕. 我们可以开发出类似与SE16N的程序:指定任意表显示或修改内容.

** THE **

** END **

**约定**

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

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

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

SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图

**公众号 : syjf1976_abap**

**ABAP开发技巧**

**微信号 : 392077**

**公众号主群加入受限, 请扫码加入副群后,向管理员申请加入主群**

SAP 小技巧动态内表的定义及使用 - 封面图
SAP 小技巧动态内表的定义及使用 - 封面图
ABAP技巧与实战

关于作者:ABAP技巧与实战

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

来源说明:本文内容由「SAP小技巧动态内表的定义及使用.md」整理生成,仅用于内部技术分享与学习交流。