ABAP基础知识学习(一)

基础类型

.P

       声明: TYPES mount  TYPE p length 5 DECIMALS 2.

又称为压缩类型.

值范围115整型数字(除去最后的符号位).

若在没有定义长度的情况下,默认为最大长度,15.

点号不算在表示位数内,但表示位数过长的情况下,点号会自动消除,:12,345; 1234567,890,123

小数点可表示最大位数14.小数点部分按四舍五入法取值.

 

.DEC

       DEC(13,2)  长度为13,其中2位小数位.

金额类型.

与类型P的转换公式为:P((n+1)/2)      DEC(13,2) = P(7)

                                            注意DEC(14,2) = P(8) / DEC(15,2) = P(8)

与之相关的常用的domain            DEC13(13位的小数点项目)

                                     DECV13(13位的小数点项目(正负))

DEC15(15位的小数点项目)

                                     DECV15(15位的小数点项目(正负))

金额加算等需要注意溢出(CX_SY_ARITHMETIC_OVERFLOW)

.F

         浮动小数点数

         可表示值范围131.:1000000 1.0000000000000000E+06

         WRITE中的EXPONENT属性可以设定变量的指数,

: f = 1000000. WRITE f EXPONENT 2.10000.000000000000E+02

                                                                          

演算符

+               加算

-               减算

*               乘算

/               除算

DIV             整除

MOD             取模

**              乘方

 

Ø         负数取模(MOD)

:  1 MOD 5 1      25 MOD 7 4

1 MOD -5 1      25 MOD -7 4

       -1 MOD 5 4      -25 MOD 7 3

       -1 MOD -5 4      -25 MOD -73

      

         从上例可以得出以下的结论

①   取模结果只与除数符号有关,与被除数的符号无关

②   所谓的取模即为两数相除后得到的余数,所以取模结果为几的关键是相除后的商是多少.

上例可以看出取模运算的商是两数可除尽的最小整数值.:25/7(4) -25/7-4(3)

可除尽的最小整数值的符号与除数符号一致(-25/-7-4(3))

③   取模结果一般都为正数(取模结果 = | | * 被除数| -  |除数| |)

④   ABAP的取模结果不代表数学上的取模结果,根据编译器的不同, 取模结果也可能不同

        

 

常用函数

     5.55-    (P)

abs(n)                绝对值             5.55

sign(n)         符号值             1.00-

ceil(n)         >n的整数最小值    5.00-

floor(n)        <n的整数最大值    6.00-

trunc(n)        取整数部           5.00-

frac(n)         取小数部           0.55-

 

strlen(str)   取文字列个数(unicode对应)

lines(arg)    取内表的行数

 

逻辑运算符

Ø         数值型(I 型、F 型、P )

=        EQ

<>       NE

<        LT

>        GT

<=       LE

>=       GE

Ø         文字型(CDNTSTRING)

例:f1 逻辑式f2

                   含义                                                                  大小写区分                右侧的空格处理

