Автор Тема: Обработка выбора ячейки даблкликом в табl  (Прочитано 7106 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 762
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
В общем тут пришлось рисовать небольшую инструкцию, как обработать нажатие даблклика мышью в ячейке таблицы (экранный элемент объявленный в виде CONTROLS: grid TYPE TABLEVIEW USING SCREEN xxxx.), ну заодно и тут выложу в качестве примера.

Просьба не путать с элементом ALV-Grid.

И так для обработки такого действия мышью с точки зрения программы надо знать колонку и номер строки в котором выполнен выбор ячейки мышью, для этого требуется выполнить следующие действия.

1. Зайти в редактор экрана на котором нарисована ваша таблица и там для выбранной колонки поставить на закладке свойств признак реакции на двойной щелчок, как на рисунке dblclick-1.jpg.

2. В PAI-модуле обработки экрана реализовать обработку для события 'PICK', которое будет возникать при выборе колонки.

Таблица на экране и некоторые переменные объявлены как:
Код: You are not allowed to view links. Register or Login
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.
Код: You are not allowed to view links. Register or Login
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.
Код: You are not allowed to view links. Register or Login
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

Пример процедуры определения какие данные внутренней таблицы были выбраны:

Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*&      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 и будет на выходе содержать индекс выбранной записи, для доступа к строке можно воспользоваться например оператором

Код: You are not allowed to view links. Register or Login
READ TABLE lt_screen_0100 INDEX g_count
Если в таблице несколько полей отмечены как возможные к выбору даблкликом, тогда из процедуры желательно возвратить так же и переменную l_field, которая будет содержать имя колонки в которой был выполнен выбор. Ну а дальше уже дело техники что вы будете делать с полученными данными.
« Последнее редактирование: Июль 02, 2007, 06:37:26 pm от Uukrul »