Текущее время: Вс, авг 03 2025, 22:58

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: ALV + Splitter
СообщениеДобавлено: Пт, окт 03 2008, 10:13 
Специалист
Специалист

Зарегистрирован:
Чт, окт 26 2006, 16:44
Сообщения: 149
Откуда: Москва
Добрый день. Возник следующий вопрос. На экране находятся две ALV, разделленных сплиттером: одна сверху, вторая снизу. Необходимо по нажатию на кнопку "повернуть" сплиттер: чтобы одна ALV была слева, а вторая справа.
Пробовал метод cl_gui_splitter_container->set_grid. Тогда сплиттер меняет положение с горизонтального на вертикальный, но ALV исчезают. Да и в документации написано:
Цитата:
"Do not use this method at present - it could cause unexpected results at the
frontend."

Может кто-нибудь подскажет, куда копать?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 03 2008, 10:17 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
Я просто пересоздавал контролы в таком случае.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 03 2008, 10:18 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пн, май 14 2007, 13:05
Сообщения: 561
Откуда: Москва
Как вариант:
В PBO предусмотреть два варианта сплиттера.
При нажатии удалять и создавать вновь элементы экрана.

_________________
Sapere aude!


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

Зарегистрирован:
Чт, окт 26 2006, 16:44
Сообщения: 149
Откуда: Москва
Пономарев Артем написал:
Я просто пересоздавал контролы в таком случае.

А как в таком случае сохранить фокус, сортировку и фильтры в ALV?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 03 2008, 10:27 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
vakito написал(а):
А как в таком случае сохранить фокус, сортировку и фильтры в ALV?

Храните их в глобальных переменных.


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

Зарегистрирован:
Чт, окт 26 2006, 16:44
Сообщения: 149
Откуда: Москва
Спасибо. Вроде разобрался.
Интересно только, с какой скоростью это все будет работать при большом количестве строк/столбцов в таблице.


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

Зарегистрирован:
Пт, окт 03 2008, 17:20
Сообщения: 162
А смекалку включить не пытались? :wink:
Идея в чем :idea:
1. создать splitt_container 2x2
2. перекидывать ссылку на ячейки в зависимости от того, как необходимо выводить.
3. Скрывать не нужную строку/столбец.
В общем:
Code:
* Container
  DATA: cl_alv_grid_1   TYPE REF TO  cl_gui_alv_grid,
        cl_alv_grid_2   TYPE REF TO  cl_gui_alv_grid,
        cl_gui_splitter TYPE REF TO  cl_gui_splitter_container,
        cl_gui_cont     TYPE REF TO  cl_gui_custom_container,
        l_container     TYPE REF TO  cl_gui_container.

* Data
  DATA: it_data_1       TYPE TABLE OF  bkpf,
        it_data_2       TYPE TABLE OF  bseg.
* Screen Elements
  DATA: ok_code         TYPE  sy-ucomm,
        orientation     TYPE  c             VALUE  ''.    " V or H



  PERFORM    fill_data.
  CALL SCREEN  100.




*&---------------------------------------------------------------------*
*&      Form  CONTROLS_CREATE
*&---------------------------------------------------------------------*
*       Creating controls
*----------------------------------------------------------------------*
FORM    controls_create.
  CREATE OBJECT   cl_gui_cont
    EXPORTING
        container_name      = 'CONTAINER'
        repid               = sy-cprog
        dynnr               = '0100'
    EXCEPTIONS
        OTHERS              = 1.

  CREATE OBJECT  cl_gui_splitter
    EXPORTING
        parent              = cl_gui_cont
        rows                = 2
        columns             = 2
    EXCEPTIONS
        OTHERS              = 1.

ENDFORM.                    " controls_create
*&---------------------------------------------------------------------*
*&      Form  CONTROLS_CREATE_ALV
*&---------------------------------------------------------------------*
*       Creating ALV GRIDS
*----------------------------------------------------------------------*
FORM    controls_create_alv.
** First ALV GRID
  CALL METHOD   cl_gui_splitter->GET_CONTAINER
    EXPORTING
        row                 = 1
        column              = 1
    RECEIVING
        container           = l_container.

  CREATE OBJECT   cl_alv_grid_1
    EXPORTING
        i_parent            = l_container.

  CALL METHOD   cl_alv_grid_1->set_table_for_first_display
    EXPORTING
        i_structure_name    = 'BKPF'
    CHANGING
        it_outtab           = it_data_1.

** Second ALV GRID
  CALL METHOD   cl_gui_splitter->GET_CONTAINER
    EXPORTING
        row                 = 2
        column              = 1
    RECEIVING
        container           = l_container.

  CREATE OBJECT   cl_alv_grid_2
    EXPORTING
        i_parent            = l_container.

  CALL METHOD   cl_alv_grid_2->set_table_for_first_display
    EXPORTING
        i_structure_name    = 'BSEG'
    CHANGING
        it_outtab           = it_data_2.

ENDFORM.                    " controls_create_alv
*&---------------------------------------------------------------------*
*&      Form  CONTROLS_CREATE
*&---------------------------------------------------------------------*
*       Filling Tables IT_DATA1, IT_DATA2
*----------------------------------------------------------------------*
FORM    fill_data.
*  DATA: wa_data1        TYPE  bkpf,
*        wa_data2        TYPE  bseg.
* Table 1
  SELECT  *
    UP TO 10 ROWS
    FROM  bkpf
    INTO TABLE  it_data_1.

