В общем тут пришлось рисовать небольшую инструкцию, как обработать нажатие даблклика мышью в ячейке таблицы (экранный элемент объявленный в виде CONTROLS: grid TYPE TABLEVIEW USING SCREEN xxxx.), ну заодно и тут выложу в качестве примера.
Просьба не путать с элементом ALV-Grid.
И так для обработки такого действия мышью с точки зрения программы надо знать колонку и номер строки в котором выполнен выбор ячейки мышью, для этого требуется выполнить следующие действия.
1. Зайти в редактор экрана на котором нарисована ваша таблица и там для выбранной колонки поставить на закладке свойств признак реакции на двойной щелчок, как на рисунке dblclick-1.jpg.
2. В PAI-модуле обработки экрана реализовать обработку для события 'PICK', которое будет возникать при выборе колонки.
Таблица на экране и некоторые переменные объявлены как:
DATA: g_count LIKE sy-tabix,
ok_code LIKE sy-ucomm,
ftopix LIKE sy-tabix.
CONTROLS: grid_0100 TYPE TABLEVIEW USING SCREEN 0100.
В данном случае обработка будет находится в модуле MODULE user_command_0100.
PROCESS BEFORE OUTPUT.
MODULE status_0100.
MODULE update_0100.
LOOP AT lt_screen_0100 WITH CONTROL grid_0100 CURSOR ftopix.
MODULE get_data_0100.
ENDLOOP.
*
PROCESS AFTER INPUT.
LOOP AT lt_screen_0100.
MODULE set_data_0100.
ENDLOOP.
MODULE user_command_0100.
Собственно пример кода обработки нажатия в user_command_0100.
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'PICK'.
CLEAR ok_code.
PERFORM get_line_click USING grid_0100 CHANGING g_count.
PERFORM view_order USING g_count.
WHEN 'DAY_PLUS'.
...
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
Пример процедуры определения какие данные внутренней таблицы были выбраны:
*&---------------------------------------------------------------------*
*& Form get_line_click
*&---------------------------------------------------------------------*
* Получить номер позиции выбранной в таблице
*----------------------------------------------------------------------*
* <-- P_COUNT - Номер строки во внутренней таблице
*----------------------------------------------------------------------*
FORM get_line_click USING grid TYPE cxtab_control
CHANGING p_count.
DATA: l_field TYPE scrfname,
l_stepl TYPE systepl,
l_value TYPE char50.
GET CURSOR FIELD l_field LINE l_stepl VALUE l_value.
p_count = l_stepl + grid-top_line - 1.
IF l_stepl = 0. p_count = 1. ENDIF.
ENDFORM. " get_line_click
Фактически данная процедура выполнит расчет строки для внутренней таблицы lt_screen_0100 и будет на выходе содержать индекс выбранной записи, для доступа к строке можно воспользоваться например оператором
READ TABLE lt_screen_0100 INDEX g_count
Если в таблице несколько полей отмечены как возможные к выбору даблкликом, тогда из процедуры желательно возвратить так же и переменную l_field, которая будет содержать имя колонки в которой был выполнен выбор. Ну а дальше уже дело техники что вы будете делать с полученными данными.