Текущее время: Пн, авг 04 2025, 08:48

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Управление функцией Drag & Drop в объектном ALV ?
СообщениеДобавлено: Пн, фев 11 2008, 16:34 
Специалист
Специалист

Зарегистрирован:
Пн, фев 11 2008, 16:17
Сообщения: 122
Пол: Мужской
Добрый день, Коллеги!

Подскажите пожалуйста, есть ли возможность управлять функцией Drag & Drop в отображённой с помощью объектного ALV таблице.
Нужно сделать проверку-подтверждение, при перетаскивании курсором строк в таблице. Возможно ли это?

Спасибо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление функцией Drag & Drop в объектном ALV ?
СообщениеДобавлено: Пн, фев 11 2008, 16:49 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
Danila написал:
Добрый день, Коллеги!

Подскажите пожалуйста, есть ли возможность управлять функцией Drag & Drop в отображённой с помощью объектного ALV таблице.
Нужно сделать проверку-подтверждение, при перетаскивании курсором строк в таблице. Возможно ли это?

Спасибо.



Можно.
Правда я делал Drag & Drop в пределах 1го ALV. Но не вижу причин почему бы это не работало между 2мя ALV например.

там создаются 2е перформы, в котором вы фиксируете что берете и куда кидаете, а там уже пишите любые проверки.

Все это реализуется с очень много дописываниия кода для Dragанд дропк. Много кода.


Последний раз редактировалось apetrenko Пн, фев 11 2008, 16:49, всего редактировалось 1 раз.

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

Зарегистрирован:
Пн, янв 14 2008, 10:33
Сообщения: 163
судя по сдн-у .. можно

Examples

Development class SLIS contains demo reports for Drag & Drop operations with the ALV Grid Control:

BCALV_DND_01 (dragging rows of the grid control to nodes of the tree control)
BCALV_DND_02 (dragging function icons of the tree control to rows of the grid control)
BCALV_DND_03 (defining Drag & Drop behavior for cells of the grid control)
BCALV_DND_04 (moving or copying rows within an ALV Grid Control)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление функцией Drag & Drop в объектном ALV ?
СообщениеДобавлено: Пн, фев 11 2008, 16:54 
Специалист
Специалист

Зарегистрирован:
Пн, фев 11 2008, 16:17
Сообщения: 122
Пол: Мужской
apetrenko написал:
Можно.
Правда я делал Drag & Drop в пределах 1го ALV. Но не вижу причин почему бы это не работало между 2мя ALV например.


Речь и идёт об одной ALV. Т. е. строки перетаскиваются в пределах одной таблицы.
Однако, при выборе и перетаскивании строки не удаётся отловить это событие вообще. Как это можно сделать?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление функцией Drag & Drop в объектном ALV ?
СообщениеДобавлено: Пн, фев 11 2008, 17:13 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
Danila написал:
apetrenko написал:
Можно.
Правда я делал Drag & Drop в пределах 1го ALV. Но не вижу причин почему бы это не работало между 2мя ALV например.


Речь и идёт об одной ALV. Т. е. строки перетаскиваются в пределах одной таблицы.
Однако, при выборе и перетаскивании строки не удаётся отловить это событие вообще. Как это можно сделать?


Вы приведите код. может подскажем в чем проблемма.

расскажите по пунктам что и как Вы делали. По кускам кода


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление функцией Drag & Drop в объектном ALV ?
СообщениеДобавлено: Пн, фев 11 2008, 17:29 
Специалист
Специалист

Зарегистрирован:
Пн, фев 11 2008, 16:17
Сообщения: 122
Пол: Мужской
apetrenko написал:
Danila написал:
apetrenko написал:
Можно.
Правда я делал Drag & Drop в пределах 1го ALV. Но не вижу причин почему бы это не работало между 2мя ALV например.


Речь и идёт об одной ALV. Т. е. строки перетаскиваются в пределах одной таблицы.
Однако, при выборе и перетаскивании строки не удаётся отловить это событие вообще. Как это можно сделать?


