Текущее время: Пт, мар 29 2024, 04:41

Часовой пояс: 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
Сообщения: 87
Откуда: Челябинск
Пол: Мужской
Для этого нужно в форме с определением статуса очистить флаг 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 часа


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

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


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

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