ABAP内表操作的基本语法

1、将内表中所有的数据数据拼接在一行上的语法。

(1)CONCATENATE LINES OF GT_ZMTZBZ INTO LV_ZBZ SEPARATED BY '/'.

"将内表中的字段全部拼接在一行,以/的方式隔开。
GT_ZMTZBZ是内表的名字

2、将内表中几个字段进行拼接的语法

(2)CONCATENATE LV_ZBZ1 LV_ZBZ2  INTO LV_ZBZ SEPARATED BY '/'.

这句话只能拼接几个字符,个数是确定的
LV_ZBZ1 LV_ZBZ2是两个字段的名字
eg: * CONCATENATE合并字符串

 DATA: c1(10)  TYPE c VALUE  'Sum',
        c2(3)   TYPE c VALUE  'mer',
        c3(5)   TYPE c VALUE  'holi ',
        c4(10)  TYPE c VALUE  'day',
        c5(30)  TYPE c ,
        sep(3)  TYPE c VALUE ' - '.
  CONCATENATE c1 c2 c3 c4 INTO c5.
  WRITE c5.
 CONCATENATE c1 c2 c3 c4 INTO c5 SEPARATED BY sep.
 WRITE / c5.
输出结果:
Summerholiday
Sum - mer - holi - day

3、modify 的使用

modify 内表 from 工作区。
modify用于更新和新增数据,当表中没有数据时就新增,有就修改。

4、在函数模块中建立的表要进行赋值的话,一定要用传入的参数中的字段才能进行赋值。

5、如果在ALV中出现了重复的列,那么要删除fieldcat的内表值。

6、INTO CORRESPONDING FIELDS OF TABLE

INTO CORRESPONDING FIELDS OF TABLE 是根据字段名匹配,如果有时候定义的内表直接参照一个表的话,没有单独为他写一个结构,那么在添加数据的时候就需要加上这句话。

7、内表的整体赋值:

如果想一次 将内表的全 部内容复制 到另一内表 中,请使用 MOVE 语句或赋值 操作符 (=),用 法如下:
MOVE TO . 该语句等价于:
= .

8、如何删除动态内表中的数据以及怎样写条件。

  READ TABLE  <DYN_TABLE>  ASSIGNING <DYN_WA>  WITH KEY (<LFS_MATNR>)= LS_MARD-MATNR
 (<LFS_WERKS>) = LS_MARD-WERKS
 (<LFS_LGORT>) = LS_MARD-LGORT.

9、删除内表中因为某一列有重复的数据

SORT GT_KEY BY MKMNR DESCENDING. "如果要按照某个字段进行删除的话,那么一定要先按照那个字段进行排序
DELETE ADJACENT DUPLICATES FROM GT_KEY COMPARING MKMNR. "删除MKMAN相同的重复列
MKMNR是内表中字段的名字。

10、SELECT DISTINCT

distinct 去掉重复的 取唯一

11、在ABAP 中左连接LEFT JOIN、右连接NIGHT JOIN后,不能使用WHERE 加限制条件,否则会报错:

12、使用SELECT语句选择查询:

SY-SUBRC = 0: 至少有一行数据,当ENDSELECT语句执行完,SY-DBCNT中保存着记录的个数。
SY-SUBRC = 4: 没有数据。
SY-SUBRC = 8: 只有使用“SELECT SINGLE FOR UPDATE”时才会有,
表示: WHERE条件指定的记录不止一行,结果是没有记录被选中。

13、使用INSERT语句,向表中插入一行,必须注意INSERT的顺序与表中字段的顺序一致:

SY-SUBRC = 0: 插入成功,SY-DBCNT包含了插入的行数,0或1。
SY-SUBRC = 4: 由于有相同的KEY存在,所以插入失败。
13、使用LOOP语句来遍历一个内表:
SY-SUBRC = 0: 循环至少被执行一次。
SY-SUBRC = 4: 循环没有被执行,可能是没有数据,也可能是没有符合条件的记录。

14、使用DELETE语句来删除一条记录:

SY-SUBRC = 0: 找到一行并删除之,如果该表有不唯一主键,也就是有多条重复的记录,则只删除第一条记录。
SY-SUBRC = 4: 没有找到符合条件的记录,也没有删除。

