点击蓝字 关注我们
一
前言
动态报表D-Query 是一个用于取代标准QUERY的程序.使用动态报表无需写代码,非开发人员也可生成专业的报表程序.
详见动态报表简介
无峰,公众号:ABAP 技巧与实战动态报表D-Query简介
本文主要介绍通过自定义的选择屏幕调用动态报表
二
缘由
动态报表可以简单的通过勾选设置选择条件(同时可以设置选择条件授权,默认值等),帮助中的默认内容设置方式比较齐全.
但是设置比较麻烦. 所以提供了搜索帮助,可以通过搜索帮助功能弹窗填写后获取默认条件,确认后回写到该字段.
默认选择条件采用了动态选择条件的方式设置. 无法设置单选/复选或其它通过逻辑设置的选择字段. 为了解决这个问题,引入了自定义选择屏幕调用动态报表的功能
01
选择字段设置
字段帮助中详细介绍了默认选择内容的设置
支持常量,变量,NULL,特殊日期
02
搜索帮助
设置方式较复杂且容易出错. 所以提供了一个动态搜索帮助功能, 可以辅助设置默认选择内容
03
回写
搜索帮助的结果回写到默认选择内容中
三
实现
通过报表程序自定义选择屏幕.
此时可以添加一些简单的选择条件相关的逻辑. 然后通过MEMORY ID 传递选择条件到特定的查询ID中,最后在自定义程序中通过Z0模式调用动态报表程序即可.
代码如下图所示.
*&---------------------------------------------------------------------*
*& Report ZTS_ZDQ_CALL
*&---------------------------------------------------------------------*
*&通过自定义的选择屏幕调用动态报表,解决特殊选择屏幕的设定.
*&---------------------------------------------------------------------*
REPORT zts_zdq_call.
TABLES: vbak,vbap.
SELECT-OPTIONS:
s_vkorg FOR vbak-vkorg,
s_vkorg1 FOR vbak-vkorg,
s_werks FOR vbap-werks.
DATA: lt_dq TYPE zrang_dq_tab. "查询ID传递到的选择条件.
DATA: lr_vkorg TYPE TABLE OF rsdsselopt.
DATA: lr_vkorg1 TYPE TABLE OF rsdsselopt.
DATA: lr_werks TYPE TABLE OF rsdsselopt.
START-OF-SELECTION.
MOVE-CORRESPONDING s_vkorg[] TO lr_vkorg.
MOVE-CORRESPONDING s_vkorg1[] TO lr_vkorg1.
MOVE-CORRESPONDING s_werks[] TO lr_werks.
"给第一个查询-主查询传递查询条件 和关联查询
"给第一个查询:销售订单查询和第二个查询:交货单查询 传递不同的销售组织限制条件
lt_dq = VALUE #(
( zcxid = '1100000012' trange = VALUE #(
( tablename = 'VBAK' frange_t = VALUE #( ( fieldname = 'VKORG' selopt_t = lr_vkorg ) ) )
( tablename = 'VBAP' frange_t = VALUE #( ( fieldname = 'WERKS' selopt_t = lr_werks ) ) )
) )
( zcxid = '1100000013' trange = VALUE #(
( tablename = 'LIKP' frange_t = VALUE #( ( fieldname = 'VKORG' selopt_t = lr_vkorg1 ) ) )
( tablename = 'LIPS' frange_t = VALUE #( ( fieldname = 'WERKS' selopt_t = lr_werks ) ) )
) )
).
EXPORT lt_dq = lt_dq TO MEMORY ID 'ZDQ_CALL'.
"调用主查询
DATA: lv_zcxid TYPE ztbc125_idx-zcxid,
lv_zxhao TYPE ztbc125_usav-zxhao.
lv_zcxid = '1100000012'.
SUBMIT zbc125 WITH p_zcxid = lv_zcxid
WITH p_zxhao = lv_zxhao
WITH p_mode = 'Z0' "JOIN 模式
AND RETURN ."USING SELECTION-SCREEN 1000.
四
示例
使用动态报表创建查询 1100000012
使用动态报表创建查询 1100000013
关联1100000013 到1100000012 中.
自定义选择程序可以同时向这两个关联的查询传递各自的选择条件.
关于查询关联详见链接
为两个查询限制不同的销售组织
可以看出订单的统计的销售组织不同于交货单统计的销售组织.
因为采用了全连接. 所以两个销售组织的数据都呈现了.
五
业务实战
上述示例没有实际业务用途. 但通过对多个查询使用相关的关键字,限定不同的查询日期,关联后则可以获取下图的财务报表
本月金额: A查询的金额,限制特定月份.
累计金额: B查询的金额,限制<=特定月份.
去年同期金额: C查询的金额,限定=去年特定月
去年同期累计金额: D查询的金额,限定<=去年特定月
同期差异/同期累计差异则可以通过新增字段计算出来.
用动态报表生成的上述报表的过程
01
自定义表,配置科目与多级业务分类的关系
02
用视图关联财务凭证与自定义表(该关联可以用CDS视图实现, 也可以直接在动态报表中关联),因为配置表中支持成本中心为空, 所以需要通过CDS视图的union功能把两个查询连接起来(动态报表暂不支持union功能)
03
用ZDQ创建四个相同的查询, 设置公司代码,期间作为选择条件
1100000110售后利润报表-当期
1100000111售后利润报表-当期累计
1100000112售后利润报表-去年同期
1100000113售后利润报表-去年同期累计
04
关联这些查询
05
创建一个自定义程序调用该查询,可以通过示例程序ZTS_ZDQ_CALL复制后,调整相关查询的传递条件.
06
实现效果
07
在呈现效果上, 几个金额字段的描述没有区分.
需要为每个查询设置特定的字段描述及字段颜色
08
改善后的呈现效果
09
添加计算字段
10
最终呈现的效果
11
选中行,点击明细可以跳转到明细内容
六
总结
在使用动态报表配置财务报表时发现. 财务报表往往需要多个期间的数据同时呈现并比较. 动态报表可以关联多个查询.
详见链接
无峰,公众号:ABAP 技巧与实战动态报表D-Query 关联多个查询
详见链接
无峰,公众号:ABAP 技巧与实战动态报表D-Query 关联多个查询-补充
但这些查询会使用同样的查询条件.
基于上述需求,对动态报表进行了如下改进
允许通过自定义选择屏幕的程序调用
允许给不同的关联查询传递不同的选择条件
允许基于查询ID设置字段描述(之前基于表名设置描述)
通过上述改进后,总算可以使用动态报表配置完成这个财务报表.
THE
END
约定
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
(如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)
请微信联系管理员:
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论