‎2008 Aug 11 8:08 AM
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.
‎2008 Aug 11 8:14 AM
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
‎2008 Aug 11 8:24 AM
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
‎2008 Aug 11 1:51 PM
tried this..logical error....all fields r updated in single column @ no new column created.........
‎2008 Aug 11 8:28 AM
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.