### ABAP 学习笔记知识点详解 #### 一、引用类型与数据对象声明 - **引用类型**: 在 ABAP 中,引用类型(如 `z_ref`)是一种特殊的数据类型,用于存储其他数据对象的地址。这类似于其他编程语言中的指针。 - **声明方式**: ```abap DATA myref TYPE z_ref. // 声明一个名为 myref 的数据对象,其类型为 z_ref。 CREATE DATA myref TYPE z_ref. // 创建一个名为 myref 的数据对象,其类型为 z_ref。 ``` - **区别**:`CREATE DATA` 语句不仅声明了数据对象,还为其分配了内存空间。 #### 二、参照数据字典中的表类型生成内表对象或结构体 - **内表**:是 ABAP 中的一种数据结构,用于存储多行数据。 - **声明方式**: ```abap DATA mytable TYPE z_table. // 基于数据字典中的表类型 z_table 声明内表。 ``` - **结构体**:用于定义数据行的结构。 ```abap myline TYPE LINE OF z_table. // 定义一个名为 myline 的结构体,它代表了 z_table 表的一行。 ``` #### 三、系统日期与时间 - **系统日期**:通过 `SY-DATUM` 获取当前系统的日期。 - **系统时间**:通过 `SY-UZEIT` 获取当前系统的时间。 #### 四、系统字段 - **字段定位**:使用 `SY-FDPOS` 来获取字符串比较后的偏移量信息。 - **循环计数**:`SY-INDEX` 用来记录循环语句中的循环次数。 - **内表行索引**:在处理内表行时,`SY-TABIX` 返回当前行的索引位置;`SY-SUBRC` 返回操作是否成功的状态。 - **用户名**:`SY-UNAME` 用于获取当前用户的用户名。 - **屏幕序号**:`SY-DYNNR` 用于获取当前屏幕的序号。 - **OK 代码**:`SY-UCOMM` 或 `SYST-UCOMM` 用于获取 OK 代码。 - **屏幕组 ID**:`SY-DYNGR` 用于获取屏幕组 ID。 #### 五、常量声明 - **声明方式**: ```abap CONSTANT const(len) TYPE type | LIKE dobj [DECIMALS dec] [VALUE val]. ``` - `len`:常量的长度。 - `type`:常量的数据类型。 - `LIKE dobj`:指定常量与某个数据对象具有相同的数据类型。 - `DECIMALS dec`:小数位数。 - `VALUE val`:常量的初始值。 #### 六、确定数据对象属性 - **语法**: ```abap DESCRIBE FIELD f [LENGTH l] [TYPE t [COMPONENTS n]] [OUTPUT-LENGTH o] [DECIMALS d] [EDIT-MASK m] [HELP-ID h]. ``` - `LENGTH l`:字段的长度。 - `TYPE t`:字段的数据类型。 - `COMPONENTS n`:字段包含的组件数。 - `OUTPUT-LENGTH o`:输出长度。 - `DECIMALS d`:小数位数。 - `EDIT-MASK m`:编辑掩码。 - `HELP-ID h`:帮助 ID。 #### 七、数据赋值 - **赋值操作**: ```abap MOVE source TO destination. // 直接赋值。 destination = source. // 等同于直接赋值。 ``` #### 八、其他常用命令 - **清除数据对象**: ```abap CLEAR f. // 清除数据对象 f。 ``` - **检查字段是否为初始值**: ```abap f IS INITIAL. // 检查字段 f 是否为初始值。 ``` - **检查字段是否已分配**: ```abap f IS ASSIGNED. // 检查字段 f 是否已被分配。 ``` - **检查参数是否已传递**: ```abap p IS [SUPPLIED | REQUESTED]. // 检查参数 p 是否已被实际参数填充。 ``` - **检查数据对象的值是否位于特定范围内**: ```abap f1 BETWEEN f2 AND f3. // 检查数据对象 f1 的值是否介于 f2 和 f3 之间。 ``` - **检查数据对象是否符合选择表的逻辑条件**: ```abap f IN sel_tab. // 检查数据对象 f 的内容是否符合选择表 sel_tab 的逻辑条件。 ``` #### 九、字符串操作 - **输出变量并控制格式**: ```abap WRITE:/10 g. // 在 10 个空格后输出变量 g。 / (8) time USING EDIT-MASK '__:__:__'. // 输出变量 time,并保持 8 位长度。 ``` - **强制结束循环**: ```abap EXIT. // 强制结束循环。 STOP. // 同上。 REJECT. // 同上。 ``` - **循环控制**: ```abap CONTINUE. // 无条件中止当前循环并开始下一轮循环。 CHECK condition. // 如果条件为真,则继续循环;否则结束当前循环并开始下一轮循环。 EXIT. // 无条件中止并退出整个循环。 ``` - **字符串左移**: ```abap SHIFT string. // 将字符串 string 左移。 ``` - **连接字符串**: ```abap CONCATENATE s1 s2 ... sn INTO s_dest [SEPARATED BY sep]. // 连接多个字符串,并可设置分隔符。 ``` - **字符串分割**: ```abap SPLIT s_source AT sep INTO s1 s2 ... sn. // 使用内表操作可以避免被截断的情况。 SPLIT s_source AT sep INTO TABLE itab. // 此语句根据子串数目生成 n 行的内表。 ``` - **循环输出内表中的每一行数据**: ```abap LOOP AT itab INTO text. // 循环遍历内表 itab 并将每行数据赋值给 text。 ENDLOOP. // 结束循环。 ``` - **替换字段内容**: ```abap REPLACE str1 WITH str2 INTO s_dest [LENGTH len]. // 替换字段中的内容,并可指定替换长度。 ``` - **确定字段长度**: ```abap [COMPUTE] n = STRLEN(str). // 计算字符串 str 的长度。 ``` - **删除字符串中的多余空格**: ```abap CONDENSE str. // 删除字符串 str 中的多余空格。 ``` - **字符转换**: ```abap TRANSLATE str. // 将字符串 str 转换为另一种形式,例如大写转小写。 ``` - **创建可排序格式**: ```abap CONVERT TEXT. // 创建一个可以排序的文本格式。 ``` - **用一个字符串覆盖另一个字符串**: ```abap OVERLAY dest WITH source. // 使用 source 覆盖 dest 中的相应部分。 ``` - **WRITETO 赋值**: ```abap WRITETO destination = source. // 将 source 的值赋给 destination,忽略数据对象类型。 ``` - **字符串比较中的换码字符**: - `#`:用于转换比较时使用的通配符。 - `*` 或 `+`:进行区分大小写、空格的比较。 - **定位操作子串**: ```abap strName [+0] [(1)]. // 对字符串 strName 进行子串定位操作。 ``` - **字段符号与数据引用**:动态数据对象用于在运行时引用其他数据对象。 #### 十、子程序定义与调用 - **定义子程序**: ```abap FORM subroutine_name USING parameters1 parameters2 .... .... ENDFORM. ``` - **调用子程序**: ```abap PERFORM subroutine_name USING actual_parameters1 p2 .... (其中 USING 可换成 CHANGING) ``` #### 十一、其他实用工具 - **输出下划线**: ```abap ULINE. // 输出下划线。 ``` - **错误查看**: ```abap ST22. // 打开错误日志查看器。 ``` - **程序打包发布**: - 在 SE01 中找到对应的程序,然后进行打包发布操作。 以上是基于给定的学习笔记中的知识点整理,涵盖了 ABAP 中的一些基本概念和常用操作,对于初学者来说是非常有价值的参考资料。
剩余28页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助