如何在报表中显示完美的价值?

2020-09-18 20:54发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

请帮助我,过去10天我一直在寻找解决方案。

我要求报告应显示为标准的副本。 但是自定义报告中的预算金额与标准相比变得非常大。


标准报告图片

自定义报告图片。
与标准相比,您可以看到预算列增加了5倍。

请建议我进行任何纠正。

如何停止为多个添加添加预算列? 这是我的代码

执行read_data_cc。
 表格read_data_cc。
   在wrttp ='04'或wrttp ='21'的地方,在it_cosp放入wa_cosp中循环。
     读取表it_​​csks,并使用键objnr = wa_cosp-objnr插入wa_csks。
     使用键kostl = wa_csks-kostl将表it_cskt读入wa_cskt。
     如果sy-subrc = 0。
       将wa_csks-kostl移动到wa_final_cc-kostl。
       将wa_cosp-gjahr移动到wa_final_cc-gjahr。
       将wa_cskt-ktext移动到wa_final_cc-ktext。
     万一。
     如果wa_cosp-wrttp ='04'。
       wa_final_cc-actual =(wa_cosp-wtg001 + wa_cosp-wtg002 + wa_cosp-wtg003 + wa_cosp-wtg004 + wa_cosp-wtg005 + wa_cosp-wtg006 + wa_cosp-wtg007 + wa_cosp-wtg008 + wa_cosp-wtg_ + wa_cosp-wtg008 + wa_cosp-wtg 010  + wa_cosp-wtg013 + wa_cosp-wtg014 + wa_cosp-wtg015 + wa_cosp-wtg016)。

     ELSEIF wa_cosp-wrttp ='21'。
       wa_final_cc-commit =(wa_cosp-wtg001 + wa_cosp-wtg002 + wa_cosp-wtg003 + wa_cosp-wtg004 + wa_cosp-wtg005 + wa_cosp-wtg006 + wa_cosp-wtg007 + wa_cosp-wtg008 + wa_cosp-wtg_ + wa_cosp-wtg008 + wa_cosp-wtg 010  + wa_cosp-wtg013 + wa_cosp-wtg014 + wa_cosp-wtg015 + wa_cosp-wtg016)。

     万一。

     使用键objnr = wa_cosp-objnr wrttp ='41'二进制搜索将表it_bppe读入wa_bppe。

     如果sy-subrc = 0。

       wa_final_cc-budget =(wa_bppe-wtp01 + wa_bppe-wtp02 + wa_bppe-wtp03 + wa_bppe-wtp04 + wa_bppe-wtp05 + wa_bppe-wtp06 + wa_bppe-wtp07 + wa_bppe-wtpe-wtp10 + bp_pepe-wtp10 + bp_wt_pe  -wtp12 + wa_bppe-wtp13 + wa_bppe-wtp14 + wa_bppe-wtp15 + wa_bppe-wtp16)。

     万一。
     wa_final_cc-allot =(wa_final_cc-actual)+(wa_final_cc-commit)。
     wa_final_cc-avail =(wa_final_cc-budget)-(wa_final_cc-allot)。
     将wa_final_cc收集到it_final_cc中。
     排序it_final_cc。
     清除wa_final_cc。
   结局。
 ENDFORM。



 如您在上面看到的,我编写了代码以显示实际,提交,预算,分配和可用状态,如上图所示。
 我只想循环预算列一次,如下图所示,预算预算列应仅添加一次,这是标准报告。
 我以多种方式尝试过,例如,仅为预算栏保持doloop,通过保持sy-index = 1,通过为预算保持sy-tabix = 1,但对于预算栏却无法获得理想的结果。

 如果您建议任何解决方案,它将更有帮助。
 我正在等待解决方案。
 谢谢,
 ish
 
