快速参考

BC402 快速参考

#dashboard

程序类型 → 程序类型与模块化

程序类型 引导语句 处理块
可执行程序 REPORT name ... [MESSAGE-ID id] 事件块、对话模块、过程
函数组 FUNCTION-POOL name ... 仅 LOAD-OF-PROGRAM、函数模块、事件块
模块池 PROGRAM name ... 事件块、对话模块、过程
类池 CLASS-POOL 仅方法
接口池 INTERFACE-POOL 无(纯声明)
类型池 TYPE-POOL name 无(纯声明)

数据类型 → 数据类型与数据对象

分类 类型 长度 说明
完整数值型 i, f, decfloat16, decfloat34 固定 无需 LENGTH
不完整数值型 p 可变 需要 LENGTH + DECIMALS
完整字符型 d, t, string 固定/可变 日期=8,时间=6
不完整字符型 c, n 可变 需要 LENGTH
完整字节型 xstring 可变
不完整字节型 x 可变 需要 LENGTH

泛型类型anyany tablecdatadecfloatindex tablennumericobjectsimplesorted tablestandard tabletablexcsequenceclikexsequence

算术优先级 → 算术表达式

条件 使用的算术类型
decfloat16/decfloat34 操作数或结果 十进制浮点
f 操作数或结果(无 decfloat) 二进制浮点
p 操作数或结果(无 f、无 decfloat) 定点(压缩)
全部为 i 操作数且结果为 i 整数

注意** 运算符即使所有操作数都是 i 也会触发浮点运算。

程序调用 → 程序调用

语句 行为 内存效果
SUBMIT prog AND RETURN 插入(暂停调用者) 新内部会话入栈
SUBMIT prog(无 AND RETURN) 替换栈顶会话 栈顶会话被替换
CALL TRANSACTION 'TCODE' 插入 新内部会话入栈
LEAVE TO TRANSACTION 'TCODE' 重新启动 整个栈被销毁

内存区域 → 运行时与内存管理

区域 范围 生命周期
滚动区 每个内部会话 会话期间
PXA 每个应用服务器 服务器生命周期(共享)
ABAP 内存 每个外部会话 直到会话关闭
SAP 内存 每个用户会话 终端会话期间
共享对象 每个应用服务器 直到显式删除

内表类型 → 内表类型

类型 键访问 索引访问 适用场景
STANDARD(标准表) 线性 O(n) 顺序处理、排序
SORTED(排序表) 二分 O(log n) 部分顺序读取
HASHED(哈希表) 哈希 O(1) 按键单条查找

字符串函数 → 字符串处理与正则表达式

描述型strlen()xstrlen()numofchar()find()count()contains()matches()
处理型substring()to_upper()to_lower()concat_lines_of()reverse()repeat()shift_left()shift_right()
模板|文本 {表达式 选项} 文本| — 使用 && 连接

动态编程 → 动态编程技术

技术 语句/类
动态令牌(字面量) 数据对象直接用于语句中
动态令牌(标识符) 数据对象放在括号中 (field)
动态 SQL SELECT ... FROM (tab) WHERE (cond)
动态函数调用 CALL FUNCTION fm_name
动态方法调用 CALL METHOD (meth) ... PARAMETER-TABLE
程序生成 INSERT REPORT name FROM itab
运行时创建数据 CREATE DATA ref TYPE (typename)
运行时创建对象 CREATE OBJECT ref TYPE (classname)

RTTI 类层次 → 运行时类型识别

1
2
3
4
5
6
7
8
9
10
CL_ABAP_TYPEDESCR(根类)
├── CL_ABAP_DATADESCR
│ ├── CL_ABAP_ELEMDESCR
│ ├── CL_ABAP_REFDESCR
│ ├── CL_ABAP_STRUCTDESCR
│ ├── CL_ABAP_TABLEDESCR
│ └── CL_ABAP_ENUMDESCR
└── CL_ABAP_OBJECTDESCR
├── CL_ABAP_CLASSDESCR
└── CL_ABAP_INTFDESCR

关键方法describe_by_name()describe_by_data()get_ddic_field_list()get_components()

SQL 聚合 → SQL 聚合与处理

函数 含义
COUNT(*) 计算所有行数
COUNT(DISTINCT col) 计算不同值的数量
SUM(col)AVG(col) 求和 / 平均
MAX(col)MIN(col) 最大值 / 最小值
GROUP BY col 分组结果
HAVING cond 过滤分组
ORDER BY col 排序结果

JOIN 类型 → SQL 多表访问

类型 语法 行为
INNER JOIN FROM a INNER JOIN b ON a~k = b~k 仅匹配的行
LEFT OUTER JOIN FROM a LEFT OUTER JOIN b ON a~k = b~k 左表所有行 + 匹配
子查询 WHERE col IN (SELECT ...) 嵌套 SELECT
FOR ALL ENTRIES FOR ALL ENTRIES IN itab WHERE ... 与内表连接

FOR ALL ENTRIES 陷阱:务必先检查 itab IS NOT INITIAL

检查点 → 检查点与断言

类型 语句 激活时效果
断点 BREAK-POINT [ID grp] 启动调试器
断言 ASSERT [ID grp] cond 条件为假时产生转储
日志点 LOG-POINT ID grp 记录到检查点组日志

检查点组状态:非活动 / 中断 / 日志 / 终止(仅断言)

性能快速规则 → ABAP 性能数据库性能

  • 单条记录访问使用排序表/哈希表(而非标准表+线性搜索)
  • LOOP 中使用 ASSIGNING <fs>REFERENCE INTO dref 避免数据复制
  • 避免使用 SELECT * — 明确指定所需列
  • 大数据量使用 PACKAGE SIZEINTO TABLE
  • 每次数据库操作后检查 sy-subrc
  • 仅在驱动表小且非空时使用 FOR ALL ENTRIES
  • 避免在循环中使用 SELECT — 使用 JOIN 或预缓冲替代