点击此处---> 群内免费提供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,但对于预算栏却无法获得理想的结果。 如果您建议任何解决方案,它将更有帮助。 我正在等待解决方案。 谢谢, ishstnd-cc-rpt.jpg (45.6 kB)
调试!
只有第一行具有5倍的值,第二行具有8倍的值,第三行和第四行只有2倍,第五行有3倍。
检查您的内部表,也许在到达共享的编码部分之前,它们已经被错误地填充了。
由于预算处于循环状态,我对其进行了调试。 它正在一次又一次地添加。
我将其置于循环之外,但预算的最后一行仅被添加了几次。 并且从第1行到第4行的值为0。
请提出任何建议
嗨,哈里斯,
在这种情况下,请勿使用COLLECT wa_final_cc INTO it_final_cc,也不要清除wa_final_cc,但在相应的循环之后,请使用Kostl键等于ADMIN读取最终表,并从wa_final_cc分配总预算值。
此致
你好 @ 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。
最终表的最后一列被添加了多次,如下图所示。
我调试了很多次,并相应地更改了代码,但没有用。
请给我我的建议,这将对您有很大帮助。
您好 @ roberto.forti ,
如果我将使用附加而不是收集,结果将如下图所示。
我应该在哪里实现代码的安全性,即字段符号代码,我的意思是在it_final_cc或it_bppe循环之后?
我将代码放在it_bppe之后,如下所示。
Harish,我们正在讨论" 41号预算"逻辑,因此不要使用"收集并追加" 该特定新逻辑的说明,但考虑将添加/汇总的值分配给内部表it_final_cc中发送的工作区字段(wa_final_cc-budget,wa_final_cc-allot和wa_final_cc-avail)中的相应字段。
此致
一周热门 更多>