Вы приведите код. может подскажем в чем проблемма.

расскажите по пунктам что и как Вы делали. По кускам кода



Привожу тестовый вариант программы.
Код следующий:

_____________________________________________________________
CALL SCREEN 100.


*********************************************************
FORM fill_fcat.

DATA: wa_fcat TYPE lvc_s_fcat.

REFRESH it_fcat.
CLEAR wa_fcat.
wa_fcat-fieldname = 'GROUP'.
wa_fcat-tabname = 'IT_TAB_MAIN'.
APPEND wa_fcat TO it_fcat.

CLEAR wa_fcat.
wa_fcat-fieldname = 'TEXT'.
wa_fcat-tabname = 'IT_TAB_MAIN'.
APPEND wa_fcat TO it_fcat.

CLEAR wa_fcat.
wa_fcat-edit = 'X'.
wa_fcat-tech = 'X'.
APPEND wa_fcat TO it_fcat.

ENDFORM. "fill_fcat
*********************************************************
FORM fill_layo.

* wa_layo-zebra = 'X'.

ENDFORM. "fill_layo
*********************************************************


CREATE OBJECT obj_cont
EXPORTING
container_name = 'AREA'.
CREATE OBJECT obj_alv
EXPORTING
i_parent = obj_cont.

PERFORM fill_fcat.
PERFORM fill_layo.

CALL METHOD obj_alv->set_table_for_first_display
EXPORTING
is_layout = wa_layo
CHANGING
it_outtab = it_tab_main
it_fieldcatalog = it_fcat
it_sort = it_sort.

CREATE OBJECT event_receiver.
SET HANDLER event_receiver->handle_double_click FOR obj_alv.
SET HANDLER event_receiver->drag_drop FOR obj_alv.


__________________________________________________________________________________________________________________________
Т. е. отображается ALV таблица.
В ней по умолчанию есть возможность перетаскивания строк, т. е. напрмер 10-ю вставить перетащить мышью и она расположится, например между 3-й и 4-й :) Собственно, Drag & Drop.

Нужно сделать проверку-подтверждение, при перетаскивании строки.
Отловить это событие не удаётся.
__________________________________________________________________________________________________________________________

CLASS lcl_event DEFINITION.

PUBLIC SECTION.
* Обработка double_click

METHODS:
handle_double_click
FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column.
* Обработка Drag&Drop
METHODS:
drag_drop
FOR EVENT ??? "(В классе CL_GUI_ALV_GRID есть несколько событий, которые, судя по
названию относятся к работе Drag & Drop, однако ни одно из них не срабатывает при перетаскивании строки)

OF cl_gui_alv_grid.

ENDCLASS. "lcl_event DEFINITION

__________________________________________________________________________________________________________________________

В этом и проблемма...


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

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
У вас хоть 1 событие срабатывает?

DRAG срабатывает?
DROP срабатывает?

Drop не сработает если нет обьекта.

Пример моего LCL

Code:
CLASS THIS_DRAGDROPOBJ DEFINITION.
  PUBLIC SECTION.
  DATA: INDEX TYPE I.
ENDCLASS.


CLASS LCL_APPLICATION DEFINITION.
  PUBLIC SECTION.
   DATA:   FUNCTION_FOR_ONDRAG  TYPE STRING.
   DATA:   FUNCTION_FOR_ONDROP  TYPE STRING.
   DATA:   programm_name  TYPE STRING.
    METHODS:
      HANDLE_ALV_DRAG
        FOR EVENT ONDRAG
        OF CL_GUI_ALV_GRID
        IMPORTING E_ROW E_COLUMN E_DRAGDROPOBJ,
      HANDLE_ALV_DROP
        FOR EVENT ONDROP
        OF CL_GUI_ALV_GRID
        IMPORTING E_ROW E_COLUMN E_DRAGDROPOBJ.
ENDCLASS.

