Текущее время: Вт, апр 16 2024, 09:28

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Динамическое добавление кнопки при вызове REUSE_ALV_GRID_DISPLAY_LVC
СообщениеДобавлено: Чт, фев 14 2013, 13:24 
Ассистент
Ассистент

Зарегистрирован:
Вс, дек 18 2011, 18:09
Сообщения: 30
Добрый день.

Задача следующая:
Создаю ALV отчет с помощью FM 'REUSE_ALV_GRID_DISPLAY_LVC'. Необходимо динамически добавить пользовательскую кнопку. Хотелось бы не создавать руками экраны и GUI-статус.
Пытаюсь сделать как в коде ниже, но почему-то кнопка не появляется =( Может я что-то не так делаю, подскажите пожалуйста!
Code:
FORM main_output.
  DATA:
      lt_fcat          TYPE lvc_t_fcat,
      ls_grid_settings TYPE lvc_s_glay,
      lt_event         TYPE slis_t_event,
      ls_layout_lvc    TYPE lvc_s_layo
      .
* Формирование каталога полей ALV:
  PERFORM fill_fcat CHANGING lt_fcat.
* Заполнение таблицы событий ALV:
  PERFORM set_events CHANGING lt_event.
  ls_grid_settings-edt_cll_cb = 'X'.
  ls_layout_lvc-zebra = 'X'.
  ls_layout_lvc-cwidth_opt = 'X'.
  ls_layout_lvc-stylefname = 'CELLTAB'.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_bypassing_buffer       = 'X'
      i_callback_program       = gv_repid
      i_callback_user_command  = 'USER_COMMAND'
      i_grid_settings          = ls_grid_settings
      is_layout_lvc            = ls_layout_lvc
      it_fieldcat_lvc          = lt_fcat
      i_default                = 'X'
      i_save                   = 'X'
      it_events                = lt_event
    TABLES
      t_outtab                 = gt_out
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.                    " MAIN_OUTPUT
*&---------------------------------------------------------------------*
*&      Form  set_events
*&---------------------------------------------------------------------*
*       Формирование таблицы событий ALV
*----------------------------------------------------------------------*
FORM set_events CHANGING pt_events TYPE slis_t_event.
  DATA:
      lv_event TYPE slis_alv_event
      .
  FIELD-SYMBOLS:
               <ls_event> TYPE slis_alv_event
               .
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type     = 0
    IMPORTING
      et_events       = pt_events
    EXCEPTIONS
      list_type_wrong = 1
      OTHERS          = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  READ TABLE pt_events ASSIGNING <ls_event>
    WITH KEY name = 'CALLER_EXIT'.
  IF sy-subrc = 0.
    CONCATENATE 'ALV_EVENT_'
                <ls_event>-name
                INTO <ls_event>-form.
  ENDIF.
ENDFORM.                    " set_events
*&---------------------------------------------------------------------*
*&      Form ALV_EVENT_CALLER_EXIT
*&---------------------------------------------------------------------*
*       Изменение панели инструментов
*----------------------------------------------------------------------*
FORM alv_event_caller_exit USING ps_data TYPE slis_data_caller_exit.
  DATA:
      lr_alv_toolbar TYPE REF TO lcl_alv_toolbar
      .
  IF g_alv_grid IS INITIAL.
    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
      IMPORTING
        e_grid = g_alv_grid.
  ENDIF.
* Создание обработчика события добавления кнопок в панель инструментов:
  CREATE OBJECT lr_alv_toolbar
    EXPORTING
      io_alv_grid = g_alv_grid.
* Регистрируем обработчик события:
  SET HANDLER lr_alv_toolbar->on_toolbar FOR g_alv_grid.
ENDFORM.                    "alv_event_caller_exit
*---------------------------------------------------------------------
* CLASS lcl_alv_toolbar DEFINITION
*---------------------------------------------------------------------
* ALV event handler
*---------------------------------------------------------------------
CLASS lcl_alv_toolbar DEFINITION.
  PUBLIC SECTION.
    METHODS:
*     Constructor
      constructor
        IMPORTING io_alv_grid TYPE REF TO cl_gui_alv_grid,
*     Event for toolbar
      on_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING e_object.
ENDCLASS. " lcl_alv_toolbar DEFINITION
*---------------------------------------------------------------------
* CLASS lcl_alv_toolbar IMPLEMENTATION
*---------------------------------------------------------------------
* alv event handler
*---------------------------------------------------------------------
CLASS lcl_alv_toolbar IMPLEMENTATION.
  METHOD constructor.
*   Create ALV toolbar manager instance
    CREATE OBJECT gr_alv_toolbarmanager
      EXPORTING
        io_alv_grid = io_alv_grid.
  ENDMETHOD. " constructor
  METHOD on_toolbar.
    DATA:
        ls_toolbar TYPE stb_button
        .
*   Добавление пользовательских кнопок:
    ls_toolbar-icon = icon_create.
    ls_toolbar-butn_type = 0.
    ls_toolbar-text = text-001.
    ls_toolbar-function = 'BUTTON1'.
    ls_toolbar-disabled = ''.
    ls_toolbar-quickinfo = text-002.
    APPEND ls_toolbar TO e_object->mt_toolbar.
*   Вызов метода реорганизации панели инструментов:
    CALL METHOD gr_alv_toolbarmanager->reorganize
      EXPORTING
        io_alv_toolbar = e_object.
  ENDMETHOD. "on_toolbar
ENDCLASS. "lcl_alv_toolbar IMPLEMENTATION


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическое добавление кнопки при вызове REUSE_ALV_GRID_DISPLAY_LVC
СообщениеДобавлено: Чт, фев 14 2013, 16:35 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
Попробовать добавить
CALL METHOD g_alv_grid->set_toolbar_interactive
в
alv_event_caller_exit


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое добавление кнопки при вызове REUSE_ALV_GRID_DISPLAY_LVC
СообщениеДобавлено: Чт, фев 14 2013, 16:44 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Ну вот смотрите - написано довольно много кода, а проблема не решена. Значительно проще скопировать в свою программу статус из группы функций, где описана REUSE..., там есть STANDARD_FULLSCREEN, добавить своих кнопок, установить его через callback - подпрограмму и там же включать/выключать самые разные кнопки.
Ну да, придется "ручками", ну так и код тоже вроде "ручками" пишется, нет?
Кнопка у вас не появляется от того, что в FULL SCREEN ALV тулбар вообще отключен и используется обычный PF-STATUS.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое добавление кнопки при вызове REUSE_ALV_GRID_DISPLAY_LVC
СообщениеДобавлено: Пт, фев 15 2013, 07:41 
Ассистент
Ассистент

Зарегистрирован:
Вс, дек 18 2011, 18:09
Сообщения: 30
Сергей Королев написал:
Ну вот смотрите - написано довольно много кода, а проблема не решена. Значительно проще скопировать в свою программу статус из группы функций, где описана REUSE..., там есть STANDARD_FULLSCREEN, добавить своих кнопок, установить его через callback - подпрограмму и там же включать/выключать самые разные кнопки.
Ну да, придется "ручками", ну так и код тоже вроде "ручками" пишется, нет?
Кнопка у вас не появляется от того, что в FULL SCREEN ALV тулбар вообще отключен и используется обычный PF-STATUS.

Да, вы правы код тоже пишется "ручками", но дело в том, что эту разработку нужно будет копировать в другие системы - это будет, так сказать, удобное средство создания запросов для разработчика с ведением технической документации. Именно по этой причине хотелось бы, чтобы ручных действий было по минимуму.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическое добавление кнопки при вызове REUSE_ALV_GRID_DISPLAY_LVC
СообщениеДобавлено: Пт, фев 15 2013, 08:40 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3074
Откуда: Москва
MadSpirit написал(а):
дело в том, что эту разработку нужно будет копировать в другие системы

Для этого есть отдельные инструменты, которые позволяют переносить не только код, но и экраны, и объекты словаря данных.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое добавление кнопки при вызове REUSE_ALV_GRID_DISPLAY_LVC
СообщениеДобавлено: Пт, сен 20 2013, 18:47 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Пн, фев 18 2013, 13:37
Сообщения: 12
Не будем плодить похожие темы.
Коллеги, подскажите какие мои шаги, если хочу в FULL SCREEN ALV через этот же ФМник пользоваться и тулбаром и статусом. Тулбар, по возможности, родной gui-шный.
И как получить ссылку на грид из этого ФМник? Порывшись в гугле, нашел фм 'GET_GLOBALS_FROM_SLVC_FULLSCR'. Может, есть более изящный путь?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамическое добавление кнопки при вызове REUSE_ALV_GRID_DISPLAY_LVC
СообщениеДобавлено: Ср, май 03 2023, 10:51 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, ноя 08 2018, 14:09
Сообщения: 88
Откуда: Челябинск
Пол: Мужской
Для этого нужно в форме с определением статуса очистить флаг NO_TOOLBAR. Тогда будет работать и GUI и Toolbar.


DATA: LO_ALV_GRID TYPE REF TO CL_GUI_ALV_GRID,
LS_LAYOUT TYPE LVC_S_LAYO.

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = LO_ALV_GRID.

CHECK LO_ALV_GRID IS BOUND.

LO_ALV_GRID->GET_FRONTEND_LAYOUT( IMPORTING ES_LAYOUT = LS_LAYOUT ).

IF LS_LAYOUT-STYLEFNAME IS INITIAL.
LS_LAYOUT-STYLEFNAME = GC_TAB_STYL_FIELD.
LS_LAYOUT-NO_TOOLBAR = SPACE."GUI + TOOLBAR
LO_ALV_GRID->SET_FRONTEND_LAYOUT( IS_LAYOUT = LS_LAYOUT ).
LO_ALV_GRID->REFRESH_TABLE_DISPLAY( ).
ENDIF.


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

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


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

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


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

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