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

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


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

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


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

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