*  wa_data1-belnr  = '1000'.      APPEND  wa_data1  TO  it_data_1.
*  wa_data1-belnr  = '2000'.      APPEND  wa_data1  TO  it_data_1.

* Table 2
  SELECT  *
    UP TO 10 ROWS
    FROM  bseg
    INTO TABLE  it_data_2.
*  wa_data2-belnr  = '1000'.
*  wa_data2-gjahr  = '2007'.      APPEND  wa_data2  TO  it_data_2.
*  wa_data2-belnr  = '1000'.
*  wa_data2-gjahr  = '2008'.      APPEND  wa_data2  TO  it_data_2.
ENDFORM.                    " controls_create
*&---------------------------------------------------------------------*
*&      Form  ORIENTATION_H
*&---------------------------------------------------------------------*
*       Changing orientation of ALV GRIDs
*----------------------------------------------------------------------*
FORM    orientation_h.
  CHECK orientation <> 'H'.
  orientation = 'H'.

* Changing columns
  CALL METHOD   cl_gui_splitter->SET_COLUMN_WIDTH
    EXPORTING     id     = 2
                  width  = 0.
  CALL METHOD   cl_gui_splitter->SET_COLUMN_SASH
    EXPORTING     id     = 1
                  type   = 0
                  value  = 0.
  CALL METHOD   cl_gui_splitter->SET_COLUMN_SASH
    EXPORTING     id     = 1
                  type   = 1
                  value  = 0.
* Changing Rows
  CALL METHOD   cl_gui_splitter->SET_ROW_HEIGHT
    EXPORTING     id     = 2
                  height = 50.
  CALL METHOD   cl_gui_splitter->SET_ROW_SASH
    EXPORTING     id     = 1
                  type   = 0
                  value  = 1.
  CALL METHOD   cl_gui_splitter->SET_ROW_SASH
    EXPORTING     id     = 1
                  type   = 1
                  value  = 1.
* Moving container from (ROW;COLUMN) (1;2)  TO (2;1)
  CALL METHOD   cl_gui_splitter->get_container
    EXPORTING     row     = 1
                  column  = 2
    RECEIVING     container = l_container.
  IF  l_container->children IS NOT INITIAL.
      CALL METHOD   cl_gui_splitter->remove_control
        EXPORTING     row     = 1
                      column  = 2
        EXCEPTIONS    OTHERS  = 1.
  ENDIF.

  CALL METHOD   cl_gui_splitter->add_control
    EXPORTING     row     = 2
                  column  = 1
                  control = cl_alv_grid_2.
ENDFORM.                    " orientation_h
*&---------------------------------------------------------------------*
*&      Form  ORIENTATION_V
*&---------------------------------------------------------------------*
*       Changing orientation of ALV GRIDs
*----------------------------------------------------------------------*
FORM    orientation_v.
  CHECK orientation <> 'V'.
  orientation = 'V'.

* Changing columns
  CALL METHOD   cl_gui_splitter->SET_COLUMN_WIDTH
    EXPORTING     id      = 2
                  width   = 50.
  CALL METHOD   cl_gui_splitter->SET_COLUMN_SASH
    EXPORTING     id      = 1
                  type    = 0
                  value   = 1.
  CALL METHOD   cl_gui_splitter->SET_COLUMN_SASH
    EXPORTING     id      = 1
                  type    = 1
                  value   = 1.
* Changing Rows
  CALL METHOD   cl_gui_splitter->SET_ROW_HEIGHT
    EXPORTING     id      = 2
                  height  = 0.
  CALL METHOD   cl_gui_splitter->SET_ROW_SASH
    EXPORTING     id      = 1
                  type    = 0
                  value   = 0.
  CALL METHOD   cl_gui_splitter->SET_ROW_SASH
    EXPORTING     id      = 1
                  type    = 1
                  value   = 0.

* Moving container from (ROW;COLUMN) (2;1)  TO (1;2)
  CALL METHOD   cl_gui_splitter->get_container
    EXPORTING     row     = 2
                  column  = 1
    RECEIVING     container = l_container.
  IF  l_container->children IS NOT INITIAL.
      CALL METHOD   cl_gui_splitter->remove_control
        EXPORTING     row     = 2
                      column  = 1
        EXCEPTIONS    OTHERS  = 1.
  ENDIF.

  CALL METHOD   cl_gui_splitter->add_control
    EXPORTING     row     = 1
                  column  = 2
                  control = cl_alv_grid_2.

ENDFORM.                    " orientation_v




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

  IF  cl_gui_cont   IS INITIAL.
      PERFORM    controls_create.
      PERFORM    controls_create_alv.

      PERFORM    orientation_h.
  ENDIF.

  CLEAR: ok_code.
ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.

  CASE  ok_code.
    WHEN  'BACK'  OR  'EXIT'  OR  'CANC'.
        LEAVE TO SCREEN 0.

    WHEN  'HOR'.
        PERFORM    orientation_h.
    WHEN  'VER'.
        PERFORM    orientation_v.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT

©


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

Зарегистрирован:
Чт, окт 26 2006, 16:44
Сообщения: 149
Откуда: Москва
SYS, спасибо!


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

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


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

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


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

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