Текущее время: Ср, июл 30 2025, 19:31

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Отображение 2-3 таблиц в одном АЛВ
СообщениеДобавлено: Вт, янв 13 2009, 12:57 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
VID написал:
Вы в данном примере передаете в грид только одну таблицу - outtab. В моем случае это несколько внутренних таблиц со своим набором данных, которые в зависимости от условий отображаются в гриде. Т.е. outtab1, outtab2, outtab3 .... И сделать это все через 1 внутреннюю таблицу может конечно и реально, но не оправдано по затратам сил и времени. Все работает через free и создание заново грида. Но про grid->set_frontend_fieldcatalog я не знал, будет полезно на будущее. Всем спасибо за помощь!

Думаю что сделать это все через одну таблицу можно только с помощью field-symbols и FM create dinamic tables, но в вашем случае возможно и не стоит переделывать.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отображение 2-3 таблиц в одном АЛВ
СообщениеДобавлено: Вт, янв 13 2009, 13:02 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, окт 20 2008, 10:29
Сообщения: 339
Откуда: Мюнхен
Пол: Мужской
Для более понятного описания случая, вот код подпрограммы, которая выполняет смену отображаемых данных в гриде.

Code:
FORM refresh_grid USING p_data_type TYPE char1
                        p_titel     TYPE string.

  IF go_ls_alv IS NOT INITIAL.
    CALL METHOD go_ls_alv->free.
  ENDIF.

  CREATE OBJECT go_ls_alv
    EXPORTING
      i_parent = go_ls_container.

  CASE p_data_type.
    WHEN 'L'.
      PERFORM create_fieldcat USING 'LS'.

      gs_layout-grid_title = p_titel.
      CALL METHOD go_ls_alv->set_table_for_first_display
        EXPORTING
          is_layout       = gs_layout
        CHANGING
          it_outtab       = gt_ls_data
          it_fieldcatalog = gt_ls_fieldcat.
    WHEN 'A'.
      PERFORM create_fieldcat USING 'AO'.

      gs_layout-grid_title = p_titel.
      CALL METHOD go_ls_alv->set_table_for_first_display
        EXPORTING
          is_layout       = gs_layout
        CHANGING
          it_outtab       = gt_ao_data
          it_fieldcatalog = gt_ls_fieldcat.
    WHEN 'G'.
      PERFORM create_fieldcat USING 'GP'.

      gs_layout-grid_title = p_titel.
      CALL METHOD go_ls_alv->set_table_for_first_display
        EXPORTING
          is_layout       = gs_layout
        CHANGING
          it_outtab       = gt_gp_data
          it_fieldcatalog = gt_ls_fieldcat.
    WHEN 'V'.
      PERFORM create_fieldcat USING 'VS'.

      gs_layout-grid_title = p_titel.
      CALL METHOD go_ls_alv->set_table_for_first_display
        EXPORTING
          is_layout       = gs_layout
        CHANGING
          it_outtab       = gt_vs_data
          it_fieldcatalog = gt_ls_fieldcat.
  ENDCASE.

  SET HANDLER go_events_aob->handle_toolbar      FOR go_ls_alv.
  SET HANDLER go_events_aob->handle_user_command FOR go_ls_alv.
  SET HANDLER go_events_aob->handle_double_click FOR go_ls_alv.
  CALL METHOD go_ls_alv->set_toolbar_interactive.
ENDFORM.

_________________
Вежливость - лучшее оружие чайника :-)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отображение 2-3 таблиц в одном АЛВ
СообщениеДобавлено: Вт, янв 13 2009, 15:24 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Тогда так - разные таблицы, разные каталоги полей:
Code:
DATA: itab1 TYPE TABLE OF sflight,
      itab2 TYPE TABLE OF spfli,
      outtab TYPE REF TO data,
      wa TYPE sflight.

DATA: cont TYPE REF TO cl_gui_custom_container,
      grid TYPE REF TO cl_gui_alv_grid,
      fcat1 TYPE lvc_t_fcat,
      fcat2 TYPE lvc_t_fcat,
      curr_fcat TYPE lvc_t_fcat.

FIELD-SYMBOLS: <outtab> TYPE ANY TABLE.

DATA: change_flag.

START-OF-SELECTION.
  SELECT * FROM sflight INTO TABLE itab1 UP TO 100 ROWS.
  SELECT * FROM spfli INTO TABLE itab2 UP TO 100 ROWS.

  CREATE OBJECT: cont  EXPORTING
                         container_name = 'XCONT'
                         repid          = sy-cprog
                         dynnr          = '0100',
                 grid  EXPORTING
                         i_parent = cont.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name = 'SFLIGHT'
    CHANGING
      ct_fieldcat      = fcat1.
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name = 'SPFLI'
    CHANGING
      ct_fieldcat      = fcat2.

  curr_fcat = fcat1.
  GET REFERENCE OF itab1 INTO outtab.
  ASSIGN outtab->* TO <outtab>.
  CHECK <outtab> IS ASSIGNED.

  CALL METHOD grid->set_table_for_first_display
    CHANGING
      it_outtab       = <outtab>
      it_fieldcatalog = curr_fcat.

  CALL SCREEN 100.

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'MAIN'.

  IF change_flag IS INITIAL.
    curr_fcat = fcat1.
    GET REFERENCE OF itab1 INTO outtab.
  ELSE.
    curr_fcat = fcat2.
    GET REFERENCE OF itab2 INTO outtab.
  ENDIF.

  ASSIGN outtab->* TO <outtab>.
  CHECK <outtab> IS ASSIGNED.

  CALL METHOD grid->set_frontend_fieldcatalog
    EXPORTING
      it_fieldcatalog = curr_fcat.

  CALL METHOD grid->refresh_table_display.

ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK'.
      LEAVE PROGRAM.
    WHEN 'CHANGE'.
      IF change_flag IS INITIAL.
        change_flag = 'X'.
      ELSE.
        CLEAR change_flag.
      ENDIF.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отображение 2-3 таблиц в одном АЛВ
СообщениеДобавлено: Вт, янв 13 2009, 15:53 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, окт 20 2008, 10:29
Сообщения: 339
Откуда: Мюнхен
Пол: Мужской
Интересное решение :!: Возьму на заметку. Спасибо большое! :pivo:

_________________
Вежливость - лучшее оружие чайника :-)


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

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


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

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


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

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