学ABAP一段时间了,一直误打误撞的,没看理论知识,每次看到系统标准表里的字段类型,然后再看看ABAP的类型,两个总对不上。也没去谷歌,也没去问人。
今天看到这个文档,才解释清楚之前的疑惑。哈,今天赚了。
知识点(1)
数据字典预置类型 | ABAP类型 | 运行长度 | 说明 |
ACCP | N(6) | 6 | 会计计算周期 |
CHAR | C(n) | 1-255 | 字符 |
CLNT | C(3) | 3 | 集团,数据区域代码 |
CUKY | C(5) | 5 | 货币代码 |
CURR(n,m) | P((n+1)/2)DECIMALm | 42736 | 货币金额 |
DATS | D(8) | 8 | 日期 |
DEC n,m | P((n+1)/2)DECIMALm | n(1-31)m(1-17) | 数值计算 |
FLTP | F(8) | 18 | 浮点数 |
INT1 | X(1)(类型b) | 3 | 单字节整形数 |
INT2 | X(2)(类型s) | 5 | 双字节整形数 |
INT4 | X(4)(类型i) | 10 | 四字节整形数 |
LANG | C(1) | 内部1位外部2位 | 语言代码 |
LCHR | C(n) | 256-最大值 | 长字符 |
LRAW | X(n) | 256-最大值 | 长位字串 |
NUMC n | N(n) | 1-255 | 数值文字 |
PREC | X(2) | 16 | 精确度 |
QUAN n,m | P((n+1)/2)DECIMALm | 42736 | 数量 |
RAW n | X(n) | 1-255 | 位字串 |
TIMS | T(6) | 6 | 时间 |
VARC n | C(n) | 255-最大值 | 长字符(仅3.0前可用) |
STRING | STRING | 1-最大值 | 字符串 |
RAWSTRING | XSTRING | 1-最大值 | 位字符串 |
UNIT | C(n) | 2~3 | 单位 |
数据定义: 知识点(2)
TYPES:BEGIN OF t_staff,
S_no(3) type n,
Name(20),
END OF t_staff.
DATA staff TYPEt_staff.
定义了一个结构类型t_staff, 里面包含了 员工工号,员工姓名两个字段。并根据其声明了一个结构体对象staff.
结构比作人,社会赋予人人的各属性是这个结构的字段。
TYPES:BEGIN OF HUMAN,
ID(18) TYPE N, "身份证号码
NAME(20), "姓名
AGE(2) TYPE N, "年龄
BOB TYPE D, " 生日
HIGE TYPE F, "身高
WIGHTH TYPE F, "体重
END HUMAN.
知识点(3)
通用逻辑表达式列表: 把后面的英文记住了,这几个符号也就记住了。
运算符 |
意义 |
EQ或= |
等于 (Equal) |
NE或<>或>< |
不等于(NotEqual) |
LT或< |
小于(LESSTHAN) |
LE或<= |
小于等于(Less than orEqual to) |
GT或> |
大于(GreaterThan) |
GE或>= |
大于等于(Greater than orEqual to) |
知识点(4)
types定义的并不是结构体对象,只是结构类型,不能作为工作区,当定义的内表没有表头行(工作区)时,必须为其定义一个结构体作为工作区,否则无法使用此内表.如果没有给内表定义工作区,则在定义内表时必须声明表头行(withheader line).
DATA:BEGIN OFline, "work area(structure)结构类型且结构体对象
num TYPE i,
sqr TYPE i,
END OF line,
"无表头行内表,内表定义都使用data关键词.
itab TYPE(LIKE)STANDARD TABLE OF line WITH KEY table_line.
DATADIRTAB LIKE CDIR OCCURS 10 WITH HEADER LINE.定义标准内表
知识点(5)
1.TYPES与DATA区别:TYPES是用来定义某种类(型)的,需(用DATA语句)实例化以后才可以使用,而DATA是用来定义数据对象(实例变量)的,对于用DATA直接定义的结构体对象(不参照其它结构类型),其同时也是一个结构类型.
2.TYPE与LIKE区别:TYPE后面跟随的只能是某种类(型),而LIKE后面可以跟随类型或实例对象,参照结构体对象生成内表时只能用LIKE,不能用TYPE,因为结构体对象不是类型,只是一种实例对象,参照结构类型生成内表时可以用LIKE也可以用TYPE.其中通过LIKE定义的内表直接拥有参照结构类型的元素结构,而通过TYPE定义的内表只能间接拥有被参照结构类型的元素结构,结构类型不能作为内表的工作区,只有结构体对象才可以.
知识点(6)
注:CLEAR itab[].表示操作的是内表对象.而CLEAR itab.当itab有表头行时表示操作表头行,如无表头行时表示操作内表对象.
内表分有表头的内表和没表头的内表。
clear itab 和clear itab[] 是有区别的,clear itab[] 操作两种情况的内表。clear itab 操作的是当内表有表头时,操作表头;没表头时,操作内表对象。这样理解对吗?
理解错了,CLEARitab[].:只清空整个内表对象数据.不清空表头行
知识点(7)
下面这个很难理解,我都看了5遍了。
控制级操作(用于总计,缩进,格式控制等)
AT FIRST|LAST|NEW f|END OF f.
ENDAT.
说明:
l FIRST:当循环为内表的第一行时,执行语句块中语句.在工作区中,系统用*填充所有关键词内容.
l LAST:当循环为内表的最后一行时,执行语句块中语句.在工作区中,系统用*填充所有关键词内容.
l NEW f:字段f前面(即左边)的全部字段内容之一不同于上一行时,执行语句块中语句.在工作区中,系统用*填充f后面所有关键词内容.
l END OF f:如果下一行行组中的任何字段内容不同于上一行,执行语句块中语句.在工作区中,系统用*填充f后面所有关键词内容.
注:在控制级操作期间,在工作区中,对于非标准关键词段,将全部进行初始化,在执行完控制操作后(即ENDAT语句后)工作区中的数据将全部还原到进入控制级操作语句前(即进入AT前)状态.
知识点(8)
FOR ALL ENTRIES IN ITAB ”相当于循环输出内表在WHERE子句中出现的 意义相当于where子句。