Текущее время: Чт, мар 28 2024, 16:33

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Двойной клик в ALV
СообщениеДобавлено: Вт, май 29 2018, 11:17 
Ассистент
Ассистент

Зарегистрирован:
Вт, мар 20 2018, 11:16
Сообщения: 27
Добрый день!
Необходимо, чтобы при двойном клике на строку в таблице ALV открывался снизу второй экран с доп. информацией. Возможно ли сделать это с помощью класса CL_SALV_TABLE? можно сделать это проще или хотя бы стандартный пример?)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Двойной клик в ALV
СообщениеДобавлено: Вт, май 29 2018, 13:45 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Вт, апр 24 2018, 12:54
Сообщения: 4
Привет.
Вот стандартный пример:
Code:
DATA:
  BEGIN OF TAB,
    EBELN LIKE EKKO-EBELN,
    KONNR LIKE EKPO-KONNR,
    BANFN LIKE EBAN-BANFN,
  END OF TAB,
  ALV_TAB LIKE TAB OCCURS 0.
FIELD-SYMBOLS: <FS> LIKE LINE OF ALV_TAB.


CLASS LCL_HANDLE_EVENTS DEFINITION DEFERRED. "класс для обработки событий
DATA: O_ALV         TYPE REF TO CL_SALV_TABLE,
      GC_SELECTIONS TYPE REF TO CL_SALV_SELECTIONS,
      LR_EVENTS     TYPE REF TO CL_SALV_EVENTS_TABLE,
      GR_EVENTS     TYPE REF TO LCL_HANDLE_EVENTS,
      ALV_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      ALV_CLASS     TYPE REF TO CL_GUI_ALV_GRID.

CLASS LCL_HANDLE_EVENTS DEFINITION.
  PUBLIC SECTION.
    METHODS:
      ON_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_SALV_EVENTS_TABLE
        IMPORTING ROW COLUMN.
ENDCLASS.

CLASS LCL_HANDLE_EVENTS IMPLEMENTATION.
  METHOD ON_DOUBLE_CLICK.
    DATA: LT_CELLS TYPE SALV_S_CELL.
    CLEAR LT_CELLS.
    GC_SELECTIONS = O_ALV->GET_SELECTIONS( ).
    LT_CELLS = GC_SELECTIONS->GET_CURRENT_CELL( ).
    READ TABLE ALV_TAB ASSIGNING <FS> INDEX LT_CELLS-ROW.
    CASE LT_CELLS-COLUMNNAME.
      WHEN 'EBELN'.
        SET PARAMETER ID 'BES' FIELD <FS>-EBELN.
        CALL TRANSACTION  'ME23N' AND SKIP FIRST SCREEN.
      WHEN 'KONNR'.
        SET PARAMETER ID 'CTR' FIELD <FS>-KONNR.
        CALL TRANSACTION  'ME33K' AND SKIP FIRST SCREEN.
      WHEN 'BANFN'.
        SET PARAMETER ID 'BAN' FIELD <FS>-BANFN.
        CALL TRANSACTION  'ME53N' AND SKIP FIRST SCREEN.
    ENDCASE.
  ENDMETHOD.
ENDCLASS.


MODULE CREATE_OBJECTS OUTPUT.
  IF ALV_CONTAINER IS INITIAL.
    CREATE OBJECT ALV_CONTAINER
      EXPORTING
        CONTAINER_NAME = 'MY_CONTROL_AREA'.
    CREATE OBJECT ALV_CLASS
      EXPORTING
        I_PARENT = ALV_CONTAINER.

    CREATE OBJECT GR_EVENTS.
    SET HANDLER GR_EVENTS->ON_DOUBLE_CLICK FOR LR_EVENTS.
  ENDIF.
ENDMODULE.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Двойной клик в ALV
СообщениеДобавлено: Вт, май 29 2018, 15:26 
Ассистент
Ассистент

Зарегистрирован:
Вт, мар 20 2018, 11:16
Сообщения: 27
carbon_credit написал(а):
Привет.
Вот стандартный пример:
Code:
DATA:
  BEGIN OF TAB,
    EBELN LIKE EKKO-EBELN,
    KONNR LIKE EKPO-KONNR,
    BANFN LIKE EBAN-BANFN,
  END OF TAB,
  ALV_TAB LIKE TAB OCCURS 0.
