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

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


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

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


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

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