Текущее время: Вс, июл 20 2025, 00:47

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Как поймать нажатие ENTER в ALV
СообщениеДобавлено: Вт, сен 24 2013, 12:36 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, май 14 2013, 10:12
Сообщения: 50
Добрый день,

Столкнулся с проблемой отлова нажатия клавиши Enter в ALV_GRID

Code:

METHOD handle_data_changed_finished.
    DATA s_good LIKE LINE OF et_good_cells.
   IF LINES( et_good_cells ) = 1.
      LOOP AT et_good_cells INTO s_good.
        IF s_good-fieldname = 'DOGNUM'.
          " если изменено поле DOGNUM то делаем что то полезное
        ENDIF.
     ENDLOOP.
  ENDIF.


Если мы изменили что то в ячейке, то код прекрасно отрабатывает, но вот если мы просто нажали на клавишу ENTER то et_good_cells остается пустым, так же ка и переменная SY_UCOMM

Что можно сделать? Как распознать в поле нажатие клавиши Enter без редактирования записи?

_________________
А ведь все так хорошо начиналось...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как поймать нажатие ENTER в ALV
СообщениеДобавлено: Вт, сен 24 2013, 12:57 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
Code:
call method grid1->register_edit_event
  exporting
    i_event_id = cl_gui_alv_grid=>mc_evt_enter
    .
*call method grid1->register_edit_event
*  exporting
*    i_event_id = cl_gui_alv_grid=>mc_evt_modified
*    .


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как поймать нажатие ENTER в ALV
СообщениеДобавлено: Ср, сен 25 2013, 15:23 
Специалист
Специалист

Зарегистрирован:
Пн, июл 12 2010, 11:43
Сообщения: 186
Добрый день.
Проанализируйте параметр e_modified (код ниже)
Code:
    METHODS: handle_change
            FOR EVENT data_changed_finished OF cl_gui_alv_grid
              IMPORTING e_modified
                        et_good_cells.
************************************************
METHOD handle_change.
    DATA: ln_good_cells LIKE LINE OF et_good_cells,
          wa_tab1 LIKE LINE OF tab1.
    DATA: stbl TYPE lvc_s_stbl.

    IF e_modified IS NOT INITIAL. "если изменения были
******* что нужно
    ENDIF.
  ENDMETHOD.   


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как поймать нажатие ENTER в ALV
СообщениеДобавлено: Пн, сен 30 2013, 10:31 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Пн, фев 18 2013, 13:37
Сообщения: 12
В ивенте нам надо вызвать метод cl_gui_alv_grid->get_selected_cells из него получить табличку, говорящую о выбранных ячейках и их уже обрабатывать.
http://help.sap.com/saphelp_erp2004/hel ... ontent.htm

в et_good_cells попадают только измененные ячейки, одобренные протоколом. Если данных в ALV пользователь не редактировал, то он будет пустой.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как поймать нажатие ENTER в ALV
СообщениеДобавлено: Вт, окт 01 2013, 05:23 
Начинающий
Начинающий

Зарегистрирован:
Вт, окт 01 2013, 05:02
Сообщения: 2
в метод DATA_CHANGED_FINISHED "заходит" практически при всех событиях ALV

Code:
  METHOD  DATA_CHANGED_FINISHED.
    PERFORM DATA_CHANGED_FINISHED  USING E_MODIFIED
                                              ET_GOOD_CELLS.
  ENDMETHOD.

FORM DATA_CHANGED_FINISHED  USING    E_MODIFIED      TYPE CHAR01
                                          ET_GOOD_CELLS   TYPE LVC_T_MODI.

  DATA: es_good_cells   TYPE lvc_s_modi.

  CASE E_MODIFIED.  "Проверяем на изменение
    WHEN ''.  "Не было изменений
      IF ET_GOOD_CELLS[] IS INITIAL.  "доп. проверка :)
        FL_move = 'X'.  "флаг движения на следующие поле ввода
        CASE GRID->CUR_EVENT->EVENTID.  "Проверяем текущее событие
          WHEN CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.  "
          WHEN CL_GUI_ALV_GRID=>MC_EVT_ENTER. "Нажатие Enter
          WHEN OTHERS.
            CLEAR FL_move.  " "не правильное событие" - не двигаемся
        ENDCASE.
      ENDIF.
  ENDCASE.
  ....
