2020-09-08 12:08发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
我有一个要求,我应该总结所有值'GRMENGE'。 我想检查" GRMENGE"的总数是否等于" MENGE"的值。 我应该怎么做? 已经尝试过AT ENDAT,但根据我的要求不知道如何使用它。
谢谢。
此致
Katherine Darunday
您的字段顺序是:EBELN,EBELP,那么您不必执行AT ... 2次,只需AT ... EBELP就足够了。 请记住首先对表格进行排序。 像这样:
在itab上将LOOP放入DATA(wa)。 wa_tmp = wa。 lv_sum = lv_sum + wa-grmenge。 在wa-ebelp结束时。 wa_tmp-grmenge = lv_sum。 清除lv_sump。 ENDAT。 结局。
您也可以尝试使用语句SUM。 再看一下演示程序DEMO_INT_TABLES_AT_NESTED可能会帮助您进一步了解它。
顺便说一句,如果您可以尝试ABAP的新方法,而不是AT ...您可以在AT ... GROUP BY ...上减少...并减少 进行总结(请看演示:DEMO_LOOP_GROUP_BY_AGGREGATES)。
嗨,
我听从了您的建议,它奏效了。 非常感谢!
关注此:
在新伊贝尔·贝尔特(EBELN EBELP)。
总和。
END AT。
现在,您的问题是SUM值存储在哪里。 就像您一样
添加'GRMENGE'值,以便将SUM存储在'GRMENGE'的工作区中
当我们使用控制中断语句(在第一,最后,新,最后)时
仅在LOOP内部。 所以这里可能是gw_grmenge,其中gw_grmenge是
工作区,每次循环迭代的值都为'GRMENGE'。
注意:如果循环中存在WHERE条件,则AT NEW语句将无法正常工作。
嗨,库玛尔,
我实际上需要为每个EBELN和EBELP组合求和所有'GRMENGE'的值。
我可以这样做吗:
在新伊贝尔。
在新教堂。
ENDAT。
?
总和存储在哪里?
如果您必须将所有'GRMENGE'的值相加而与'EBELN'无关,请使用AT LAST并将其写在END LOOP语句之前 用于循环的最后一次迭代。
如果要求将每个" EBELN"的总和" GRMENGE"相加,则使用AT NEW,因为这是对数据组的控制中断,因此对于每组唯一的" EBELN",您将获得总计 总和。
Hallo 凯瑟琳·达伦戴,
您可以尝试使用group by循环,而不是new循环。
DATA menge_cnt类型i。 数据grmenge_cnt类型i。 类型:开始于ts_cols, ebeln TYPE ebeln, ebelp TYPE ebelp, Menge TYPE bstmg, grmenge TYPE bstmg, ts_cols的结尾。 类型tt_cols带有默认密钥的ts_cols的类型标准表。 DATA(lt_tab)= VALUE tt_cols( (ebeln ='4910145234'ebelp ='10'menge = 100 grmenge = 100) (ebeln ='4910145234'ebelp ='10'menge = 100 grmenge = 150) (ebeln ='4910145234'ebelp ='10'menge = 100 grmenge = 50) (ebeln ='4910145234'ebelp ='20'menge = 100 grmenge = 200) (ebeln ='4910145234'ebelp ='20'menge = 100 grmenge = 150) (ebeln ='4910145234'ebelp ='20'menge = 100 grmenge = 50) )。 选择开始。 循环到lt_tab INTO DATA(ls_col) GROUP BY(id1 = ls_col-ebeln id2 = ls_col-ebelp )。 清除:menge_cnt,grmenge_cnt。 "将引用提升到数据(group_ref)。 循环到组ls_col INTO DATA(行)。 menge_cnt = menge_cnt +行-menge。 grmenge_cnt = grmenge_cnt + line-grmenge。 结局。 如果menge_cnt = grmenge_cnt。 写:/ls_col-ebeln,ls_col-ebelp,'are same','menge_cnt =',menge_cnt,'grmenge_cnt =',grmenge_cnt。 其他。 写:/ls_col-ebeln,ls_col-ebelp,'不一样','menge_cnt =',menge_cnt,'grmenge_cnt =',grmenge_cnt。 万一。 结局。
p>
还有一个关于循环分组依据的问题,您可以参考此信息。
最诚挚的问候
易卜拉欣 p>
最多设置5个标签!
您的字段顺序是:EBELN,EBELP,那么您不必执行AT ... 2次,只需AT ... EBELP就足够了。 请记住首先对表格进行排序。 像这样:
您也可以尝试使用语句SUM。 再看一下演示程序DEMO_INT_TABLES_AT_NESTED可能会帮助您进一步了解它。
顺便说一句,如果您可以尝试ABAP的新方法,而不是AT ...您可以在AT ... GROUP BY ...上减少...并减少 进行总结(请看演示:DEMO_LOOP_GROUP_BY_AGGREGATES)。
嗨,
我听从了您的建议,它奏效了。 非常感谢!
关注此:
在新伊贝尔·贝尔特(EBELN EBELP)。
总和。
END AT。
现在,您的问题是SUM值存储在哪里。 就像您一样
添加'GRMENGE'值,以便将SUM存储在'GRMENGE'的工作区中
当我们使用控制中断语句(在第一,最后,新,最后)时
仅在LOOP内部。 所以这里可能是gw_grmenge,其中gw_grmenge是
工作区,每次循环迭代的值都为'GRMENGE'。
注意:如果循环中存在WHERE条件,则AT NEW语句将无法正常工作。
嗨,库玛尔,
我实际上需要为每个EBELN和EBELP组合求和所有'GRMENGE'的值。
我可以这样做吗:
在新伊贝尔。
在新教堂。
总和。
ENDAT。
ENDAT。
?
总和存储在哪里?
谢谢。
如果您必须将所有'GRMENGE'的值相加而与'EBELN'无关,请使用AT LAST并将其写在END LOOP语句之前 用于循环的最后一次迭代。
如果要求将每个" EBELN"的总和" GRMENGE"相加,则使用AT NEW,因为这是对数据组的控制中断,因此对于每组唯一的" EBELN",您将获得总计 总和。
Hallo 凯瑟琳·达伦戴,
您可以尝试使用group by循环,而不是new循环。
p>
还有一个关于循环分组依据的问题,您可以参考此信息。
最诚挚的问候
易卜拉欣 p>
一周热门 更多>