Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

dynamic internal table..

Former Member
0 Likes
487

Hi iam sujay,

i ve an requirement to list out the quantity sold to customers.....but i need to list out the columns dynamically ie the column should contain customer only if sale done to him for the given period.for example - if sale is done for 15 customer for the given period then i need to have 15 +1(column for material) columns...if sale done for 30 customer then i need to have 30 + 1 columns in my report..

i ve tried this call method cl_alv_table_create=>create_dynamic_table and

created dynamic table but i cant move datas into the dynamic table as per my requirement..how is it possible? plz help me.............

regards,

sujay Pradeesh.

4 REPLIES 4
Read only

Former Member
0 Likes
465

Hi Sujay,

Check these links

http://www.erpgenie.com/abap/code/abap40.htm

Mohinder

Edited by: Mohinder Singh Chauhan on Aug 11, 2008 9:14 AM

Read only

Former Member
0 Likes
465

Hi

refer the below code which will help u

REPORT ztest_del .

TYPE-POOLS: slis.

DATA:

  • Customer

BEGIN OF i_kna1 OCCURS 0,

kunnr LIKE kna1-kunnr,

END OF i_kna1,

  • Sales Data

BEGIN OF i_vbak OCCURS 0,

vbeln LIKE vbak-vbeln,

kunnr LIKE vbak-kunnr,

END OF i_vbak,

  • Final table

BEGIN OF i_final OCCURS 0,

kunnr LIKE vbak-kunnr,

vbeln TYPE string,

END OF i_final,

  • Counter for sales orders

BEGIN OF i_counter OCCURS 0,

kunnr LIKE kna1-kunnr,

counter TYPE i,

END OF i_counter.

  • Variables

DATA:

int_fcat TYPE slis_t_fieldcat_alv,

wa_it_fldcat TYPE lvc_s_fcat,

it_fldcat TYPE lvc_t_fcat,

new_table TYPE REF TO data,

new_line TYPE REF TO data,

i_count TYPE i,

fs_layout TYPE lvc_s_layo,

wa_afield TYPE slis_fieldcat_alv,

i_fieldcat TYPE

slis_t_fieldcat_alv.

  • Field Symbols

FIELD-SYMBOLS:

<dyn_table> TYPE STANDARD TABLE,

<dyn_wa> ,

<fs> .

  • Start of Selection

START-OF-SELECTION.

SELECT kunnr FROM kna1

INTO TABLE i_kna1

UP TO 100 ROWS.

IF sy-subrc EQ 0.

SELECT vbeln kunnr

FROM vbak

INTO TABLE i_vbak

FOR ALL ENTRIES IN i_kna1

WHERE kunnr EQ i_kna1-kunnr.

ENDIF.

  • End of selection

END-OF-SELECTION.

LOOP AT i_vbak.

MOVE: i_vbak-kunnr TO i_final-kunnr,

i_vbak-vbeln TO i_final-vbeln.

APPEND i_final.

ENDLOOP.

SORT i_final.

LOOP AT i_final.

i_count = i_count + 1.

AT END OF kunnr.

MOVE:i_final-kunnr TO i_counter-kunnr,

i_count TO i_counter-counter.

APPEND i_counter.

CLEAR i_count.

CLEAR i_counter.

ENDAT.

ENDLOOP.

SORT i_counter BY counter DESCENDING.

PERFORM build_catlog.

PERFORM build_table.

PERFORM build_cat.

  • CALL SCREEN 100.

&----


*& Form BUILD_CATLOG

&----


  • text

----


FORM build_catlog.

DATA: i_tabix TYPE i,

i_contr TYPE n,

i_flag TYPE c,

i_ctr TYPE i.

READ TABLE i_counter INDEX 1.

i_ctr = i_counter-counter MOD 11.

LOOP AT i_final WHERE kunnr EQ i_counter-kunnr.

IF i_counter-counter LT '11'.

CONCATENATE 'VBELN' '1' INTO wa_it_fldcat-fieldname .

wa_it_fldcat-outputlen = 128.

wa_it_fldcat-datatype = 'CHAR'.

APPEND wa_it_fldcat TO it_fldcat .

ELSE.

i_tabix = sy-tabix MOD 11.

IF i_tabix EQ 0.

i_contr = i_contr + 1.

CONCATENATE 'VBELN' i_contr INTO wa_it_fldcat-fieldname .

wa_it_fldcat-outputlen = 128.

wa_it_fldcat-datatype = 'CHAR'.

APPEND wa_it_fldcat TO it_fldcat .

ENDIF.

ENDIF.

AT END OF kunnr.

IF i_ctr NE 0.

i_contr = i_contr + 1.

CONCATENATE 'VBELN' i_contr INTO wa_it_fldcat-fieldname .

wa_it_fldcat-outputlen = 128.

wa_it_fldcat-datatype = 'CHAR'.

APPEND wa_it_fldcat TO it_fldcat .

ENDIF.

MOVE 'KUNNR' TO wa_it_fldcat-fieldname .

APPEND wa_it_fldcat TO it_fldcat .

ENDAT.

ENDLOOP.

  • Create dynamic internal table and assign to FS

CALL METHOD cl_alv_table_create=>create_dynamic_table

EXPORTING

