如何按照一定的需求进行开发ALV报表

19 篇文章 3 订阅

需求

ZPP058T 报表增加“交货单数量”,交货单数量(lf) 筛选条件 报表.销售订单号=t1.VGBEL(销售订单号) and 报表.销售订单行号=t1.VGPOS(销售订单行号)
(select sum(LFIMG) as lf,VGBEL,VGPOS from lips group by vgbel,VGPOS) t1

分析

以上是一个最简单的需求——添加字段,即在ZPP058T这个报表中,添加“交货单数量”这个字段,
并且要求如下,将交货单数量 (LFIMG) 简写为 lf 其筛选条件为是select出的销售订单号与主表中的销售订单号相同
(此处我们的主表用的是gt_data),且与主表中的vgpos销售订单行号相同

首先我们知道了我们查询的数据为 lfimg,vgpos ,和vgbel
故为

select lfimg , vgpos ,vgbel
from lips

然后于此同时,将数据全部去重写入主表

for all entries in @gt_data

这里在写入主表的时候会有一个问题,那就是,for all entries in 语句写入主表的时候会有一个去重的作用,而上述所查询的语句,
select lfimg, vgpos ,vgbel 中, lfimg,vgpos,vgbel 都是有可能重复的,因为它们不是主键,故此时,我们需要去查询出lips这张表的主键,也即 vbeln,posnr ,借由主键不会重复的特性,让 for all entries in 语句 不会筛去我们的语句,导致出现bug
故应该如此写

select lfing, vgpos,vgbel,vbeln,posnr
	from lips
	for all entries in @gt_data

同时,我们根据需求所写
先查询出主表所用的销售订单号为 vbeln ,主表中所用的销售订单行号为 posnr
故我们得到筛选条件

where  vgbel = @gt_data-vbeln
and 		vgpos = @gt_data-posnr

然后将这些数据都暂时写入 我们直接在语句里定义的lt_lips表里

	into table @data(lt_lips)

以上,我们就写完的我们的取数部分的逻辑

    SELECT lfimg , vgpos , vgbel,vbeln ,posnr
      FROM  lips
      FOR ALL ENTRIES IN  @gt_data
      where vgbel = @gt_data-vbeln
       and  vgpos = @gt_data-posnr
      into table @data(lt_lips).

下面我们来写数据处理部分的逻辑
面对增加字段的需求,并且要求数据是求和得出,我们常见的处理方法时使用loop语句

循环条件设为 我们自己定义的表lt_lips中的数据进去其自身的工作区ls_lips
筛选条件 为 自表中的 vgbel 属性 和自表中的vgpos 属性与主表中的相同
然后将gs_data-lfimg作为存储变量,每次循环加上ls_lips中的lfimg属性。

loop at lt_lips into data(ls_lips) where vgbel  = gs_data-vbeln  and vgpos = gs_data-posnr.
			gs_data-lfimg = ls_lips-lfimg + gs_data-lfimg.
endloop

同时在外观控制部分加上字段

  add2fc 'LFIMG'   '交货单数量' '' '' '' ''.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值