zoukankan      html  css  js  c++  java
  • SALV是一个用面向对象写出ALV简单报表的类

    *&好处:
    *&简单快捷,用来做个弹窗,或者作为明细的显示窗口,有很高的便捷性。
    *&限制(缺点):
    *&•列数限制为90。
    *&•列的输出长度限制为128个字符。
    *&•ALV的结构使用户可以在屏幕上操作您的表格。尽管ALV为打印表格提供了几个基本功能,但它并不用于配置缩小的打印布局。
    *&•对于排序和小计,您最多使用九个级别或列。
    *&•对于可聚合列,确保列的内部长度足够大,不仅适用于单个值,也适用于结果。
    *&•输出列是面向列的。只能显示平面结构的表。不能显示嵌套的表和结构。
    *&•使用ALV显示的表格不可用于输入。
    *&•如果将表格用作容器中的网格,则不能使用批处理模式。
    *&•总计和小计的输出由ALV单独处理。您既不能将结果传递给应用程序,也不能以任何方式操纵它们。

    DATA:go_alv TYPE REF TO cl_salv_table. "ALV Table
    
    DATA BEGIN OF ty_alv.
      INCLUDE TYPE mara.
    DATA:del TYPE char10,
         z   TYPE i.
    DATA END OF ty_alv.
    DATA:gs_mara LIKE ty_alv,
         gt_mara LIKE TABLE OF ty_alv.
    
    "事件类的定义
    CLASS l_cl_handle_events DEFINITION.
      PUBLIC SECTION.
      "用户操作按钮
        METHODS: on_user_command FOR EVENT added_function OF cl_salv_events_table
                IMPORTING e_salv_function.
      "双击事件
        METHODS: on_double_click FOR EVENT double_click OF cl_salv_events_table
                IMPORTING row column.
    ENDCLASS.
    
    "方法实现
    CLASS l_cl_handle_events IMPLEMENTATION.
      METHOD on_user_command.
        PERFORM handle_user_command USING e_salv_function.
      ENDMETHOD.
    
      METHOD on_double_click.
        PERFORM show_cell_info USING row column.
      ENDMETHOD.
    ENDCLASS.
    
    START-OF-SELECTION.
      SELECT * FROM mara
        INTO TABLE gt_mara UP TO 100 ROWS.
    
      TRY .
        cl_salv_table=>factory(
          IMPORTING
            r_salv_table = go_alv
          CHANGING
            t_table      = gt_mara ).
      CATCH cx_salv_msg.
    
      ENDTRY.
    
      "给列设置长文本
      go_alv->get_columns( )->get_column( 'DEL' )->set_long_text( '删除' ).
      go_alv->get_columns( )->get_column( 'Z' )->set_long_text( '自定义' ).
      "自动列宽
      go_alv->get_columns( )->set_optimize( 'X' ).
      "斑马线
      go_alv->get_display_settings( )->set_striped_pattern( 'X' ).
      "set selection mode 可以行列进行选择
      go_alv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).
    
    *******标准按钮和自定义状态使用一个就好
      "标准按钮
    *  go_alv->get_functions( )->set_all( abap_true ).  "将激活所以的ALV内置通用按钮
    
      "使用自己定义的PF状态
      go_alv->set_screen_status(
        pfstatus      = 'IT017_PF'    "SE41->状态按钮->程序:SAPLKKBL,状态:STANDARD   复制到知道程序和状态
        report        = sy-repid
        set_functions = go_alv->c_functions_all ).
    
      "设置屏幕大小,若是要全屏,就注释如下代码
      IF go_alv IS BOUND.
        go_alv->set_screen_popup(
          start_column = 30
          end_column   = 160
          start_line   = 5
          end_line     = 20 ).
      ENDIF.
    
      "获取事件对象
      DATA: lr_event TYPE REF TO cl_salv_events_table.
      lr_event = go_alv->get_event( ).
      "事件注册
      DATA: lr_handle_event TYPE REF TO l_cl_handle_events.
      CREATE OBJECT lr_handle_event.
      SET HANDLER lr_handle_event->on_user_command FOR lr_event.
      SET HANDLER lr_handle_event->on_double_click FOR lr_event.
    
      "显示
      go_alv->display( ).
    
    FORM handle_user_command USING p_function TYPE salv_de_function.
      CASE p_function.
        WHEN 'ZB'.
          "获取选中的行/列
          DATA(lv_rows) = go_alv->get_selections( )->get_selected_rows( ).
          READ TABLE lv_rows INTO DATA(ls_row) INDEX 1.
          IF sy-subrc = 0.
            MODIFY gt_mara FROM VALUE #( Z = '7' ) INDEX ls_row TRANSPORTING Z.
          ENDIF.
          go_alv->refresh( ).
        WHEN OTHERS.
      ENDCASE.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *& Form show_cell_info
    *&---------------------------------------------------------------------*
    FORM show_cell_info USING p_row TYPE i
                              p_column TYPE lvc_fname.
      MESSAGE '行:' && p_row && ',列:' && p_column TYPE 'I'.
    ENDFORM.

    结果:

    固定窗口图:

    浮窗图:

     

     

  • 相关阅读:
    Leetcode840.Magic Squares In Grid矩阵中的幻方
    Leetcode830.Positions of Large Groups较大分组的位置
    Leetcode830.Positions of Large Groups较大分组的位置
    Leetcode821.Shortest Distance to a Character字符的最短距离
    Leetcode821.Shortest Distance to a Character字符的最短距离
    Leetcode824.Goat Latin山羊拉丁文
    Leetcode824.Goat Latin山羊拉丁文
    Leetcode804.Unique Morse Code Words唯一摩尔斯密码词
    Leetcode804.Unique Morse Code Words唯一摩尔斯密码词
    python 中__name__ = '__main__' 的作用
  • 原文地址:https://www.cnblogs.com/seven1314pp/p/15419156.html
Copyright © 2011-2022 走看看