Текущее время: Вт, апр 16 2024, 21:59

Часовой пояс: 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
Сообщения: 347
Использование 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
Сообщения: 347
Готового кода для ФМ-а 'REUSE_ALV_GRID_DISPLAY' у меня нет - я предпочитаю использовать сразу cl_gui_alv_grid. И, судя по коду, grid1 - это не тот грид, который отображается в 'REUSE_ALV_GRID_DISPLAY', а какой-то местечковый грид, который находится в контейнере, принадлежащем не ФГ для ФМ-а, а текущей программе, и который не отображается.


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

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

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


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

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 347
Типа:
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 часа


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

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


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

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