06-18-2008 6:44 AM
hi all
there is any urgent requirement for a report where i have to populate coloums dynamicaly so can any one help me in this please
06-18-2008 6:46 AM
Hi,
Go through this
REPORT yusmm_text1 NO STANDARD PAGE HEADING
LINE-SIZE 199.
************************************************************************
T A B L E S
************************************************************************
TABLES: MARA,
MAKT,
THEAD.
********************************************************************
GLOBAL TYPE-POOLS
********************************************************************
TYPE-POOLS : SLIS.
********************************************************************
GLOBAL TYPES
********************************************************************
TYPES : BEGIN OF TP_FINAL,
MATNR TYPE MARA-MATNR,
BEGRU TYPE MARA-BEGRU,
MTART TYPE MARA-MTART,
MAKTX TYPE MAKT-MAKTX,
SPRAS TYPE MAKT-SPRAS,
LTXT(2000) TYPE C ,
SRNO TYPE N ,
END OF TP_FINAL.
TYPES : BEGIN OF TP_T002,
SPRAS TYPE T002-SPRAS,
LAISO TYPE T002-LAISO,
SRNO TYPE N ,
END OF TP_T002.
TYPES : BEGIN OF TP_MARA_MAKT,
MATNR TYPE MARA-MATNR,
BEGRU TYPE MARA-BEGRU,
MTART TYPE MARA-MTART,
SPRAS TYPE MAKT-SPRAS,
MAKTX TYPE MAKT-MAKTX,
END OF TP_MARA_MAKT.
Types: BEGIN OF tp_matnr,
matnr TYPE mara-matnr,
END OF tp_matnr.
********************************************************************
GLOBAL ELEMENTARY VARIABLES
*
*********************************************************************
DATA : gv_date TYPE sy-datum.
DATA : gv_repid TYPE sy-repid.
DATA : g_var1(10) TYPE C.
DATA : gv_index TYPE sy-tabix.
DATA: gv_strg TYPE string,
gv_strg1(2000) TYPE C.
DATA : gv_lang TYPE sy-langu.
DATA : g_v(3) TYPE N .
DATA : gv_lines(3) TYPE N .
DATA : gv_var(3) TYPE N .
DATA : gv_var1(3) TYPE N.
DATA: gv_str TYPE STRING.
DATA: gv_str1 TYPE STRING.
DATA : gv_li TYPE I,
gv_lit TYPE I,
gv_lin TYPE I.
DATA: g_var11(3) TYPE N,
gv_li1(3) TYPE N,
g_var2(3) TYPE N.
DATA : gv_i1 TYPE I.
DATA : gv_i TYPE I.
DATA: gl_lenght TYPE I.
*********************************************************************
GLOBAL STRUCTURES
******************************************************
DATA: T_NEWTABLE TYPE REF TO DATA,
T_NEWLINE TYPE REF TO DATA,
T_FLDCAT1 TYPE SLIS_T_FIELDCAT_ALV,
T_FLDCAT TYPE LVC_T_FCAT,
WA_IT_FLDCAT TYPE LVC_S_FCAT,
WA_IT_FLDCAT1 TYPE SLIS_FIELDCAT_ALV,
WA_COLNO(2) TYPE N,
WA_FLNAME(5) TYPE C,
L_LT TYPE SLIS_LAYOUT_ALV.
********************************************************************
GLOBAL INTERNAL TABLES (WITH INCLUDE STRUCTURE)
********************************************************************
DATA : IG_MARA_MAKT TYPE STANDARD TABLE OF TP_MARA_MAKT,
WG_MARA_MAKT TYPE TP_MARA_MAKT.
DATA : IG_T002 TYPE STANDARD TABLE OF TP_T002,
WG_T002 TYPE TP_T002.
DATA : IG_FINAL TYPE STANDARD TABLE OF TP_FINAL,
WG_FINAL TYPE TP_FINAL.
data : IG_MATNR TYPE STANDARD TABLE OF TP_MATNR WITH HEADER LINE,
WG_MATNR TYPE TP_MATNR.
DATA:BEGIN OF IG_THEAD OCCURS 0.
INCLUDE STRUCTURE THEAD .
DATA: END OF IG_THEAD.
DATA:BEGIN OF IG_TLINE OCCURS 0.
INCLUDE STRUCTURE TLINE .
DATA:END OF IG_TLINE.
********************************************************************
FIELD-SYMBOLS
********************************************************************
FIELD-SYMBOLS: <T_DYNTABLE> TYPE STANDARD TABLE,"Dynamic internal
"tablename
<FS_DYNTABLE>, "Field symbol to create work area
<FS_FLDVAL> TYPE ANY. " Field symbol to assign values
*----
COMPULSORY
FIELD-SYMBOLS: <FS_DATA> TYPE REF TO DATA,
<FS_DATA1> TYPE REF TO DATA,
<FS_2> TYPE STANDARD TABLE,
<FS_22> TYPE STANDARD TABLE,
<FS_1>,
<FS_11>,
<F>,
<FA>,
<LWA_LINE_WA>,
<LWA_LINE_WA1>.
************************************************************************
------- Create Dyn Table From FC
************************************************************************
DATA: LT_DATA TYPE REF TO DATA,
LT_DATA1 TYPE REF TO DATA,
LWA_LINE TYPE REF TO DATA,
LWA_LINE1 TYPE REF TO DATA,
LI_FIELD_CAT TYPE LVC_T_FCAT,
LWA_FIELD_CAT TYPE LVC_S_FCAT.
********************************************************************
PARAMETERS & SELECT-OPTIONS
********************************************************************
SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : S_SPRAS FOR MAKT-SPRAS NO INTERVALS DEFAULT 'EN'
OBLIGATORY ,
S_MATNR FOR MARA-MATNR,
S_MTART FOR MARA-MTART.
PARAMETERS: GP_SIZE TYPE I DEFAULT '200'.
SELECTION-SCREEN : END OF BLOCK B1.
********************************************************************
INITIALIZATION
********************************************************************
INITIALIZATION.
gv_repid = sy-repid.
gv_date = sy-datum.
************************************************************************
AT SELECTION-SCREEN
************************************************************************
AT SELECTION-SCREEN.
IF GP_SIZE < 0.
MESSAGE E002(00).
ENDIF.
IF GP_SIZE > 50000.
MESSAGE W130(26) WITH TEXT-004.
SET CURSOR FIELD 'gp_size'.
ENDIF.
************************************************************************
START-OF-SELECTION
************************************************************************
START-OF-SELECTION.
PERFORM FIELDCAT.
PERFORM LAYOUT.
PERFORM DATA_FETCH.
PERFORM READ_DATA_TO_FINAL.
SORT ig_final BY matnr spras.
gv_lin = gv_li.
gv_li = gv_li - 2.
LOOP AT ig_final INTO wg_final.
ASSIGN COMPONENT 1 OF STRUCTURE <LWA_LINE_WA1> TO <FA>.
<FA> = 'Material Number'.
ASSIGN COMPONENT 2 OF STRUCTURE <LWA_LINE_WA1> TO <FA>.
<FA> = 'Authorization Group'.
g_VAR11 = wg_final-srno + 2.
gv_li1 = gv_li1 + 2.
MOVE : g_var11 TO gv_i1.
ASSIGN COMPONENT g_var11 OF STRUCTURE <LWA_LINE_WA1> TO <FA>.
<FA> = 'MatDesc'.
g_var2 = g_var11 + gv_lines.
ASSIGN COMPONENT g_var2 OF STRUCTURE <LWA_LINE_WA1> TO <FA>.
<FA> = 'BasicData'.
APPEND <LWA_LINE_WA1> TO <FS_22>.
EXIT.
ENDLOOP.
LOOP AT ig_final INTO wg_final.
AT NEW matnr.
gv_index = sy-tabix.
ASSIGN COMPONENT 1 OF STRUCTURE <LWA_LINE_WA> TO <F>.
<F> = wg_final-matnr.
ENDAT.
AT NEW MATNR.
GV_INDEX = SY-TABIX.
ASSIGN COMPONENT 1 OF STRUCTURE <LWA_LINE_WA1> TO <FA>.
<FA> = wg_final-matnr.
ENDAT.
ASSIGN COMPONENT 2 OF STRUCTURE <LWA_LINE_WA> TO <F>.
<F> = wg_final-begru.
ASSIGN COMPONENT 2 OF STRUCTURE <LWA_LINE_WA1> TO <FA>.
<FA> = wg_final-begru.
gv_var = wg_final-srno + 2.
gv_li = gv_li + 2.
MOVE : gv_var TO gv_i.
ASSIGN COMPONENT gv_var OF STRUCTURE <LWA_LINE_WA> TO <F>.
<F> = wg_final-maktx.
ASSIGN COMPONENT gv_var OF STRUCTURE <LWA_LINE_WA1> TO <FA>.
<FA> = wg_final-maktx.
gv_var1 = gv_var + gv_lines .
ASSIGN COMPONENT gv_var1 OF STRUCTURE <LWA_LINE_WA> TO <F>.
<F> = wg_final-ltxt.
ASSIGN COMPONENT gv_var1 OF STRUCTURE <LWA_LINE_WA1> TO <FA>.
<FA> = wg_final-ltxt.
AT END OF matnr.
APPEND <LWA_LINE_WA> TO <FS_2>.
CLEAR <LWA_LINE_WA>.
ENDAT.
AT END OF matnr.
APPEND <LWA_LINE_WA1> TO <FS_22>.
CLEAR <LWA_LINE_WA1>.
ENDAT.
ENDLOOP.
PERFORM display..
&----
*& Form data_fetch
&----
text
----
--> p1 text
<-- p2 text
----
FORM DATA_FETCH .
SELECT matnr
from mara up to gp_size rows
appending corresponding fields of table ig_matnr
where matnr in s_matnr
and mtart in s_mtart.
loop at ig_matnr.
SELECT MARA~MATNR
MARA~BEGRU
MARA~MTART
MAKT~SPRAS
MAKT~MAKTX FROM MARA INNER JOIN MAKT
ON MARAMATNR = MAKTMATNR
appending corresponding fields of TABLE ig_mara_makt UP TO GP_SIZE
ROWS
WHERE makt~spras IN s_spras
AND mara~matnr IN s_matnr
AND mara~mtart IN s_mtart
AND mara~matnr EQ ig_matnr-matnr.
endloop.
IF sy-subrc = 0.
SORT ig_mara_makt.
ENDIF.
ENDFORM. " data_fetch
&----
*& Form read_data_to_final
&----
text
----
--> p1 text
<-- p2 text
----
FORM READ_DATA_TO_FINAL .
LOOP AT ig_mara_makt INTO wg_mara_makt .
wg_final-MATNR = wg_mara_makt-MATNR.
wg_final-BEGRU = wg_mara_makt-BEGRU.
wg_final-MTART = wg_mara_makt-MTART.
wg_final-SPRAS = wg_mara_makt-SPRAS.
wg_final-MAKTX = wg_mara_makt-MAKTX.
READ TABLE ig_t002 INTO wg_t002 WITH KEY spras = wg_final-spras.
IF sy-subrc = 0.
wg_final-srno = wg_t002-srno.
ENDIF.
CLEAR ig_thead[].
ig_thead-TDOBJECT = 'MATERIAL'.
ig_thead-TDNAME = wg_final-matnr.
ig_thead-TDID = 'GRUN'.
ig_thead-TDSPRAS = wg_final-spras.
CALL FUNCTION 'TEXT_READ'
EXPORTING
I_HEADER = IG_THEAD
I_READONLY = 'X'
IMPORTING
E_HEADER = IG_THEAD
TABLES
T_LINES = IG_TLINE[]
EXCEPTIONS
NOTFOUND = 1.
IF sy-subrc EQ 0.
LOOP AT ig_tline.
gv_strg = ig_tline-tdline.
IF gv_strg1 <> ' '.
CONCATENATE gv_strg1 ';' gv_strg INTO gv_strg1.
ELSE.
gv_strg1 = gv_strg.
ENDIF.
ENDLOOP.
wg_final-ltxt = gv_strg1.
APPEND wg_final TO ig_final.
CLEAR wg_final.
gv_strg1 = ' '.
ELSE.
APPEND wg_final TO ig_final.
ENDIF.
ENDLOOP.
ENDFORM. " read_data_to_final
" read_data_to_final
&----
*& Form layout
&----
text
----
--> p1 text
<-- p2 text
----
FORM LAYOUT .
CLEAR L_LT.
L_LT-ZEBRA = 'X'.
L_LT-COLWIDTH_OPTIMIZE = 'X'.
L_LT-WINDOW_TITLEBAR = 'MATERIAL DETAILS'.
ENDFORM. " layout
&----
*& Form fieldcat
&----
text
----
--> p1 text
<-- p2 text
----
FORM FIELDCAT .
SELECT SPRAS
LAISO FROM t002 INTO CORRESPONDING FIELDS OF TABLE ig_t002
WHERE spras IN s_spras.
DESCRIBE TABLE ig_t002 LINES gv_lines.
LOOP AT ig_t002 INTO wg_t002.
g_v = g_v + 1.
Wg_t002-srno = g_v.
MODIFY ig_t002 FROM wg_t002 TRANSPORTING SRNO.
ENDLOOP.
LOOP AT ig_t002 INTO wg_t002.
CLEAR WA_IT_FLDCAT.
MOVE SY-INDEX TO WA_COLNO.
CONCATENATE 'MD-' wg_t002-LAISO
WA_COLNO
INTO WA_FLNAME.
WA_IT_FLDCAT-FIELDNAME = WA_FLNAME.
WA_IT_FLDCAT-DATATYPE = 'CHAR'.
WA_IT_FLDCAT-SELTEXT = WA_FLNAME.
WA_IT_FLDCAT-INTLEN = 250.
WA_IT_FLDCAT-TABNAME = '<FS_2>'.
APPEND WA_IT_FLDCAT TO T_FLDCAT.
CLEAR wg_t002.
ENDLOOP.
LOOP AT ig_t002 INTO wg_t002.
CLEAR WA_IT_FLDCAT.
MOVE SY-INDEX TO WA_COLNO.
CONCATENATE 'BD-' wg_t002-LAISO
WA_COLNO
INTO WA_FLNAME.
WA_IT_FLDCAT-FIELDNAME = WA_FLNAME.
WA_IT_FLDCAT-DATATYPE = 'CHAR'.
WA_IT_FLDCAT-SELTEXT = WA_FLNAME.
WA_IT_FLDCAT-INTLEN = 250.
WA_IT_FLDCAT-TABNAME = '<FS_2>'.
APPEND WA_IT_FLDCAT TO T_FLDCAT.
CLEAR wg_t002.
ENDLOOP.
MOVE 'MATNR' TO WA_FLNAME.
WA_IT_FLDCAT-FIELDNAME = WA_FLNAME.
WA_IT_FLDCAT-DATATYPE = 'CHAR'.
WA_IT_FLDCAT-SELTEXT = 'Material No'.
WA_IT_FLDCAT-INTLEN = 18.
WA_IT_FLDCAT-TABNAME = '<FS_2>'.
INSERT WA_IT_FLDCAT INTO T_FLDCAT INDEX 1.
MOVE 'BEGRU' TO WA_FLNAME.
WA_IT_FLDCAT-FIELDNAME = WA_FLNAME.
WA_IT_FLDCAT-DATATYPE = 'CHAR'.
WA_IT_FLDCAT-SELTEXT = 'Authorization Group'.
WA_IT_FLDCAT-INTLEN = 4.
WA_IT_FLDCAT-TABNAME = '<FS_2>'.
INSERT WA_IT_FLDCAT INTO T_FLDCAT INDEX 2.
DESCRIBE TABLE T_FLDCAT LINES gv_li.
ASSIGN LT_DATA TO <FS_DATA>.
Creating the Dynamic Internal Table
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = T_FLDCAT " Fieldcatalogue
IMPORTING
EP_TABLE = <FS_DATA> " Dynamic Internal Table
EXCEPTIONS
GENERATE_SUBPOOL_DIR_FULL = 1
OTHERS = 2.
Assign Dyn Table To Field Sumbol
ASSIGN <FS_DATA>->* TO <FS_1>.
Assigning the Internal Table TYPE ANY to Standard internal Table
ASSIGN <FS_1> TO <FS_2>.
Creating a Workarea
CREATE DATA LWA_LINE LIKE LINE OF <FS_2> .
Assigning the Content to the workares as a Pointer
ASSIGN LWA_LINE->* TO <LWA_LINE_WA>.
LOOP AT T_FLDCAT INTO WA_IT_FLDCAT.
WA_IT_FLDCAT1-FIELDNAME = WA_IT_FLDCAT-FIELDNAME.
WA_IT_FLDCAT1-TABNAME = WA_IT_FLDCAT-TABNAME.
WA_IT_FLDCAT1-SELTEXT_L = WA_IT_FLDCAT-SELTEXT.
WA_IT_FLDCAT1-REF_TABNAME = 'MARC'.
APPEND WA_IT_FLDCAT1 TO T_FLDCAT1.
CLEAR : WA_IT_FLDCAT,WA_IT_FLDCAT1.
ENDLOOP.
ASSIGN LT_DATA1 TO <FS_DATA1>.
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = T_FLDCAT " Fieldcatalogue
IMPORTING
EP_TABLE = <FS_DATA1> " Dynamic Internal table
EXCEPTIONS
GENERATE_SUBPOOL_DIR_FULL = 1
OTHERS = 2.
Assign Dyn Table To Field Sumbol
ASSIGN <FS_DATA1>->* TO <FS_11>.
Assigning the Internal Table TYPE ANY to Standard internal Table
ASSIGN <FS_11> TO <FS_22>.
Creating a Workarea
CREATE DATA LWA_LINE1 LIKE LINE OF <FS_22> .
Assigning the Content to the workares as a Pointer
ASSIGN LWA_LINE1->* TO <LWA_LINE_WA1>.
ENDFORM. " fieldcat
&----
*& Form show
&----
text
----
--> p1 text
<-- p2 text
----
FORM Display .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER = ' '
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = GV_REPID
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
I_CALLBACK_USER_COMMAND = '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 = L_LT
IT_FIELDCAT = T_FLDCAT1[]
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_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
I_HTML_HEIGHT_TOP = 0
I_HTML_HEIGHT_END = 0
IT_ALV_GRAPHICS =
IT_HYPERLINK =
IT_ADD_FIELDCAT =
IT_EXCEPT_QINFO =
IR_SALV_FULLSCREEN_ADAPTER =
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = <FS_2>
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " display
*&----
*&----
FORM PF_STATUS_SET USING RS_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'DISPLAY' .
ENDFORM. "PF_STATUS_SET
*&----
*& Form Name: user_command *
*& Form Desc: For Handling USER_COMMAND *
*&----
FORM USER_COMMAND USING IF_UCOMM TYPE SY-UCOMM
IS_SELFIELD TYPE SLIS_SELFIELD.
CASE IF_UCOMM.
WHEN 'DOWNLOAD'.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = ' '
DIAGNOSE_OBJECT = ' '
TEXT_QUESTION = 'Data download to excel'
TEXT_BUTTON_1 = 'Ja'(001)
ICON_BUTTON_1 = ' '
TEXT_BUTTON_2 = 'Nein'(002)
ICON_BUTTON_2 = ' '
DEFAULT_BUTTON = '1'
DISPLAY_CANCEL_BUTTON = 'X'
USERDEFINED_F1_HELP = ' '
START_COLUMN = 25
START_ROW = 6
POPUP_TYPE =
IMPORTING
ANSWER =
TABLES
PARAMETER =
EXCEPTIONS
TEXT_NOT_FOUND = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
BIN_FILESIZE =
FILENAME = 'C:\Material-Text.xls'
FILETYPE = 'ASC'
APPEND = ' '
WRITE_FIELD_SEPARATOR = 'X'
HEADER = '00'
TRUNC_TRAILING_BLANKS = 'X'
WRITE_LF = 'X'
COL_SELECT = ' '
COL_SELECT_MASK = ' '
DAT_MODE = 'X'
IMPORTING
FILELENGTH = GL_LENGHT
TABLES
DATA_TAB = <FS_22>
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF GL_LENGHT NE 0.
MESSAGE S398(00) WITH 'DATA downloaded to EXCEL'.
ENDIF.
ENDCASE.
ENDFORM. "user_command
Thanks
06-18-2008 6:55 AM
Pl. refer this prog.
REPORT z_alv_dynamic_data.
>********************************************************************
This report displays data from SAP tables, views (like SE16) *
FM : REUSE_ALV_GRID_DISPLAY *
----
TABLES:
dd02l, " SAP tables
dd03l. " Table Fields
TYPE-POOLS: slis. " ALV Global Types
SELECTION-SCREEN :
BEGIN OF LINE, COMMENT 1(35) v_1 FOR FIELD p_table. "#EC NEEDED
PARAMETERS p_table LIKE dd03l-tabname OBLIGATORY MEMORY ID dtb.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN :
BEGIN OF LINE, COMMENT 1(35) v_2 FOR FIELD p_max. "#EC NEEDED
PARAMETERS p_max(2) TYPE n DEFAULT '20' OBLIGATORY.
SELECTION-SCREEN END OF LINE.
----
AT SELECTION-SCREEN.
SELECT SINGLE * FROM dd02l WHERE tabname = p_table
AND as4local = 'A'
AND as4vers = '0000'.
IF sy-subrc NE 0.
Table & is not active in the Dictionary
MESSAGE e402(mo) WITH p_table.
ELSEIF dd02l-tabclass = 'INTTAB'.
& is a structure, not a table
MESSAGE e403(mo) WITH p_table.
ENDIF.
----
INITIALIZATION.
v_1 = 'Table'.
v_2 = 'Maximum of records'.
----
START-OF-SELECTION.
PERFORM f_display_data.
----
Form F_DISPLAY_DATA
----
FORM f_display_data.
Macro definition
DEFINE m_sort.
add 1 to ls_sort-spos.
ls_sort-fieldname = &1.
ls_sort-up = 'X'.
append ls_sort to lt_sort.
END-OF-DEFINITION.
DATA:
l_long TYPE i,
lp_struct TYPE REF TO data,
lp_table TYPE REF TO data, " Pointer to dynamic table
of_sdescr TYPE REF TO cl_abap_structdescr,
ls_lvc_cat TYPE lvc_s_fcat,
lt_lvc_cat TYPE lvc_t_fcat, " Field catalog
ls_fieldcat TYPE slis_fieldcat_alv,
lt_fieldcat TYPE slis_t_fieldcat_alv, " Field catalog
ls_layout TYPE slis_layout_alv,
lt_sort TYPE slis_t_sortinfo_alv, " Sort table
ls_sort TYPE slis_sortinfo_alv.
FIELD-SYMBOLS :
<fieldcat> TYPE slis_fieldcat_alv,
<lt_data> TYPE table, " Data to display
<fs> TYPE ANY,
<components> TYPE abap_compdescr.
Dynamic creation of a structure
CREATE DATA lp_struct TYPE (p_table).
ASSIGN lp_struct->* TO <fs>.
Fields Structure
of_sdescr ?= cl_abap_typedescr=>describe_by_data( <fs> ).
LOOP AT of_sdescr->components ASSIGNING <components>.
Field MANDT not displayed
IF sy-tabix = 1 AND <components>-name = 'MANDT'.
CONTINUE. " Next loop
ENDIF.
Build Fieldcatalog
ls_lvc_cat-fieldname = <components>-name.
ls_lvc_cat-ref_table = p_table.
APPEND ls_lvc_cat TO lt_lvc_cat.
Build Fieldcatalog
ls_fieldcat-fieldname = <components>-name.
ls_fieldcat-ref_tabname = p_table.
APPEND ls_fieldcat TO lt_fieldcat.
ENDLOOP.
Create internal table
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING it_fieldcatalog = lt_lvc_cat
IMPORTING ep_table = lp_table.
ASSIGN lp_table->* TO <lt_data>.
Read data
SELECT * FROM (p_table) UP TO p_max ROWS
INTO CORRESPONDING FIELDS OF TABLE <lt_data>
ORDER BY PRIMARY KEY.
IF <lt_data>[] IS INITIAL.
No table entries found for specified key
MESSAGE i429(mo).
EXIT.
ENDIF.
Read key field to Build Sort Table
SELECT * FROM dd03l WHERE tabname = p_table
AND fieldname <> '.INCLUDE'
AND as4vers = '0000'
AND as4local = 'A'
ORDER BY position.
READ TABLE lt_fieldcat ASSIGNING <fieldcat>
WITH KEY fieldname = dd03l-fieldname.
CHECK sy-subrc EQ 0.
ADD dd03l-leng TO l_long.
IF dd03l-keyflag = 'X'.
Build Sort Table
m_sort dd03l-fieldname.
<fieldcat>-key = 'X'.
ELSEIF l_long > 150.
<fieldcat>-tech = 'X'.
ENDIF.
ENDSELECT.
ls_layout-zebra = 'X'.
ls_layout-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = ls_layout
it_fieldcat = lt_fieldcat
it_sort = lt_sort
TABLES
t_outtab = <lt_data>.
ENDFORM. " F_DISPLAY_DATA
END OF PROGRAM Z_ALV_DYNAMIC_DATA *********************
Regards,
Joy.
06-18-2008 6:59 AM
hi,
check BALV* in se38.u can find lots of alv examples .
reward all hlpful answers.
06-18-2008 7:00 AM
If you know the structure or table name use the below code
data: descr_struc_ref TYPE REF TO cl_abap_structdescr.
descr_struc_ref ?= cl_abap_typedescr=>describe_by_name('SFLIGHT' ).
or
Build the field catalog and use the internal table to build dynamically
LOOP AT itab .
ls_alv_cat-fieldname = itab-fieldname.
ls_alv_cat-ref_table = p_tablen.
ls_alv_cat-ref_field = itab-fieldname.
ls_alv_cat-seltext = itab-fieldtext.
ls_alv_cat-reptext = itab-fieldtext.
APPEND ls_alv_cat TO i_alv_cat.
ENDLOOP.
*internal table build
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = i_alv_cat
IMPORTING
ep_table = d_ref.
ASSIGN d_ref->* TO <f_fs>.
Regards
Kannaiah
06-18-2008 7:03 AM
hi
go to this link
http://saptechnical.com/Tutorials/ALV/DynamicALV/Demo.htm
it explains clearly
Reward if usefull
Cheers
snehi
06-18-2008 7:04 AM
Hi,
FUNCTION z_bspl_grid_create1 .
*"----
""Global Interface:
*" IMPORTING
*" VALUE(IS_SETTINGS) LIKE RFBILA_ALV_SETTINGS STRUCTURE
*" RFBILA_ALV_SETTINGS
*" VALUE(IT_LIST_COMMENTARY) TYPE SLIS_T_LISTHEADER OPTIONAL
*" REFERENCE(I_GRID_TITLE) TYPE LVC_TITLE OPTIONAL
*" REFERENCE(IS_GRID_SETTINGS) TYPE LVC_S_GLAY OPTIONAL
*"----
CALL FUNCTION 'RGRE_ERGSL_TEXT_GET'
EXPORTING
language = is_settings-fs_language
balance_version = is_settings-fs_version
text_type = ' ' "<<< means all texts
TABLES
text_tab = gt_ergsl_text.
save RFBILA ALV SETTINGS
gs_settings = is_settings.
PERFORM bspl_grid_totals_calculate TABLES gt_rsthie
gt_bspldata
gt_gridtotals
USING is_settings.
PERFORM bspl_grid_outtab_fill TABLES gt_rsthie
gt_bspldata
gt_gridtotals
gt_ergsl_text
gt_edit_settings
gt_gridouttab
USING is_settings.
*Modifications by kallam-----
DATA z_gridouttab LIKE gt_gridouttab OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF itab OCCURS 0,
racct LIKE gt_gridouttab-racct,
ergsl LIKE gt_gridouttab-ergsl,
text LIKE gt_gridouttab-text,
rbukrs LIKE gt_gridouttab-rbukrs,
repval LIKE gt_gridouttab-repval,
END OF itab.
*modifications by shanker
DATA: BEGIN OF itab1 OCCURS 0,
ergsl LIKE gt_gridouttab-ergsl,
rbukrs LIKE gt_gridouttab-rbukrs,
racct LIKE gt_gridouttab-racct,
text LIKE gt_gridouttab-text,
repval LIKE gt_gridouttab-repval,
END OF itab1.
DATA: BEGIN OF itab2 OCCURS 0,
ergsl LIKE gt_gridouttab-ergsl,
text LIKE gt_gridouttab-text,
END OF itab2.
DATA : BEGIN OF comp_itab OCCURS 0,
rbukrs LIKE gt_gridouttab-rbukrs,
END OF comp_itab.
DATA num_cols TYPE i.
*Second time modifications
TYPE-POOLS: slis,abap.
DATA: dy_table TYPE REF TO data,
dy_line TYPE REF TO data,
xfc TYPE lvc_s_fcat,
ifc TYPE lvc_t_fcat,
it_alvfc TYPE slis_t_fieldcat_alv,
wa_alvfc TYPE slis_fieldcat_alv.
*local data declarations
*DATA: L_CB_PROGRAM LIKE SY-REPID VALUE 'SAPLBSPL'.
DATA: l_cb_program LIKE sy-repid VALUE 'SAPLZFUNC_FI'.
DATA: ls_variant LIKE disvariant.
DATA: ls_layout TYPE slis_layout_alv.
DATA: lt_fieldcat TYPE slis_t_fieldcat_alv.
DATA: lt_sort TYPE slis_t_sortinfo_alv .
DATA: ls_print TYPE slis_print_alv.
*data:FS_LAYOUT TYPE LVC_S_LAYO.
TYPES: BEGIN OF res_itab,
racct LIKE gt_gridouttab-racct, "Account Number
ergsl LIKE gt_gridouttab-ergsl, "Financial Statement Item
text LIKE gt_gridouttab-text, "Text field
END OF res_itab.
********************
*modifications by shanker
DATA: i TYPE i,
total TYPE umsav VALUE 0,
total1 TYPE umsav VALUE 0,
sub_tot TYPE umsav VALUE 0,
sub_tot1 TYPE umsav VALUE 0,
sub_tot2 TYPE umsav VALUE 0,
co_subtot1000(13) TYPE c,
co_subtot1005(13) TYPE c,
co_subtot1006(13) TYPE c,
co_subtot1007(13) TYPE c,
co_subtot1008(13) TYPE c,
co_subtot1201(13) TYPE c,
co_subtot1202(13) TYPE c,
co_subtot1301(13) TYPE c,
co_subtot1302(13) TYPE c,
co_subtot1401(13) TYPE c,
co_subtot1501(13) TYPE c,
*declaration of grand totals
gr_tot1000(13) TYPE c,
gr_tot1005(13) TYPE c,
gr_tot1006(13) TYPE c,
gr_tot1007(13) TYPE c,
gr_tot1008(13) TYPE c,
gr_tot1201(13) TYPE c,
gr_tot1202(13) TYPE c,
gr_tot1301(13) TYPE c,
gr_tot1302(13) TYPE c,
gr_tot1401(13) TYPE c,
gr_tot1501(13) TYPE c,
*declaration of super grand totals
ggr_tot1000(13) TYPE c,
ggr_tot1005(13) TYPE c,
ggr_tot1006(13) TYPE c,
ggr_tot1007(13) TYPE c,
ggr_tot1008(13) TYPE c,
ggr_tot1201(13) TYPE c,
ggr_tot1202(13) TYPE c,
ggr_tot1301(13) TYPE c,
ggr_tot1302(13) TYPE c,
ggr_tot1401(13) TYPE c,
ggr_tot1501(13) TYPE c.
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
<dyn_table1> TYPE STANDARD TABLE,
<dyn_wa>,
<dyn_wa1>,
<dyn_field>,
<DYN_WA2>, "shank
<dyn_field1>.
*************************************by shanker
*commented by kallam-----
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = L_CB_PROGRAM
I_INTERNAL_TABNAME = LT_FIELDCAT
I_STRUCTURE_NAME = 'BSPL_GRID_FIELDCAT'
I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = 'LBSPLU04'
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
CHANGING
CT_FIELDCAT = LT_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
*
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*
PERFORM bspl_grid_alv_interface_set
TABLES lt_fieldcat
USING is_settings
CHANGING l_cb_program
ls_variant
ls_layout.
PERFORM bspl_grid_sortinfos_set TABLES lt_sort[].
PERFORM bspl_grid_newpage_set TABLES gt_gridouttab.
PERFORM bspl_grid_printinfos_set USING ls_print.
*Modified on 26/02/2008 -
begin
PERFORM GET_NUM_OF_COMPANY_CODES.
PERFORM GET_STRUCTURE.
PERFORM CREATE_DYNAMIC_ITAB.
PERFORM GET_DATA.
PERFORM WRITE_OUT.
*end on 26/02/2008
&----
*& Form get_num_of_company_codes
&----
text
----
*FORM GET_NUM_OF_COMPANY_CODES.
z_gridouttab[] = gt_gridouttab[].
LOOP AT z_gridouttab.
itab-racct = z_gridouttab-racct. " G/L Account
itab-ergsl = z_gridouttab-ergsl. " FS item
itab-text = z_gridouttab-text. " Test for P/L item
itab-rbukrs = z_gridouttab-rbukrs." Company code
comp_itab-rbukrs = z_gridouttab-rbukrs.
itab-repval = z_gridouttab-repval.
APPEND itab. "shanker
COLLECT ITAB.
APPEND comp_itab.
CLEAR itab.
CLEAR comp_itab.
ENDLOOP.
SORT comp_itab BY rbukrs.
DELETE ADJACENT DUPLICATES FROM comp_itab.
LOOP AT comp_itab.
IF comp_itab-rbukrs EQ ''.
DELETE comp_itab.
ENDIF.
ENDLOOP.
DESCRIBE TABLE comp_itab LINES num_cols.
*modifications by shanker
ITAB1[] = ITAB[].
DATA: lv_ergsl LIKE itab-ergsl,
lv_text LIKE itab-text.
LOOP AT itab.
IF SY-TABIX = '1'.
LV_ERGSL = ITAB-ERGSL.
LV_text = ITAB-text.
MOVE itab-ergsl TO itab2-ergsl.
MOVE itab-text TO itab2-text.
APPEND itab2.
ENDIF.
*IF ITAB-ERGSL NE LV_ERGSL.
MOVE ITAB-ERGSL TO ITAB2-ERGSL.
APPEND ITAB2.
LV_ERGSL = ITAB-ERGSL.
ENDIF.
MOVE-CORRESPONDING itab TO itab1.
APPEND itab1.
ENDLOOP.
DELETE ADJACENT DUPLICATES FROM itab2 COMPARING ergsl .
***************************************
SORT ITAB1 BY RACCT RBUKRS.
DELETE ADJACENT DUPLICATES FROM ITAB1 COMPARING RACCT .
*ENDFORM. "GET_NUM_OF_COMPANY_CODES
*Get table structure
*FORM GET_STRUCTURE.
DATA : idetails TYPE abap_compdescr_tab,
xdetails TYPE abap_compdescr.
DATA : ref_table_des TYPE REF TO cl_abap_structdescr.
DATA fld_pos TYPE i VALUE 1.
*shanker modi start
Get the structure of the table.
ref_table_des ?=
cl_abap_typedescr=>describe_by_name( 'RES_ITAB' ).
idetails[] = ref_table_des->components[].
LOOP AT idetails INTO xdetails.
CLEAR xfc.
xfc-col_pos = fld_pos.
xfc-fieldname = xdetails-name .
IF sy-tabix = 1.
xfc-seltext = 'Account Number'.
ELSEIF sy-tabix = 2.
xfc-seltext = 'FS Item'.
xfc-key = 'X'.
ELSE.
xfc-seltext = 'Text for B/S P&L item'.
xfc-seltext = 'Text item'.
xfc-outputlen = 25.
ENDIF.
xfc-datatype = xdetails-type_kind.
xfc-inttype = xdetails-type_kind.
xfc-intlen = xdetails-length.
xfc-decimals = xdetails-decimals.
APPEND xfc TO ifc.
fld_pos = fld_pos + 1.
ENDLOOP.
DO num_cols TIMES.
CLEAR xfc.
READ TABLE comp_itab INDEX sy-index.
xfc-fieldname = comp_itab-rbukrs .
xfc-seltext = comp_itab-rbukrs .
xfc-col_pos = fld_pos.
xfc-outputlen = 15.
*modifications by shanker
xfc-do_sum = 'X'.
XFC-DATATYPE = 'CURR'.
xfc-datatype = 'CHAR'.
xfc-just = 'R'.
APPEND xfc TO ifc.
fld_pos = fld_pos + 1.
ENDDO.
CLEAR xfc.
xfc-fieldname = 'RECORD_TOTAL' .
xfc-seltext = 'Record_total'.
xfc-col_pos = fld_pos.
xfc-outputlen = 15.
XFC-DO_SUM = 'X'. "Display column total
XFC-DATATYPE = 'CURR'.
xfc-datatype = 'CHAR'.
xfc-just = 'R'.
APPEND xfc TO ifc.
*ENDFORM. "get_structure
&----
*& Form create_dynamic_itab
&----
text
----
*FORM CREATE_DYNAMIC_ITAB.
*Create dynamic internal table and assign to FS
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = ifc
IMPORTING
ep_table = dy_table.
ASSIGN dy_table->* TO <dyn_table>.
Create dynamic work area and assign to FS
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
*modifications by shanker
*----
*Create dynamic internal table and assign to FS
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = ifc
IMPORTING
ep_table = dy_table.
ASSIGN dy_table->* TO <dyn_table1>.
Create dynamic work area and assign to FS
CREATE DATA dy_line LIKE LINE OF <dyn_table1>.
ASSIGN dy_line->* TO <dyn_wa1>.
*****************************************
*ENDFORM. "create_dynamic_itab
&----
*& Form get_data
&----
text
----
*FORM GET_DATA.
LOOP AT itab1. " assigning <fs_itab1>.
ASSIGN COMPONENT 'RACCT' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = itab1-racct.
ASSIGN COMPONENT 'ERGSL' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = itab1-ergsl.
ASSIGN COMPONENT 'TEXT' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = itab1-text.
i = 4.
CLEAR comp_itab.
LOOP AT comp_itab.
ASSIGN COMPONENT i OF STRUCTURE <dyn_wa> TO <dyn_field>.
IF itab1-rbukrs EQ comp_itab-rbukrs.
<dyn_field> = itab1-repval.
sub_tot = itab1-repval.
IF itab1-rbukrs EQ '1000'.
co_subtot1000 = co_subtot1000 + itab1-repval.
ELSEIF itab1-rbukrs EQ '1005'.
co_subtot1005 = co_subtot1005 + itab1-repval.
ELSEIF itab1-rbukrs EQ '1006'.
co_subtot1006 = co_subtot1006 + itab1-repval.
ELSEIF itab1-rbukrs EQ '1007'.
co_subtot1007 = co_subtot1007 + itab1-repval.
ELSEIF itab1-rbukrs EQ '1008'.
co_subtot1008 = co_subtot1008 + itab1-repval.
ELSEIF itab1-rbukrs EQ '1201'.
co_subtot1201 = co_subtot1201 + itab1-repval.
ELSEIF itab1-rbukrs EQ '1202'.
co_subtot1202 = co_subtot1202 + itab1-repval.
ELSEIF itab1-rbukrs EQ '1301'.
co_subtot1301 = co_subtot1301 + itab1-repval.
ELSEIF itab1-rbukrs EQ '1302'.
co_subtot1302 = co_subtot1302 + itab1-repval.
ELSEIF itab1-rbukrs EQ '1401'.
co_subtot1401 = co_subtot1401 + itab1-repval.
ELSEIF itab1-rbukrs EQ '1501'.
co_subtot1501 = co_subtot1501 + itab1-repval.
ENDIF.
ELSEIF itab1-ergsl = '10 - 29'
OR itab1-ergsl = '10 - 22'
OR itab1-ergsl = '28 - 289'
OR itab1-ergsl = '311 - 399'
OR itab1-ergsl = '3410'
OR itab1-ergsl = '3499'
OR itab1-ergsl = '51 - 59'
OR itab1-ergsl = '610 - 619' AND itab1-racct NE space.
<dyn_field> = space.
sub_tot = 0.
*subtot assignment
ELSEIF itab1-racct EQ space AND itab1-ergsl NE space." AND itab1-text EQ space." AND I = 4.
IF '1000' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1000.
gr_tot1000 = gr_tot1000 + co_subtot1000.
co_subtot1000 = 0.
ENDIF.
IF '1005' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1005 .
gr_tot1005 = gr_tot1005 + co_subtot1005.
co_subtot1005 = 0.
ENDIF.
IF '1006' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1006 .
gr_tot1006 = gr_tot1006 + co_subtot1006.
co_subtot1006 = 0.
ENDIF.
IF '1007' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1007.
gr_tot1007 = gr_tot1007 + co_subtot1007.
co_subtot1007 = 0.
ENDIF.
IF '1008' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1008.
gr_tot1008 = gr_tot1008 + co_subtot1008.
co_subtot1008 = 0.
ENDIF.
IF '1201' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1201 .
gr_tot1201 = gr_tot1201 + co_subtot1201.
co_subtot1201 = 0.
ENDIF.
IF '1202' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1202 .
gr_tot1202 = gr_tot1202 + co_subtot1202.
co_subtot1202 = 0.
ENDIF.
IF '1301' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1301 .
gr_tot1301 = gr_tot1301 + co_subtot1301.
co_subtot1301 = 0.
ENDIF.
IF '1302' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1302 .
gr_tot1302 = gr_tot1302 + co_subtot1302.
co_subtot1302 = 0.
ENDIF.
IF '1401' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1401 .
gr_tot1401 = gr_tot1401 + co_subtot1401.
co_subtot1401 = 0.
ENDIF.
IF '1501' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1501 .
gr_tot1501 = gr_tot1501 + co_subtot1501.
co_subtot1501 = 0.
ENDIF.
ELSE.
<dyn_field> = 0.
sub_tot = 0.
ENDIF.
*shan
IF itab1-ergsl eq '331 - 349'.
IF '1000' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1000.
gr_tot1000 = gr_tot1000 + co_subtot1000.
co_subtot1000 = 0.
ENDIF.
IF '1005' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1005 .
gr_tot1005 = gr_tot1005 + co_subtot1005.
co_subtot1005 = 0.
ENDIF.
IF '1006' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1006 .
gr_tot1006 = gr_tot1006 + co_subtot1006.
co_subtot1006 = 0.
ENDIF.
IF '1007' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1007.
gr_tot1007 = gr_tot1007 + co_subtot1007.
co_subtot1007 = 0.
ENDIF.
IF '1008' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1008.
gr_tot1008 = gr_tot1008 + co_subtot1008.
co_subtot1008 = 0.
ENDIF.
IF '1201' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1201 .
gr_tot1201 = gr_tot1201 + co_subtot1201.
co_subtot1201 = 0.
ENDIF.
IF '1202' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1202 .
gr_tot1202 = gr_tot1202 + co_subtot1202.
co_subtot1202 = 0.
ENDIF.
IF '1301' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1301 .
gr_tot1301 = gr_tot1301 + co_subtot1301.
co_subtot1301 = 0.
ENDIF.
IF '1302' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1302 .
gr_tot1302 = gr_tot1302 + co_subtot1302.
co_subtot1302 = 0.
ENDIF.
IF '1401' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1401 .
gr_tot1401 = gr_tot1401 + co_subtot1401.
co_subtot1401 = 0.
ENDIF.
IF '1501' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1501 .
gr_tot1501 = gr_tot1501 + co_subtot1501.
co_subtot1501 = 0.
ENDIF.
endif.
IF itab1-racct eq space and itab1-ergsl eq '51 - 59' and itab1-text = 'SALES'.
IF '1000' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1000.
gr_tot1000 = gr_tot1000 + co_subtot1000.
co_subtot1000 = 0.
ENDIF.
IF '1005' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1005 .
gr_tot1005 = gr_tot1005 + co_subtot1005.
co_subtot1005 = 0.
ENDIF.
IF '1006' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1006 .
gr_tot1006 = gr_tot1006 + co_subtot1006.
co_subtot1006 = 0.
ENDIF.
IF '1007' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1007.
gr_tot1007 = gr_tot1007 + co_subtot1007.
co_subtot1007 = 0.
ENDIF.
IF '1008' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1008.
gr_tot1008 = gr_tot1008 + co_subtot1008.
co_subtot1008 = 0.
ENDIF.
IF '1201' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1201 .
gr_tot1201 = gr_tot1201 + co_subtot1201.
co_subtot1201 = 0.
ENDIF.
IF '1202' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1202 .
gr_tot1202 = gr_tot1202 + co_subtot1202.
co_subtot1202 = 0.
ENDIF.
IF '1301' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1301 .
gr_tot1301 = gr_tot1301 + co_subtot1301.
co_subtot1301 = 0.
ENDIF.
IF '1302' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1302 .
gr_tot1302 = gr_tot1302 + co_subtot1302.
co_subtot1302 = 0.
ENDIF.
IF '1401' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1401 .
gr_tot1401 = gr_tot1401 + co_subtot1401.
co_subtot1401 = 0.
ENDIF.
IF '1501' EQ comp_itab-rbukrs.
<dyn_field> = co_subtot1501 .
gr_tot1501 = gr_tot1501 + co_subtot1501.
co_subtot1501 = 0.
ENDIF.
endif.
*endshank
*Grand total assignment
IF itab1-racct EQ space AND itab1-ergsl eq '10 - 19' "ASSETS
or itab1-ergsl eq '211 - 223'
or itab1-ergsl eq '10 - 22'
or itab1-ergsl eq '231 - 241'
or itab1-ergsl eq '311 - 324' "LIABILITIES & EQUITY
or itab1-ergsl eq '331 - 349'
or itab1-ergsl eq '51 - 59'
or itab1-ergsl eq '3410'
or itab1-ergsl eq '3499'.
IF '1000' EQ comp_itab-rbukrs.
<dyn_field> = gr_tot1000.
ggr_tot1000 = ggr_tot1000 + gr_tot1000.
gr_tot1000 = 0.
ENDIF.
IF '1005' EQ comp_itab-rbukrs.
<dyn_field> = gr_tot1005.
ggr_tot1005 = ggr_tot1005 + gr_tot1005.
gr_tot1005 = 0.
ENDIF.
IF '1006' EQ comp_itab-rbukrs.
<dyn_field> = gr_tot1006.
ggr_tot1006 = ggr_tot1006 + gr_tot1006.
gr_tot1006 = 0.
ENDIF.
IF '1007' EQ comp_itab-rbukrs.
<dyn_field> = gr_tot1007.
ggr_tot1007 = ggr_tot1007 + gr_tot1007.
gr_tot1007 = 0.
ENDIF.
IF '1008' EQ comp_itab-rbukrs.
<dyn_field> = gr_tot1008.
ggr_tot1008 = ggr_tot1008 + gr_tot1008.
gr_tot1008 = 0.
ENDIF.
IF '1201' EQ comp_itab-rbukrs.
<dyn_field> = gr_tot1201.
ggr_tot1201 = ggr_tot1201 + gr_tot1201.
gr_tot1201 = 0.
ENDIF.
IF '1202' EQ comp_itab-rbukrs.
<dyn_field> = gr_tot1202.
ggr_tot1202 = ggr_tot1202 + gr_tot1202.
gr_tot1202 = 0.
ENDIF.
IF '1301' EQ comp_itab-rbukrs.
<dyn_field> = gr_tot1301.
ggr_tot1301 = ggr_tot1301 + gr_tot1301.
gr_tot1301 = 0.
ENDIF.
IF '1302' EQ comp_itab-rbukrs.
<dyn_field> = gr_tot1302.
ggr_tot1302 = ggr_tot1302 + gr_tot1302.
gr_tot1302 = 0.
ENDIF.
IF '1401' EQ comp_itab-rbukrs.
<dyn_field> = gr_tot1401.
ggr_tot1401 = ggr_tot1401 + gr_tot1401.
gr_tot1401 = 0.
ENDIF.
IF '1501' EQ comp_itab-rbukrs.
<dyn_field> = gr_tot1501.
ggr_tot1501 = ggr_tot1501 + gr_tot1501.
gr_tot1501 = 0.
ENDIF.
endif.
*shanker
*end shanker
*Super grand total assignment
IF itab1-racct EQ space AND itab1-ergsl eq '10 - 29' "ASSETS
or itab1-ergsl eq '311 - 399'. "LIABILITIES & EQUITY
IF '1000' EQ comp_itab-rbukrs.
<dyn_field> = ggr_tot1000.
ggr_tot1000 = 0.
ENDIF.
IF '1005' EQ comp_itab-rbukrs.
<dyn_field> = ggr_tot1005.
ggr_tot1005 = 0.
ENDIF.
IF '1006' EQ comp_itab-rbukrs.
<dyn_field> = ggr_tot1006.
ggr_tot1006 = 0.
ENDIF.
IF '1007' EQ comp_itab-rbukrs.
<dyn_field> = ggr_tot1007.
ggr_tot1007 = 0.
ENDIF.
IF '1008' EQ comp_itab-rbukrs.
<dyn_field> = ggr_tot1008.
ggr_tot1008 = 0.
ENDIF.
IF '1201' EQ comp_itab-rbukrs.
<dyn_field> = ggr_tot1201.
ggr_tot1201 = 0.
ENDIF.
IF '1202' EQ comp_itab-rbukrs.
<dyn_field> = ggr_tot1202.
ggr_tot1202 = 0.
ENDIF.
IF '1301' EQ comp_itab-rbukrs.
<dyn_field> = ggr_tot1301.
ggr_tot1301 = 0.
ENDIF.
IF '1302' EQ comp_itab-rbukrs.
<dyn_field> = ggr_tot1302.
ggr_tot1302 = 0.
ENDIF.
IF '1401' EQ comp_itab-rbukrs.
<dyn_field> = ggr_tot1401.
ggr_tot1401 = 0.
ENDIF.
IF '1501' EQ comp_itab-rbukrs.
<dyn_field> = gr_tot1501.
ggr_tot1501 = 0.
ENDIF.
endif.
if itab1-ergsl eq '10 - 29' and itab1-racct eq space and itab1-text eq 'A S S E T S'.
<dyn_field> = ''.
endif.
IF itab1-text eq '= = = = = ='
or itab1-text eq '================='
or itab1-text eq '= = = = = = = = = = = = ='.
<dyn_field> = space.
endif.
i = i + 1.
total = total + sub_tot.
ENDLOOP.
Record total field assignment
ASSIGN COMPONENT i OF STRUCTURE <dyn_wa> TO <dyn_field>.
IF total NE space.
<dyn_field> = total.
ELSE.
<dyn_field> = space.
ENDIF.
APPEND <dyn_wa> TO <dyn_table>.
COLLECT <dyn_wa> INTO <dyn_table>.
CLEAR <dyn_wa>.
total = 0.
ENDLOOP.
*----
*shanker commented begin
SORT ITAB1 BY ergsl .
DATA: FLAG1 TYPE C,
FLAG2 TYPE C,
LV_RACCT LIKE ITAB1-RACCT.
*
DELETE ADJACENT DUPLICATES FROM ITAB1 COMPARING text .
*
*LOOP AT ITAB2.
LOOP AT ITAB1 WHERE ERGSL = ITAB2-ERGSL. " assigning <fs_itab1>.
LV_RACCT = ITAB1-RACCT.
CHECK ITAB1-RBUKRS IS NOT INITIAL.
*IF ITAB1-RACCT IS NOT INITIAL.
ASSIGN COMPONENT 'RACCT' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = ITAB1-RACCT.
ASSIGN COMPONENT 'ERGSL' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = ITAB1-ERGSL.
*
ASSIGN COMPONENT 'TEXT' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = ITAB1-TEXT.
*
FLAG2 = 'X'.
*ELSE.
ASSIGN COMPONENT 'ERGSL' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = ITAB1-ERGSL.
*
ASSIGN COMPONENT 'TEXT' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = ITAB1-TEXT.
*ENDIF.
ASSIGN COMPONENT 'RACCT' OF STRUCTURE <DYN_WA1> TO <DYN_FIELD1>.
<DYN_FIELD1> = ITAB1-RACCT.
*IF FLAG2 IS NOT INITIAL.
ASSIGN COMPONENT 'ERGSL' OF STRUCTURE <DYN_WA1> TO <DYN_FIELD1>.
<DYN_FIELD1> = ITAB1-ERGSL.
*
ASSIGN COMPONENT 'TEXT' OF STRUCTURE <DYN_WA1> TO <DYN_FIELD1>.
<DYN_FIELD1> = ' '.
*ENDIF.
AT END OF ERGSL.
IF ITAB1-RBUKRS IS NOT INITIAL AND LV_RACCT IS NOT INITIAL.
FLAG1 = 'X'.
ENDIF.
ENDAT.
*
IF FLAG1 = 'X'.
ASSIGN COMPONENT 'TEXT' OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = 'SUB TOTAL'.
ENDIF.
**modifications by shanker
*IF ITAB1-RACCT IS NOT INITIAL.
I = 4.
CLEAR COMP_ITAB.
LOOP AT COMP_ITAB.
ASSIGN COMPONENT I OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
*
IF ITAB1-RBUKRS EQ COMP_ITAB-RBUKRS.
<DYN_FIELD> = ITAB1-REPVAL.
SUB_TOT1 = ITAB1-REPVAL.
ELSE.
<DYN_FIELD> = 0.
SUB_TOT1 = 0.
ENDIF.
*
I = I + 1.
TOTAL = TOTAL + SUB_TOT1.
ENDLOOP.
*
ASSIGN COMPONENT I OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = TOTAL.
*
APPEND <DYN_WA> TO <DYN_TABLE>.
CLEAR <DYN_WA>.
ELSE.
I = 4.
CLEAR COMP_ITAB.
LOOP AT COMP_ITAB.
ASSIGN COMPONENT I OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
*
IF ITAB1-RBUKRS EQ COMP_ITAB-RBUKRS.
<DYN_FIELD> = SPACE.
ELSE.
<DYN_FIELD> = SPACE.
ENDIF.
*
I = I + 1.
ASSIGN COMPONENT I OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = SPACE.
ENDLOOP.
*
APPEND <DYN_WA> TO <DYN_TABLE>.
CLEAR <DYN_WA>.
ENDIF.
*
CLEAR TOTAL.
SUB_TOT = SUB_TOT + ITAB1-REPVAL.
I = 4.
AT END OF RBUKRS.
IF ITAB1-RBUKRS IS NOT INITIAL.
CLEAR COMP_ITAB.
LOOP AT COMP_ITAB.
ASSIGN COMPONENT I OF STRUCTURE <DYN_WA1> TO <DYN_FIELD1>.
*
IF ITAB1-RBUKRS EQ COMP_ITAB-RBUKRS.
<DYN_FIELD1> = SUB_TOT.
SUB_TOT2 = SUB_TOT.
CLEAR SUB_TOT.
ELSE.
**********************************************
<DYN_FIELD> = 0.
ENDIF.
I = I + 1.
ENDLOOP.
TOTAL1 = TOTAL1 + SUB_TOT2.
ENDIF.
IF FLAG1 = 'X' AND FLAG2 = 'X'.
ASSIGN COMPONENT I OF STRUCTURE <DYN_WA1> TO <DYN_FIELD>.
<DYN_FIELD> = TOTAL1.
APPEND <DYN_WA1> TO <DYN_TABLE>.
CLEAR <DYN_WA1>.
CLEAR: TOTAL1, SUB_TOT2.
*
CLEAR FLAG1. CLEAR FLAG2.
ENDIF.
ENDAT.
ENDLOOP.
*ENDLOOP.
*shanker comment end
*****************************************************
LOOP AT ifc INTO xfc.
wa_alvfc-fieldname = xfc-fieldname.
wa_alvfc-seltext_s = xfc-seltext.
wa_alvfc-col_pos = xfc-col_pos.
wa_alvfc-outputlen = xfc-outputlen.
wa_alvfc-do_sum = xfc-do_sum.
wa_alvfc-datatype = xfc-datatype.
APPEND wa_alvfc TO it_alvfc.
ENDLOOP.
u2022 Call ABAP List Viewer (ALV)
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = l_cb_program
i_callback_pf_status_set = 'BSPL_GRID_PF_STATUS_SET'
i_callback_user_command = 'BSPL_GRID_USER_COMMAND'
i_callback_top_of_page = 'BSPL_GRID_TOP'
i_callback_html_top_of_page = 'BSPL_GRID_TOP_HTML'
i_grid_title = i_grid_title
i_grid_settings = is_grid_settings
is_layout = ls_layout
it_fieldcat = it_alvfc
i_default = 'X'
i_save = 'A'
is_variant = ls_variant
is_print = ls_print
IT_SORT = LT_SORT
TABLES
t_outtab = <dyn_table>.
*<dyn_table>
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = L_CB_PROGRAM
I_CALLBACK_PF_STATUS_SET = 'BSPL_GRID_PF_STATUS_SET'
I_CALLBACK_USER_COMMAND = 'BSPL_GRID_USER_COMMAND'
I_CALLBACK_TOP_OF_PAGE = 'BSPL_GRID_TOP'
I_CALLBACK_HTML_TOP_OF_PAGE = 'BSPL_GRID_TOP_HTML'
I_CALLBACK_HTML_END_OF_LIST = ' '
I_STRUCTURE_NAME = 'BSPL_GRID_FIELDCAT'
I_BACKGROUND_ID = ' '
I_GRID_TITLE = T011T-VSTXT
I_GRID_TITLE = I_GRID_TITLE
I_GRID_SETTINGS = IS_GRID_SETTINGS
IS_LAYOUT = LS_LAYOUT
IT_FIELDCAT = it_alvfc
IT_FIELDCAT = LT_FIELDCAT
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT = LT_SORT
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = 'A'
IS_VARIANT = LS_VARIANT
IT_EVENTS =
IT_EVENT_EXIT =
IS_PRINT = LS_PRINT
IS_REPREP_ID =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = <dyn_table>
T_OUTTAB = GT_GRIDOUTTAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
*
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*Modification.----
end
PERFORM call_badi_exit TABLES gt_gridouttab
it_list_commentary.
ENDFUNCTION.
&----
*& Form BSPL_GRID_OUTTAB_FILL1
&----
text
----
-->PT_NODE text
-->PT_DATA text
-->PT_TOTALS text
-->PT_TEXT text
-->PT_EDIT text
-->PT_OUTTAB text
-->VALUE(PS_SETTINGS) text
----
FORM bspl_grid_outtab_fill1
TABLES pt_node TYPE tt_rsthie
pt_data TYPE tt_bspl_data
pt_totals TYPE tt_grid_totals
pt_text TYPE tt_ergsl_text
pt_edit TYPE tt_edit_settings
pt_outtab TYPE tt_grid_outtab
USING value(ps_settings) LIKE rfbila_alv_settings.
local data declaration
DATA: lt_predecessor TYPE tt_grid_predecessor WITH HEADER LINE.
DATA: l_id LIKE rsthie-id.
DATA: l_fberflg LIKE con_x.
DATA: l_fber_tlevel LIKE rsthie-tlevel.
DATA: ls_node_saknr TYPE ts_node_saknr.
LOOP AT pt_node ASSIGNING <rsthie>.
CASE <rsthie>-type.
WHEN con_top.
WHEN con_bpos.
CLEAR: l_fberflg.
PERFORM bspl_grid_bpos_to_outtab TABLES pt_totals
pt_text
pt_edit
pt_outtab
lt_predecessor
USING <rsthie>
ps_settings
CHANGING l_id.
WHEN con_acct.
ls_node_saknr = <rsthie>-name.
CHECK: g_list_state = con_acct.
CHECK: l_fberflg IS INITIAL
OR l_fber_tlevel = <rsthie>-tlevel.
PERFORM bspl_grid_acct_to_outtab TABLES pt_totals
pt_outtab
pt_data
USING <rsthie>
ps_settings
CHANGING l_id.
WHEN con_fber.
l_fberflg = con_x.
l_fber_tlevel = <rsthie>-tlevel.
PERFORM bspl_grid_fber_to_outtab TABLES pt_totals
pt_outtab
pt_data
USING <rsthie>
ps_settings
CHANGING l_id.
WHEN con_ccod.
CHECK: g_list_state = con_ccod.
CHECK: l_fberflg IS INITIAL
OR l_fber_tlevel = <rsthie>-tlevel.
PERFORM bspl_grid_ccod_to_outtab TABLES pt_totals
pt_outtab
pt_data
USING <rsthie>
ps_settings
ls_node_saknr
CHANGING l_id.
WHEN con_busa.
WHEN con_leaf.
ENDCASE.
ENDLOOP.
IF NOT ( LT_PREDECESSOR[] IS INITIAL ).
put totals of remaining predecessors to OUTTAB
PERFORM BSPL_GRID_PREDECESSOR_2_OUTTAB
TABLES PT_TOTALS
PT_TEXT
PT_EDIT
PT_OUTTAB
LT_PREDECESSOR
USING '01' "<<< TLEVEL
PS_SETTINGS
CHANGING L_ID.
ENDIF.
ENDFORM. " BSPL_GRID_OUTTAB_FILL