CO             全包含(f1 f2                                        区分                             处理

CN             CO的相反                                                        区分                             处理

CA             至少包含一个文字(f1 f2                    区分                             无视

NA             CA的相反                                                                           区分                             无视

CS             包含(f1 f2                                            不区分                         无视

NS             CS的相反                                                                           不区分                         无视

CP             与正规表达式匹配(f1 f2                    不区分                         无视

NP             CP的相反                                                                           不区分                         无视

 

1.CO中要注意f1的右侧空格是作为一个文字来进行处理的,看下面的代码

DATA: str1(10) TYPE c VALUE 'abc',

                  str2(10) TYPE c VALUE 'abcdefghij'.

if str1 cp str2.

  write ''.

else.

            write '×'.

endif.

运行结果为'×',原因就在于str1的右侧还包含了7space,而str2中没有space字符。

 

2. CP中可以使用正则表达式,,,转意符#

 

数据处理

Ø         日期,时间处理

:

²         取上个月的最后一天的日期

ultimo      = sy-datum.

ultimo+6(2) = '01'.

ultimo      = ultimo - 1.

²         取相隔时间差

DATA: t1 TYPE t VALUE '200000',

                     t2 TYPE t VALUE '020000'.

diff    = t2 - t1.

seconds = diff MOD 86400.

hours   = seconds / 3600.

 

Ø         字符串处理

²         SHIFT

根据指定文字数向左向右移动,根据指定子字符串的值向左向右移动,删除指定子字符串的值等

²         REPLACE

对字符串进行置换

²         TRANSLATE

对字符串大小写转换及一些简单置换

²         OVERLAY

将第一个字符串内容置换成相同位置的第二个字符串的内容

²         Strlen()

计算字符串的长度(字符串的space不算在字符串长度内)

²         CONDENSE

去除space

²         CONCATENATE

字符串连接

²         SPLIT

字符串分割

²         +OFFSET(LENGTH)

取子字符串

 

内表

Ø         STANDARD TABLE

标准内表,通过索引对表进行访问,所属index table

Ø         SORTED TABLE

所属index table。有索引。

可以设置主键,也可不设。

设置主键后,在行插入(insert)时,可根据主键自动排序。

(但在行追加(append)时,如果追加行的主键值大于内表中最后一条记录的主键值时,会有执行错误发生)

另外,在行检索(read itab from stru)时,可以根据stru中的主键值(主键值以外的项目值被无视)进行检索。

关于主键唯一性的设置 NON-UNIQUE:主键值不唯一/UNIQUE:主键唯一

Ø         HASHED TABLE

哈希内表。

无索引。所以所有关于使用index操作表的语句都不可使用。

必须设置主键。

 

内表操作

Ø         行追加/插入

APPEND            单一/复数行追加。一般用于STANDARD TABLE的行追加。

INSERT                      单一/复数行插入。一般用于SORTED TABLE的行插入。行插入时能根据主键自动按升序排列

COLLECT                     单一行插入,若内表中已有相同主键的纪录,使主键以外的数值型项目相加后,合并。(所以要求COLLECT的操作对象内表中,除主键以外的项目必须是数值类型(i,p,f))。一般用于定义有主键的SORTED TABLEHASHED TABLE的数值求和等

Ø         行更新

MODIFY             单一/复数行内容更新。更新语句一般有下述两种:

                   1. Modify table itab from wa

                   根据wa的主键值进行检索,更新。

所以不建议无主键的内表使用,如STANDARD TABLE。即便使用了,更新的内容也非预期所想的。一般情况下更新内表中的第一条数据。

更新时,若检索主键值存在的情况下,根据检索主键更新。若主键值不存在,则不进行更新,结果返回4          

                   2. Modify itab index sy-tabix from wa

                   根据索引进行检索,更新。

                   HASHED TABLE因为没有索引,该语句不允许被使用。

                   SORTED TABLE虽然允许使用,但如果被更新纪录的主键已被修改的情况下

                   会发生执行错误。建议使用1.

                   STANDARD TABLE中会无条件更新,当然前提是该索引存在的情况下。但

                   即使索引不存在,也不会发生指针溢出的情况。

Ø         行删除

DELETE             单一/复数行删除。

                   MODIFY相似,可根据主键值以及索引进行删除。

                   可多条件删除,如:DELETE TABLE itab: FROM line,

WITH TABLE KEY col1 = 3.

在使用重复值删除(ADJACENT DUPLICATES FROM)的时候要注意,重复值指的是相临的几条数据之间的重复值比较,而非整个内表中的所有记录。所以在使用重复值删除时,最好先根据比较key排一下序。

Ø         表访问

READ               表读取。读取内表中符合检索条件的第一条记录。

LOOP AT            循环读取表纪录。

                   at new compN/at end of compN

                   含义:

-at new compN:在项目comp1compN值变化的第一条数据时执行

                   -at end of compN:在项目comp1compN拥有相同值的最后一条记录

                                     时执行

                   要注意一下几点:

                   1. 关于语句at new compN,不是单单compN值变化时执行的,而是到compN

                  之前的任何一个项目的值发生变化时都会执行。

                   2.在at new compNendat中,有时候不能正常的读取循环领域的值(*)。

                   3.关于GROUP求和(SUM). SUM一般在at end of compN/at last中被使

用。求和结果放在循环领域的同名项目中。SUM求和比较复杂,也不易操作,如同一内表需要对不同的GROUP进行求和的场合,由于1.的原因需要创建与该内表项目名相同但次序不同的多个结构。建议使用COLLECT

Ø         排序等

SORT               key值升/降排序

                   STABLE不破坏原有的顺序,在原有的顺序基础上排序

你可能感兴趣的:(Sap,abap)