Fixed data objects(固定数据对象)
Literal:文字 例:”hello world”
Constant: 常量
使用constants 可以定义ABAP常量, 注: 常量第一次被赋值后,就不能再更改
Data object(数据对象)包括
变量
literal文字
constant常量
Value assignments(赋值)
早期赋值:使用关键字 move A to B 进行赋值 (类似于汇编语言)
新赋值: A = B 注: “=” 左右要各有一个空格
注:常量在定义期间就需要赋值.
Calculation (计算)
早期运算: 使用关键字 compute
新运算: 不使用关键字compute
Sbc400focc是数据字典中的结构体,表示占坐率.
Arithmetic expression_r nested 可以互相嵌套
重点:
“/” 与 div 区别:
1.“/” 运算后结果被四舍五入
2.Div 运算后的结果可以取整但不四舍五入
Strlen方法可以计算字符串长度 length = strlen ( cityfrom )
Conditional branching(条件分支)
分支语句包括: 单分支,多分支.
单分支:if
多分支:case 注: case后要跟变量, 跟常量没有意义.
注意: 分支语句中的每一条语句必须以”.”作为语句结束,并使用endif / endcase 作为分支语句结束.
If三种句式
If c1
St1
Endif
If c2
St2
Endif
……n
执行结果最少为0 最多为1
If c1
St1
Elseif c2
Str2
…n
Endif.
执行结果最少为0 最多为1
If c1
St1
Elseif c2
St2
…n
Else
……
Endif.
有且只有1个结果执行
老师包名:ZBC400_200
ZBC400_200_01 – 08 老师的包
Loops(循环)
循环一共分5种
Do [ n times ] […].
Stat.
Enddo.
Do.
Stat.
If <abort_condition>
Endif.
Enddo.
While(logical_expression_r).
S1.
Endwhile.
Loop at …
Stat.
Endloop.
Select …
Stat.
Endselect.
loop counter :sy-index (计数器)
Sy-index 是全局结构体变量
注:只适用do 和while循环,不适用于select 和loop循环
注意:在abap程序中没有boolean类型, C(1) 可以用来判断正误,‘X’ 代表正确
循环退出关键字
Exit:退出循环
Check:后面跟条件,当满足条件时,退出循环
注:在非easy access 中需要使用/h + tcode 来结束当前屏幕进入目标屏幕.
Dialog messages(会话消息)
Messaga( 消息 )
作用: 给用户提示消息,可以弹出窗口,也可以显示在状态栏中(由message type 控制)
Message tnnn ( message_class )[ with v1 [ v2 ] ….]
Tnnn: 消息类型 nnn是三位消息的编号
Message class: 消息类型(理解为消息的包)
中括号中作用 传送变量
Type 类型
S:status message 程序不中断 显示在状态栏
I:information 程序先中断在执行 模态窗口显示
W:warming ----context dependent状态条显示
E:error ---context dependent 状态条显示
A:termination 模态窗口显示
X short dump 把堆栈倒出来便于调试.
modal模态
弹出对话框以后,该窗口会占据所有的焦点(不能点其它窗口).而在非模态中,可以随意切换窗口.
几种中断的区别:
interruption中断(计算机中断),但不结束程序
termination, 终止 结束程序
abort 退出程序,异常退出
exit 退出循环
带参数传递的消息
每次执行程序的时候 可以传递参数
在message 编辑界面中的 text 栏里 加 &1-&n ,也可以加多个,用空格隔开
ABAP Debugger
作用:跟踪内存变量的变化
右键点击程序execute – debugging 进入调试界面
Abap调试工具分为老版本和新版本
版本切换切换debugger – switch to classical debugger 转换版本
Single step 执行单步
Return 如果进入一个子程序 , 直接返回
Run 直接到下一个断点
用鼠标双击语句 设定断点
双击变量或结构体 可以查看值
半路杀入法
在进入一个selection screen中后
在command film 中 输入 /h
再运行 就是debug状态
Structure 结构体
定义结构体主要有两种类型
1. 来自于全局字典库
a) Tables spfli. 定义了一个与透明表同名的结构体变量.
b) Data sa type spfli. 通过透明表定义了一个名为sa的结构体变量
2. 来自于用户定义的
局部结构体类型:
Types: begin of st_XXX…...
…
End of st_XXX.
根据局部结构体类型定义结构体.
Data wa_XXX type st_XXX.
Addressing structure components.(结构体的访问)
结构体-字段名
Wa_scarr-carrid.
结构体类型的字段是 类型
结构体变量的字段是 变量
结构体字段同名拷贝
Move-corresponding wa_flight to wa_focc.
move:当两个结构体 结构和类型 完全相同时拷贝才会不出现问题.
Move-corresponding : 同名字段拷贝, 拷贝两个结构体的交集 (同名同类型的字段).
Move-corresponding机制:
双循环, 先取第一个结构体中第一个字段,然后到另一个结构体找同名字段进行匹配
Internal tables 内表(重中之重)
内表:Internal memory table 内存中的表
信息系统的三层结构
1. 计算机屏幕
2. 内存
3. 数据库表
注意:在ABAP语言中不提供二维数组,内表相当于二维数组, 它是一个表示内存的二维数据结构(m行*n列).
与传统二维数组的区别,二维数组的m*n 在编译期就已经确定多少个房间了,而内表的行数量是可以动态拓展的.
内表可以与以下几项进行数据交换
屏幕
磁盘文件
数据库表
打印机(只能将数据传递给打印机, 而不能反传)
Attibutes of internal tables.
一、Line type 内表行类型
1. 确定行类型 就是确定行中的 字段 和 字段类型
2. 用结构体 或 透明表 可以作为内表的 行类型
3. 内表可以当成数组.
4. 采用只有一个字段的结构体 或 一个不可再分的类型作为行类型,此内表就相当于一个数组
二、Key definition.键定义(和主键很像)
1) Table key 表键
2) Table key:unique(唯一) / non-unique(不唯一,区别数据库)
3) Components :构成键的字段,顺序敏感 , 顺序不同 table key也就不一样
三、Data access type 数据访问类型
1. Index access根据行号访问
2. Key access 根据table key访问
内表的类型
一共有三种内表类型
1. Standard table
访问: index access(推荐) , key access
Table key: non-unique
2. Sorted table
天生就有排序的功能,插入数据后就会按照 table key排序
访问: index access , key access(推荐)
Table key: unique / non-unique
3. Hashed table
访问: only key access
Table key :unique.
Sorded table , 推荐使用 table key 访问,天生排序 自动按照二分法 查找
Full scan 全表扫描
Binary search 二分法
对排序后的线性结构,先折半,
Hash table
不能通过索引访问
Table key unique
Index tables 线性
Hashed table 相当于一个筐.
内表的定义
定义内表
1) 通过字典库的内表类型定义内表变量
2) 采用局部内表类型定义内表变量
Tables <结构体>/<透明表>. 创建与<结构体>/<透明表>同名的结构体
通过Se11可以查看字典库中的内表和透明表
对内表的操作
对内表操作,需要先建立一个结构体
使用结构体对内表的数据进行操作
在一个排序内表中
例如行号分别是 a,b,c,d,e
当插入一个 table key 为d的数据时
系统会将该条记录自动插入到c数据后面
change修改: modify table itab from wa [<condition>]
先将数据放到一个结构体的 然后 将结构体覆盖回去
Collect 操作语句:
COLLECT wa INTO itab
table key 后面的字段需要都是数字类型的字段,
这样可以进行累加
Collect 语句流程:
1. 非table key字段必须全是数字
2. 当使用该语句进行插入时,如果结构体的table key字段和内表中的table key字段相同,系统将会把结构体中 非table key字段中的数值累加到内表的相应字段中.
3. 如果table key字段没有对应, collect 操作将相当于 append,将数据追加到内表的末尾
对内表多行记录的读取
Loop at itab into wa <condition>.
对wa进行处理
Endloop.
Delete itab<condition>
Insert lines of itab2 <condition 数据条件>.
Into itab1 <condition 插入位置>.
Append lines of itab2 <condition1> to itab1.
注:对于标准表来说 insert如果没指定位置就相当于append
Sort 排序
Sort itab <condition>. 对标准表有实际意义
Condition : by f1 ascending / descending
1. Refresh: 把内表的空间都清空
2. Free: 全清,释放内存
3. Clear: 如果一个internal table 如果没有head line , 功能和refresh一样, 如果有hl ,就只清空head line
Head line
定义一个 带有head line 的内表
Data itab type table of spfil with head line.
在声明一个内表的同时 ,就赠送一个结构体 head line ,名和内表的名相同.
一个拥有head line 的内表itab中, itab 表示head line 而 itab[] 表示内表,
插入的语句可能省略成 appent itab.(不提倡)
在ABAP语言中 操作一个二维internal table 往往通过一个 结构体来完成.
Data wa type spfli.
Data itab type table of spfli.
Wa-carrid = ‘AA’.
Append wa to itab.
如果在排序后加 stable (不确定)
一个内表在排序之前,可能存在相同的table key,使用stable语句,可以保证相同key的数据顺序不会发生变化