2008 Apr 24 2:58 PM
Hi,
I need to save data into an excel file according to the variant selected. if that variant contains 4 fields out of 10, then those 4 fields should only be in that excel file.
how to get the field names being used in that particular variant?
Thanks
ANUPAM
Hi,
I need to save data into an excel file according to the variant selected. if that variant contains 4 fields out of 10, then those 4 fields should only be in that excel file.
how to get the field names being used in that particular variant?
Thanks
ANUPAM
2008 Apr 24 3:02 PM
You have to use a FM to get the current field catalog and then create a dynamic table which should be passed to the excel function module
2008 Apr 24 3:07 PM
method GET_FRONTEND_FIELDCATALOG
and then something like this:
LOOP AT G_T_FIELDCAT INTO G_R_FIELDCAT WHERE NO_OUT NE 'X'
AND TECH IS INITIAL
AND FIELDNAME NE 'ICON'.
MOVE-CORRESPONDING G_R_FIELDCAT TO IS_FIELDCAT.
IS_FIELDCAT-FIELDNAME = G_R_FIELDCAT-FIELDNAME.
IS_FIELDCAT-INTTYPE = G_R_FIELDCAT-INTTYPE.
IS_FIELDCAT-OUTPUTLEN = G_R_FIELDCAT-OUTPUTLEN.
IS_FIELDCAT-REF_FIELD = G_R_FIELDCAT-FIELDNAME.
IS_FIELDCAT-REF_TABLE = G_R_FIELDCAT-REF_TABNAME.
APPEND IS_FIELDCAT TO IT_FIELDCAT.
ENDLOOP.
DATA: WA_LISTE LIKE P_T_LISTE.
CLEAR:IT_OUTTAB.
REFRESH: IT_OUTTAB.
LOOP AT P_T_LISTE INTO WA_LISTE.
WA_OUTTAB-PSPID = WA_LISTE-PSPID .
WA_OUTTAB-POSID = WA_LISTE-POSID.
WA_OUTTAB-POST1 = WA_LISTE-POST1.
WA_OUTTAB-STTXT_INT = WA_LISTE-STTXT_INT.
WA_OUTTAB-STTXT_EXT = WA_LISTE-STTXT_EXT.
APPEND WA_OUTTAB TO IT_OUTTAB.
ENDLOOP.
**dynamic table creation for data
ASSIGN LT_DATA TO <FS_DATA>.
Create a new Table
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = IT_FIELDCAT
IMPORTING
EP_TABLE = <FS_DATA>
EXCEPTIONS
GENERATE_SUBPOOL_DIR_FULL = 1
OTHERS = 2.
IF SY-SUBRC = 0.
ASSIGN <FS_DATA>->* TO <FS_1>.
CREATE DATA NEW_LINE LIKE LINE OF <FS_1>.
A field-symbol to access that work area
ASSIGN NEW_LINE->* TO <FS_2>.
**MOVE DATA
LOOP AT IT_OUTTAB INTO WA_OUTTAB.
CALL FUNCTION 'CONVERSION_EXIT_ABPSN_OUTPUT'
EXPORTING
INPUT = WA_OUTTAB-PSPID
IMPORTING
OUTPUT = WA_OUTTAB-PSPID.
CALL FUNCTION 'CONVERSION_EXIT_ABPSN_OUTPUT'
EXPORTING
INPUT = WA_OUTTAB-POSID
IMPORTING
OUTPUT = WA_OUTTAB-POSID.
LOOP AT G_T_FIELDCAT INTO G_R_FIELDCAT
WHERE NO_OUT IS INITIAL
AND TECH IS INITIAL.
ASSIGN COMPONENT G_R_FIELDCAT-FIELDNAME OF STRUCTURE
WA_OUTTAB TO <FS_5>.
ASSIGN COMPONENT G_R_FIELDCAT-FIELDNAME OF STRUCTURE
<FS_2> TO <FS_3>.
<FS_3> = <FS_5>.
ENDLOOP.
INSERT <FS_2> INTO TABLE <FS_1>.
ENDLOOP.
ELSE.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
2008 Apr 25 7:06 AM
Hi,
Thanks for your answer.
But the problem is the existing code is totally developed using function modules.
is there any function module to get the layout fields informations.
i've tried with REUSE_ALV_GRID_LAYOUT_INFO_GET, but it's returning the original fieldcatalog.
Regards
ANUPAM
2008 Apr 25 1:58 PM
If I am not wrong you want to download only those columns to excel which is currently shown on the screen. For this first identify the code where you populate the table to send to the excel download function module(eg. gui_download). Then using the ALV object and the method get_frontend_fieldcatalog get the current layout of rows and columns.
CALL METHOD alvobj->get_frontend_fieldcatalog
IMPORTING
ET_FIELDCATALOG = i_field_catalog.
After you get this leverage the logic mentioned in my previous post to populate the itab which you send to the excel function module.
This code might be different than the normal alv display code.
Thanks,
Aparna
2008 Apr 24 3:07 PM
Hi,
Please refer the code below:
PARAMETERS: sp_vari LIKE disvariant-variant. "Dispaly Variant
* Data for ALV variant
DATA gv_repname LIKE sy-repid.
DATA gv_x_variant LIKE disvariant.
DATA gv_exit(1) TYPE c.
DATA gv_save(1) TYPE c.
DATA gv_variant LIKE disvariant.
INITIALIZATION.
PERFORM f_initialize_variant.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR sp_vari.
PERFORM f_f4_for_variant.
AT SELECTION-SCREEN.
* Validating selection screen fields
PERFORM f_at_selection_screen.
FORM f_initialize_variant .
CLEAR gv_variant.
gv_save = 'X'.
gv_variant-report = gv_repname.
gv_x_variant = gv_variant.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = gv_save
CHANGING
cs_variant = gv_x_variant
EXCEPTIONS
not_found = 2.
IF sy-subrc = 0.
sp_vari = gv_x_variant-variant.
ENDIF.
ENDFORM. " f_initialize_variant
FORM f_f4_for_variant .
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = gv_variant
i_save = gv_save
IMPORTING
e_exit = gv_exit
es_variant = gv_x_variant
EXCEPTIONS
not_found = 2.
IF sy-subrc = 2.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF gv_exit = space.
sp_vari = gv_x_variant-variant.
ENDIF.
ENDIF.
ENDFORM. " f_f4_for_variant
FORM f_at_selection_screen .
* ALV Layout variant
IF NOT sp_vari IS INITIAL.
MOVE gv_variant TO gv_x_variant.
MOVE sp_vari TO gv_x_variant-variant.
CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
EXPORTING
i_save = gv_save
CHANGING
cs_variant = gv_x_variant.
gv_variant = gv_x_variant.
ELSE.
PERFORM f_initialize_variant.
ENDIF.
ENDFORM. " f_at_selection_screen
Thanks,
Sriram Ponna.
| User | Count |
|---|---|
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |