首页 > 其他分享 >SAP ABAP开发过程中如何高效率从内表中获取不重复记录?

SAP ABAP开发过程中如何高效率从内表中获取不重复记录?

时间:2024-06-13 13:30:03浏览次数:21  
标签:matnr mara marc t2 t1 ABAP 内表中 重复记录 times

在SAP ERP系统开发过程中,经常会遇到需要将大量数据从数据库表中提取,储存在内表中,供进一步处理之用。而在这个内表中,有时候存在大量重复的记录,若要从中得到唯一记录,有以下三种方法:

方法一: 内部表循环赋值,使用COLLECT语句追加记录

方法二: 内部表循环赋值,使用AT NEW和APPEND语句追加记录

方法三: 整个内部表赋值,使用DELETE ADJACENT DUPLICATES语句删除重复记录

      以上三种方法,在内表记录数不多的情况下,对系统运行影响不大,但若遇到内表记录数众多,则不同方法对系统运行性能将产生一定影响,以下是一个测试程序,测试结果,方法三是系统运行效率最高的。

REPORT y_test_temp1 .

DATA: t1 TYPE i,
      t2 TYPE i,
      times TYPE i.
TABLES: marc.

DATA: BEGIN OF it_marc OCCURS 0,
        matnr LIKE marc-matnr,
        werks LIKE marc-werks,
      END OF it_marc.

DATA: BEGIN OF it_mara OCCURS 0,
        matnr LIKE mara-matnr,
      END OF it_mara.

SELECT matnr werks
        INTO TABLE it_marc
             FROM marc
               WHERE werks = '1005'.

DO 10 TIMES. "运行10次看平均结果
  REFRESH it_mara.
* 方法一
  GET RUN TIME FIELD t1.
  LOOP AT it_marc.“在内表中循环通过collect语句得到不重复记录
    CLEAR it_mara.
    it_mara-matnr = it_marc-matnr.
    COLLECT it_mara.
  ENDLOOP.

  GET RUN TIME FIELD t2.
  times = t2 - t1.
  WRITE: AT /1 times.

* 方法二
  SORT it_marc BY matnr."按物料排序
  GET RUN TIME FIELD t1.
  LOOP AT it_marc.
    AT NEW matnr. ”当新的物料出现时得到此记录
      CLEAR it_mara.
      it_mara-matnr = it_marc-matnr.
      APPEND it_mara.
    ENDAT.
  ENDLOOP.

  GET RUN TIME FIELD t2.
  times = t2 - t1.
  WRITE: times.

* 方法三:
  it_mara[] = it_marc[].
  GET RUN TIME FIELD t1.

  DELETE ADJACENT DUPLICATES 
        FROM it_mara     COMPARING matnr.“在内表中删除重复记录
  GET RUN TIME FIELD t2.
  times = t2 - t1.
  WRITE: times.
  NEW-LINE.
ENDDO.

标签:matnr,mara,marc,t2,t1,ABAP,内表中,重复记录,times
From: https://blog.csdn.net/reagon2008/article/details/139627863

相关文章

  • ABAP小白开发操作手册+前导文
    准备做一个关于小白学习SAP开发的栏目,内容写得差不多了,可以更新了。本栏目内容介绍了ABAP开发的一些基础的开发类型和开发步骤,是针对完全没有接触过ABAP开发的超级超级小白初学者使用的,从如何查看开发申请到做出完整功能,希望具有一定的参考意义,能够帮助初学者稍微入门,大家可以......
  • SAP ABAP BTP
    ABAPBTP官方已经出简体中文学习文档了我擦感恩https://help.sap.com/docs/sap-btp-abap-environment/abap-environment/abap-environment?locale=zh-CN 之前同事分享的链接 BuildanSAPFioriAppUsingtheABAPRESTfulApplicationProgrammingModel[RAP100]:h......
  • SAP ABAP 对工作区列遍历或按条件访问
    需要对字段数量多的工作区或动态工作区进行数据处理时,列遍历可使代码更加的简洁高效。(๑¯ω¯๑)重新发一遍,丢合集里示例代码:点击查看代码TYPES:BEGINOFtyp_kna1,kunnrTYPEkna1-kunnr,"客户编号name1TYPEkna1-name1,"送达方名......
  • SAP ABAP 字符串去除重复字符的两种方法
    ABAP里如何去除字符串内的重复字符,在这提供两种方法。第一种是直接对字符串多次循环进行排除,但考虑到性能问题要尽量减少循环次数。第二种是把字符串里字符转成内表一列,去重后拼回一个字符串。方法一示例代码:点击查看代码DATAmarkTYPEc.......
  • ABAP-MB56字段增强
    MB56增强字段,效果如下:  实施步骤:1、在显示结构ALV_TREE_CHVW中附加所需要增强字段 2、TCODE:SE19实施新BADI:ES_BATCH_WHERE_USED_LIST,在方法COMPLETE_BWUL_MAINTAIN下补充字段相应取数逻辑即可,显示数据存储于内表CT_SHADOW。 ......
  • ABAP 调用外部WEBAPI
    ABAP代码如下,仅在内部测试通过,未涉及外部网络WEBAPI及跨域调用。*&---------------------------------------------------------------------**&ReportZYC_WEBAPI*&Restfulapi测试REPORTZYC_WEBAPI.DATA:LENTYPEI,"发送报文长度LEN_STRING......
  • ABAP转换SM34 TOTAL
    *<SIGNATURE>---------------------------------------------------------------------------------------+*|StaticPublicMethodZCL_MDG_UTIL=>SM34_TABLE_TO_TOTAL*+----------------------------------------------------------------------------------......
  • 36. 关于 SAP ABAP OData 服务如何实现 Deep Insert 场景 - SAP 应用的标准行为
    有朋友在知乎上向我咨询:OData更新多表数据的时候,可以做多层级结构的entity吗?多层的时候etag怎么做?比如我要更新表1.2.3。分别是header级别以及子层级别以及子层的子层。调用元调用一次会把三层的数据都给我们。如果put不可以做,一般odata这种怎么做。请赐教。......
  • ABAP 读取EXCEL 文件内容,函数 TEXT_CONVERT_XLS_TO_SAP
    EXCEL内容:读取内容:代码:TYPES:BEGINOFITAB,   FL1(50) TYPEC,   FL2(50) TYPEC,   FL3(50) TYPEC,   FL4(50) TYPEC,   FL5(50) TYPEC,   FL6(50) TYPEC,ENDOFITAB.DATA:T_ITEMTYPETABLEOFI......
  • ABAP 简单ALV 按钮+隐藏和显示
    结果代码REPORT ZGUO_TEST.*调用数据表TABLES:SPFLI.*定义、申明变量TYPE-POOLS:SLIS.DATA:GT_FIELDCATTYPELVC_T_FCAT,GS_FIELDCATTYPELVC_S_FCAT,ITEMTYPEI,   LS_LAYOUT TYPELVC_S_LAYO,   GT_EVENT  TYPESLIS_T_EVENTWITHHEADER......