如何计算字段总和

2020-09-08 12:08发布

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

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


大家好,

我有一个要求,我应该总结所有值'GRMENGE'。 我想检查" GRMENGE"的总数是否等于" MENGE"的值。 我应该怎么做? 已经尝试过AT ENDAT,但根据我的要求不知道如何使用它。

谢谢。

此致

Katherine Darunday

(112.3 kB)

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

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


大家好,

我有一个要求,我应该总结所有值'GRMENGE'。 我想检查" GRMENGE"的总数是否等于" MENGE"的值。 我应该怎么做? 已经尝试过AT ENDAT,但根据我的要求不知道如何使用它。

谢谢。

此致

Katherine Darunday

(112.3 kB)
付费偷看设置
发送
6条回答
Tong__Ming
1楼 · 2020-09-08 12:42.采纳回答

您的字段顺序是: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)。

梦想连接
2楼-- · 2020-09-08 12:36

嗨,

我听从了您的建议,它奏效了。 非常感谢!

关注此:

在新伊贝尔·贝尔特(EBELN EBELP)。

总和。

END AT。

现在,您的问题是SUM值存储在哪里。 就像您一样

添加'GRMENGE'值,以便将SUM存储在'GRMENGE'的工作区中

当我们使用控制中断语句(在第一,最后,新,最后)时

仅在LOOP内部。 所以这里可能是gw_grmenge,其中gw_grmenge是

工作区,每次循环迭代的值都为'GRMENGE'。

注意:如果循环中存在WHERE条件,则AT NEW语句将无法正常工作。

绿领巾童鞋
4楼-- · 2020-09-08 12:37

嗨,库玛尔,

我实际上需要为每个EBELN和EBELP组合求和所有'GRMENGE'的值。

我可以这样做吗:

在新伊贝尔。

在新教堂。

总和。

ENDAT。

ENDAT。

总和存储在哪里?

谢谢。

大道至简
5楼-- · 2020-09-08 12:32

如果您必须将所有'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。
     万一。
   结局。
 

还有一个关于循环分组依据的问题,您可以参考此信息

最诚挚的问候

易卜拉欣

一周热门 更多>