SORT,DELETE ADJACEN DUPLICATES FROM保留有效数据

1, 在ABAP开发中, 我们经常会删除内表中的重复行,这时我们会需要一个很方便的语句,就是DELETEADJACENTDUPLICATES FROM,但是在使用这个语句,要注意它删除相邻的重复行,我们一般要通过SORT对这个语句进行排序,示例如下:

  DATA: BEGIN OF wa_pa0001,

  pernr LIKE pa0001-pernr,

  uname LIKE pa0001-uname,

  bukrs LIKE pa0001-bukrs,

  plans LIKE pa0001-plans,

  END OF wa_pa0001.

  DATA: itab_pa0001 LIKE TABLE OF wa_pa0001 WITH HEADER LINE.

  SORT itab_pa0001 BY pernr.

  DELETE ADJACENT DUPLICATES FROM itab_pa0001.

  2,在ABAP开发中,有时要进行一个耗费时间的处理,这时不想让客户感到处理出现问题或者以为是电脑死机,给出一个提示,“请等待的...”,可以使用下面语句:

  CALL FUNCATION SAPGUI_PROGRESS_INDICATOR

  EXPORTING

  text = 数据处理中,请等待....

   进行耗费时间处理

  3, 在ABAP开发中,有时我们做的程序界面是不需要全部必选的,例如:

  SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME TITLETEXT-001.

  METERS: p_werks LIKE mseg-werks. 物料凭证-工厂

  METERS: p_lgort LIKE mseg-lgort OBLIGATORY. 物料凭证-库存地点

  SELECT-OPTION: s_mblnr FOR mseg-mblnr. 物料凭证-编号

  SELECTION-SCREEN END OF blk.

  在选在屏幕中p_lgort 是必选;s_mblnr 是一个范围,在OPEN-SQL中可以使用IN查询范围,若s_mblnr没有数据时,取全部,有数据时取符合条件的数据;p_werks为一个数据值,在写SQL语句时,我们要根据条件进行SQL拼加。在这我们可以通过SELECT-OPTION做一个操作,通过如下语句SELECT-OPTION: s_werks FOR mseg-werks NO-EXTENSION NOINTERVALS.可以去掉SELECT-OPTION的区间选项、后缀选项,但有个问题是不能去掉=、<=、<、>、>=选择。

 
 
SORT,DELETE ADJACEN DUPLICATES FROM保留有效数据
 

要求:结构zstructure还有两个字段,分别为结构名称NAME、是否处理字段FLAG(0,代表处理;1,代表没有处理)。这个结构的内表可能含有同一名称NAME的多条信息,要求只保留一条信息,即某名称的处理信息全部为0,就只保留一条;若某名称的处理信息有为“未处理”的,只保留一条未处理信息。

如: Name Flag

                0

                0

                0

                1

需要的结果为:

      Name    Flag

                0

                  1

 

处理如下:

    sort l_it_structure by name ascending   flag   descending.

    delete adjacent duplicates from l_it_sturcture comparing name.

   

解释:

(1) sort <table> by <field>

    功能:按照给定字段对内表排序

(2) delete adjacent duplicates from <table> comparing <field>

    功能:删除数据后面,与他临近的指定相同自动的数据记录。

 

 

posted @ 2011-08-17 22:15  VerySky  阅读(5802)  评论(0)    收藏  举报