计算ABAP内部表中的重复项

2020-09-14 04:20发布

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

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


我只想问一下如何计算内部表中的重复项。 我想要这样做,以便让我按posnr计数,并将其放入posnr计数列。

假设it_outtab是一个内部表,其中包含vbeln,posnr和posnr_count列。 最初,表条目如下所示。

但是该程序没有出错,可以帮帮我吗?

在it_outtab处将LOOP放入INTO wa_outtab中。
   在vbeln结束时。
     和。
     将对应的wa_outtab移动到wa_extd。
     将wa_extd附加到it_extd。
     清除wa_extd。
   ENDAT。
 结局。

 通过vbeln排序it_extd。
 循环至it_outtab分配。
   清除wa_extd。
   读取表it_​​extd INTO wa_extd
       WITH KEY vbeln =  -vbeln
       二进制搜索。
   如果sy-subrc是INITIAL。
      -count = wa_extd-count。
   万一。
 ENDLOOP。

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

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


我只想问一下如何计算内部表中的重复项。 我想要这样做,以便让我按posnr计数,并将其放入posnr计数列。

假设it_outtab是一个内部表,其中包含vbeln,posnr和posnr_count列。 最初,表条目如下所示。

但是该程序没有出错,可以帮帮我吗?

在it_outtab处将LOOP放入INTO wa_outtab中。
   在vbeln结束时。
     和。
     将对应的wa_outtab移动到wa_extd。
     将wa_extd附加到it_extd。
     清除wa_extd。
   ENDAT。
 结局。

 通过vbeln排序it_extd。
 循环至it_outtab分配。
   清除wa_extd。
   读取表it_​​extd INTO wa_extd
       WITH KEY vbeln =  -vbeln
       二进制搜索。
   如果sy-subrc是INITIAL。
      -count = wa_extd-count。
   万一。
 ENDLOOP。
付费偷看设置
发送
7条回答
d56caomao
1楼-- · 2020-09-14 04:57

首先,对于您的计数问题,可以使用GROUP BY轻松处理它,如下所示:

在i_outtab进入数据(WA_outtab)GROUP BY中循环(键= WA_outtab-vbeln COUNT = GROUP SIZE)升至DATA(GROUP)。
  在组组分配字段符号()上循环。
   -count = GROUP-COUNT。
  结局。
 ENDLOOP。

第二,如果您要计算文档中有多少个订单项,为什么不获得posnr的最大值,因为它会为每个新订单项增加1,例如:

在i_outtab进入数据(WA_outtab)GROUP BY中循环(键= WA_outtab-vbeln COUNT = GROUP SIZE)升至DATA(GROUP)。
  在组组分配字段符号()上循环。
  lv_max = nmax(val1 = lv_max val2 =  -posnr)。
  结局。
 ENDLOOP。
三十六小时_GS
2楼-- · 2020-09-14 04:44

1)您正在使用过时的ABAP。 SUM已过时

2)末尾等已被GROUP BY取代。

3) fs的意义是什么-它具有<和>使其明显成为字段符号,因此尽管SAP和DSAG的最新ABAP准则均不鼓励表示 类型。

4)18年来,SORT的使用和随后的READ BINARY SEARCH的使用一直不必要地变得复杂。 使用SORTED表或HASHED表进行快速访问。

5)粘贴代码时,请使用编辑器中的CODE按钮。 如果粘贴ABAP; 使用右键单击粘贴为纯文本。 这次我为您做了。

梦想连接
3楼-- · 2020-09-14 05:03

嗨,

尝试

使用其他类型为int的字段创建新的内部表。 用字段对内部表进行排序。

将itab循环到wa ..

wa-count ='1'。

清除wa-posnr。
将wa收集到itab1中。

endloop。

希望对您有所帮助,

此致

Venkat。

哎,真难
4楼-- · 2020-09-14 04:40

我会选择 Binh Thai 的答案。 因为在 Quynh Doan Man 的答案中,我们使用了嵌套循环,这可能会影响 性能。 但是,不要使用new或任何东西,而要使用普通变量和一些条件。

SAP小黑
5楼-- · 2020-09-14 04:50

嗨,Tika,尝试下面的逻辑示例。 问候

 ...
 数据:ty_x的lt_x类型排序表...带有唯一键vbeln posnr,
       lt_y ty _...的类型排序表,带有唯一键vbeln posnr。
 ...
 *删除VBELN重复项
   从lt_x []比较vbeln删除相邻的重复项。

 *获取VBELN-POSNR计数器
   循环至lt_x []进入lw_x。
 *阅读排序表
     读取表lt_y []不传送任何字段
       WITH KEY vbeln = lw_x-vbeln。

     IF(sy-subrc EQ 0)。

 *获取相应的VBELN
     在sy_tabix处将lt_y []分配给。
       IF(lw_x-vbeln EQ  -vbeln)。
 *加1
         将1加到lv_count。
          -count = lv_count。
       其他。
         出口。
       万一。
     结局。

     万一。
     清除:lw_x,
            lv_count。
   结局。
 ... 

樱桃小丸子0093
6楼-- · 2020-09-14 04:47

我将按我要计算的键对IT进行排序。 然后循环播放。 在新键处,重置计数值,在结束键处,将计数值移动到另一个保持器。 例如。 我将计算VBELN,然后按如下所示进行操作。

通过VBELN升序排序ITAB。

将ITAB推入WA。

在NEW VBELN。 COUNTER =0。ENDAT。
COUNTER = COUNTER + 1.
在VBELN末尾。 WA_RESULT-VBELN = WA-VBELN。 WA_RESULT-COUNTER = COUNTER。 将WA_RESULT附加到ITAB_RESULT。 ENDAT。
ENDLOOP。

一周热门 更多>