ABAP 的坑3

作者:ABAP老白 约 3 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Data Engineering, SD, WM, 仓库管理, 开发, 数据工程, 销售分销

[ ABAP老白 ](javascript:void\(0\);)

**QQ交流群:15881589(付费的,爱加不加)**

上一个坑讲到了FOR ALL ENTRIES,今天来说一说RANGE。

何谓RANGE?

RANGE就是在选择屏幕上常用的多选,其本质是一个有固定结构的内表。

ABAP 的坑3 - 封面图
ABAP 的坑3 - 封面图

RANGE有两种定义方式,

1、常用定义方式,用在选择屏幕上面:

ABAP 的坑3 - 封面图
ABAP 的坑3 - 封面图

2、不常用定义方式,一般用在不需要在选择屏幕显示的情况:

ABAP 的坑3 - 封面图
ABAP 的坑3 - 封面图

3、奇葩定义方式,因为RANGE本质上就是一个内表,而且只要数据类型正确,字段名SAP不怎么CARE。(因为奇葩,所以大家不要用)

ABAP 的坑3 - 封面图
ABAP 的坑3 - 封面图

RANGE有两个常见坑:

**1、如果RANGE为空,则 IN RANGE总是为TRUE。**

比如:

ABAP 的坑3 - 封面图
ABAP 的坑3 - 封面图

如果s_matnr为空,会取出ersda = 20140924的数据。

现在换个写法,把AND换为OR:

ABAP 的坑3 - 封面图
ABAP 的坑3 - 封面图

因为 matnr IN s_matnr 为真,所以这个语句会取出所有的MARA的数据。

**敲黑板:** 这一点在非SQL的逻辑表达式更容易出错,如下例,会输出Y!

ABAP 的坑3 - 封面图
ABAP 的坑3 - 封面图

**2、RANGE数据太多会造成程序DUMP**

在SQL中使用RANGE的时候,会把所有的数据都放到一个SQL语句里面,因为SQL语句是有长度限制的,所以如果RANGE数据太多,就造成SQL语句超长,程序就会DUMP了。

所以,要避免在RANGE里面放太多的数据。

ABAP 的坑3 - 封面图
ABAP 的坑3 - 封面图

**

**

ABAP 的坑3 - 封面图
ABAP 的坑3 - 封面图
ABAP老白

关于作者:ABAP老白

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「ABAP的坑3.md」整理生成,仅用于内部技术分享与学习交流。