内表
数据类型定义
类型名称描述属性
C字符类型默认长度=1,默认值=blankN数字类型默认长度=1,默认值=“0…” 该类型不能进行计算,如电话号I整数类型默认长度=1,默认值=0D日期类型标准固定长度为8位,默认值=“00000000” 格式"YYYYMMDD"P包类型默认长度=1,默认值=“0”T时间类型标准固定长度为8位,默认值=“000000” 格式"HHMMSS"F浮点类型X十六进制默认长度=2,默认值=“00”
变量的声明
按类型定义变量
DATA <变量名>(<长度>) TYPE <数据类型> VALUE <默认值>
按参考定义变量
DATA <变量1> LINE <变量2>
DATA : 变量1 TYPE C VALUE "XX" .
变量2 LINE 变量1 .
变量初始化
CLEAR <变量名>
定义常量
CONSTANTS <常量名>(<长度>) TYPE <数据类型> VALUE <默认值> .
结构体
结构体定义
DATA : BEGIN OF <NAME> ,
XX TYPE 类型 ,
END OF <NAME> .
DATA : DD LIKE NAME . "能够参考其他类型结构体来新建
结构体赋值
MOVE-CORRESSPONDING 有值的结构体 TO 无值的结构体 "赋值
结构体继承
DATA : BEGIN OF XX .
include structure 结构体 .
DATA : .. TYPE 类型 .
END OF XX . "结构体中新增字段
内表数据管理
内表的定义
TABLES : XXX . "参考透明表时,必须先引入定义
DATA : BEGIN OF XX .
NAME like XXX-NAME .
END OF XX .
*定义一个初始大小为10,并有 header line 的内表
data : xx1 type standard table of xx initial size 10 with hesder line .
*定义大小20,没有 header line 的内表
data : xx2 like standard table of xx initial size 20 .
*定义初始值为10 并有 header line 内表
data : xx3 like xx occurs 10 .
*定义排序表,以name为关键字,该表中name字段数据不重复
data : xx4 like sorted table of xx with unique key name initial size 10 with header line .
*定义初始化值为0的哈希表
data : xx5 like hashed table of xx with unique name with header line .
内表赋值
方式1 : 有 header line 的内表
tables : xxx .
data : begin of xx occurs 0 .
name like xxx-name .
end of xx .
xx-name = 'tang' .
append xx . "数据被赋值给内表 header line 后再append到表中最后一行
方式2 : 无header line 的内表
tables : xxx .
data : begin of xx .
name like xxx-name .
end of xx .
data : xxxx like standard table of xx .
xx-name = 'tang' .
append xx to xxxx . "数据赋值给工作区后再append到表中
方式3 : open sql
tables : xxx .
data : begin of xx occurs 0 .
name like xxx-sname .
end of xx .
select sname as name
into table xx
from xxx . "通过open SQL将从数据库中抓取的数据直接复制给内表
内表的清空(4种)
clear 内表名 :仅清空表头行(header line),对内表数据存储空间不影响refresh 内表名 :清空内表数据存储空间,对(header line)不影响refresh 内表 from table 数据库表 :清空内表存储空间,填充从数据库表所获取数据free 内表 :清空内表数据存储空间,对(header line) 不影响
insert (向内表插入数据)
insert xx into table xxx . "将结构体中数据新增到内表中
insert xx index 1 . "若内表中有多行数据,该语句将新记录新增到第一行
modify (直接修改内表数据)
modify xx index 1 . "修改内表第一行数据为设定值
modify xx transporting 字段 where 条件 . "按条件修改字段
sort (排序)
sort xx by f1 f2 f3 descending . "按f3降序排序
sort xx ascending by f1 f2 f3 . "f1 f2 f3 按升序排序
read (读取内表数据)
read table xx from wa .
read table xx with table key k1=v1 .. binary search .
read table xx index 1 .
使用 read 操作的表必须有 header line 作为查找出的数据存储窗口, binary search 可以提高内表数据查找速度,但是使用前必须对内表进行排序
loop (循环读取内表数据)
loop at xx from n1 to n2 . "读取内表中n1到n2行
loop at xx where 条件 . "安具体字段条件读取内表
数值运算
比较运算符
EQ (=)等于
NE (<>)不等于LT (<)小于LE (<=)小于等于GT (>)大于GE (>=)大于等于
逻辑运算符
AND与
OR或NOT非
子程序的建立调用
子程序定义
perform xx . "调用子程序
form xx . "定义子程序
..
endform .
接口参数的定义使用
向子程序中直接传输参数,该传输值在子程序中不可改变
FORM BUILD_FIELDCAT .
CLEAR : GT_FIELDCAT .
PERFORM FRM_EDIT_FIELDCAT USING 'WERKS' '工厂' .
PERFORM FRM_EDIT_FIELDCAT USING 'LGORT' '仓库' .
ENDFORM.
FORM FRM_EDIT_FIELDCAT USING P_FIELD TYPE STRING
P_TEXT TYPE STRING .
ADD 1 TO GS_INDEX .
GS_FIELDCAT-COL_POS = GS_INDEX .
GS_FIELDCAT-FIELDNAME = P_FIELD . " 字段名
GS_FIELDCAT-SELTEXT_M = P_TEXT . " 描述
APPEND GS_FIELDCAT TO GT_FIELDCAT .
ENDFORM.