‎2008 Nov 12 7:32 AM
Hello Experts,
I need to create a dynamic internal table.
I have one internal table with 3 fields. Now I need to add fields dynamically to this internal table based on the number of records in database table.
for ex: My database table contains 5 records then my internal should contains 8 fields ( 3 of the fields already contains).
Any suggestions pls.........
Thnaks in advance.
Zak.
‎2008 Nov 12 7:35 AM
Hi,
Did you search the forum before putting your query ? There is ample materila on this already.
regards,
Advait
‎2008 Nov 12 7:35 AM
Hi,
Did you search the forum before putting your query ? There is ample materila on this already.
regards,
Advait
‎2008 Nov 12 7:35 AM
Hello Zak
You may have a look at my Wiki posting
[Creating Flat and Complex Internal Tables Dynamically using RTTI |https://wiki.sdn.sap.com/wiki/display/Snippets/CreatingFlatandComplexInternalTablesDynamicallyusingRTTI]
Regards
Uwe
‎2008 Nov 12 7:51 AM
Hello,
Please chk the following code.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_int_tab
IMPORTING
ep_table = it_new_tab
EXCEPTIONS
generate_subpool_dir_full = 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.
ASSIGN it_new_tab->* TO <it_dyn>.
*Create dynamic work area and assign to FS
CREATE DATA g_new_line LIKE LINE OF <it_dyn>.
ASSIGN g_new_line->* TO <wa_dyn>.
IF sy-subrc NE 0.
MESSAGE e002(sy) WITH 'Failed to create dynamic table'.
ENDIF.
Thanks.
‎2008 Nov 12 8:38 AM
Follow this code:
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
*"----
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 Anitha-----
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 anitha
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 anitha
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>,
<dyn_field1>.
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.
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.
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.
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.
*data:itab3 like itab1 occurs 0 with header line.
loop at itab1.
if itab1-ergsl eq '51 - 59' and itab1-racct eq ''.
itab1-ergsl = ''.
itab1-racct = ' '.
endif.
*append itab1.
*endloop.
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.
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.
*start 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.
*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 '3410'
or itab1-ergsl eq '3499'
or itab1-ergsl eq '221 - 223'.
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.
*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.
*shanker
if itab1-ergsl eq '51 - 59' and itab1-text eq 'SALES'.
itab1-ergsl = '610 - 619'.
itab1-text = 'PROJECT COST'.
endif.
*end shanker
if itab1-ergsl eq '10 - 29' and itab1-text eq 'A S S E T S'.
<dyn_field> = space.
endif.
IF itab1-text eq '= = = = = ='
or 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.
‎2008 Nov 12 8:33 AM
DATA : G_TABLE(30) TYPE C,
g_flen(6).
DATA : IDETAILS TYPE ABAP_COMPDESCR_TAB,
XDETAILS TYPE ABAP_COMPDESCR.
DATA : REF_TABLE_DES TYPE REF TO CL_ABAP_STRUCTDESCR,
XFC TYPE LVC_S_FCAT,
IFC TYPE LVC_T_FCAT.
DATA: ig_newtable TYPE REF TO data,
ig_fldcat1 TYPE lvc_t_fcat,
wg_fldcat TYPE lvc_s_fcat,
wg_newline TYPE REF TO data.
FIELD-SYMBOLS: <fs_t_dyntable> TYPE STANDARD TABLE,
<fs_dyntable>,
<fs_fldval> TYPE ANY.
..............................
PERFORM fieldcatalog_build USING c_matnr c_char c_18. " suppose u r internal table contains 3 fields
" say matnr , gstrp and maktx
PERFORM fieldcatalog_build USING c_gstrp c_dats c_8.
PERFORM fieldcatalog_build USING c_maktx c_char c_40.
Get the structure of the database table.
REF_TABLE_DES ?=
CL_ABAP_TYPEDESCR=>DESCRIBE_BY_NAME( G_TABLE ). " G_TABLE data base table name
IDETAILS[] = REF_TABLE_DES->COMPONENTS[].
LOOP AT IDETAILS INTO XDETAILS.
CLEAR XFC.
XFC-FIELDNAME = XDETAILS-NAME .
XFC-DATATYPE = XDETAILS-TYPE_KIND.
XFC-INTTYPE = XDETAILS-TYPE_KIND.
XFC-INTLEN = XDETAILS-LENGTH.
XFC-DECIMALS = XDETAILS-DECIMALS.
APPEND XFC TO IFC.
ENDLOOP.
loop at IFC into XFC.
clear g_flen.
g_flen = XFC-INTLEN.
PERFORM fieldcatalog_build USING XFC-FIELDNAME XFC-DATATYPE g_flen.
clear XFC.
endloop.
Create dynamic internal table and assign to FS
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = ig_fldcat1
IMPORTING
ep_table = ig_newtable.
ASSIGN ig_newtable->* TO <fs_t_dyntable>.
Create dynamic work area and assign to FS
CREATE DATA wg_newline LIKE LINE OF <fs_t_dyntable>.
ASSIGN wg_newline->* TO <fs_dyntable>.
To fill data into dynamic internal table ig_material is internal table containing data
LOOP AT ig_material INTO wg_material.
PERFORM fill_dyn_int_table USING c_matnr wg_material-matnr .
PERFORM fill_dyn_int_table USING c_gstrp wg_material-gstrp .
PERFORM fill_dyn_int_table USING c_maktx wg_material-maktx .
*simliarly fill the data of database table which is stored in some internal table
.............
ENDLOOP.
.............................
&----
*& Form fieldcatalog_build
&----
FORM fieldcatalog_build USING fp_fieldname TYPE c
fp_datatype TYPE c
fp_intlen TYPE any.
wg_fldcat-fieldname = fp_fieldname.
wg_fldcat-datatype = fp_datatype.
wg_fldcat-intlen = fp_intlen.
APPEND wg_fldcat TO ig_fldcat1.
ENDFORM. " fieldcatalog_build
&----
*& Form fill_dyn_int_table
&----
FORM fill_dyn_int_table USING fp_fldname TYPE c
fp_fldvalue TYPE any.
ASSIGN COMPONENT fp_fldname
OF STRUCTURE <fs_dyntable> TO <fs_fldval>.
<fs_fldval> = fp_fldvalue.
ENDFORM. " fill_dyn_int_table
‎2008 Nov 12 8:43 AM
Hi ,
Go through this
REPORT yusmm_text .
TYPE-POOLS : slis.
TABLES: mara,
makt.
DATA:
gt_makt TYPE STANDARD TABLE OF makt, "Materialkurztexte,
gt_thead TYPE STANDARD TABLE OF thead, "SAPscript: Text-Header,
gt_linetab TYPE STANDARD TABLE OF tline. " SAPscript: Text-Zeilen.
DATA : BEGIN OF gv_text_output_line,
matnr LIKE mara-matnr,
begru LIKE mara-begru,
maktx_en LIKE makt-maktx,
maktx_de LIKE makt-maktx,
maktx_fr LIKE makt-maktx,
maktx_es LIKE makt-maktx,
ltxt40_en LIKE tline-tdline,
ltxt40_de LIKE tline-tdline,
ltxt40_fr LIKE tline-tdline,
ltxt40_es LIKE tline-tdline,
END OF gv_text_output_line.
DATA:
gt_text_output_line LIKE STANDARD TABLE OF gv_text_output_line,
gt_fieldcat TYPE slis_t_fieldcat_alv,
gv_fieldcat LIKE LINE OF gt_fieldcat,
gs_layout TYPE slis_layout_alv,
gv_repid TYPE sy-repid.
DATA: gv_makt TYPE makt.
CONSTANTS:
BEGIN OF gc,
de TYPE thead-tdspras VALUE 'D',
en TYPE thead-tdspras VALUE 'E',
fr TYPE thead-tdspras VALUE 'F',
es TYPE thead-tdspras VALUE 'S',
tdid_grun TYPE thead-tdid VALUE 'GRUN',
tdobject_mat TYPE thead-tdobject VALUE 'MATERIAL',
on(01) TYPE c VALUE 'X',
yes(01) TYPE c VALUE 'X',
found TYPE sy-subrc VALUE '00', " Return-Code
rc_ok TYPE sy-subrc VALUE '00', " Return-Code
off TYPE sy-subrc VALUE '00', " return code
false TYPE sy-subrc VALUE '00', " boolean
true TYPE sy-subrc VALUE '01', " boolean
END OF gc.
DATA: BEGIN OF gv,
former_error LIKE sy-marky, " Fehlermeldung bereits
file_open(1), " Flag open file
rec_length TYPE i, " record length
matnr TYPE mara-matnr, " material
repid TYPE syst-repid,
retco TYPE sy-subrc,
END OF gv.
SELECTION-SCREEN: BEGIN OF BLOCK a1 WITH FRAME TITLE text-002.
SELECT-OPTIONS:
s_matnr FOR mara-matnr,
s_mtart FOR mara-mtart.
PARAMETER: gp_size TYPE i DEFAULT 200.
SELECTION-SCREEN: END OF BLOCK a1.
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.
gv-repid = sy-repid.
PERFORM get_mara_data
TABLES
gt_text_output_line
USING
s_matnr[]
s_mtart[]
gp_size
CHANGING
gv-retco
.
PERFORM get_mat_text
TABLES
gt_makt
gt_text_output_line
gt_thead
gt_linetab
USING
gc
gv-retco
CHANGING
gv_text_output_line
gv_makt
.
PERFORM data_output
TABLES
gt_fieldcat
gt_text_output_line
USING
gs_layout
gc
CHANGING
gv_repid
gv_fieldcat
gv
.
END-OF-SELECTION.
*&----
*
*& Form get_mara_data
*&----
*
Materialdaten lesen
*----
*
<->ct_gt_text_output_line Ausgabetabelle
-->it_s_matnr Parameter Materialnummer
-->it_s_mtart Parameter Materialart
-->if_gp_size Parameter Anzahl Materialnummern
*----
*
FORM get_mara_data TABLES ct_gt_text_output_line STRUCTURE
gv_text_output_line
USING it_s_matnr LIKE s_matnr[]
it_s_mtart LIKE s_mtart[]
if_gp_size
CHANGING if_gv-retco. "#EC *
MARA in die Übergabestruktur einlesen
SELECT matnr begru
FROM mara UP TO if_gp_size ROWS
APPENDING CORRESPONDING FIELDS OF TABLE ct_gt_text_output_line
WHERE matnr IN it_s_matnr
AND mtart IN it_s_mtart.
if_gv-retco = sy-subrc.
ENDFORM. " get_mara_data
*&----
*
*& Form get_mat_text
*&----
*
Kurz- und Langtexte zum Material lesen
*----
*
<->ct_gt_makt Materialkurztexte
<->ct_gt_text_output_line Ausgabetabelle
<->ct_gt_thead Kopftabelle für ALV
<->ct_gt_linetab Zeilentabelle für ALV
-->if_gc Globale Konstanten
<--cf_gv_text_output_line Struktur Ausgabetabelle
<--cf_gv_makt Struktru Materialkurztexte
*----
*
FORM get_mat_text TABLES ct_gt_makt STRUCTURE makt
ct_gt_text_output_line STRUCTURE
gv_text_output_line
ct_gt_thead STRUCTURE thead
ct_gt_linetab STRUCTURE tline
USING if_gc LIKE gc
if_gv-retco
CHANGING cf_gv_text_output_line LIKE
gv_text_output_line
cf_gv_makt LIKE gv_makt
.
IF if_gv-retco = if_gc-found.
Materialkurztexte in alles Sprachen einlesen
SELECT * FROM makt APPENDING TABLE ct_gt_makt
FOR ALL ENTRIES IN ct_gt_text_output_line
WHERE matnr = ct_gt_text_output_line-matnr.
Kurztexte in die sprachabhängigen Felder bringen
LOOP AT ct_gt_text_output_line INTO cf_gv_text_output_line.
LOOP AT ct_gt_makt INTO cf_gv_makt
WHERE matnr = cf_gv_text_output_line-matnr.
CASE cf_gv_makt-spras.
WHEN if_gc-de.
cf_gv_text_output_line-maktx_de = cf_gv_makt-maktx.
WHEN if_gc-en.
cf_gv_text_output_line-maktx_en = cf_gv_makt-maktx.
WHEN if_gc-fr.
cf_gv_text_output_line-maktx_fr = cf_gv_makt-maktx.
WHEN if_gc-es.
cf_gv_text_output_line-maktx_es = cf_gv_makt-maktx.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
Langtexte mit einem Funktionsbaustein holen und die Ausgabetabelle
bringen
LANGTEXT DE
CLEAR ct_gt_thead[].
ct_gt_thead-tdobject = if_gc-tdobject_mat.
ct_gt_thead-tdname = cf_gv_text_output_line-matnr.
ct_gt_thead-tdid = if_gc-tdid_grun.
ct_gt_thead-tdspras = if_gc-de.
CALL FUNCTION 'TEXT_READ'
EXPORTING
i_header = ct_gt_thead
i_readonly = if_gc-on
IMPORTING
e_header = ct_gt_thead
TABLES
t_lines = ct_gt_linetab[]
EXCEPTIONS
notfound = 1.
IF sy-subrc = if_gc-found.
READ TABLE ct_gt_linetab INDEX 1.
cf_gv_text_output_line-ltxt40_de =
ct_gt_linetab-tdline.
ENDIF.
LANGTEXT EN
CLEAR ct_gt_thead[].
ct_gt_thead-tdobject = if_gc-tdobject_mat.
ct_gt_thead-tdname = cf_gv_text_output_line-matnr.
ct_gt_thead-tdid = if_gc-tdid_grun.
ct_gt_thead-tdspras = if_gc-en.
CALL FUNCTION 'TEXT_READ'
EXPORTING
i_header = ct_gt_thead
i_readonly = if_gc-on
IMPORTING
e_header = ct_gt_thead
TABLES
t_lines = ct_gt_linetab[]
EXCEPTIONS
notfound = 1.
IF sy-subrc = if_gc-found.
READ TABLE ct_gt_linetab INDEX 1.
cf_gv_text_output_line-ltxt40_en =
ct_gt_linetab-tdline.
ENDIF.
LANGTEXT FR
CLEAR ct_gt_thead[].
ct_gt_thead-tdobject = if_gc-tdobject_mat.
ct_gt_thead-tdname = cf_gv_text_output_line-matnr.
ct_gt_thead-tdid = if_gc-tdid_grun.
ct_gt_thead-tdspras = if_gc-fr.
CALL FUNCTION 'TEXT_READ'
EXPORTING
i_header = ct_gt_thead
i_readonly = if_gc-on
IMPORTING
e_header = ct_gt_thead
TABLES
t_lines = ct_gt_linetab[]
EXCEPTIONS
notfound = 1.
IF sy-subrc = if_gc-found.
READ TABLE ct_gt_linetab INDEX 1.
cf_gv_text_output_line-ltxt40_fr =
ct_gt_linetab-tdline.
ENDIF.
LANGTEXT ES
CLEAR ct_gt_thead[].
ct_gt_thead-tdobject = if_gc-tdobject_mat.
ct_gt_thead-tdname = cf_gv_text_output_line-matnr.
ct_gt_thead-tdid = if_gc-tdid_grun.
ct_gt_thead-tdspras = if_gc-es.
CALL FUNCTION 'TEXT_READ'
EXPORTING
i_header = ct_gt_thead
i_readonly = if_gc-on
IMPORTING
e_header = ct_gt_thead
TABLES
t_lines = ct_gt_linetab[]
EXCEPTIONS
notfound = 1.
IF sy-subrc = if_gc-found.
READ TABLE ct_gt_linetab INDEX 1.
cf_gv_text_output_line-ltxt40_es =
ct_gt_linetab-tdline.
ENDIF.
MODIFY ct_gt_text_output_line FROM cf_gv_text_output_line.
ENDLOOP.
ENDIF.
ENDFORM. " get_mat_text
*&----
*
*& Form data_output
*&----
*
Daten mit ALV ausgeben
*----
*
<->ct_GT_FIELDCAT Feldkatalog für ALV
<->ct_gt_text_output_line Ausgabetabelle
-->P_GS_LAYOUT Layout für ALV
-->if_gc Globale Konstanten
<--cf_GV_REPID Zur Zeit aufgerufener Reportname
<--cf_gv_fieldcat Struktur Feldkatalog
<--cf_gv Globale Variablen
*----
*
FORM data_output TABLES ct_gt_fieldcat STRUCTURE gv_fieldcat
ct_gt_text_output_line STRUCTURE
gv_text_output_line
USING if_gs_layout LIKE gs_layout
if_gc LIKE gc
CHANGING cf_gv_repid LIKE gv_repid
cf_gv_fieldcat LIKE gv_fieldcat
cf_gv LIKE gv.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = GV-REPID
I_STRUCTURE_NAME = 'CT_GT_TEXT_OUTPUT_LINE'
CHANGING
CT_FIELDCAT = CT_GT_FIELDCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
. "#EC *
PERFORM fieldcatbuild TABLES ct_gt_fieldcat.
gs_layout-colwidth_optimize = if_gc-on.
LOOP AT ct_gt_fieldcat INTO cf_gv_fieldcat
WHERE fieldname = 'CHANGE_IND'.
cf_gv_fieldcat-no_out = 'X'.
MODIFY ct_gt_fieldcat FROM cf_gv_fieldcat.
ENDLOOP.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = ct_gt_fieldcat[]
is_layout = if_gs_layout
TABLES
t_outtab = ct_gt_text_output_line
EXCEPTIONS
program_error = 1
OTHERS = 2.
cf_gv-retco = sy-subrc.
IF sy-subrc <> if_gc-found.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " data_output
*&----
*
*& Form fieldcatbuild
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM fieldcatbuild TABLES ct_gt_fieldcat_in STRUCTURE gv_fieldcat.
DATA: wa_fieldcat_in TYPE slis_fieldcat_alv.
CLEAR wa_fieldcat_in.
wa_fieldcat_in-fieldname = 'MATNR'.
wa_fieldcat_in-seltext_m = 'Material No'.
wa_fieldcat_in-outputlen = 18.
APPEND wa_fieldcat_in TO ct_gt_fieldcat_in.
CLEAR wa_fieldcat_in.
wa_fieldcat_in-fieldname = 'BEGRU'.
wa_fieldcat_in-seltext_m = 'Authorization Group'.
wa_fieldcat_in-outputlen = 4.
APPEND wa_fieldcat_in TO ct_gt_fieldcat_in.
CLEAR wa_fieldcat_in.
wa_fieldcat_in-fieldname = 'MAKTX_EN'.
wa_fieldcat_in-seltext_m = 'Material Desc - E'.
wa_fieldcat_in-outputlen = 40.
APPEND wa_fieldcat_in TO ct_gt_fieldcat_in.
CLEAR wa_fieldcat_in.
wa_fieldcat_in-fieldname = 'MAKTX_DE'.
wa_fieldcat_in-seltext_m = 'Material Desc - D'.
wa_fieldcat_in-outputlen = 40.
APPEND wa_fieldcat_in TO ct_gt_fieldcat_in.
CLEAR wa_fieldcat_in.
wa_fieldcat_in-fieldname = 'MAKTX_FR'.
wa_fieldcat_in-seltext_m = 'Material Desc - F'.
wa_fieldcat_in-outputlen = 40.
APPEND wa_fieldcat_in TO ct_gt_fieldcat_in.
CLEAR wa_fieldcat_in.
wa_fieldcat_in-fieldname = 'MAKTX_ES'.
wa_fieldcat_in-seltext_m = 'Material Desc - S'.
wa_fieldcat_in-outputlen = 40.
APPEND wa_fieldcat_in TO ct_gt_fieldcat_in.
CLEAR wa_fieldcat_in.
wa_fieldcat_in-fieldname = 'LTXT40_EN'.
wa_fieldcat_in-seltext_m = 'Basic data text - E'.
APPEND wa_fieldcat_in TO ct_gt_fieldcat_in.
CLEAR wa_fieldcat_in.
wa_fieldcat_in-fieldname = 'LTXT40_DE'.
wa_fieldcat_in-seltext_m = 'Basic data text - D'.
APPEND wa_fieldcat_in TO ct_gt_fieldcat_in.
CLEAR wa_fieldcat_in.
wa_fieldcat_in-fieldname = 'LTXT40_FR'.
wa_fieldcat_in-seltext_m = 'Basic data text - F'.
APPEND wa_fieldcat_in TO ct_gt_fieldcat_in.
CLEAR wa_fieldcat_in.
wa_fieldcat_in-fieldname = 'LTXT40_ES'.
wa_fieldcat_in-seltext_m = 'Basic data text - S'.
APPEND wa_fieldcat_in TO ct_gt_fieldcat_in.
ENDFORM. " fieldcatbuild
Thanks
Ankur Sharma
‎2008 Nov 12 8:50 AM
Hi zakir ,
below i am pasting a samll code ...you can just try .
TYPE-POOLS : abap.
TABLES: pa0001 , pa0003 .
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,<dyn_wa>,<dyn_field>.
DATA: dy_table TYPE REF TO data,
dy_line TYPE REF TO data .
DATA : xfc TYPE lvc_s_fcat,
ifc TYPE lvc_t_fcat.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s11 .
SELECT-OPTIONS:s_pernr FOR pa0003-pernr .
SELECT-OPTIONS:s_orgeh FOR pa0001-orgeh .
SELECT-OPTIONS:s_date FOR sy-datum .
SELECTION-SCREEN END OF BLOCK b1.
DATA: BEGIN OF it_itab OCCURS 0 ,
depid LIKE pa0001-orgeh ,
pernr LIKE pa0003-pernr,
subty LIKE pa9260-subty,
date LIKE sy-datum,
END OF it_itab .
DATA: BEGIN OF it_date OCCURS 0,
date TYPE sy-datum ,
len TYPE i,
ty TYPE c,
END OF it_date .
SELECT a~orgeh
b~pernr
b~subty
b~begda
FROM pa0001 AS a INNER JOIN pa9260 AS b
ON apernr = bpernr
INTO TABLE it_itab
WHERE a~orgeh IN s_orgeh AND
a~pernr IN s_pernr AND
b~begda IN s_date.
WHILE s_date-low <= s_date-high.
it_date-date = s_date-low .
it_date-len = 8 .
it_date-ty = 'c'.
APPEND it_date.
s_date-low = s_date-low + 1.
ENDWHILE.
PERFORM get_structure.
PERFORM create_dynamic_itab.
PERFORM proc_data .
FORM get_structure.
DATA : idetails TYPE abap_compdescr_tab,
xdetails TYPE abap_compdescr.
xfc-fieldname = 'pernr' . " XDETAILS-NAME .
xfc-datatype = 'c'. "XDETAILS-TYPE_KIND.
xfc-inttype = 'c'. "XDETAILS-TYPE_KIND.
xfc-intlen = 8 . "XDETAILS-LENGTH.
APPEND xfc TO ifc.
xfc-fieldname = 'empname' . " XDETAILS-NAME .
xfc-datatype = 'c'. "XDETAILS-TYPE_KIND.
xfc-inttype = 'c'. "XDETAILS-TYPE_KIND.
xfc-intlen = 30 . "XDETAILS-LENGTH.
APPEND xfc TO ifc.
LOOP AT it_date .
CLEAR xfc.
xfc-fieldname = it_date-date . " XDETAILS-NAME .
xfc-datatype = it_date-ty. "XDETAILS-TYPE_KIND.
xfc-inttype = it_date-ty. "XDETAILS-TYPE_KIND.
xfc-intlen = it_date-len . "XDETAILS-LENGTH.
APPEND xfc TO ifc.
ENDLOOP.
ENDFORM. "get_structure
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>.
ENDFORM. "create_dynamic_itab
FORM proc_data .
DATA: l_tabix TYPE sy-tabix .
SORT it_itab BY depid .
LOOP AT it_itab .
READ TABLE it_date WITH KEY date = it_itab-date .
l_tabix = sy-tabix.
IF sy-subrc = 0 .
ASSIGN COMPONENT l_tabix OF STRUCTURE dy_table TO <dyn_field>.
ENDIF.
ENDLOOP.
ENDFORM. " PROC_DATA
Thanks and Regards
Priyank dixit