ABAP随笔
- 绪论
- ABAP工作区的主要T-CODE(4)
- 第1章 包与变更传输系统(CTS)
- 第2章 数据类型
- ABAP命名规则(23)
- 基本数据类型(30)
- 系统变量sy-datum(系统)和sy-datlo(本地)的区别(37)
- String相关命令(39)
- ①FIND
- ②REPLACE
- ③TRANSLATE
- ④SHIFT
- ⑤CONDENSE
- ⑥OVERLAY
- ⑦CONCATENATE
- ⑧SPLIT
- 单引号“ ’ ”与grave“ ` ”的区别(39)
- 数据字典类型与ABAP基本数据类型
- 给变量赋值(52)
- OPEN SQL 命令语句(62)
- 读取数据的命令(62)
- 取一条数据(63)
- Several Line(63)
- AS(别名)(64)
绪论
ABAP工作区的主要T-CODE(4)
T-CODE | 描述 | 说明 |
---|---|---|
SE09 | 传输组织 | 释放/创建/修改CTS(变更传输系统)的开发工具 |
SE11 | ABAP数据字典 | 创建如数据表,视图,结构体等对象的开发工具 |
SE16 | 数据库数据编辑器 | 创建/修改/查询数据库表数据的开发工具 |
SE21 | 包编辑器 | 创建/修改/查询包的开发工具 |
SE24 | 类编辑器 | 创建/修改/查询类的开发工具 |
SE37 | 函数编辑器 | 创建/修改/查询函数的开发工具 |
SE38 | ABAP编辑器 | 创建/修改/查询ABAP程序的开发工具 |
SE41 | 菜单制作器 | 给程序创建GUI状态 |
SE43 | 维护局部菜单 | 创建/修改/查询SAP菜单的开发工具 |
SE80 | 对象导航器 | 集合了所有与ABAP开发相关的工作区 |
SE91 | 建立消息类和消息 | 创建/修改/查询消息类的开发工具 |
SE93 | 维护事务码 | 创建/修改/查询事务码的开发工具 |
SM04 | 用户监视 | 监视用户的活动 |
SM12 | 锁查看与维护 | 锁定对象/表条目冻结说明 |
第1章 包与变更传输系统(CTS)
第2章 数据类型
ABAP命名规则(23)
- 全局变量G 局部变量L,字段V/D 结构体S 常量C 内表T 类O RANGE(范围)R 参照变量(数据对象)F 例:GV_CARRID
基本数据类型(30)
初始长度 | 可变长度 | 初始值 | 意义 | |
---|---|---|---|---|
数字型 | ||||
I | 4 | 4 | 0 | 整数(自然数) |
F | 8 | 8 | 0 | 浮点型 |
P | 8 | 1-16 | 0 | Packed number 整数=16-小数指定 |
字符型 | ||||
C | 1 | 1~65535 | ‘……’ | 文本字段(alphanumeric characters) |
D | 8 | 8 | ‘00000000’ | 日期字段(样式:YYYYMMDD) |
N | 1 | 1~65535 | ‘0……0’ | 数字文本字段(数字型字符串)有前导0 |
T | 6 | 6 | ‘000000’ | (样式:HHMMSS) |
十六进制类型 | ||||
X | 1 | 1~65535 | X’0……0’ | 十六进制字段 |
系统变量sy-datum(系统)和sy-datlo(本地)的区别(37)
- 系统基本信息自动会保存到SYST结构体中,用户本地profile信息TIMEZONE会保存到系统变量SY-ZONLO中。
String相关命令(39)
①FIND
- ABAP字段中存在字段B时,SY-SUBRC返回值为0
gv_str = 'ABAP'.
gv_chr = 'B'.
FIND gv_chr IN gv_str.
IF SY-SUBRC EQ 0.
WRITE 'B found'.
ENDIF.
结果:B found
②REPLACE
将ABAP变换成BBAP
gv_str = 'ABAP'.
gv_chr = 'BBAP'.
REPLACE 'ABAP' IN gv_str WITH gv_chr.
WRITE / gv_str.
结果:BBAP
③TRANSLATE
- 大小写字母转换LOWER CASE / UPPER CASE,ABAP→abap / abap→ABAP
gv_str = 'ABAP'.
TRANSLATE gv_str TO LOWER CASE.
WRITE / gv_str.
结果:abap
④SHIFT
- ABAP依次向左移动
gv_str = 'ABAP'.
SHIFT gv_str.
WRITE / gv_str.
结果: BAP
⑤CONDENSE
- 去空格并向左对齐,经常与NO-GAPS一起使用去掉空格
gv_str = 'AB AP'.
CONDENSE gv_str NO-GAPS.
WRITE / gv_str.
结果:ABAP
⑥OVERLAY
- 填充Character的空格,但不覆盖原来字符
gv_str = ' B P'.
gv_chr = 'AAAA'.
OVERLAY gv_str WITH gv_chr.
WRITE / gv_str.
结果:ABAP
⑦CONCATENATE
- AB+AP连接成ABAP
gv_str = 'AB'.
gv_chr = 'AP'.
CONCATENATE gv_str gv_chr INTO gv_str.
WRITE / gv_str.
结果:ABAP
⑧SPLIT
- 以字符C为中心分为AB与AP
GS_STR = 'ABCAP'.
SPLIT gv_str AT 'C' INTO gv_str gv_chr.
WRITE / gv_str gv_chr.
结果:AB AP
单引号“ ’ ”与grave“ ` ”的区别(39)
DATA gv_char(32) TYPE c.
gv_char = 'This is a'.
CONCATENATE gv_char 'text ' INTO gv_char SEPARATED BY space.
* 结果 => ''This is a text''
CONCATENATE gv_char `text ` INTO gv_char SEPARATED BY space.
* 结果 => ''This is a text ''
- 若使用grave(`),则能够识别字符串中包含的所有空格。
- SEPARATED BY space 加空格
数据字典类型与ABAP基本数据类型
- 程序中经常使用的ABAP数据字典类型(52)
面试
很难
ABAP数据字典类型 | ABAP基本数据类型 |
---|---|
ACCP | N(6) |
CHAR n | C(n) |
CLNT | C(3) |
CUKY | C(5) |
CURR n,m | P((n+1)/2 DECIMAL m |
DEC n,m | P((n+1)/2 DECIMAL m |
DATS | D(8) |
FLTP | F(8) |
INT1 | X(1) |
INT2 | X(2) |
INT4 | X(4) |
LANG | C(1) |
NUMC n | N(n) |
PREC | X(2) |
QUAN n,m | P((n+1)/2 DECIMAL m |
RAW n | X(n) |
TIMS | T(6) |
UNIT | C(n) |
VARC n | C(n) |
LRAW | X(n) |
LCHR | C(n) |
STRING | STRING |
给变量赋值(52)
- 定义变量时可以通过 VALUE 语句赋初始值,实际处理数据的程序中使用 MOVE 或 WRITE TO 语句给变量赋值。
gv_char1 = gv_char.
MOVE gv_char TO gv_char1.
MOVE-CORRESPONDING gs_string TO gs_string1.
WRITE gv_char TO gv_char1(I).
- MOVE TO 语句与 gv_char1 = gv_char. 中的 Equal(=) 语句相同。赋值字符串字段值时可以使用 MOVE-CORRESPONDING 语句。这时 gs_string 和 gs_string1 的字段名可以不相同。
- MOVE-CORRESPONDING 语句还经常用于不同结构体之间赋值,其特点是找到名字相同的字段名进行赋值。当字段名及顺序不同的结构体之间相互赋值时,如果用 MOVE 语句,则会按顺序进行赋值,因此要使用 MOVE-CORRESPONDING 语句。 MOVE 语句还可以用于类型转换(Type Conversions),即 gs_string 的数据类型会转换成 gs_string1 类型。
- 在ABAP语言中除了类型 D(Date) 与类型 T(Time) 外都可以互相转换类型,一共有64种形态的类型可以相互转换。
- WRITE 语句主要有两种用法。一种是输出报表(Output to a list),另一种是变量赋值(Output to a field or internal Table)。变量赋值时一般用 WRITE TO 语句,将数据对象 gv_char 的值转换成类型C后赋给 gv_char1 。前提是 gv_char 类型可以转换成C类型的字段,否则会发生
Syntax
或者runtime error
的错误。后面 (I) 里可以使用除了 UNDER 和 NO-GAP 以外的所有编辑格式选项。关于 (I) 具体参数可以在 HELP 中查询。(摁F1) - 下面是关于 MOVE-CORRESPONDING 语句的代码,其中结构体 GS_REN 和 GS_INFO 由不同字段构成。将结构体 GS_REN 赋值给结构体 GS_INFO 时,需要多次使用 MOVE 语句才能实现。但是如果使用 MOVE-CORRESPONDING 语句,则使用一次即可实现。
DATA: BEGIN OF gs_ren,
name(20) VALUE 'Kim Sung Joon',
country(10) VALUE 'China',
city(20) VALUE 'Beijing',
END OF gs_ren,
BEGIN OF gs_info,
name(20),
city(20),
phone(10) VALUE '1521001234',
END OF gs_info.
MOVE-CORRESPONDING gs_ren TO gs_info.
WRITE: / gs_info-name,
gs_info-city,
gs_info-phone.
结果:
Kim Sung Joon Beijing 1521001234
OPEN SQL 命令语句(62)
关键字 | 功能 |
---|---|
SELECT | 从数据库表中读取数据 |
INSERT | 往数据库表中追加数据 |
UPDATE | 修改数据库表的数据 |
MODIFY | 执行INSERT + UPDATE 功能 UPDATE:数据库表中已存在此数据时(以 key 值区分是否存在) INSERT:数据库表中不存在此数据时(以 key 值区分是否存在) |
DELETE | 删除数据库表数据 |
读取数据的命令(62)
语句 | 功能 |
---|---|
SELECT < result > | SELECT 语句可以罗列数据库表字段,读取一件或多件数据 |
INTO < target > | INTO 语句用来指定查询出来的数据存储地即变量,然后在程序中使用此变量 |
FROM < source > | FROM 语句用来指定要查询的数据库表。可以写在 INTO 语句前后 |
WHERE < cond > | 可以限制要查询数据的条件 |
GROUP BY < fidleds > | 用于分组查询数据。例如,分组求合计时经常使用 GROUP BY语句 |
HAVING < cond > | HAVING 是用于限制 GROUP BY 条件的语句。类似于 SELECT 的 WHERE 语句 |
ORDER BY < fidleds > | 用于排序(sort)查询的数据 |
取一条数据(63)
- 从数据库中取得一条数据时使用 SINGLE 语句。使用此语句只会取得一条数据,因此要正确给出要查询数据的条件,即在 WHERE 条件里追加所有 key 值,当没有指出所有 key 值时,会返回多条中的任意一条,会导致读取的数据与预期结果不同。读取数据库表所有字段时使用 *。
- 如果系统找到一个完全符合指定条件的行, SY-SUBRC 返回0,否则返回4。
SELECT SINGLE MATNR INTO LV_MATNR/GS_DATA-MATNR FROM WHERE VBELN = LV_VBELN/GS_DATA-VBELN.
Several Line(63)
- 当取得多条数据时 SELECT 结果会保存到内部定义的表中。这种表在ABAP语言里称为内表(Internal Table)。 DISTINCT 语句用于删除重复值。
SELECT [DISTINCT] MATNR WHERE
AS(别名)(64)
- 利用 AS 语句可以给字段指定别名。
SELECT MATNR AS MATNR1