ENDFORM.





Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как поймать нажатие ENTER в ALV
СообщениеДобавлено: Чт, янв 23 2014, 06:05 
Ассистент
Ассистент

Зарегистрирован:
Вт, мар 26 2013, 19:24
Сообщения: 41
Добрый день.

Напишите пож-та поподробнее где именно писать этот код вызова метода?

Есть свой экран, в нем есть контейнер в нем есть алв на глобальных классах.

Где писать код вызова метода METHOD DATA_CHANGED_FINISHED??

Пишу в программе, в отладку не попадает, в модулях экрана нельзя.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как поймать нажатие ENTER в ALV
СообщениеДобавлено: Чт, янв 23 2014, 07:23 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Почитайте BC401 про события, их обработку, посмотрите тестовые программы BCALV*GRID*, а также воспользуйтесь поиском по форуму.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как поймать нажатие ENTER в ALV
СообщениеДобавлено: Чт, янв 23 2014, 08:14 
Ассистент
Ассистент

Зарегистрирован:
Вт, мар 26 2013, 19:24
Сообщения: 41
Что по поиску, что по примерам примерно одинаково, везде написан локальный класс и метод и какаято обработка события внутри,

Я только начал разбираться в классах/методах :? а нужно быстро разобраться)

Вот допустим я беру из примера то что мне надо и вставляю в свою программу:

Code:
class lcl_events_d0100 definition.
  public section.
    methods:
data_changed_finished
                         for event data_changed_finished
                         of cl_gui_alv_grid.
ENDCLASS.

class lcl_events_d0100 IMPLEMENTATION.
method data_changed_finished.
    CHECK sy-uname = ''.
  endmethod.                    "data_changed_finished
endclass.



по идее при нажатии enter в алв ячейке, я должен попасть сюда я правильно понимаю? или не все так просто?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как поймать нажатие ENTER в ALV
СообщениеДобавлено: Чт, янв 23 2014, 09:29 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
juster87 написал(а):
по идее при нажатии enter в алв ячейке, я должен попасть сюда я правильно понимаю? или не все так просто?

Нет, не так :)
При нажатии Enter происходит событие DATA_CHANGED, а не DATA_CHANGED_FINISHED, и то только при вызове метода REGISTER_EDIT_EVENT.
См. программу BCALV_TEST_GRID_EVENTS, чтобы разобраться в событиях ALV_GRID.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как поймать нажатие ENTER в ALV
СообщениеДобавлено: Ср, янв 29 2014, 09:56 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 19 2012, 08:33
Сообщения: 182
Пол: Мужской
Code:
CALL METHOD LCL_GUI_ALV_GRID->REGISTER_EDIT_EVENT
  EXPORTING
    I_EVENT_ID = cl_gui_alv_grid=>mc_evt_modified.


CALL METHOD LCL_GUI_ALV_GRID->CHECK_CHANGED_DATA.

Code:
FORM data_changed using rr_data_changed type REF TO cl_alv_changed_data_protocol.

  data: ls_cell type lvc_s_modi.

  "Если указанное кол-во больше доступного - обрезается до доступного.
  "+ выставляется склад куда перемещается
*--------------------------------------------------------------------*
  loop at rr_data_changed->mt_mod_cells into ls_cell.

     *******

  ENDLOOP.
*--------------------------------------------------------------------*

ENDFORM. "data_changed

_________________
crusty написал(а):
Логистика - понятие растяжимое


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как поймать нажатие ENTER в ALV
СообщениеДобавлено: Чт, янв 30 2014, 07:42 
Ассистент
Ассистент

Зарегистрирован:
Вт, мар 26 2013, 19:24
Сообщения: 41
Всем спасибо, разобрался, работает :)


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

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


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

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


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

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