Текущее время: Пт, июл 18 2025, 16:26

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Событие Click (одинарный) в ALV
СообщениеДобавлено: Ср, апр 20 2016, 14:44 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 26 2011, 10:56
Сообщения: 55
Подскажите, пожалуйста, как можно отловить событие выбора ячейки в ALV (клик мыши по ячейке)? ALV вывожу через REUSE_ALV_GRID_DISPLAY
Мне посоветовали поискать в REUSE_ALV_GRID_DISPLAY_LVC - но там тоже не нашел.
Может кто-то делал?

Суть задачи следующая: человек видит раскрашенные ячейки и один раз кликая мышкой по ячейке внизу в HTML_BOTTOM показывался подробный текст к ячейке. Двойной клик уже используется для получения расшифровки суммы по объектно.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Ср, апр 20 2016, 22:42 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Andrewsh написал(а):
Подскажите, пожалуйста, как можно отловить событие выбора ячейки в ALV (клик мыши по ячейке)? ALV вывожу через REUSE_ALV_GRID_DISPLAY
Мне посоветовали поискать в REUSE_ALV_GRID_DISPLAY_LVC - но там тоже не нашел.
Может кто-то делал?

Суть задачи следующая: человек видит раскрашенные ячейки и один раз кликая мышкой по ячейке внизу в HTML_BOTTOM показывался подробный текст к ячейке. Двойной клик уже используется для получения расшифровки суммы по объектно.

Для класса CL_GUI_ALV_GRID есть событие, но не по клику, а на выбор текущей ячейки DELAYED_CALLBACK. Оно как раз для таких целей и предназначено. Есть один нюанс, это событие срабатывает секунды через 1,5 после перемещения курсора. Если хочется это время уменьшить, можно создать потомка от класса и в конструкторе написать примерно так:
Code:
  Call method Me->SET_DELAY_MOVE_CURRENT_CELL
    exporting TIME = 0.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Чт, апр 21 2016, 09:43 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 26 2011, 10:56
Сообщения: 55
Сделал следующим образом:

Code:
  IT_EVENTS-NAME = 'DELAYED_CALLBACK'.
  IT_EVENTS-FORM = 'DELAYED_CALLBACK'.
  APPEND IT_EVENTS.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
          IT_FIELDCAT        = GT_FIELDCAT
          I_CALLBACK_PROGRAM = SY-REPID
          I_SAVE             = 'A'
          IS_VARIANT         = GS_VARIANT
          IS_LAYOUT          = GS_LAYOUT
          IT_EVENTS          = IT_EVENTS[]
          I_HTML_HEIGHT_END  = 10
          I_CALLBACK_PF_STATUS_SET    = 'FORALV'
          I_CALLBACK_USER_COMMAND     = 'USER_COMMAND'
     TABLES
          T_OUTTAB           = ALV_TAB.


FORM DELAYED_CALLBACK USING changed.
  BREAK-POINT.
ENDFORM.


перемещаюсь по строка АЛВ и в отладчик программа не уходит...
Подскажите, пожалуйста, что не так сделал?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Чт, апр 21 2016, 09:59 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Попробуйте не передавать sy-repid напрямую, а сделайте через переменную.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Чт, апр 21 2016, 18:27 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 351
Использование IT_EVENTS позволяет нацепить подпрограммы-обработчики не на все события. Тут нужно попробовать достучаться до экземпляра грида с помощью GET_GLOBALS_FROM_SLVC_FULLSCR (например, в подпрограмме, указанной в i_callback_pf_status_set), а затем установить для данного события свой обработчик.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Пт, апр 22 2016, 14:43 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 26 2011, 10:56
Сообщения: 55
LAT написал(а):
Использование IT_EVENTS позволяет нацепить подпрограммы-обработчики не на все события. Тут нужно попробовать достучаться до экземпляра грида с помощью GET_GLOBALS_FROM_SLVC_FULLSCR (например, в подпрограмме, указанной в i_callback_pf_status_set), а затем установить для данного события свой обработчик.

А можете привести пример? что-то у меня пока ничего не получается...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Пт, апр 22 2016, 16:14 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Забыл один момент, в cl_gui_alv_grid для того, чтобы события DELAYED заработали, нужно вызвать метод register_delayed_event. В REUSE я такого не заметил.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Пн, апр 25 2016, 10:08 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 26 2011, 10:56
Сообщения: 55
Parazit написал:
Забыл один момент, в cl_gui_alv_grid для того, чтобы события DELAYED заработали, нужно вызвать метод register_delayed_event. В REUSE я такого не заметил.


