ALV 过滤器

DATA: gt_filt     TYPE lvc_t_filt,
      gs_filt     TYPE lvc_s_filt.
  gs_filt-fieldname = 'MBLNR'.
  gs_filt-low       = '4900000000'.
  gs_filt-high      = '5000000000'.
  gs_filt-sign      = 'I'.
  gs_filt-option    = 'BT'.
  APPEND gs_filt TO gt_filt .
  CALL METHOD go_grid->set_table_for_first_display
    EXPORTING
      is_variant                    = gs_variant
      i_save                        = 'A'
      is_layout                     = sla
    CHANGING
      it_outtab                     = itab[]
      it_fieldcatalog               = gt_fieldcat[]
      it_filter                     = gt_filt[]
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.

调用REUSE_ALV_GRID_DISPLAY_LVC创建一个ALV,使用过滤器功能对物料字段进行筛选时,发现过滤器(filter)屏幕中的字段长度过短,与物料长度不一致,如下图:

2016-10-26_13-57-57

2, 问题解决

强制在field catalog中指定output长度为18,代码如下:

1

2

3

if gwa_fieldcat-fieldname = 'MATNR'.

   gwa_fieldcat-outputlen = '18'.

endif.

修改后:

2016-10-26_14-04-04

 

以上。

 

*&---------------------------------------------------------------------*

*& 一个简单的通过类CL_SALV_TABLE生成SALV的例子

*&---------------------------------------------------------------------*

REPORT z_salv_13.

*

*----------------------------------------------------------------------*

*       CLASS lcl_report DEFINITION

*----------------------------------------------------------------------*

CLASS lcl_report DEFINITION.

*

  PUBLIC SECTION.

*

*   定义SALV输出内表

    TYPES: BEGIN OF ty_vbak,

             vbeln TYPE vbak-vbeln,

             erdat TYPE erdat,

             auart TYPE auart,

             kunnr TYPE kunnr,

           END OF ty_vbak.

*

    DATA: t_vbak TYPE STANDARD TABLE OF ty_vbak.

*

*   ALV reference

    DATA: o_alv TYPE REF TO cl_salv_table.

*

    METHODS:

*     抽取数据

      get_data,

*

*     生成输出内容

      generate_output.

*

*$*$*.....CODE_ADD_1 - Begin..................................1..*$*$*

*

* 定义private method来设定SALV不同特性

  PRIVATE SECTION.

    METHODS:

      set_pf_status CHANGING co_alv TYPE REF TO cl_salv_table.

    METHODS:set_filters CHANGING co_alv TYPE REF TO cl_salv_table.

*$*$*.....CODE_ADD_1 - End....................................1..*$*$*

ENDCLASS.                    "lcl_report DEFINITION

*----------------------------------------------------------------------*

*       CLASS lcl_report IMPLEMENTATION

*----------------------------------------------------------------------*

* 类实现

CLASS lcl_report IMPLEMENTATION.

*

  METHOD get_data.

*   抽取数据

    SELECT vbeln

           erdat

           auart

           kunnr

      INTO TABLE t_vbak

      FROM vbak

           UP TO 20 ROWS.

*

  ENDMETHOD.                    "get_data

*.......................................................................

  METHOD generate_output.

*   New ALV instance

*   We are calling the static Factory method which will give back

*   the ALV object reference.

*

* exception class

    DATA: lx_msg TYPE REF TO cx_salv_msg.

    TRY.

        cl_salv_table=>factory(

          IMPORTING

            r_salv_table = o_alv

          CHANGING

            t_table      = t_vbak ).

      CATCH cx_salv_msg INTO lx_msg.

    ENDTRY.

*

*$*$*.....CODE_ADD_2 - Begin..................................2..*$*$*

*

*    In this area we will call the methods which will set the

*      different properties to the ALV

*   调用status设置方法

    CALL METHOD set_pf_status

      CHANGING

        co_alv = o_alv.

*   调用filter设置方法

    CALL METHOD set_filters

      CHANGING

        co_alv = o_alv.

*$*$*.....CODE_ADD_2 - End....................................2..*$*$*

*

*

*   调用Display方法将数据输出到屏幕上

    o_alv->display( ).

*

  ENDMETHOD.                    "generate_output

*

*$*$*.....CODE_ADD_3 - Begin..................................3..*$*$*

*

*    In this area we will implement the methods which are defined in

*      the class definition

* status设置方法实现

  METHOD set_pf_status.

    DATA: lo_functions TYPE REF TO cl_salv_functions_list.

*   设置默认的标准状态栏

    lo_functions = co_alv->get_functions( ).

    lo_functions->set_default( abap_true ).

  ENDMETHOD.

* filter设置方法的实现

  METHOD set_filters.

*

    DATA: lo_filters TYPE REF TO cl_salv_filters.

*

    lo_filters = co_alv->get_filters( ).

*

*   Set the filter for the column ERDAT

*     the filter criteria works exactly same as any

*     RANGE or SELECT-OPTIONS works.

    TRY.

        CALL METHOD lo_filters->add_filter

          EXPORTING

            columnname = 'ERDAT'

            sign       = 'I'

            option     = 'EQ'

            low        = '20021009'  "2002.10.09

*           high       =

          .

      CATCH cx_salv_not_found .                         "#EC NO_HANDLER

      CATCH cx_salv_data_error .                        "#EC NO_HANDLER

      CATCH cx_salv_existing .                          "#EC NO_HANDLER

    ENDTRY.

*

  ENDMETHOD.                    "set_filters

*$*$*.....CODE_ADD_3 - End....................................3..*$*$*

*

ENDCLASS.                    "lcl_report IMPLEMENTATION

START-OF-SELECTION.

  DATA: lo_report TYPE REF TO lcl_report.

  CREATE OBJECT lo_report.

* 抽取数据

  lo_report->get_data( ).

* 生成SALV

  lo_report->generate_output( ).

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值