ABAP 内表的定义,与PERFORM传值的定义<转载>

很早之前就想总结一下内表和定义和perform的传值定义,结果要么没时间,要么有时间忘了。
今天在网上看到一个博文写的还比较清楚,故读书人窃来一用 ^ - ^
原文链接:https://blog.csdn.net/lmf496891416/article/details/117702217
问题描述: 许多同学在内表定义还有很多种,其实掌握两种就好了;DATA的用法那么多,该怎么用?还有就是PERFORM创建之后,传值有什么讲究,老是参考定义不对劲。
此博客就是解决这两个问题

一,普通程序需要定义结构
1.全手动定义的结构

TYPES : BEGIN OF typ_alv ,
          aufnr TYPE   afpo-aufnr, "生产订单
          auart TYPE  aufk-auart,   "订单类型
          mes     TYPE  char200,
        END OF typ_alv .
DATA : gs_alv   TYPE typ_alv,  "alv报表的结构,传一行数据的
       gt_alv   TYPE TABLE OF typ_alv. "ALV内表

2.包含表或者结构另外加上自定义字段作为结构

DATA BEGIN OF typ_alv .
INCLUDE TYPE ztsd_kpsq ."包含自己创建表的所有字段
DATA     VKGRP    TYPE  VBAK-vkgrp.
DATA     del        TYPE      c. "删除标记
DATA END OF typ_alv .
DATA : gs_alv LIKE typ_alv,     ""alv报表的结构,传一行数据的
       gt_alv LIKE TABLE OF typ_alv. "ALV内表

3.包含表或者结构另外加上自定义字段作为结构 的另一种写法

DATA:BEGIN OF GT_P9402 OCCURS 0.
       INCLUDE TYPE PA9402.
DATA:ZKPR TYPE PA9402-ZZ_KQGSSC, "记录当前周的工时总和
     KOSTL TYPE PA0001-KOSTL, "成本中心 add by cycle 20230418
     END OF GT_P9402.

现在很少定义带头的表了,因为它既可以是结构,也可以是内表,这样很容易混淆。比如:DATA gt_return LIKE bapi_matreturn2 OCCURS 0 WITH HEADER LINE.

二.DATA可以即时定义,建议在form中使用,很灵活。
1.SQL 语句中使用

"查询航班表的承运方为AA的数据
SELECT
     *
FROM sflight
WHERE carrid = 'AA'
INTO TABLE @DATA(lt_sflight) . "lt_sflight定义为含有SFLIGHT中所有字段的内表

SELECT SINGLE
     *
from sflight
where carrid = 'AA'
INTO  @DATA(ls_sflight) ."ls_sflight定义为含有SFLIGHT中所有字段的一行数据的工作区

2.LOOP 语句使用

  LOOP AT lt_sflight INTO DATA(ls_sflight)."ls_sflight根据lt_sflight自适应的工作区
   clear:ls_sflight。
  ENDLOOP.

3.READ 中的使用

READ TABLE lt_sflight INTO DATA(LS_sflight) WITH KEY ........

4.临时自适应的变量

 DATA(ilen) = strlen( IS_DATA )."查字段长度。

三.perform的使用方法

 PERFORM f_clientdata    TABLES   lt_extensionin    "填充CLIENTDATA
                                     lt_extensioninx
                            USING    ls_alv
                            CHANGING gw_clientdatax
                                     gw_clientdata
                                     gw_bapi_te_marax
                                     gw_bapi_te_mara .

FORM f_clientdata   TABLES   lt_extensionin     STRUCTURE bapiparex
                             lt_extensioninx   STRUCTURE   bapiparexx
                     USING   gs_alv            TYPE  zsmdm_matnr_detail
                    CHANGING gw_clientdatax    TYPE bapi_marax
                             gw_clientdata     TYPE bapi_mara
                             gw_bapi_te_marax  TYPE bapi_te_marax        "声明客户端层次物料数据
                             gw_bapi_te_mara   TYPE bapi_te_mara  .       "声明客户端层次物料数据
ENDFORM.                             

TABLES:把内表传入form中,内表值可以有变化
USING:只能传个一条数据的工作区进来,而且数据不能变化,强行变值,也传不出去。
CHANGING:传一条数据的工作区进来,值可以变化。

FORM 传值变量的定义
TABLES: 一般参考结构:内表 STRUCTURE 结构。

USING /CHANGING:
工作区 STRUCTURE 结构
工作区 LIKE 结构
工作区 TYPE 结构
这些都可以哟!

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值