原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)
**点击蓝字** 关注我们
一
前言
动态报表D-Query 是一个用于取代标准QUERY的程序.使用动态报表无需写代码,非开发人员也可生成专业的报表程序.
> 详见动态报表简介 无峰,公众号:ABAP 技巧与实战 [ 动态报表D-Query简介
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486429&idx=1&sn=8cbab08040255baa4c7495e6e106230d&chksm=cf5dd6ebf82a5ffdf6cd2cca5ef3b3a298dcb7e3aac2b4cae5073af9c6720bf57b5544c57a49&token=8944528&lang=zh_CN&scene=21#wechat_redirect)
**本文主要介绍动态报表提供的增强点,以便满足复杂的报表设计**
二
特殊报表需求
该财务报表的具体需求
> 详见链接 无峰,公众号:ABAP 技巧与实战 [ 动态报表D-Query 自定义选择屏幕调用
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247488405&idx=1&sn=cf64951fd4efad5c486faf00725375e0&chksm=cf5dcea3f82a47b52fd43bcbf241b6edc5d483c6caca0322ab9d34f861a816420ec6fc7cca35&token=2116240118&lang=zh_CN#rd)
在上述链接的财务报表示例中. 业务提出还需要在配置表中增加行,同时设置该行由其它相关行计算而得. 比如下图
其中 3999行由 SUM(A) – SUM(B) – SUM(C).
这个需求很难通过CDS视图实现,只能对获取的数据再次加工
三
改进
为了处理这个需求. 做了两个改进
_**01** _
**调整配置表**
配置表ZTFI1027中增加了三个字段
• 排序码 用于确定最终输出的行顺序
• 公式编号 用于设置特定行参与汇总的组
• 计算公式 用于设定该行由什么公式完成计算
_**02** _
**给动态报表添加出口**
动态报表中添加一个配置点:配置数据加工函数
可以通过复制函数Z_FG_BC125_DEMO的界面生成一个新的函数, 在该函数中可以完成如下处理
• 可以通过修改CT_FCAT 控制ALV的输出格式
• 可以通过调用CC_GRID的方法,控制ALV的显示(排序/过滤/冻结等等).
• 可以通过修改CT_ALV的内容,调整报表的输出内容.
四
实现过程
针对该报表,设置一个处理函数
Z_FG_BC125_FI1027 配置到动态报表中. 如上图
函数中实现如下功能
隐藏特定字段
按公式编号统计金额
添加公式行
排序
公式计算
公式计算部分,调用了标准函数 EVAL_FORMULA 完成某些简单的公式,计算出结果
**小技巧**
**SPRING**
lv_str = | { } |.这个赋值方式把数值转成字符串时,会自动前置负号
EVAL_FORMULA 输出必须是浮现型变量, 否则数字会变小.
五
最终达成效果
通过读取配置表获取排序码为 3999的行.并通过配置的公式计算出该行的金额.
六
总结
尝试使用动态报表实现相对复杂的财务报表时,发现财务报表往往会有一些特殊的新增行,并通过公式计算出这些行的金额.
给动态报表添加出口,通过出口对最终待呈现的数据再次加工.以满足一些特殊的报表需求.
后续会持续尝试使用动态报表完成项目上的报表需求. 并归纳这些报表的特性,改进动态报表,以便满足一些具有共性的报表需求.
** THE **
** END **
**约定**
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.
越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论