15、使用UPDATE语句来更新一条记录:

SY-SUBRC = 0: 找到记录并更新,(如果有多条记录呢?)
SY-SUBRC = 4: 没有找到符合条件的记录,也没有更新。

16、sy-index和sy-tabix字段

sy-index和sy-tabix都是系统字段,用来记录循环的次数。
sy-index 在DO…ENDDO循环里有效;
而sy-tabix在loop at …endloop里有效。

17、一个表中有物料另一个表中没有此物料,如何写该语句

SELECT MBEWH~MATNR
     FROM MBEWH
    WHERE MBEWH~BWKEY IN @S_WERKS
    INTO TABLE @DATA(LT_MATNR).
SELECT MBEW~MATNR,
       MBEW~SALK3, "总价值
       MBEW~LBKUM,  "总库存
       MBEW~LFGJA,
       MBEW~LFMON
  INTO TABLE @DATA(LT_MBEW1)
  FROM MBEW
  FOR ALL ENTRIES IN @LT_MATNR
  WHERE MATNR <> @LT_MATNR-MATNR
       AND MBEW~BWKEY IN @S_WERKS.

18、定义一个包含表头的内表

data: begin of lt_mat occurs 0,
matnr type matnr,
maktx type maktx,
end of lt_mat.

19、参考数据结构来定义内表

data: lt_mat like table of ls_matnr with header line

20、参考数据结构来创建内表

data:begin of lt_matnr occurs 0.
include structure ls_matnr.
data:end of lt_matnr.

21、constants定义常量,需要赋予初始值,且常量在程序运行中不能被更改

eg:constants l_str(10)type c value ‘hello world’.

22、内表,字符串以及循环的处理

(1)读内表是加上扩展语句 binary search.
eg: read table tab1 with key id = ‘01’ binary search.
(2)通过loop语句循环读取内表时,可以根据数据需求加上where条件

23、ABAP中的系统字段

(1)sy-batch
sy-batch ='X ’ 是后台运行,
sy-batch等于空就是前台运行。

24、Ranges的用法

Eg:

 RANGES: R_HKONT FOR BSEG-HKONT.
  R_HKONT-SIGN = 'I'.
  R_HKONT-OPTION = 'CP'.

1.SIGN 值为 I 和 E 。 I是包含, E是排除, 一般使用I。
2.OPTION 如果HIGH 为空 ,为单值选择 。有 EQ、NE、GT、LE、LT等逻辑操作 对于*的 CP包含 NP是排除

  • 如果HIGH 不为空 为区间选择 有BT,NB可选
    3.LOW 低值
    4.HIGH 高值

25、AT NEW 和AT END OF 的用法

AT New f 或者 AT END OF f
f 是内表的一个字段,当f字段或者f字段左边的字段内容发生变化是该事件后面的语句都会执行。
使用 AT NEW f … ENDAT。 和 AT END OF f … ENDAT。 时需要注意:
1,f 必须是内表的第一个字段。
2,内表中f 之后的字段的值都会变成 *。

26、 read Table的语句使用注意点:

(1)READ TABLE itab WITH KEY = v BINARY SEARCH.
(2)WITH KEY 中的检索条件比较符不能使用‘<>’(不等于)。
(3) read table 和loop table 中的条件问题:

Eg: READ TABLE  GT_BSEG_CFL INTO  LS_BSEG_JE WITH  KEY BELNR =  <LFS_BSEG>-BELNR.

BELNR 字段是 GT_BSEG_CFL 表中的字段,
<LFS_BSEG>-BELNR 字段是另一个内表中的字段

Eg:LOOP AT GT_ZFIT0045 INTO LS_ZFIT0045 WHERE ZFIHKONT1 =  GS_OUTPUT-HKONT. 

endloop.
ZFIHKONT1字段是GT_ZFIT0045表中的字段。
GS_OUTPUT-HKONT字段是另一个内表GT_OUTPUT中的字段。

27、把一个内表的数据追加到另外一个内表

如果要保留目标表的数据:append lines of it_tabA to lt_tabB.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值