CLASS LCL_APPLICATION IMPLEMENTATION.
METHOD HANDLE_ALV_DRAG.
PERFORM (FUNCTION_FOR_ONDRAG) IN PROGRAM (programm_name) USING E_ROW E_COLUMN E_DRAGDROPOBJ.
DATA: DATAOBJ TYPE REF TO THIS_DRAGDROPOBJ.
CREATE OBJECT DATAOBJ.
E_DRAGDROPOBJ->OBJECT = DATAOBJ.
ENDMETHOD.
METHOD HANDLE_ALV_DROP.
  PERFORM (FUNCTION_FOR_ONDROP) IN PROGRAM (programm_name) USING E_ROW E_COLUMN E_DRAGDROPOBJ.
ENDMETHOD.
ENDCLASS.


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

Зарегистрирован:
Пн, фев 11 2008, 16:17
Сообщения: 122
Пол: Мужской
apetrenko написал:
У вас хоть 1 событие срабатывает?

DRAG срабатывает?
DROP срабатывает?


Нет... Ни ONDRAG, ни ONDROP не срабатывает...


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

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
Danila написал:
apetrenko написал:
У вас хоть 1 событие срабатывает?

DRAG срабатывает?
DROP срабатывает?


Нет... Ни ONDRAG, ни ONDROP не срабатывает...


посмотри код выше, должен быть промежуточный класс.
у меня он назван THIS_DRAGDROPOBJ

я в Index бросаю индекс перетаскиваемой строки.


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

Зарегистрирован:
Пн, фев 11 2008, 16:17
Сообщения: 122
Пол: Мужской
apetrenko написал:
Danila написал:
apetrenko написал:
У вас хоть 1 событие срабатывает?

DRAG срабатывает?
DROP срабатывает?


Нет... Ни ONDRAG, ни ONDROP не срабатывает...


посмотри код выше, должен быть промежуточный класс.
у меня он назван THIS_DRAGDROPOBJ

я в Index бросаю индекс перетаскиваемой строки.


Не совсем понял, как у Вас используется промежуточный класс THIS_DRAGDROPOBJ. Т. е. как он может повлиять на срабатывание событий ONDRAG и ONDROP. Ведь они обрабатываются в другом классе: LCL_APPLICATION ? А у меня они в нём просто не отлавливаются...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 11 2008, 18:19 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
Приведу пример моей библиотеки заточеной для рабты с OBJ ALV
для CONTEXTMENU и DRAG& DROP в пределах 1го ALV.

Библиотека написана давненько, писалась лично для себя, поэтому имеет только те возможности что мне нужны.

Сама библиотека

Code:
CLASS THIS_DRAGDROPOBJ DEFINITION.
  PUBLIC SECTION.
  DATA: INDEX TYPE I.
ENDCLASS.

* Грид.  DRAGANDDROP
CLASS LCL_APPLICATION DEFINITION.
  PUBLIC SECTION.
   DATA:   FUNCTION_FOR_ONDRAG  TYPE STRING.
   DATA:   FUNCTION_FOR_ONDROP  TYPE STRING.
   DATA:   programm_name  TYPE STRING.
    METHODS:
      HANDLE_ALV_DRAG
        FOR EVENT ONDRAG
        OF CL_GUI_ALV_GRID
        IMPORTING E_ROW E_COLUMN E_DRAGDROPOBJ,
      HANDLE_ALV_DROP
        FOR EVENT ONDROP
        OF CL_GUI_ALV_GRID
        IMPORTING E_ROW E_COLUMN E_DRAGDROPOBJ.
ENDCLASS.

CLASS LCL_APPLICATION IMPLEMENTATION.
METHOD HANDLE_ALV_DRAG.
PERFORM (FUNCTION_FOR_ONDRAG) IN PROGRAM (programm_name) USING E_ROW E_COLUMN E_DRAGDROPOBJ.
DATA: DATAOBJ TYPE REF TO THIS_DRAGDROPOBJ.
CREATE OBJECT DATAOBJ.
E_DRAGDROPOBJ->OBJECT = DATAOBJ.
ENDMETHOD.
METHOD HANDLE_ALV_DROP.
  PERFORM (FUNCTION_FOR_ONDROP) IN PROGRAM (programm_name) USING E_ROW E_COLUMN E_DRAGDROPOBJ.
