Двойной клик ALV Grid (cl_salv_table)

Привожу пример кода который позволят отрабатывать события , а так же выводить alv grid в модульном окне.
Для примера привожу код который выводит список дебиторов и по двойному клику выводит проводки по нему в модульном окне.

db_click_alv.jpg

  1. *&---------------------------------------------------------------------*
  2. *& Report Z_NCH_TEST
  3. *&
  4. *&---------------------------------------------------------------------*
  5. *&
  6. *&
  7. *&---------------------------------------------------------------------*
  8.  
  9. REPORT Z_NCH_TEST.
  10.  
  11.  
  12. KNA1,BSID.
  13.  
  14.  
  15. *Обьявляем переменные для alv grid
  16. gc_alv_table TYPE REF TO cl_salv_table,
  17. gc_functions TYPE REF TO cl_salv_functions,
  18. gr_events TYPE REF TO cl_salv_events_table,
  19. gc_display TYPE REF TO cl_salv_display_settings.
  20.  
  21. t_kna1 LIKE kna1 OCCURS 0 WITH HEADER LINE,
  22. t_bsid like bsid OCCURS 0 WITH HEADER LINE.
  23.  
  24. type_kna1 like t_kna1.
  25.  
  26. line_kna1 TYPE type_kna1.
  27.  
  28.  
  29. SELECT kunnr name1 LAND1 PSTLZ FROM KNA1 INTO CORRESPONDING FIELDS OF TABLE t_kna1.
  30.  
  31.  
  32.  
  33. *----------------------------------------------------------------------*
  34. * CLASS lcl_event_handler DEFINITION
  35. *----------------------------------------------------------------------*
  36. *
  37. *----------------------------------------------------------------------*
  38. CLASS lcl_event_handler DEFINITION.
  39.  
  40. PUBLIC SECTION.
  41.  
  42. METHODS: handle_doubleclick FOR EVENT double_click
  43. OF cl_salv_events_table
  44. IMPORTING row column.
  45. ENDCLASS. "lcl_event_handler DEFINITION
  46.  
  47. *----------------------------------------------------------------------*
  48. * CLASS lcl_event_handler IMPLEMENTATION
  49. *----------------------------------------------------------------------*
  50. *
  51. *----------------------------------------------------------------------*
  52. CLASS lcl_event_handler IMPLEMENTATION.
  53.  
  54. METHOD handle_doubleclick.
  55.  
  56. gr_table TYPE REF TO cl_salv_table,
  57. lr_functions TYPE REF TO cl_salv_functions_list,
  58. lr_columns TYPE REF TO cl_salv_columns,
  59. gr_functions TYPE REF TO cl_salv_functions,
  60. gr_columns TYPE REF TO cl_salv_columns_table,
  61. gr_column TYPE REF TO cl_salv_column_table,
  62. gr_display TYPE REF TO cl_salv_display_settings.
  63.  
  64.  
  65.  
  66. READ TABLE t_kna1 INTO line_kna1 INDEX row.
  67.  
  68. SELECT kunnr BELNR bldat FROM bsid INTO CORRESPONDING FIELDS OF TABLE t_bsid WHERE kunnr eq line_kna1-kunnr.
  69.  
  70.  
  71. TRY.
  72. cl_salv_table=>factory(
  73. IMPORTING
  74. r_salv_table = gr_table
  75. CHANGING
  76. t_table = t_bsid[] ).
  77. CATCH cx_salv_msg.
  78.  
  79. lr_functions = gr_table->get_functions( ).
  80. lr_functions->set_all( 'X' ).
  81.  
  82. lr_columns = gr_table->get_columns( ).
  83. lr_columns->set_optimize( 'X' ).
  84.  
  85. gr_table->set_screen_popup(
  86. start_column = 1
  87. end_column = 100
  88. start_line = 1
  89. end_line = 20 ).
  90.  
  91. gr_display = gr_table->get_display_settings( ).
  92. gr_display->set_list_header( 'Список проводок').
  93. gr_functions = gr_table->get_functions( ).
  94.  
  95. gr_table->display( ).
  96.  
  97.  
  98. ENDMETHOD. "handle_doubleclick
  99.  
  100.  
  101.  
  102. ENDCLASS. "lcl_event_handler IMPLEMENTATION
  103.  
  104. DATA: o_event_handler TYPE REF TO lcl_event_handler.
  105.  
  106.  
  107.  
  108. cl_salv_table=>factory(
  109. IMPORTING r_salv_table = gc_alv_table
  110. CHANGING t_table = t_kna1[]
  111. ).
  112.  
  113. gc_display = gc_alv_table->get_display_settings( ).
  114. gc_display->set_list_header( 'Список дебиторов').
  115. gc_functions = gc_alv_table->get_functions( ).
  116.  
  117. gr_events = gc_alv_table->get_event( ).
  118.  
  119. CREATE OBJECT o_event_handler.
  120. SET HANDLER o_event_handler->handle_doubleclick FOR gr_events.
  121.  
  122. gc_functions->set_all( 'X' ).
  123. gc_alv_table->display( ).

Комментарии