ABAP tablecontrol Table Control 增加 过滤 筛选 功能 按钮

FORM fcode_tc_filter  USING p_tc_name p_table_name.
  DATA: ls_col     LIKE LINE OF tc_01-cols,
        lt_sel_col TYPE lvc_t_col WITH HEADER LINE,
        lt_fcat    TYPE lvc_t_fcat,
        ls_layo    TYPE lvc_s_layo,
        lt_filt    TYPE lvc_t_filt WITH HEADER LINE,
        lt_fidx    TYPE lvc_t_fidx WITH HEADER LINE,
        lt_output  TYPE TABLE OF ty_price WITH HEADER LINE,
        lt_indx    TYPE RANGE OF i,
        ls_indx    LIKE LINE OF lt_indx,
        lt_cpdr    TYPE TABLE OF ty_price WITH HEADER LINE,
        ls_price   TYPE ty_price.

  gt_price_buffer = gt_price. "为取消过滤做准备 往往把过滤和取消过滤只能出现其一
  LOOP AT tc_01-cols INTO ls_col WHERE selected = 'X'.
    lt_sel_col-fieldname = ls_col-screen-name+10(5).
    APPEND lt_sel_col.
  ENDLOOP.

* 半自动创建表头目录方法:LVC_FIELDCATALOG_MERGE
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name       = 'ZSDTPRICE'
    CHANGING
      ct_fieldcat            = lt_fcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 99.

  IF sy-subrc = 0.
    CLEAR lt_fidx[].
    CALL FUNCTION 'LVC_FILTER'
      EXPORTING
        it_fieldcat      = lt_fcat
        it_selected_cols = lt_sel_col[]
        is_layout        = ls_layo
      IMPORTING
        et_filter_index  = lt_fidx[] "该参数传出被筛除的数据行号
      TABLES
        it_data          = gt_price
      CHANGING
        ct_filter        = lt_filt[]
      EXCEPTIONS
        OTHERS           = 0.

    LOOP AT lt_fidx.
      READ TABLE gt_price INTO ls_price INDEX lt_fidx.
      lt_output = ls_price .
      APPEND lt_output.
    ENDLOOP.


    LOOP AT lt_output  .
      READ TABLE gt_price INTO ls_price WITH KEY bjfs = lt_output-bjfs
                                                 werks = lt_output-werks
                                                 bjlb = lt_output-bjlb
                                                 wlflbm = lt_output-wlflbm.
      IF sy-subrc = 0.
        DELETE gt_price INDEX sy-tabix.
      ENDIF.
    ENDLOOP.
  ENDIF.
ENDFORM.                    " FCODE_TC_FILTER

FORM fcode_tc_filter_undo  USING p_tc_name p_table_name.
  IF gt_price_buffer IS NOT INITIAL.
    gt_price = gt_price_buffer.
  ENDIF.
ENDFORM.                    " FCODE_TC_FILTER_UNDO
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

令狐九剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值