ENDMETHOD.
ENDCLASS.

*----------------------------------------------------------
* Грид. Добавление контекстного меню.
CLASS lcl_event_handler_alv DEFINITION.
PUBLIC SECTION.
   DATA:   programm_name  TYPE STRING.
   DATA:   FUNCTION_FOR_CONTEXT_MENU  TYPE STRING.
   DATA:   FUNCTION_FOR_USER_COMMAND  TYPE STRING.

  METHODS:
    SET_context_menu
      for EVENT context_menu_request OF cl_gui_alv_grid
       IMPORTING e_object,
    SET_User_Command
      for EVENT user_command OF  cl_gui_alv_grid
       IMPORTING e_ucomm,
    SET_Double_click
       for event double_click OF cl_gui_alv_grid
       IMPORTING e_row e_column.
PRIVATE SECTION.
ENDCLASS.

CLASS lcl_event_handler_alv IMPLEMENTATION.
METHOD SET_context_menu.
PERFORM (FUNCTION_FOR_CONTEXT_MENU) IN PROGRAM (programm_name)  USING e_object.
ENDMETHOD.
METHOD SET_User_Command.
PERFORM (FUNCTION_FOR_USER_COMMAND) IN PROGRAM (programm_name) USING e_ucomm.
ENDMETHOD.
METHOD SET_Double_click.
PERFORM (FUNCTION_FOR_USER_COMMAND) IN PROGRAM (programm_name) USING 'DBL_CLICK'.
ENDMETHOD.
ENDCLASS.



CLASS ALV_DISPLAY DEFINITION.
PUBLIC SECTION.
      " переменные класса.
      DATA  gr_alvgrid TYPE REF TO cl_gui_alv_grid.
      DATA  alvname TYPE scrfname.             " Тут обязательно указать название ALV на экране.
      DATA  gr_container TYPE REF TO cl_gui_custom_container.
      DATA  gt_fieldcat TYPE lvc_t_fcat.
      DATA  gt_s_fieldcat TYPE lvc_s_fcat.
      DATA  SORT          TYPE LVC_S_SORT.
      DATA  gt_sort       TYPE LVC_T_SORT.
      DATA  gs_layout TYPE lvc_s_layo.
      DATA  wa_catalog TYPE lvc_s_fcat.
      DATA  StructureName TYPE DD02L-TABNAME VALUE ''.
      DATA  Title type STRING VALUE 'ALV TITLE'.

      DATA  sUniqField type STRING VALUE ''. "имя поля по которому будет производится позиционирование по значению.
      DATA  iUniqID    TYPE String VALUE 0. " для корректного позиционирования после рефреша
                                            " в таблице должно быть это поле. Где хранится какон либо уникальное поле для этой таблицы
      DATA   gr_event_handler TYPE REF to lcl_event_handler_alv.
      DATA   G_APPLICATION    TYPE REF TO LCL_APPLICATION.
      DATA   gs_variant       TYPE disvariant.

      DATA: G_BEHAVIOUR_ALV TYPE REF TO CL_DRAGDROP.
      DATA: EFFECT TYPE I,  HANDLE_ALV TYPE I.

* методы.
METHODS: INITIALIZE_ALV.  "выполнить 1 раз для инициализации ALV на экране.
METHODS: SHOW_SIMPLE_TABLE EXPORTING
                             tblName TYPE TABLE.
METHODS: REFRESH EXPORTING tblName TYPE TABLE.         " вывод данных на экран.
METHODS: REFRESH_RESTORE_POSITION_BY_ID
                EXPORTING tblName TYPE TABLE.
METHODS: SAVE_POSITION_BY_ID
                EXPORTING tblName TYPE TABLE.