FIELD-SYMBOLS: <FS> LIKE LINE OF ALV_TAB.


CLASS LCL_HANDLE_EVENTS DEFINITION DEFERRED. "класс для обработки событий
DATA: O_ALV         TYPE REF TO CL_SALV_TABLE,
      GC_SELECTIONS TYPE REF TO CL_SALV_SELECTIONS,
      LR_EVENTS     TYPE REF TO CL_SALV_EVENTS_TABLE,
      GR_EVENTS     TYPE REF TO LCL_HANDLE_EVENTS,
      ALV_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      ALV_CLASS     TYPE REF TO CL_GUI_ALV_GRID.

CLASS LCL_HANDLE_EVENTS DEFINITION.
  PUBLIC SECTION.
    METHODS:
      ON_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_SALV_EVENTS_TABLE
        IMPORTING ROW COLUMN.
ENDCLASS.

CLASS LCL_HANDLE_EVENTS IMPLEMENTATION.
  METHOD ON_DOUBLE_CLICK.
    DATA: LT_CELLS TYPE SALV_S_CELL.
    CLEAR LT_CELLS.
    GC_SELECTIONS = O_ALV->GET_SELECTIONS( ).
    LT_CELLS = GC_SELECTIONS->GET_CURRENT_CELL( ).
    READ TABLE ALV_TAB ASSIGNING <FS> INDEX LT_CELLS-ROW.
    CASE LT_CELLS-COLUMNNAME.
      WHEN 'EBELN'.
        SET PARAMETER ID 'BES' FIELD <FS>-EBELN.
        CALL TRANSACTION  'ME23N' AND SKIP FIRST SCREEN.
      WHEN 'KONNR'.
        SET PARAMETER ID 'CTR' FIELD <FS>-KONNR.
        CALL TRANSACTION  'ME33K' AND SKIP FIRST SCREEN.
      WHEN 'BANFN'.
        SET PARAMETER ID 'BAN' FIELD <FS>-BANFN.
        CALL TRANSACTION  'ME53N' AND SKIP FIRST SCREEN.
    ENDCASE.
  ENDMETHOD.
ENDCLASS.


MODULE CREATE_OBJECTS OUTPUT.
  IF ALV_CONTAINER IS INITIAL.
    CREATE OBJECT ALV_CONTAINER
      EXPORTING
        CONTAINER_NAME = 'MY_CONTROL_AREA'.
    CREATE OBJECT ALV_CLASS
      EXPORTING
        I_PARENT = ALV_CONTAINER.

    CREATE OBJECT GR_EVENTS.
    SET HANDLER GR_EVENTS->ON_DOUBLE_CLICK FOR LR_EVENTS.
  ENDIF.
ENDMODULE.


Надо чтоб при двойном клике он передавал данные со строчки, на которую кликаешь, как это можно реализовать?

Code:
DATA:
  gt_usr   TYPE TABLE OF zobur.

*----------------------------------------------------------------------*
*       CLASS cl_event_handler DEFINITION
*----------------------------------------------------------------------*
CLASS cl_event_handler DEFINITION.
  PUBLIC SECTION.

    CLASS-METHODS on_before_salv_function         " BEFORE_SALV_FUNCTION
      FOR EVENT if_salv_events_functions~before_salv_function
        OF cl_salv_events_table
          IMPORTING e_salv_function.

    CLASS-METHODS on_after_salv_function          " AFTER_SALV_FUNCTION
      FOR EVENT if_salv_events_functions~before_salv_function
        OF cl_salv_events_table
          IMPORTING e_salv_function.

    CLASS-METHODS on_added_function               " ADDED_FUNCTION
      FOR EVENT if_salv_events_functions~added_function
        OF cl_salv_events_table
          IMPORTING e_salv_function.

    CLASS-METHODS on_top_of_page                  " TOP_OF_PAGE
      FOR EVENT if_salv_events_list~top_of_page
        OF cl_salv_events_table
          IMPORTING r_top_of_page
                    page
                    table_index.

    CLASS-METHODS on_end_of_page                  " END_OF_PAGE
      FOR EVENT if_salv_events_list~end_of_page
        OF cl_salv_events_table
          IMPORTING r_end_of_page
                    page.

    CLASS-METHODS on_double_click                 " DOUBLE_CLICK
      FOR EVENT if_salv_events_actions_table~double_click
        OF cl_salv_events_table
          IMPORTING row
                    column.

    CLASS-METHODS on_link_click                   " LINK_CLICK
      FOR EVENT if_salv_events_actions_table~link_click
        OF cl_salv_events_table
          IMPORTING row
                    column.
