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

Часовой пояс: 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 часа


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

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


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

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