METHODS: USE_CUSTOM_CONTEXT_MENU
             IMPORTING
                FUNCTION_FOR_CONTEXT_MENU TYPE STRING   " Параметры передавать только большими буквами
                FUNCTION_FOR_USER_COMMAND  TYPE STRING  " Параметры передавать только большими буквами
                programm_name  TYPE STRING.  " Параметры передавать только большими буквами
METHODS:  USE_DRAG_AND_DROP
             IMPORTING
                FUNCTION_FOR_ONDRAG  TYPE STRING   " Параметры передавать только большими буквами
                FUNCTION_FOR_ONDROP  TYPE STRING  " Параметры передавать только большими буквами
                programm_name  TYPE STRING.  " Параметры передавать только большими буквами
PRIVATE SECTION.
    DATA isInitialize  TYPE I VALUE 0.  " Проверка на инициализацию класса на экране.  если 1 тогда инициализировано.
ENDCLASS.
******************************************************************************

CLASS  ALV_DISPLAY  IMPLEMENTATION.


METHOD INITIALIZE_ALV.
IF isInitialize = 1. EXIT. ENDIF.  " если инициализация да.. тогда валим отседова.


  CREATE OBJECT  gr_container
       EXPORTING
        container_name =  alvname
       EXCEPTIONS
          cntl_error         =    1
          cntl_system_error  =    2
          create_error       =    3
          lifetime_error     =    4
          lifetime_dynpro_dynpro_link = 5
          others             =     6 .

CREATE OBJECT  gr_alvgrid
      EXPORTING
          i_parent =  gr_container
      EXCEPTIONS
          error_cntl_create    =  1
          error_cntl_init      =  2
          error_cntl_link      =  3
          error_dp_create      =  4
          others               =  5 .


IF StructureName <> ''.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
     EXPORTING
     i_structure_name = StructureName
CHANGING
     ct_fieldcat =  gt_fieldcat[] .
ENDIF.

* данные лайяута по умолчанию. если надо меняйте. лайаут в паблик секции.
  gs_layout-zebra = 'X'.
  gs_layout-CWIDTH_OPT = 'X'.
*  gs_layout-SEL_MODE = 'A'.
  gs_layout-grid_title = Title.
  gs_layout-smalltitle = 'X'.
  isInitialize = 1.
*  gs_layout-numc_sum = 'X'.
*  gs_layout-NO_TOTLINE = ABAP_TRUE.
*  gs_layout-TOTALS_BEF = 'X'.

  ENDMETHOD.
******************************************************************************



METHOD REFRESH.
*     CALL METHOD  gr_alvgrid->set_table_for_first_display
*       EXPORTING
*           is_layout       =  gs_layout
*           i_save          = 'A'
*       CHANGING
*           it_fieldcatalog =  gt_fieldcat
*           it_outtab       =  tblName[].
  CALL METHOD gr_alvgrid->REFRESH_TABLE_DISPLAY.
ENDMETHOD.


METHOD REFRESH_RESTORE_POSITION_BY_ID.
  DATA   iRow                TYPE i.
  DATA   SROID       type LVC_S_ROID.
  FIELD-SYMBOLS      <table> TYPE STANDARD TABLE.
  FIELD-SYMBOLS      <hline> TYPE ANY.
  DATA  hl_data  TYPE REF TO data.

  ASSIGN tblName[] to <table>.
  CREATE DATA hl_data LIKE LINE OF <table>.
  ASSIGN hl_data->* to <hline>.

*  gs_variant-report = sy-repid.
* сначала перичитываем.
   CALL METHOD  gr_alvgrid->set_table_for_first_display
       EXPORTING
           is_variant      =  gs_variant
           is_layout       =  gs_layout
           i_save          = 'A'
       CHANGING
           it_sort         =  gt_sort
           it_fieldcatalog =  gt_fieldcat
           it_outtab       =  tblName[].

  CALL METHOD gr_alvgrid->REFRESH_TABLE_DISPLAY.

  READ TABLE <table> INTO <hline> WITH KEY  (sUNIQFIELD) = iUNIQID.

        if sy-tabix <> 0.
           iRow = sy-tabix.
           SROID-ROW_ID = iRow.
        CALL METHOD gr_alvgrid->set_current_cell_via_id
           EXPORTING
             IS_ROW_NO    =   SROID.
        endif.

