内表表头

【博主SAP/ABAP交流群689746838

 

假设ty_ab是个结构类型。

带表头的内表定义:DATA gt_ab01 TYPE STANDARD TABLE OF ty_ab WITH HEADER LINE.

不带表头的内表定义:DATA gt_ab02 TPYE STANDARD TABLE OF ty_ab.

 

首先,带表头的内表在很久以前就是SAP不再推荐的做法了,除非是改老程序等特殊情况,自己新开发程序建议不要再使用带表头的内表。带表头虽然可以让代码简洁一些,但是容易引起歧义,也不方便阅读。而且在OO环境里(比如BADI)已不支持带表头的内表了。

 

接着介绍下带表头的内表的一些特点以及与不带表头的内表的用法差异。

内表带表头,即变量名既可以代表内表本身,也可以代表表头,具体代表什么要看具体使用环境,以gt_ab01为例:

LOOP AT gt_ab01.

ENDLOOP.

此时gt_ab01是内表。

 

gt_ab01-col = 'XXX'.

此时gt_ab01是表头。

 

清空带表头的内表,必须是CLEAR gt_ab01。如果没有[],则系统只是会清空表头,而不会清空内表。同理,判断内表是否为空,也必须是IF gt_ab01[] IS NOT INITIAL.。不带表头的内表,由于变量名总是内表,所以使用时不需要加[]。

 

带表头的内表和不带表头的内表不能互相赋值。

gt_ab01 = gt_ab02或gt_ab02 =gt_ab01都会有编译错误,需要写成gt_ab01[] = gt_ab02或gt_ab02 = gt_ab01[]。但有一种情况例外,即FUNCTION MODULE里的Tables参数,定义在Tables里的参数默认都是带表头的内表。

CALL FUNCTION 'ZFUNCTION'
  TABLES
    et_ab = gt_ab

无论gt_ab是否带表头,都是可以的。

 

目前Tables参数也不建议在RFC以外的场合使用,如果要使用内表参数,则先在SE11里根据结构定义表类型,然后在Import,Export或者Changing里使用,在这三个参数里的内表都是不带表头的,在调用时不能给带表头的内表。

 

总结,推荐做法是先定义类型,再参考该类型定义不带表头的内表和结构,例如:

TYPES:

BEGIN of ty_ab,

col1 TYPE int,

END of ty_ab.

 

DATA:

gt_ab TYPE STANDARD TABLE OF ty_ab,

gs_ab TYPE ty_ab.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值