Я думаю этот текст ответит на все Ваши вопросы
Code:
*&---------------------------------------------------------------------*
*& Report ZTEST_ALV *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT ZTEST_ALV .
TYPE-POOLS: SLIS.
DATA: LT_T001 LIKE T001 OCCURS 0,
L_REPID LIKE SY-REPID,
LT_CT TYPE SLIS_T_FIELDCAT_ALV,
L_CT LIKE LINE OF LT_CT,
LT_EVENTS TYPE SLIS_T_EVENT,
LS_EVENT TYPE SLIS_ALV_EVENT.
START-OF-SELECTION.
CLEAR: LT_T001, LT_T001[].
L_REPID = SY-REPID.
SELECT * FROM T001 APPENDING TABLE LT_T001.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = 'T001'
CHANGING
CT_FIELDCAT = LT_CT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
LOOP AT LT_CT INTO L_CT WHERE KEY = SPACE.
L_CT-EDIT = 'X'.
MODIFY LT_CT FROM L_CT.
ENDLOOP.
CLEAR: LT_EVENTS. REFRESH LT_EVENTS.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 1
IMPORTING
ET_EVENTS = LT_EVENTS.
DELETE LT_EVENTS WHERE NAME = 'DATA_CHANGED'.
MOVE 'DATA_CHANGED' TO LS_EVENT-NAME.
MOVE 'EDITDATA' TO LS_EVENT-FORM.
APPEND LS_EVENT TO LT_EVENTS.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = L_REPID
I_CALLBACK_USER_COMMAND = 'USCOM'
I_CALLBACK_TOP_OF_PAGE = 'TOP'
IT_FIELDCAT = LT_CT[]
I_SAVE = 'A'
IT_EVENTS = LT_EVENTS[]
TABLES
T_OUTTAB = LT_T001[].
*&---------------------------------------------------------------------*
*& Form editdata
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->RR_DATA_CHANGED text
*----------------------------------------------------------------------*
FORM EDITDATA USING RR_DATA_CHANGED TYPE REF TO
CL_ALV_CHANGED_DATA_PROTOCOL.
DATA: L_GRID TYPE REF TO CL_GUI_ALV_GRID,
L_STABLE TYPE LVC_S_STBL.
L_STABLE-COL = 'X'.
L_STABLE-ROW = 'X'.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = L_GRID.
CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = L_STABLE.
ENDFORM. "EDITDATA
*&---------------------------------------------------------------------*
*& Form uscom
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM USCOM USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: L_GRID TYPE REF TO CL_GUI_ALV_GRID.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = L_GRID.
* Приводим в соответствие экранные данные со внутренней табличкой
CALL METHOD L_GRID->CHECK_CHANGED_DATA.
*
* Обработка пользовательских команд
*
ENDFORM. "uscom
*&---------------------------------------------------------------------*
*& Form top
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM TOP.
DATA: L_GRID TYPE REF TO CL_GUI_ALV_GRID.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = L_GRID.
CALL METHOD L_GRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.
* Зарегистрировали событие Enter
ENDFORM. "top