ENDMETHOD.

* сохраняем текущий ID поля
METHOD SAVE_POSITION_BY_ID.
  DATA:  iRow                TYPE i.
  DATA:  iCol                TYPE i.
  DATA:  sValue              TYPE c.
  DATA:  sField              TYPE c.
  DATA:  LS_ROW_ID   type LVC_S_ROW.
  FIELD-SYMBOLS      <table> TYPE STANDARD TABLE.
  FIELD-SYMBOLS      <hline> TYPE ANY.
  FIELD-SYMBOLS      <field> TYPE ANY.
  DATA  hl_data  TYPE REF TO data.


  ASSIGN tblName[] to <table>.
  CREATE DATA hl_data LIKE LINE OF <table>.
  ASSIGN hl_data->* to <hline>.

    CALL method gr_alvgrid->get_current_cell
         importing
           E_ROW    = iRow
           E_COL    = iCol
           E_VALUE  = sValue
           ES_ROW_ID = LS_ROW_ID.
  READ TABLE <table> INTO <hline> INDEX LS_ROW_ID.
     if sy-tabix <> 0.
       ASSIGN COMPONENT sUniqField OF STRUCTURE <hline> TO <field>.
        iUNIQID = <field>.
     endif.

ENDMETHOD.


METHOD USE_CUSTOM_CONTEXT_MENU.
  IF gr_event_handler is INITIAL.
      CREATE OBJECT gr_event_handler.
      gr_event_handler->programm_name = programm_name.
      gr_event_handler->FUNCTION_FOR_CONTEXT_MENU = FUNCTION_FOR_CONTEXT_MENU.
      gr_event_handler->FUNCTION_FOR_USER_COMMAND = FUNCTION_FOR_USER_COMMAND.
*      gr_event_handler->FUNCTION_FOR_ONDRAG = FUNCTION_FOR_ONDRAG.
*      gr_event_handler->FUNCTION_FOR_ONDROP = FUNCTION_FOR_ONDROP.

      " переводим на всяк случай в верхний регистр название функций.
      TRANSLATE gr_event_handler->programm_name             TO UPPER CASE.
      TRANSLATE gr_event_handler->FUNCTION_FOR_CONTEXT_MENU TO UPPER CASE.
      TRANSLATE gr_event_handler->FUNCTION_FOR_USER_COMMAND TO UPPER CASE.
*      TRANSLATE gr_event_handler->FUNCTION_FOR_ONDRAG TO UPPER CASE.
*      TRANSLATE gr_event_handler->FUNCTION_FOR_ONDROP TO UPPER CASE.

      SET HANDLER gr_event_handler->SET_User_Command
            FOR gr_alvgrid.
      SET HANDLER gr_event_handler->SET_context_menu
            FOR gr_alvgrid.
      SET HANDLER gr_event_handler->SET_double_click
            FOR gr_alvgrid.
*      SET HANDLER gr_event_handler->SET_ONDRAG
*            FOR gr_alvgrid.
*      SET HANDLER gr_event_handler->SET_ONDROP
*            FOR gr_alvgrid.

  ENDIF.
ENDMETHOD.


METHOD  USE_DRAG_AND_DROP.
IF G_BEHAVIOUR_ALV IS INITIAL.
  CREATE OBJECT G_BEHAVIOUR_ALV.
  EFFECT = CL_DRAGDROP=>MOVE + CL_DRAGDROP=>COPY.
  CALL METHOD G_BEHAVIOUR_ALV->ADD
    EXPORTING
      FLAVOR = 'Line'                  "#EC NOTEXT
      DRAGSRC = 'X'
      DROPTARGET = 'X'
      EFFECT = EFFECT.
  CALL METHOD G_BEHAVIOUR_ALV->GET_HANDLE
    IMPORTING HANDLE = HANDLE_ALV.
