‎2009 Jan 12 7:34 AM
Dear friends,
I have a ALV report with options of Hierarchial list display and Grid Display. But the problem arises when selecting the layout in the selection screen.
How to handle layout when there are multiple list display options, kindly suggest.
Regards,
Praveen Lobo
‎2009 Jan 12 7:38 AM
Hi Praveen,
To handle different layouts in ALV grid display, you can use the concept of variants.
Use it this way if using FM REUSE_ALV_GRID_DISPLAY:-
*&---------------------------------------------------------------------*
* TYPE POOLS
*&---------------------------------------------------------------------*
TYPE-POOLS : slis.
*&---------------------------------------------------------------------*
* PARAMETER FOR VARIANT
*&---------------------------------------------------------------------*
PARAMETERS : s_var TYPE disvariant-variant.
*&---------------------------------------------------------------------*
* FOR ALV GRID DISPLAY
*&---------------------------------------------------------------------*
*FIELD CATALOG
DATA : it_field TYPE slis_t_fieldcat_alv,
wa_field TYPE slis_fieldcat_alv.
*FOR GRID TITLE
DATA : wa_title TYPE lvc_title.
*FOR LAYOUT
DATA : wa_layout TYPE slis_layout_alv.
*FOR VARIANT
DATA : wa_variant TYPE disvariant,
wa_variant1 TYPE disvariant.
*&---------------------------------------------------------------------*
* INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.
wa_variant-report = sy-repid.
wa_variant1-report = sy-repid.
*GET DEFUALT ON THE SELECTION SCREEN FOR DEFAULT DISPLAY
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = 'A' " for all users
CHANGING
cs_variant = wa_variant
EXCEPTIONS
wrong_input = 1
not_found = 2
program_error = 3
OTHERS = 4.
IF sy-subrc = 0. " IF DEFAULT VARIANT FOUND
s_var = wa_variant-variant. " PASS THE DEFAULT VARIANT TO THE SELECTION SCREEN FIELD
ENDIF.
*&---------------------------------------------------------------------*
* AT-SELECTION SCREEN ON VALUE REQUEST
*&---------------------------------------------------------------------*
* TO GET THE F4 HELP FOR VARIANT
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_var.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = wa_variant
* I_TABNAME_HEADER =
* I_TABNAME_ITEM =
* IT_DEFAULT_FIELDCAT =
i_save = 'A'
* I_DISPLAY_VIA_GRID = ' '
IMPORTING
* E_EXIT =
es_variant = wa_variant1
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
IF sy-subrc = 0.
s_var = wa_variant1-variant. " PASS THE SELECTED VARIANT TO THE SELECTION SCREEN FIELD
ENDIF.
*&---------------------------------------------------------------------*
* AT-SELECTION SCREEN
*&---------------------------------------------------------------------*
* TO CHECK THE EXISTENCE FOR VARIANT
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
wa_variant-variant = s_var.
CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
EXPORTING
i_save = 'A'
CHANGING
cs_variant = wa_variant
EXCEPTIONS
wrong_input = 1
not_found = 2
program_error = 3
OTHERS = 4.
IF sy-subrc 0.
MESSAGE w001.
ENDIF.
*&---------------------------------------------------------------------*
* START OF SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
" your code
*&---------------------------------------------------------------------*
* FIELD CATALOG
*&---------------------------------------------------------------------*
wa_field-fieldname = 'EBELN'.
wa_field-tabname = 'IT_TAB'.
wa_field-outputlen = 10.
wa_field-seltext_l = 'PO #'.
APPEND wa_field TO it_field.
CLEAR wa_field.
" similarly other fields
*&---------------------------------------------------------------------*
* SORT W.R.T. PURCHASE ORDER NUMBER
*&---------------------------------------------------------------------*
wa_sort-spos = 1.
wa_sort-fieldname = 'EBELN'.
wa_sort-tabname = 'IT_EKPO'.
wa_sort-up = "X". " for ascending
APPEND wa_sort TO it_sort.
CLEAR wa_sort.
*&---------------------------------------------------------------------*
* FOR GRID TITLE
*&---------------------------------------------------------------------*
wa_title = 'Hello'.
*&---------------------------------------------------------------------*
* FOR LAYOUT
*&---------------------------------------------------------------------*
wa_layout-zebra = check.
*&---------------------------------------------------------------------*
* DISPLAY RECORDS IN ALV GRID
*&---------------------------------------------------------------------*
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid " report id
i_grid_title = wa_title " alv title bar
is_layout = wa_layout " for layout design
it_fieldcat = it_field " field catalog
it_sort = it_sort " sort info
i_save = 'A' " variant for all users
is_variant = wa_variant "variant name
TABLES
t_outtab = it_ekpo " internal table
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc 0.
ENDIF.
Hope this solves your problem.
Thanks & Regards,
Tarun Gambhir
‎2009 Jan 12 7:42 AM
hi,
try this..
ebeln LIKE ekko-ebeln, "PURCHASE DOCUMENT NUMBER
bukrs LIKE ekko-bukrs, "COMPANY CODE
bstyp LIKE ekko-bstyp, "PURCHASE DOCUMENT CATEGORY
bsart LIKE ekko-bsart, "PUCHASE DOCUMENT TYPE
END OF it_ekko.
*FIELD CATALOG AND EVENT CATALOG TABLE DECLARATION.
DATA:i_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
i_eventcat TYPE slis_t_event WITH HEADER LINE,
I_LAYOUT TYPE SLIS_LAYOUT_ALV .
* ZDLAYOUT1 TYPE SLIS_LAYOUT_ALV .
DATA:W_VARIANT LIKE DISVARIANT,
W_VARIANT1 LIKE DISVARIANT.
INITIALIZATION.
MOVE: SY-REPID TO W_VARIANT-REPORT,
SY-REPID TO W_VARIANT1-REPORT.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
I_SAVE = 'A'
CHANGING
cs_variant = W_VARIANT.
MOVE W_VARIANT-VARIANT TO w_VARIANT1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR VARIANT.
DATA: L_EXIT.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = W_VARIANT1
* I_TABNAME_HEADER =
* I_TABNAME_ITEM =
* IT_DEFAULT_FIELDCAT =
* I_SAVE = 'A'
* I_DISPLAY_VIA_GRID = ' '
IMPORTING
E_EXIT = L_EXIT
ES_VARIANT = W_VARIANT.
START-OF-SELECTION.
*INTERNAL TABLE POPULATION
SELECT ebeln
bukrs
bstyp
bsart
FROM ekko
INTO TABLE it_ekko
WHERE ebeln IN so_ebeln.
*POPULATING FIELD CATALOG BY USING FUNCTION MODULE
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-cprog
i_internal_tabname = 'IT_EKKO'
i_inclname = sy-cprog
CHANGING
ct_fieldcat = i_fieldcat[].
*DISPLAYING ALV GRID WITH MULTIPLE LAYOUTSETS
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = SY-CPROG
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
* IS_LAYOUT = 'ZDLAYOUT1'
IT_FIELDCAT = I_FIELDCAT[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
I_SAVE = 'A' "'U' "'X'
* IS_VARIANT = VARIANT
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* I_HTML_HEIGHT_TOP =
* I_HTML_HEIGHT_END =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = IT_EKKO.
‎2009 Jan 12 8:28 AM
Hello,
I already used this options of variant. But the problem arises when i use multiple list display i.e. Hierarchial and Grid Display.
The report not able to determine which variant belongs to which list display and causing error.
Regards,
Praveen Lobo