动态报表 DQuery 添加 NULL 查询支持

作者:ABAP技巧与实战 约 5 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发

无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)

**点击蓝字** 关注我们

前言

动态报表是我开发的一个类似于SQVI 的报表查询器.可以快速实现一个查询报表. 并且附加了很多常见的报表功能,并且可以关联多个查询结果到一个清单中.

详细介绍见链接

> 动态报表简介 无峰,公众号:ABAP 技巧与实战 [ 动态报表简介

> ](http://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247484349&idx=1&sn=7160806c652949599e972738b3f27f33&chksm=cf5dde8bf82a579d930094caea2792af92886b0bf0f4307839b9b0f0f20eeb51fbced0b1c78b#rd)

动态报表远程安装目前还有点小问题(区别于服务器版本), 无法自行安装.

感兴趣的朋友可以准备一个VPN连接, 联系我远程连接系统,制作一个本地安装包供你使用.

**本文介绍一下动态报表对左连接的一种特殊查询支持.**

需求说明

假定有两个表 ZTTS_H, ZTTS_I. 如下图.

观察表内容,可以看到ZTTS_H 中的凭证 1003/1004/1006/1007 在ZTTS_I表中不存在.

如果我们要查询不完整的凭证( ZTTS_H 中存在的凭证,但是ZTTS_I中不存在的凭证 )

SQL语句的实现比较简单

SELECT H~*,I~* FROM ZTTS_H AS H LEFT JOIN ZTTS_I AS I ON I~VBELN = H~VBELN

WHERE I~WERKS IS NULL

但是如果通过报表,则无法实现这种查询了. 因为报表的选择条件中不支持解析为 NULL值.

只能在查询ALV结果中使用 过滤器过滤 WERKS = ''的值(因为ABAP层面已经为这些不存在内容的字段赋值''了,可以使用'' 来过滤数据)

但是这种基于结果的过滤会导致性能大幅下降.

动态报表 DQuery 添加 NULL 查询支持 - 封面图
动态报表 DQuery 添加 NULL 查询支持 - 封面图
动态报表 DQuery 添加 NULL 查询支持 - 封面图
动态报表 DQuery 添加 NULL 查询支持 - 封面图

动态报表的实现方式

通过动态报表可以非常简单的实现上述查询

_**01** _

**建立一个查询**

使用ZTTS_H表,关联ZTTS_I. 使用左外连接

动态报表 DQuery 添加 NULL 查询支持 - 封面图
动态报表 DQuery 添加 NULL 查询支持 - 封面图
动态报表 DQuery 添加 NULL 查询支持 - 封面图
动态报表 DQuery 添加 NULL 查询支持 - 封面图

_**02** _

**设置选择条件**

把明细表ZTTS_I 中的任意字段作为选择条件

动态报表 DQuery 添加 NULL 查询支持 - 封面图
动态报表 DQuery 添加 NULL 查询支持 - 封面图

_**03** _

**输入特殊选择条件**

在选择界面输入特定字符 NULL 或 # (如果选择字段长度不足4位,可以输入 # )

动态报表 DQuery 添加 NULL 查询支持 - 封面图
动态报表 DQuery 添加 NULL 查询支持 - 封面图

_**04** _

**执行结果**

后续动态报表执行时,会把NULL 或 # 解析成 IS NULL

这样动态报表的输出结果中就实现了只显示ZTTS_H表存在且ZTTS_I表不存在的数据.

动态报表 DQuery 添加 NULL 查询支持 - 封面图
动态报表 DQuery 添加 NULL 查询支持 - 封面图

_**05** _

**特殊说明**

如果选择屏幕输入下图 后续会解析成 IS NOT NULL . 此时的效果等同于 INNER JOIN 关联的结果

动态报表 DQuery 添加 NULL 查询支持 - 封面图
动态报表 DQuery 添加 NULL 查询支持 - 封面图
动态报表 DQuery 添加 NULL 查询支持 - 封面图
动态报表 DQuery 添加 NULL 查询支持 - 封面图

总结

恰当的使用左连接中右表的NULL判断. 会给查找特定类型的数据带来很大的性能改进. 动态报表D-Query引入对 IS NULL

的支持将丰富动态报表支援的业务场景.

可以解决此类的报表查询需求. 比如

• 获取没有任何MARC条目的商品( 查询商品存在与MARA 但不存在与MARC的记录)

• 获取没有维护任何销售视图的客户(查询客户存在与KNA1 但是不存在KBVV的记录)

• ....

** THE **

** END **

**约定**

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.

( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.

越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )

动态报表 DQuery 添加 NULL 查询支持 - 封面图
动态报表 DQuery 添加 NULL 查询支持 - 封面图

**公众号 : syjf1976_abap**

**ABAP开发技巧**

**微信号 : 392077**

**公众号主群加入受限, 请扫码加入副群后,向管理员申请加入主群**

动态报表 DQuery 添加 NULL 查询支持 - 封面图
动态报表 DQuery 添加 NULL 查询支持 - 封面图
ABAP技巧与实战

关于作者:ABAP技巧与实战

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

来源说明:本文内容由「动态报表DQuery添加NULL查询支持.md」整理生成,仅用于内部技术分享与学习交流。