ENDIF.

IF G_APPLICATION is INITIAL.
  CREATE OBJECT G_APPLICATION.
  G_APPLICATION->programm_name = programm_name.
  G_APPLICATION->FUNCTION_FOR_ONDRAG = FUNCTION_FOR_ONDRAG.
  G_APPLICATION->FUNCTION_FOR_ONDROP = FUNCTION_FOR_ONDROP.
  TRANSLATE G_APPLICATION->programm_name             TO UPPER CASE.
  TRANSLATE G_APPLICATION->FUNCTION_FOR_ONDRAG       TO UPPER CASE.
  TRANSLATE G_APPLICATION->FUNCTION_FOR_ONDROP       TO UPPER CASE.

  SET HANDLER G_APPLICATION->HANDLE_ALV_DRAG    FOR gr_alvgrid.
  SET HANDLER G_APPLICATION->HANDLE_ALV_DROP    FOR gr_alvgrid.
ENDIF.

ENDMETHOD.


METHOD  SHOW_SIMPLE_TABLE.  " отладка. не работает пока.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
       EXPORTING
            I_SAVE           = 'A'
            CT_FIELDCAT      = gt_fieldcat
       TABLES
            T_OUTTAB         = tblName[].
ENDMETHOD.

ENDCLASS.



Пример использования PBO

Code:
DATA: dragdropindex TYPE I.
DATA:  ALV710 TYPE REF TO ALV_DISPLAY.


IF ALV710 is INITIAL.
   CREATE OBJECT ALV710.
   ALV710->alvname = 'ALV710_01'.    "Имя специального элемента управления на форме.
   ALV710->TITLE = 'Список позиций.'.
   ALV710->sUNIQFIELD = 'BID'.
   ALV710->iUNIQID = 0.
   CALL METHOD  ALV710->INITIALIZE_ALV.
   " ручное заполение полей, но можно использовать ALV710->StructureName
   CLEAR  ALV710->gt_s_fieldcat.
    ALV710->gt_s_fieldcat-fieldname = 'FULL_OPERATION_NAME'.
    ALV710->gt_s_fieldcat-datatype  = 'C'.
    ALV710->gt_s_fieldcat-inttype   = 'C'.
    ALV710->gt_s_fieldcat-intlen    = 20.
    ALV710->gt_s_fieldcat-JUST      = 'L'.
    ALV710->gt_s_fieldcat-emphasize  = '0000'.
    ALV710->gt_s_fieldcat-scrtext_m = 'Операция'.
   APPEND  ALV710->gt_s_fieldcat to ALV710->gt_fieldcat.
   CALL METHOD  ALV710->USE_DRAG_AND_DROP
                    EXPORTING
                      FUNCTION_FOR_ONDRAG = 'A710DRAG'
                      FUNCTION_FOR_ONDROP = 'A710DROP'
                      programm_name = 'Название программы где ваш код'.
  ALV710->GS_LAYOUT-S_DRAGDROP-ROW_DDID = ALV710->HANDLE_ALV.
   CALL METHOD  ALV710->USE_CUSTOM_CONTEXT_MENU
                    EXPORTING
                      FUNCTION_FOR_CONTEXT_MENU = '710CONTEXTMENU'
                      FUNCTION_FOR_USER_COMMAND = '710USER_COMMAND'
                      programm_name = 'Название программы где ваш код'.

ENDIF.
CALL METHOD ALV710->REFRESH_RESTORE_POSITION_BY_ID IMPORTING  tblName = tblZPGBLOCK[].

ENDMODULE.


Функции обработки DragAndDrop
FORM A710DRAG USING E_ROW E_COLUMN E_DRAGDROPOBJ.
  dragdropindex = E_ROW.
ENDFORM.

