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.