stnd-cc-rpt.jpg (45.6 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

请帮助我,过去10天我一直在寻找解决方案。

我要求报告应显示为标准的副本。 但是自定义报告中的预算金额与标准相比变得非常大。


标准报告图片

自定义报告图片。
与标准相比,您可以看到预算列增加了5倍。

请建议我进行任何纠正。

如何停止为多个添加添加预算列? 这是我的代码

执行read_data_cc。
 表格read_data_cc。
   在wrttp ='04'或wrttp ='21'的地方,在it_cosp放入wa_cosp中循环。
     读取表it_​​csks,并使用键objnr = wa_cosp-objnr插入wa_csks。
     使用键kostl = wa_csks-kostl将表it_cskt读入wa_cskt。
     如果sy-subrc = 0。
       将wa_csks-kostl移动到wa_final_cc-kostl。
       将wa_cosp-gjahr移动到wa_final_cc-gjahr。
       将wa_cskt-ktext移动到wa_final_cc-ktext。
     万一。
     如果wa_cosp-wrttp ='04'。
       wa_final_cc-actual =(wa_cosp-wtg001 + wa_cosp-wtg002 + wa_cosp-wtg003 + wa_cosp-wtg004 + wa_cosp-wtg005 + wa_cosp-wtg006 + wa_cosp-wtg007 + wa_cosp-wtg008 + wa_cosp-wtg_ + wa_cosp-wtg008 + wa_cosp-wtg 010  + wa_cosp-wtg013 + wa_cosp-wtg014 + wa_cosp-wtg015 + wa_cosp-wtg016)。

     ELSEIF wa_cosp-wrttp ='21'。
       wa_final_cc-commit =(wa_cosp-wtg001 + wa_cosp-wtg002 + wa_cosp-wtg003 + wa_cosp-wtg004 + wa_cosp-wtg005 + wa_cosp-wtg006 + wa_cosp-wtg007 + wa_cosp-wtg008 + wa_cosp-wtg_ + wa_cosp-wtg008 + wa_cosp-wtg 010  + wa_cosp-wtg013 + wa_cosp-wtg014 + wa_cosp-wtg015 + wa_cosp-wtg016)。

     万一。

     使用键objnr = wa_cosp-objnr wrttp ='41'二进制搜索将表it_bppe读入wa_bppe。

     如果sy-subrc = 0。

       wa_final_cc-budget =(wa_bppe-wtp01 + wa_bppe-wtp02 + wa_bppe-wtp03 + wa_bppe-wtp04 + wa_bppe-wtp05 + wa_bppe-wtp06 + wa_bppe-wtp07 + wa_bppe-wtpe-wtp10 + bp_pepe-wtp10 + bp_wt_pe  -wtp12 + wa_bppe-wtp13 + wa_bppe-wtp14 + wa_bppe-wtp15 + wa_bppe-wtp16)。

     万一。
     wa_final_cc-allot =(wa_final_cc-actual)+(wa_final_cc-commit)。
     wa_final_cc-avail =(wa_final_cc-budget)-(wa_final_cc-allot)。
     将wa_final_cc收集到it_final_cc中。
     排序it_final_cc。
     清除wa_final_cc。
   结局。
 ENDFORM。



 如您在上面看到的,我编写了代码以显示实际,提交,预算,分配和可用状态,如上图所示。
 我只想循环预算列一次,如下图所示,预算预算列应仅添加一次,这是标准报告。
 我以多种方式尝试过,例如,仅为预算栏保持doloop,通过保持sy-index = 1,通过为预算保持sy-tabix = 1,但对于预算栏却无法获得理想的结果。

 如果您建议任何解决方案,它将更有帮助。
 我正在等待解决方案。
 谢谢,
 ish
 
stnd-cc-rpt.jpg (45.6 kB)
付费偷看设置
发送
6条回答
大简至美
1楼-- · 2020-09-18 21:34

调试!

只有第一行具有5倍的值,第二行具有8倍的值,第三行和第四行只有2倍,第五行有3倍。

检查您的内部表,也许在到达共享的编码部分之前,它们已经被错误地填充了。

宇峰Kouji
2楼-- · 2020-09-18 21:38

由于预算处于循环状态,我对其进行了调试。 它正在一次又一次地添加。

我将其置于循环之外,但预算的最后一行仅被添加了几次。 并且从第1行到第4行的值为0。

请提出任何建议

悠然的二货
3楼-- · 2020-09-18 21:12

嗨,哈里斯,

在这种情况下,请勿使用COLLECT wa_final_cc INTO it_final_cc,也不要清除wa_final_cc,但在相应的循环之后,请使用Kostl键等于ADMIN读取最终表,并从wa_final_cc分配总预算值。


 LOOP AT ...
 ...
 结局。

 字段符号:类似于IT_FINAL_CC的行。

 读取表IT_FINAL_CC []分配
   WITH KEY KOSTL ='ADMIN'。

 如果SY-SUBRC EQ 0。
     -BUDGET = WA_FINAL_CC-BUDGET。
 万一。
 

此致

奄奄一息的小鱼
4楼-- · 2020-09-18 21:35

你好 @ roberto.forti

感谢您在上一个问题中提供的代码。 (正如我两次问这个问题一样,他们(SAP社区主持人)删除了您回答的我的问题。

https://answers.sap.com/questions/540319/how-to-loop-only-budget.html?childToView=540737#answer-540737

下面是我从数据库表中获取数据的代码。

FORM get_data_cc。

选择kokrs
kostl
objnr
将bukrs从csks插入表it_csks在s_kokrs和kostl中的kokrs在s_kostl中,并且在s_bukrs中的bukrs。 kostl IN s_kostl。
如果sy-subrc =0。
排序it_csks升序。
选择lednr目标对象gjahr wrttp wtg001 wtg002 wtg003 wtg004
wtg005 wtg006 wtg007 wtg008 wtg009 wtg011 wtg011 wtg012 wtg016从cosp进入表it_cosp,用于it_csks中的所有条目objnr = it_csks-objnr并且gjahr = sy-datum + 0(4)。
如果sy-subrc = 0并且it_cosp不是初始的。 。
ENDIF。
从bppe INTO es到它it_bppe FOR ENn表中选择ENDPE END_ESW ENDLE SELECT LENDR objnr wrttp gjahr wtp01 wtp02wtp03 wtp04 -objnr AND gjahr = sy-datum + 0(4)。
如果sy-subrc = 0并且it_bppe不是INITIAL。
排序it_bppe升序。
ENDIF。/p>

ENDFORM。

现在,我将数据传递到最终内部表以显示ALV网格输出。

这是我们传递给最终内部表的代码。

FORM read_data_cc。

在it_cosp处将其循环到wa_cosp WwrE wrttp ='04'或wrttp ='21'。


读取表it_​​csks通过键objnr = wa_cosp-objnr进入wa_csks。 br>读取表it_​​cskt,并使用键kostl = wa_csks-kostl插入wa_cskt。

如果sy-subrc =0。
将wa_csks-kostl移动到wa_final_cc-kostl。
将wa_cosp-gjahr转换为wa_ gjahr。
将wa_cskt-ktext移动到wa_final_cc-ktext。
ENDIF。
如果wa_cosp-wrttp ='04'。
wa_final_cc-actual =(wa_cosp-wtg001 + wa_cosp-wtg002 + wa_cosp-wt + wa_cosp-wtg004 + wa_cosp-wtg005
+ wa_cosp-wtg006 + wa_cosp-wtg007 + wa_cosp-wtg008 + wa_cosp-wtg009 + wa_cosp-wtg010
+ wa_cosp-wtg011 + wa_cosp-wtg012 + wa_cosp-wtg012 + wa_cosp-wtg012 + wa_cosp-wtg015
+ wa_cosp-wtg016)。
ELSEIF wa_cosp-wrttp ='21'。
wa_final_cc-commit =(wa_cosp-wtg001 + wa_cosp-wtg002 + wa_cosp-wtg003 + wa_cosp-004 -wtg005
+ wa_cosp-wtg006 + wa_cosp-wtg007 + wa_cosp-wtg008 + wa_cosp-wtg009 + wa_cosp-wtg010
+ wa_cosp-wtg0 11 + wa_cosp-wtg012 + wa_cosp-wtg013 + wa_cosp-wtg014 + wa_cosp-wtg015
+ wa_cosp-wtg016)。
ENDIF。


收集wa_final_cc放入it_final_cc。

SORT it_final_cc。

ENDLOOP。

数据:lv_tabix TYPE sytabix,"内部表索引
wa_bppe1 LIKE LINE of it_bppe,
wa_bppe2类似于LINE of it_bppe。
排序it_bppe通过wrttp。

* CO对象:外部过帐的成本总计
读取表it_​​bppe到wa_bppe1二进制搜索 WITH KEY wrttp ='41'。"预算

IF sy-subrc EQ 0.
"内部表的索引
lv_tabix = sy-tabix。
循环到it_bppe从lv_tabix进入wa_bppe2 。

IF(wa_bppe1-wrttp NE wa_bppe2-wrttp)。
退出。
ELSE。
wa_final_cc-budget =(wa_bppe2-wtp01 + wa_bppe2-wtp02 + wa_bppe2-wtp03 + wa_bppe2- wtp04
+ wa_bppe2-wtp05 + wa_bppe2-wtp06 + wa_bppe2-wtp07 + wa_bppe2-wtp08
+ wa_bppe2-wtp09 + wa_bppe2-wtp10 + wa_bppe2-wtp11 + wa_bppe2-wtp12
+ wa_bppe2-wtp12 + wa_bppe2-wtp15 + wa_bppe2-wtp16)。

wa_final_cc-allot =(wa_final_cc-commit)+(wa_final_cc-actual)。
wa _final_cc-avail =(wa_final_cc-allot)-(wa_final_cc-budget)。

收集wa_final_cc到it_final_cc中。


清除sy-tabix。

ENDIF。

< br>清除:wa_bppe2,
wa_final_cc。

ENDLOOP。

ENDIF。

ENDFORM。

这是个问题。

如下图所示,预算字段已添加到"上一条记录"中,即测试,但应将其添加到管理员中。

并且也如下图所示,当它穿过collect语句时,sytabix变为5。

最终表的最后一列被添加了多次,如下图所示。

我调试了很多次,并相应地更改了代码,但没有用。

请给我我的建议,这将对您有很大帮助。

梦想连接
5楼-- · 2020-09-18 21:32

您好 @ roberto.forti

如果我将使用附加而不是收集,结果将如下图所示。

我应该在哪里实现代码的安全性,即字段符号代码,我的意思是在it_final_cc或it_bppe循环之后?

我将代码放在it_bppe之后,如下所示。

数据:lv_tabix TYPE sytabix,"内部表的索引

         wa_bppe1喜欢它的行_bppe,

         wa_bppe2喜欢it_bppe的线。



   SORT it_bppe由wrttp升序。



 * CO对象:外部过帐的成本总计

   使用密钥wrttp ='41'读取表it_​​bppe进入wa_bppe1二进制搜索。  "预算



   如果sy-subrc EQ 0。

     "内部表索引

     lv_tabix = sy-tabix。



     从sy-tabix到it_bppe入wa_bppe2。



       IF(wa_bppe1-wrttp NE wa_bppe2-wrttp)。

         出口。

       其他。

         wa_final_cc-budget =(wa_bppe2-wtp01 + wa_bppe2-wtp02 + wa_bppe2-wtp03 + wa_bppe2-wtp04

                               + wa_bppe2-wtp05 + wa_bppe2-wtp06 + wa_bppe2-wtp07 + wa_bppe2-wtp08

                               + wa_bppe2-wtp09 + wa_bppe2-wtp10 + wa_bppe2-wtp11 + wa_bppe2-wtp12

                               + wa_bppe2-wtp13 + wa_bppe2-wtp14 + wa_bppe2-wtp15 + wa_bppe2-wtp16)。



         wa_final_cc-allot =(wa_final_cc-commit)+(wa_final_cc-actual)。

         wa_final_cc-avail =(wa_final_cc-allot)-(wa_final_cc-budget)。



         将wa_final_cc收集到it_final_cc中。



       万一。



 *清除wa_final_cc。



     结局。





   字段符号:类似于it_final_cc的行。



   读取表it_​​final_cc []分配

     WITH KEY kostl ='ADMIN'。



   如果sy-subrc EQ 0。

     -预算= wa_final_cc-预算。

   万一。



   ENDIF。

渐行渐远_HoldOn
6楼-- · 2020-09-18 21:37

Harish,我们正在讨论" 41号预算"逻辑,因此不要使用"收集并追加" 该特定新逻辑的说明,但考虑将添加/汇总的值分配给内部表it_final_cc中发送的工作区字段(wa_final_cc-budget,wa_final_cc-allot和wa_final_cc-avail)中的相应字段。

此致

一周热门 更多>