ENDCLASS.                    "cl_event_handler DEFINITION

*----------------------------------------------------------------------*
*       CLASS cl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_event_handler IMPLEMENTATION.

  METHOD on_before_salv_function.
    BREAK-POINT.
  ENDMETHOD.                    "on_before_salv_function

  METHOD on_after_salv_function.
    BREAK-POINT.
  ENDMETHOD.                    "on_after_salv_function

  METHOD on_added_function.
    BREAK-POINT.
  ENDMETHOD.                    "on_added_function

  METHOD on_top_of_page.
    BREAK-POINT.
  ENDMETHOD.                    "on_top_of_page

  METHOD on_end_of_page.
    BREAK-POINT.
  ENDMETHOD.                    "on_end_of_page

  METHOD on_double_click.

   *Здесь происходит обработка двойного клика*
    BREAK-POINT.
  ENDMETHOD.                    "on_double_click

  METHOD on_link_click.
    BREAK-POINT.
  ENDMETHOD.                    "on_link_click
ENDCLASS.                    "cl_event_handler IMPLEMENTATION

*&---------------------------------------------------------------------*
*&      START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.

* read sample data to internal table
  SELECT * FROM zobur UP TO 30 ROWS
    into TABLE gt_usr
    ORDER BY pernr.

  PERFORM display_alv.

*&---------------------------------------------------------------------*
*&      Form  display_alv
*&---------------------------------------------------------------------*
FORM display_alv.

  DATA:
    lo_table      TYPE REF TO cl_salv_table,
    lo_events     TYPE REF TO cl_salv_events_table,
    lo_columns    TYPE REF TO cl_salv_columns_table,
    lo_column     TYPE REF TO cl_salv_column_list.

  TRY.
      CALL METHOD cl_salv_table=>factory
        IMPORTING
          r_salv_table = lo_table
        CHANGING
          t_table      = gt_usr.

      lo_events = lo_table->get_event( ).
      SET HANDLER cl_event_handler=>on_before_salv_function FOR lo_events.
      SET HANDLER cl_event_handler=>on_after_salv_function FOR lo_events.
      SET HANDLER cl_event_handler=>on_added_function FOR lo_events.
      SET HANDLER cl_event_handler=>on_top_of_page FOR lo_events.
      SET HANDLER cl_event_handler=>on_end_of_page FOR lo_events.
      SET HANDLER cl_event_handler=>on_double_click FOR lo_events.
      SET HANDLER cl_event_handler=>on_link_click FOR lo_events.

*     ALV-Toolbar
      lo_table->set_screen_status(
        pfstatus      = 'STANDARD_FULLSCREEN'
        report        = 'SAPLSLVC_FULLSCREEN'
        set_functions = lo_table->c_functions_all ).

*     Set column as hotspot
lo_columns = lo_table->get_columns( ).
      lo_column ?= lo_columns->get_column( 'PERNR' ).
      lo_column->set_cell_type( if_salv_c_cell_type=>hotspot ).

      lo_table->display( ).

      lo_table->display( ).

    CATCH cx_salv_msg.             " cl_salv_table=>factory()
      WRITE: / 'cx_salv_msg exception'.
      STOP.

  ENDTRY.
ENDFORM.     



Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Двойной клик в ALV
СообщениеДобавлено: Вт, май 29 2018, 15:38 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 05 2017, 23:56
Сообщения: 537
у метода ON_DOUBLE_CLICK есть два параметрa ROW и COLUMN
там указано куда кликнул пользователь.
ROW-строка
COLUMN колонка


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Двойной клик в ALV  Тема решена
СообщениеДобавлено: Вт, май 29 2018, 15:45 
Ассистент
Ассистент

Зарегистрирован:
Вт, мар 20 2018, 11:16
Сообщения: 27
Разобрался)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB