Текущее время: Чт, июл 24 2025, 08:30

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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