сделал так:
Code:
  IT_EVENTS-NAME = 'DELAYED_CALLBACK'.
  IT_EVENTS-FORM = 'DELAYED_CALLBACK'.
  APPEND IT_EVENTS.
  CLEAR IT_EVENTS.

  data repid like sy-repid.
  repid = sy-repid.

  call method grid1->register_delayed_event     
         exporting    i_event_id    =  cl_gui_alv_grid=>mc_evt_delayed_move_curr_cell.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
          IT_FIELDCAT        = GT_FIELDCAT
          I_CALLBACK_PROGRAM = REPID
          I_SAVE             = 'A'
          IS_VARIANT         = GS_VARIANT
          IS_LAYOUT          = GS_LAYOUT
          IT_EVENTS          = IT_EVENTS[]
          I_HTML_HEIGHT_END  = 10
          I_CALLBACK_PF_STATUS_SET    = 'FORALV'
          I_CALLBACK_USER_COMMAND     = 'USER_COMMAND'
     TABLES
          T_OUTTAB           = ALV_TAB.


результат тот же... в мою подпрограмму не переходит при переходе из ячейки в ячейку


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Пн, апр 25 2016, 10:29 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
А grid1 как получили?

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Пн, апр 25 2016, 14:14 
Специалист
Специалист

Зарегистрирован:
Чт, дек 02 2010, 08:37
Сообщения: 156
GET_GLOBALS_FROM_SLVC_FULLSCR


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Пн, апр 25 2016, 14:47 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 26 2011, 10:56
Сообщения: 55
Parazit написал:
А grid1 как получили?

вот так:
Code:
CREATE OBJECT CUSTOM_CONTAINER1
        EXPORTING
            CONTAINER_NAME = 'ALV_GRID'
        EXCEPTIONS
            CNTL_ERROR = 1
            CNTL_SYSTEM_ERROR = 2
            CREATE_ERROR = 3
            LIFETIME_ERROR = 4
            LIFETIME_DYNPRO_DYNPRO_LINK = 5.
     CREATE OBJECT GRID1
              EXPORTING I_PARENT = CUSTOM_CONTAINER1.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Пн, апр 25 2016, 14:50 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, апр 26 2011, 10:56
Сообщения: 55
baboon написал(а):
GET_GLOBALS_FROM_SLVC_FULLSCR

А можно по-подробнее?
Как я понял, вы предлагаете вызвать данную функцию:
Code:
call function 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    importing
      e_grid        = grid1.


а потом что?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Пн, апр 25 2016, 14:54 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 351
Готового кода для ФМ-а 'REUSE_ALV_GRID_DISPLAY' у меня нет - я предпочитаю использовать сразу cl_gui_alv_grid. И, судя по коду, grid1 - это не тот грид, который отображается в 'REUSE_ALV_GRID_DISPLAY', а какой-то местечковый грид, который находится в контейнере, принадлежащем не ФГ для ФМ-а, а текущей программе, и который не отображается.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Пн, апр 25 2016, 14:56 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 351
Andrewsh написал(а):
а потом что?

А потом сделать с grid1 все, что собирались :).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Событие Click (одинарный) в ALV
СообщениеДобавлено: Пн, апр 25 2016, 15:04 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 351
Типа:
Code:
  grid1->register_delayed_event( cl_gui_alv_grid=>mc_evt_delayed_change_select ).
  grid1->register_delayed_event( cl_gui_alv_grid=>mc_evt_delayed_move_curr_cell ).
  SET HANDLER on_delayed_callback FOR grid1.
  SET HANDLER on_delayed_changed_sel_cb FOR grid1.

А где-то в классе-обработчике в любой секции:
Code:
  methods ON_DELAYED_CALLBACK
    for event DELAYED_CALLBACK of CL_GUI_ALV_GRID .
  methods ON_DELAYED_CHANGED_SEL_CB
    for event DELAYED_CHANGED_SEL_CALLBACK of CL_GUI_ALV_GRID .

+ имплементация (реализация) этих методов
Только:
1. GET_GLOBALS_FROM_SLVC_FULLSCR нужно вызывать, когда грид уже существует, например, в той подпрограмме, о которой я писал ранее.
2. И я обработчики обычно ставлю до вызова set_table_for_first_display() (в Вашем случае он происходит внутри REUSE_ALV_GRID_DISPLAY), а если цеплять их в подпрограмме, то это будет происходить после вызова. По идее, это роли не играет, но на 105% не уверен.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.

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


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

Сейчас этот форум просматривают: Google [Bot]


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

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