动态报表D-Query 自定义选择屏幕调用

点击蓝字 关注我们

前言

动态报表D-Query 是一个用于取代标准QUERY的程序.使用动态报表无需写代码,非开发人员也可生成专业的报表程序.

详见动态报表简介

无峰,公众号:ABAP 技巧与实战动态报表D-Query简介

本文主要介绍通过自定义的选择屏幕调用动态报表

缘由

动态报表可以简单的通过勾选设置选择条件(同时可以设置选择条件授权,默认值等),帮助中的默认内容设置方式比较齐全.

但是设置比较麻烦. 所以提供了搜索帮助,可以通过搜索帮助功能弹窗填写后获取默认条件,确认后回写到该字段.

默认选择条件采用了动态选择条件的方式设置. 无法设置单选/复选或其它通过逻辑设置的选择字段. 为了解决这个问题,引入了自定义选择屏幕调用动态报表的功能

01

选择字段设置

字段帮助中详细介绍了默认选择内容的设置

支持常量,变量,NULL,特殊日期

50329971c52522d99a2fb8c8d0e8905a.png

02

搜索帮助

设置方式较复杂且容易出错. 所以提供了一个动态搜索帮助功能, 可以辅助设置默认选择内容

14aa6ecf91318c05b190ec5af147aa91.png

03

回写

搜索帮助的结果回写到默认选择内容中

c589ee0fc44a8827d21a4c8d779c13bb.png

实现

通过报表程序自定义选择屏幕. 

此时可以添加一些简单的选择条件相关的逻辑. 然后通过MEMORY ID 传递选择条件到特定的查询ID中,最后在自定义程序中通过Z0模式调用动态报表程序即可.

代码如下图所示.

43865f4321dd0e93507575d6fab32298.png

*&---------------------------------------------------------------------*
*& 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 中.

自定义选择程序可以同时向这两个关联的查询传递各自的选择条件.

关于查询关联详见链接

3422d287458bb68e93692804071fd28b.png

为两个查询限制不同的销售组织

5a7fb674157999ec86582d05fa9d4cac.png

可以看出订单的统计的销售组织不同于交货单统计的销售组织. 

因为采用了全连接. 所以两个销售组织的数据都呈现了.

90ffc663a2359315f29107733b8f4ef8.png

业务实战

上述示例没有实际业务用途. 但通过对多个查询使用相关的关键字,限定不同的查询日期,关联后则可以获取下图的财务报表

  • 本月金额: A查询的金额,限制特定月份.

  • 累计金额: B查询的金额,限制<=特定月份.

  • 去年同期金额: C查询的金额,限定=去年特定月

  • 去年同期累计金额: D查询的金额,限定<=去年特定月

  • 同期差异/同期累计差异则可以通过新增字段计算出来.

956f91897734dce1d9eabbe45aa13fc4.png

用动态报表生成的上述报表的过程

01

自定义表,配置科目与多级业务分类的关系

8a2cc611e725d8795f77c103d2cc0b5e.png

02

用视图关联财务凭证与自定义表(该关联可以用CDS视图实现, 也可以直接在动态报表中关联),因为配置表中支持成本中心为空, 所以需要通过CDS视图的union功能把两个查询连接起来(动态报表暂不支持union功能)

65fbfc2e0ab4030c70c9e9ef6fdce953.png

2001d11e125518669cdac390f8f8a4bf.png

03

用ZDQ创建四个相同的查询, 设置公司代码,期间作为选择条件

1100000110售后利润报表-当期

1100000111售后利润报表-当期累计

1100000112售后利润报表-去年同期

1100000113售后利润报表-去年同期累计

609849800e4beb0e8a006a497a973907.png

3146a2c5af824a22a328fbb3424b2b7f.png

04

关联这些查询

d3fe7cd445812f36babba48b31d1e573.png

05

创建一个自定义程序调用该查询,可以通过示例程序ZTS_ZDQ_CALL复制后,调整相关查询的传递条件.

e101c52de78fe0afba9085b1cfae2140.png

06

实现效果

d2e0b0173a5652af56e6b67f8ac53a88.png

7975550c79373e1ef702aa0ee2c3cbbb.png

07

在呈现效果上, 几个金额字段的描述没有区分.

需要为每个查询设置特定的字段描述及字段颜色

6eaf4d6903fc5d84ee23dd164498bece.png

08

改善后的呈现效果

8bafd5fe889da064827a42626c110237.png

09

添加计算字段

295674c194a11b931d65f7d6928cfd7c.png

10

最终呈现的效果

f08d0ae712ec9caa2f4d60e645feb4fb.png

11

选中行,点击明细可以跳转到明细内容

c3598bffebfeaa9ff55eecb236553cfb.png

总结

在使用动态报表配置财务报表时发现. 财务报表往往需要多个期间的数据同时呈现并比较. 动态报表可以关联多个查询. 

详见链接

无峰,公众号:ABAP 技巧与实战动态报表D-Query 关联多个查询

详见链接

无峰,公众号:ABAP 技巧与实战动态报表D-Query 关联多个查询-补充

但这些查询会使用同样的查询条件.

基于上述需求,对动态报表进行了如下改进

  • 允许通过自定义选择屏幕的程序调用

  • 允许给不同的关联查询传递不同的选择条件

  • 允许基于查询ID设置字段描述(之前基于表名设置描述)

通过上述改进后,总算可以使用动态报表配置完成这个财务报表.

THE

END

约定

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

    (如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)

请微信联系管理员: 

syjf1976 

sharry_xlp  

Yannick_Duan 

申请进入公众号讨论群提问或者参与话题讨论

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值