it_fieldcatalog = it_fldcat

IMPORTING

ep_table = new_table.

ASSIGN new_table->* TO <dyn_table>.

  • Create dynamic work area and assign to FS

CREATE DATA new_line LIKE LINE OF <dyn_table>.

ASSIGN new_line->* TO <dyn_wa>.

ENDFORM. "BUILD_CATLOG

&----


*& Form BUILD_TABLE

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM build_table .

DATA: w_comp TYPE string,

w_sytabix TYPE i,

i_contr TYPE n ,

i_flag TYPE c,

i_ctr TYPE i,

i_vbeln(20) TYPE c,

i_tabix TYPE i.

SORT i_final BY kunnr.

FREE <dyn_wa>.

LOOP AT i_final.

AT NEW kunnr.

READ TABLE i_counter WITH KEY kunnr = i_final-kunnr.

IF sy-subrc EQ 0.

i_tabix = 1.

i_ctr = i_counter-counter MOD 11.

ENDIF.

ENDAT.

IF i_counter-counter LT '11'.

CONCATENATE w_comp i_final-vbeln INTO w_comp SEPARATED BY space.

ELSE.

w_sytabix = i_tabix MOD 11.

CONCATENATE w_comp i_final-vbeln INTO w_comp SEPARATED BY space.

IF w_sytabix EQ 0.

i_contr = i_contr + 1.

CONCATENATE 'VBELN' i_contr INTO i_vbeln .

ASSIGN COMPONENT i_vbeln OF STRUCTURE <dyn_wa> TO <fs>.

<fs> = w_comp.

CLEAR w_comp.

ENDIF.

ENDIF.

AT END OF kunnr.

IF i_counter-counter LT '11'.

CONCATENATE 'VBELN' '1' INTO i_vbeln .

ASSIGN COMPONENT i_vbeln OF STRUCTURE <dyn_wa> TO <fs>.

<fs> = w_comp.

CLEAR w_comp.

else.

IF i_ctr NE '0'.

i_contr = i_contr + 1.

CONCATENATE 'VBELN' i_contr INTO i_vbeln .

ASSIGN COMPONENT i_vbeln OF STRUCTURE <dyn_wa> TO <fs>.

<fs> = w_comp.

CLEAR w_comp.

ENDIF.

ENDIF.

ASSIGN COMPONENT 'KUNNR' OF STRUCTURE <dyn_wa> TO <fs>.

<fs> = i_final-kunnr.

APPEND <dyn_wa> TO <dyn_table>.

CLEAR: <dyn_wa>, i_counter, w_comp,i_contr.

ENDAT.

i_tabix = i_tabix + 1.

ENDLOOP.

ENDFORM. " BUILD_TABLE

&----


*& Form build_cat

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM build_cat .

CLEAR: wa_afield.

REFRESH i_fieldcat.

LOOP AT it_fldcat INTO wa_it_fldcat.

CLEAR wa_afield.

wa_afield-fieldname = wa_it_fldcat-fieldname.

wa_afield-seltext_l = wa_it_fldcat-fieldname.

wa_afield-outputlen = wa_it_fldcat-outputlen.

wa_afield-outputlen = wa_it_fldcat-datatype.

APPEND wa_afield TO i_fieldcat.

ENDLOOP.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

it_fieldcat = i_fieldcat

TABLES

t_outtab = <dyn_table>

EXCEPTIONS

program_error = 1 .

ENDFORM. " build_cat

Read only

0 Likes
465

tried this..logical error....all fields r updated in single column @ no new column created.........

Read only

Former Member
0 Likes
465

Hi Sujay,

Let us assume that you have a program which has a

DATE range in the selection screen.

YOu should create an internal table with number of fields = number of dates in between start date and end date in the selection screen.

What will you do?

Here we do not know how many days will be there.

Check the code below:

REPORT Ztest .

DATA: d_ref TYPE REF TO data,

d_ref2 TYPE REF TO data,

i_alv_cat TYPE TABLE OF lvc_s_fcat,

ls_alv_cat LIKE LINE OF i_alv_cat.

TYPES: tabname LIKE dcobjdef-name ,

fieldname LIKE dcobjdef-name,

desc LIKE dntab-fieldtext.

Select-options: s_date for sy-datum. -


> Input date range

DATA: BEGIN OF itab OCCURS 0.

  • Define your internal table fields

DATA: END OF itab.

ranges: r_date type table of s_date,

wa_date like line of r_date.

FIELD-SYMBOLS : <f_fs> TYPE table,

<f_fs1> TYPE table,

<f_fs2> TYPE ANY,

<f_fs3> TYPE ANY,

<f_fs4> type any,

<f_field> TYPE ANY.

loop at s_date.

wa_date-sign = 'I'.

wa_date-option = 'EQ'.

wa_date-low = s_date.

wa_date-high = s_date.

append wa_date to r_date.

endloop.

REFRESH itab.

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.

loop at r_date into wa_date.

ls_alv_cat-fieldname = wa_date-fieldname.

ls_alv_cat-ref_field = wa_Date-fieldname.

ls_alv_cat-seltext = wa_date-fieldtext.

ls_alv_cat-reptext = wa_date-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>. -


> Dynamic table creation with fields of the table.

Regards,

Ranveer.