abap-在table control中实现查找功能

来源:互联网 发布:java 全角半角 空格 编辑:程序博客网 时间:2024/06/05 08:06

table control 创建时可以实现添加,删除,及翻页的功能,但没有查找的功能,故记录多时查看不方便,所以要自己写,DEBUG标准ALV的查找功能发现使用函数ALV_POPUP_TO_SEARCH2,该函数仅弹出查找框,其余查找代码仍需要自己写。

该函数查找提供的查找点过多,于是找了个简单的ALV_POPUP_TO_SEARCH,实现一个简单的查找功能,代码如下:

  
    WHEN '%SC'."查找

      CALL FUNCTION 'ALV_POPUP_TO_SEARCH'
        EXPORTING
          i_disable_search_sequence 'X'"不显示下拉框
        IMPORTING
          e_cancelled               e_cancelled
          e_new_search              e_new_search
        CHANGING
          c_string                  s_string.
      IF e_cancelled NE 'X'."取消查找
        IF e_new_search EQ 'X'."重新查找
          s_line 0.“从头开始查找
        ENDIF.
        LOOP AT ztmsd1 FROM s_line TO zmsdscp1-lines.
          IF ztmsd1-matnr CS s_string.”包含字符串s_string
            ztmsd1-zflag 'X'."选中符合条件行记录
            MODIFY ztmsd1 TRANSPORTING zflag.
            zmsdscp1-top_line sy-tabix.“符合条件记录置于首行
            s_line sy-tabix.”记录当前行,方便查找下一个时,从当前行的下一行开始查找
            search_deflag 'X'.“查找是否成功标志
            EXIT.
          ENDIF.
        ENDLOOP.
        IF search_deflag NE 'X'.
          MESSAGE s007 WITH '无匹配内容存在'.
        ENDIF.
      ENDIF.
      CLEAR search_deflag.

    WHEN '%SC+'."查找下一个

      IF s_string NE ''.
        s_line s_line + 1.”查找下一个,则从上个符合条件记录的下一行再始查找
        LOOP AT ztmsd1 FROM s_line TO zmsdscp1-lines.
          IF ztmsd1-matnr CS s_string.
            ztmsd1-zflag 'X'.
            MODIFY ztmsd1 TRANSPORTING zflag.
            zmsdscp1-top_line sy-tabix.
            s_line sy-tabix.
            search_deflag 'X'.
            EXIT.
          ENDIF.
        ENDLOOP.
        IF search_deflag NE 'X'.
          MESSAGE s007 WITH '无匹配内容存在'.
        ENDIF.
      ENDIF.
      CLEAR search_deflag.