Текущее время: Вт, июл 22 2025, 04:24

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Перехватить checkbox
СообщениеДобавлено: Ср, июн 11 2008, 09:17 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, фев 15 2008, 12:14
Сообщения: 146
Есть алв грид, в котором одна из колонок в виде чек боксов. Хотелось бы перехватывать момент когда в чек бокс ставится галочка (или снимается), при этом не нажимая ентера (как того требует событие data_changed).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перехватить checkbox
СообщениеДобавлено: Чт, июн 12 2008, 09:31 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, окт 24 2005, 15:55
Сообщения: 296
Пол: Мужской
dashkun написал(а):
Есть алв грид, в котором одна из колонок в виде чек боксов. Хотелось бы перехватывать момент когда в чек бокс ставится галочка (или снимается), при этом не нажимая ентера (как того требует событие data_changed).


Наверное, что-то в программе не так. Я делал подобное как для FM REUSE_ALV_GRID_DISPLAY как и для объектного построения грида.
Использовал событие data_changed. Всё работает без дополнительных нажатий enter. Скажите, как вы формируете ALV?

_________________
С уважением, Гараничев Игорь


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перехватить checkbox
СообщениеДобавлено: Чт, июн 12 2008, 11:06 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, июн 22 2005, 09:51
Сообщения: 208
Пол: Мужской
dashkun написал(а):
Есть алв грид, в котором одна из колонок в виде чек боксов. Хотелось бы перехватывать момент когда в чек бокс ставится галочка (или снимается), при этом не нажимая ентера (как того требует событие data_changed).


Как вариант: полько сделать как hotspot и обрабатывать событие hotspot_click.

_________________
С уважением, В.Ш.
4.6C


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июн 16 2008, 06:13 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, фев 15 2008, 12:14
Сообщения: 146
ALv grid объектный. Сделала hotspot, но у меня почему-то при этом перестали ставится галочки в алвгриде. Пришлось пойти кружным путем. Т.е. отлавливать hotspotclick, ставить галочку во внутренней таблице а потом делать рефреш алвгрида. Не думаю что это совсем нормальный ход. Но другого пока в голову не пришло.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июн 16 2008, 09:07 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, июн 22 2005, 09:51
Сообщения: 208
Пол: Мужской
dashkun написал(а):
ALv grid объектный. Сделала hotspot, но у меня почему-то при этом перестали ставится галочки в алвгриде. Пришлось пойти кружным путем. Т.е. отлавливать hotspotclick, ставить галочку во внутренней таблице а потом делать рефреш алвгрида. Не думаю что это совсем нормальный ход. Но другого пока в голову не пришло.

Да, именно об этом я и говорил :)

_________________
С уважением, В.Ш.
4.6C


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июн 16 2008, 09:14 
Специалист
Специалист

