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' '交货单数量' '' '' '' ''.