FORM A710DROP USING E_ROW E_COLUMN E_DRAGDROPOBJ.
  DATA: WA_ZPGBLOCK TYPE  ZPGBLOCK.
  READ TABLE tblZPGBLOCK INTO WA_ZPGBLOCK INDEX dragdropindex.
  DELETE tblZPGBLOCK INDEX dragdropindex.
  MOVE-CORRESPONDING WA_ZPGBLOCK TO tblZPGBLOCK.
  INSERT tblZPGBLOCK INDEX E_ROW.
  LEAVE TO SCREEN 710.
ENDIF.
ENDFORM.


Последний раз редактировалось apetrenko Пн, фев 11 2008, 18:28, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 11 2008, 18:23 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
Danila написал:
apetrenko написал:
Danila написал:
apetrenko написал:
У вас хоть 1 событие срабатывает?

DRAG срабатывает?
DROP срабатывает?


Нет... Ни ONDRAG, ни ONDROP не срабатывает...


посмотри код выше, должен быть промежуточный класс.
у меня он назван THIS_DRAGDROPOBJ

я в Index бросаю индекс перетаскиваемой строки.


Не совсем понял, как у Вас используется промежуточный класс THIS_DRAGDROPOBJ. Т. е. как он может повлиять на срабатывание событий ONDRAG и ONDROP. Ведь они обрабатываются в другом классе: LCL_APPLICATION ? А у меня они в нём просто не отлавливаются...


Посмотрите мою библиотеку там все сделано автоматически уже
а чисто написать DargAndDrop, там все сложновато немного.
я целый день разбирался как он работаеь.

Написал библиотеку чтобы ALV создавать быстро на экранах и все было говтово к обработке с минимум кода.

и обратите внимание на метод METHOD USE_DRAG_AND_DROP.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 11 2008, 18:43 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
если что-то из приведенного кода не компилится, я мог забыть что-то запостить.
пишите, исправим


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

Зарегистрирован:
Пн, фев 11 2008, 16:17
Сообщения: 122
Пол: Мужской
apetrenko написал:
если что-то из приведенного кода не компилится, я мог забыть что-то запостить.
пишите, исправим


Спасибо! Попробую разобраться...


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

Зарегистрирован:
Пн, фев 11 2008, 16:17
Сообщения: 122
Пол: Мужской
К сожалению, так и не удаётся обработать события ONDRAG и ONDROP. Посмтрите пожалуйста по коду, что не правильно...
Спасибо...

Code:
*----------------------------------------------------------------------*
CLASS lcl_application DEFINITION.
  PUBLIC SECTION.
    DATA:   function_for_ondrag  TYPE string.
    DATA:   function_for_ondrop  TYPE string.
    DATA:   programm_name  TYPE string.
    METHODS:
      handle_alv_drag
        FOR EVENT ondrag
        OF cl_gui_alv_grid,
      handle_alv_drop
        FOR EVENT ondrop
        OF cl_gui_alv_grid.
ENDCLASS.                    "LCL_APPLICATION DEFINITION

*----------------------------------------------------------------------*
*       CLASS LCL_APPLICATION IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_application IMPLEMENTATION.
  METHOD handle_alv_drag.
    break ziganshindg.
  ENDMETHOD.                    "HANDLE_ALV_DRAG
  METHOD handle_alv_drop.
    break ziganshindg.
  ENDMETHOD.                    "HANDLE_ALV_DROP
ENDCLASS.                    "LCL_APPLICATION IMPLEMENTATION

*----------------------------------------------------------------------*


Собитие отбрабатываю следующим образом:

Code:
  CREATE OBJECT event_rec_appl.
  SET HANDLER event_rec_appl->handle_alv_drag FOR obj_alv.
  SET HANDLER event_rec_appl->handle_alv_drop FOR obj_alv.


... после отображения ALV-таблицы...

По идее, при использовании DRAG & DROP должны попадать на break ziganshindg, однако, этого не происходит :(

Подскажите пожалуйста, что неверно...


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

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


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

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


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

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