Зарегистрирован:
Вс, мар 13 2005, 13:59
Сообщения: 201
Откуда: Moscau
Нужно тоже было сделать галки в объектном ALV и тоже иначе как через хотспоты не получилось ;(
Было несколько проблем: при повторных нажатиях постоянно менялся размер поля с чекбоксом - решилось ручным заполнением intlen,dd_outlen,outputlen в филдкаталоге. Ранние версии GUI 7.10 (до 3 или 4 пака) постоянно вылетали без всяких ошибок.

Code:
  method handle_hotspot_click.
    data: ls_color type lvc_s_scol.

    read table itab into wa index e_row_id-index.
    case e_column_id-fieldname.
      when 'IKONE'.
        refresh wa-color_cell.
        case wa-ikone.
          when sym_large_square or sym_flash.
            ls_color-fname = 'IKONE'.
            ls_color-color-col = 6.
            append ls_color to wa-color_cell.
            wa-ikone = sym_checkbox.
          when sym_checkbox.
            wa-ikone = sym_large_square.
          when others.
        endcase.
        modify itab from wa index e_row_id-index.
        clear wa.
        alvg->refresh_table_display( is_stable = wa_stable ).

Кстати пользователи очень хотели кнопку выделить всё и отменить выделение.
Code:
  method handle_user_command.
    case e_ucomm.
      when 'SELECT'.
        clear wa.
        wa-ikone = sym_checkbox.
        modify itab from wa transporting ikone
                        where ikone eq sym_large_square
                           or ikone eq sym_flash.
        call method alvg->refresh_table_display
          exporting
            is_stable = wa_stable.
      when 'DESELECT'.
        wa-ikone = sym_large_square.

        modify itab from wa transporting ikone
                        where ikone eq sym_checkbox.
        call method alvg->refresh_table_display
          exporting
            is_stable = wa_stable.
      when others.
    endcase.
  endmethod.

  method handle_alv_toolbar.
    type-pools: icon.
    data: ls_toolbar type stb_button.
    clear ls_toolbar.
    ls_toolbar-function  = 'SELECT'.                       "#EC  NOTEXT
    ls_toolbar-icon      = icon_select_all.
    ls_toolbar-butn_type = '0'.
    ls_toolbar-disabled  = space.
    ls_toolbar-text      = ''.                              "#EC NOTEXT
    ls_toolbar-quickinfo = 'Выделить всё'.

    insert ls_toolbar into e_object->mt_toolbar index 2.
    clear ls_toolbar.
    ls_toolbar-function  = 'DESELECT'.                     "#EC  NOTEXT
    ls_toolbar-icon      = icon_deselect_all.
    ls_toolbar-butn_type = '0'.
    ls_toolbar-disabled  = space.
    ls_toolbar-text      = ''.                              "#EC NOTEXT
    ls_toolbar-quickinfo = 'Отменить выделение'.
*  ls_toolbar-checked   = space.
    insert ls_toolbar into e_object->mt_toolbar index 3.
  endmethod.                    "handle_alv_toolbar



Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июн 17 2008, 08:59 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, окт 24 2005, 15:55
Сообщения: 296
Пол: Мужской
Попробуйте вот так.
Если нужно, есть пример и для ФМ.

Code:
REPORT  zalvobject_example                   .

INCLUDE <cl_alv_control>.
DATA: ok_code LIKE sy-ucomm.
CLASS cl_gui_object DEFINITION LOAD.
CLASS lcl_event_receiver DEFINITION DEFERRED.

DATA: BEGIN OF main OCCURS 0,
      checkbox TYPE c,
      descript(20) TYPE c,
      cell  TYPE lvc_t_styl,
      END OF main.

DATA: gt_fieldcat TYPE lvc_t_fcat.
DATA: gs_fieldcat TYPE lvc_s_fcat.

DATA: g_container TYPE scrfname VALUE 'CONTAINER',
      grid  TYPE REF TO cl_gui_alv_grid,
      g_custom_container TYPE REF TO cl_gui_custom_container.

DATA: event_receiver TYPE REF TO lcl_event_receiver.
DATA: gs_layout   TYPE lvc_s_layo.
DATA: lt_exclude TYPE ui_functions.
DATA: gs_variant TYPE disvariant.
DATA: gt_sort     TYPE lvc_t_sort.

*---------------------------------------------------------------------*
*       CLASS LCL_EVENT_RECEIVER DEFINITION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.

  PUBLIC SECTION.
    METHODS handle_data_changed
      FOR EVENT data_changed OF cl_gui_alv_grid
      IMPORTING er_data_changed.
ENDCLASS.                    "lcl_event_receiver DEFINITION

*---------------------------------------------------------------------*
*       CLASS lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD handle_data_changed.
    PERFORM data_changed USING er_data_changed.
  ENDMETHOD.                    "handle_data_changed
ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION

START-OF-SELECTION.

*** Заполняем таблицу

  main-descript = 'Иванов'.
  APPEND main.
  main-descript = 'Петров'.
  APPEND main.
  main-descript = 'Сидоров'.
  APPEND main.

*** Формируем каталог полей

  CLEAR gs_fieldcat.
  gs_fieldcat-fieldname = 'DESCRIPT'.
  gs_fieldcat-datatype = 'CHAR'.
  gs_fieldcat-inttype = 'C'.
  gs_fieldcat-intlen = 20.
  gs_fieldcat-scrtext_l = 'Описание'.
  APPEND gs_fieldcat TO gt_fieldcat.

  CLEAR gs_fieldcat.
  gs_fieldcat-fieldname = 'CHECKBOX'.
  gs_fieldcat-datatype = 'CHAR'.
  gs_fieldcat-inttype = 'C'.
  gs_fieldcat-intlen = 1.
  gs_fieldcat-scrtext_l = 'Отметка'.
  gs_fieldcat-edit = 'X'.
  gs_fieldcat-checkbox = 'X'.
  APPEND gs_fieldcat TO gt_fieldcat.

  CALL SCREEN 100.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS '100'.
  SET TITLEBAR '100'.

  IF g_custom_container IS INITIAL. " если контейнер не создан
    IF sy-batch IS INITIAL. " если не запущен фоновый режим

      CREATE OBJECT g_custom_container " создаем контейнер
             EXPORTING container_name = g_container.
    ENDIF.
    CREATE OBJECT grid     " создаем грид
         EXPORTING i_parent = g_custom_container.

    CREATE OBJECT event_receiver. " создаем приемник событий
* и привязываем его к гриду
    SET HANDLER event_receiver->handle_data_changed FOR grid.

    IF sy-batch IS INITIAL.
* метод обработки изменений при смене ячеек

      CALL METHOD grid->register_edit_event
        EXPORTING
          i_event_id = cl_gui_alv_grid=>mc_evt_modified.

    ENDIF.

    gs_layout-stylefname = 'CELL'.

    CALL METHOD grid->set_ready_for_input
      EXPORTING
        i_ready_for_input = 1.

    CALL METHOD grid->set_table_for_first_display
      EXPORTING
        it_toolbar_excluding = lt_exclude
        i_save               = 'A'
        is_variant           = gs_variant
        is_layout            = gs_layout
      CHANGING
        it_fieldcatalog      = gt_fieldcat
        it_sort              = gt_sort
        it_outtab            = main[].

  ENDIF.

ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  CASE ok_code.
    WHEN 'SAVE'.
    WHEN 'CHANGE'.
    WHEN 'LEAVE'.
      CALL METHOD g_custom_container->free.
      CALL METHOD cl_gui_cfw=>flush.
      CLEAR: g_custom_container, grid.
      SET SCREEN 0.
      LEAVE SCREEN.
    WHEN 'EXIT'.
      CALL METHOD g_custom_container->free.
      CALL METHOD cl_gui_cfw=>flush.
      CLEAR: g_custom_container, grid.
      SET SCREEN 0.
      LEAVE SCREEN.
  ENDCASE.

ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Form  DATA_CHANGED
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_ER_DATA_CHANGED  text
*----------------------------------------------------------------------*
FORM data_changed USING  rr_data_changed TYPE REF TO
                                         cl_alv_changed_data_protocol.
  MESSAGE 'Событие поймано!' TYPE 'I'.

ENDFORM.                    " DATA_CHANGED

_________________
С уважением, Гараничев Игорь


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, июн 23 2008, 02:43 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, мар 09 2006, 10:12
Сообщения: 565
Откуда: Волгодонск
Пол: Мужской
Большое спасибо Igor Garanichev и Boger
Сэкономили мне массу времени.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 08 2008, 08:46 
Специалист
Специалист

Зарегистрирован:
Вт, мар 07 2006, 15:56
Сообщения: 137
Пол: Мужской
Igor Garanichev написал:
Попробуйте вот так.
Если нужно, есть пример и для ФМ.

А можно пример для ФМ?


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

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


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

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


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

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