KEY: 1.常用系统变量
2.常用TCODE
3.消息类型
4.数据类型
5.变量声明
6.Internal Table
1.常用系统变量
SY-SUBRC: 系统执行某指令后,表示执行成功与否的变量,’0’ 表示成功
SY-DBLNT: 被处理过的记录的笔数
SY-UNAME: 当前使用者登入SAP的USERNAME;
SY-DATUM: 当前系统日期;
SY-UZEIT: 当前系统时间;
SY-TCODE: 当前执行程序的Transaction code
SY-INDEX : 当前LOOP循环过的次数
SY-TABIX: 当前处理的是internal table 的第几笔
SY-TMAXL: Internal table的总笔数
SY-SROWS: 屏幕总行数;
SY-SCOLS: 屏幕总列数;
SY-MANDT: 當前系統編號(CLIENT NUMBER)
SY-VLINE: 画竖线
SY-ULINE: 画横线
SY-PAGNO: 当前页号
SY-LINSZ: 当前报表宽度
SY-LINCT: 当前报表长度
SPACE: 空字符串
SY-LSIND: 列表索引页
SY-LISTI: 上一个列表的索引
SY-LILLI: 绝对列表中选定行的行号
SY-CUROW: 屏幕上的行
SY-CUCOL: 光标列
SY-CPAGE: 列表的当前显示页
SY-STARO:真实行号
SY-LISEL: 选择行的内容,长度为255
SY-LINNO: 当前行
2.常用TCODE
ABAPDOCU ABAP文档和范例
BAPI BAPI浏览器
CMOD/SMOD 系统增强
LSMW 数据导入工具
PFCG 权限管理
SA38 程序执行
SCAT 计算机辅助测试工具,测试、数据导入等
SCC1 集团拷贝
SCC4 显示集团
SE09 运输组织者,查询传输请求
SE10 请求传输
SE11 数据字典
SE16 数据浏览器
SE32 文本元素设定
SE36 逻辑数据器
SE37 函数模块
SE38 ABAP编辑器
SE41 菜单制作器
SE51 屏幕制作器
SE55 生成表维护程序
SE71 FORM设计
SE78 FORM、SmartFORMS使用图片上载
SE80 对象浏览器
SE90 对象浏览器
SE91 消息设定
SE93 维护事务代码
SHDB 批输入事务
SM04 显示在线用户
SM30 维护表视图
SM35 进程监控
SM50 超时用户
SMARTFORMS SmartForms设计
SNUM 编号对象维护
SO10 标准文本,设定Form使用的TIFF图片等
SPAD 假脱机管理
SQ01 Query查询制作
ST05 SQL跟踪
SU20 授权字段
SU21 授权对象
WE21 IDOC处理中的端口
3.消息类型
E 错误
W 警告
I 信息
A 异常终止
S 成功
X 退出
4.数据类型
C: 字符(串), 长度为1, 最大有65535 BYTES, 初始值为: space,例: ‘M’;
D: 日期, 格式为YYYYMMDD, 最大是’9999/12/31’ ,例:’1999/12/03’.
F: 浮点数, 长度为8, 例如: 4.285714285714286E-01
I: 整数 范围 :-2^31 ~ 2^31-1
N: 数值组成的字符串: 011, ‘302’.
P: packed 数,用于小数点数值,例如: 12.00542;
T: 时间, 格式为HHMMSS,例如: ’14:03:00’, ’21:30:39’.
X: 16进制数, 例如 ‘1A03’.
5.变量声明
变量宣告包含name, length, type, structure等,语法如下:
DATA <F> [<length>] <type> [<value>] [<decimals>]
其中: <f> :变量名称,最长30个字符,不可含有 + , . , : ( ) 等字符;
<length><type>:变量类型及长度;
<value>:初值
<decimals>:小数字数
6.Internal Table
一. Internal Table 的宣告
ABAP/4中的Internal Table是一种Data Structure,类似于其它语言中的STRUTURE,它可以由几个不同类型的字段(field)组成,用来表示具有不同属性的某一事物,单独一笔数据表示某个事物,多笔数据表示具有相同属性的多个事物.例如:
为了存取或记录某班的同学资料,我们创建如下的internal table:
DATA: BEGIN OF STUDENT OCCURS 20,
STD_ID TYPE N,
NAME(10) TYPE C,
AGE TYPE I,
BIRTH TYPE D,
SCORE TYPE P DECIMALS 2,
END OF STUDENT.
此时我们已经创建了名叫STUDENT的internal table,并且为它预先申请了能够存放20笔资料的Buffer(当然,如果存取资料不止20笔,程序执行时,会自动申请系统Buffer)
Internal table 的定义有以下几种格式:
格式一. DATA: BEGIN OF <internal table> OCCURS <n>,
<field 1> TYPE <type1>,
[<field 2> TYPE <type 2>,
<field 3> TYPE <type 3>,
… ]
END OF <internal table>.
格式二. TYPES: BEGIN OF <work area>,
<field 1> TYPE <type1>,
[<field 2> TYPE <type 2>,
<field 3> TYPE <type 3>,
… ]
END OF <work area>.
TYPES <internal table> TYPE <work area> OCCURS <n>.
格式三. DATA: BEGIN OF <work area>.
INCLUDE STRUCTURE <table name>.
DATA: END OF <work area>.
DATA: <internal table> LIKE <work area> OCCURS <n>.
二. APPEND LINE
格式: APPEND [<work area> TO ] <internal table>.
举例一. (使用work area)
DATA: BEGIN OF LINE,
COL1 TYPE I,
COL2 TYPE I,
END OF LINE.
DATA ITAB LIKE LINE OCCURS 10.
DO 2 TIMES.
LINE-COL1 = SY-INDEX.
LINE-COL2 = SY-INDEX ** 2.
APPEND LINE TO ITAB.
ENDDO.
LOOP AT ITAB INTO LINE.
WRITE: / LINE-COL1, LINE-COL2.
ENDLOOP.
执行结果为:
1 1
2 4
举例二. (不使用work area)
DATA: BEGIN OF ITAB OCCURS 10,
COL1 TYPE I,
COL2 TYPE I,
END OF ITAB.
DO 2 TIMES.
ITAB-COL1 = SY-INDEX.
ITAB-COL2 = SY-INDEX ** 2.
APPEND ITAB.
ENDDO.
LOOP AT ITAB.
WRITE: / ITAB-COL1, ITAB-COL2.
ENDLOOP.
执行结果与举例一相同.
举例三. (加入另一个Internal table的元素)
格式: APPEND LINES OF <itab1> [FROM <n1> ] [TO <n2>] TO <itab2>.
将<itab1>的元素加入至<itab2>中,可选取自<n1>至<n2>的范围.
APPEND LINES OF ITAB TO JTAB.
三. COLLECT LINE
COLLECT 指令也是将元素加入Internal table中,与APPEND 的区别是: COLLECT指令在非数值字段相同的情况下,将数值字段汇总.
格式: COLLECT [<work area> INTO ] <itab>
DATA: BEGIN OF ITAB OCCURS 3,
COL1(3) TYPE C,
COL2 TYPE I,
END OF ITAB.
ITAB-COL1 = ‘ABC’. ITAB-COL2 = 10.
COLLECT ITAB.
ITAB-COL1 = ‘XYZ’. ITAB-COL2 = 20.
COLLECT ITAB.
ITAB-COL1 = ‘ABC’. ITAB-COL2 = 80.
COLLECT ITAB.
此时, internal table中放的是2笔数据, 分别为:
ITAB-COL1 ITAB-COL2
‘ABC’ 90
‘XYZ’ 20
四. INSERT LINE
将元素插入在指定的internal table位置之前.
格式: INSERT [<wa> INTO] [INITIAL LINE INTO ] <itab> [INDEX <idx>]
或者: INSERT LINES OF <itab1> [FROM <n1> TO <n2>] INTO <itab2> INDEX <idx>
其中: <wa>即work area,工作区中的元素.
[INITIAL LINE INTO] :插入一笔初始化的记录.
<itab>: internal table
[INDEX <idx>]: internal table 的记录号.(新加入的元素放在此记录前面)
五. 读取internal table
格式一:
LOOP AT <itab> [INTO <wa>][FROM <n1> TO <n2>][WHERE <conditions>]
<statement>
ENDLOOP.
格式二:
READ TABLE <itab> [INTO <wa>] [INDEX <idx> / WITH KEY <conditions>]
举例. (格式二)
DATA: BEGIN OF ITAB OCCURS 10,
COL1 TYPE I,
COL2 TYPE I,
END OF ITAB.
DO 10 TIMES.
ITAB-COL1 = SY-INDEX.
ITAB-COL2 = SY-INDEX * 2.
APPEND ITAB.
ENDDO.
READ TABLE ITAB INDEX 3.
(或者: READ TABLE ITAB WITH KEY COL1 = 3.)
WRITE: / ‘ITAB-COL1 = ‘, ITAB-COL1, ‘ITAB-COL2 = ‘, ITAB-COL2.
执行结果同样是:
ITAB-COL1 = 3
ITAB-COL2 = 6.
六. 修改internal table 中的值
格式: MODIFY <itab> [FROM <wa>][INDEX <idx>][TRANSPORTING <f1><f2>…][WHERE <conditions>]
举例一. READ TABLE ITAB INDEX 3.
LINE-COL1 = 29.
MODIFY ITAB FROM LINE TRANSPORTING COL1.
将第三笔记录的COL1字段的值修改为29.
举例二. T_SALARY – salary = 50.
MODIFY T_SALARY TRANSPORTING salary WHERE birthday = ‘1999/12/06’.
七. DELETE internal table中的字段
格式: DELETE <itab> INDEX <idx>.
或: DELETE <itab>[FROM <n1> TO <n2>] [WHERE <conditions>]
八. Internal table 排序
SORT <itab> [<order way>][BY <f1><f2>…]
其中:<order way> 有DESCENDING 和ASCENDING, Default 为ASCENDING.
<f1>: 为指定排序的字段.
九. 加总
SUM.
总和计算存放与work area中,但只能在LOOP 中使用.
例: LOOP AT ITAB INTO LINE.
SUM.
ENDLOOP.
WRITE: / LINE-COL1, LINE-COL2.
十. 初始化internal table
REFRESH <itab>. 清空<itab>中的值.
CLEAR <itab>. 清空<itab>的Header Line.
FREE <itab>. 释放记忆体空间.
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/19995.html