А смекалку включить не пытались?
Идея в чем
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
©