12-02-2005 3:19 AM
Hello,
I am having an ALV list as follows:
Material Description M112005 M112004 M122005 M122004
XXXXX ZZZZZZZZZZZ 20 18 20 19
Now I want to format the ALV layout as below:
Material Description November December
2005 2004 2005 2004
XXXXX ZZZZZZZZZZZ 20 18 20 19
Hope I have made myself clear.
How to do it?
Thanks and Regards,
Pankaj
12-02-2005 3:42 AM
is the layout constant or it varies
r u storing this data in any variables
M112005 M112004 M122005 M122004
12-02-2005 3:44 AM
Hello,
My ALV is constant and all the data are stored in internal table.
Regards,
Pankaj
12-02-2005 3:48 AM
Pankaj,
Are you trying to merge cells like in Excel. You want one heading 'November' and under that two more headings '2004' and '2005'.
If this is the case, I don't think it will be possible.
Regards,
Ravi
12-02-2005 4:26 AM
assume itab-date1 = M112005
assume itab-date2 = M112004
assume itab-date3 = M122005
assume itab-date4 = M112004
data : begin of itab1 occurs 0,
mon(2) type c, " example 11
mon_desc(15) type c, "example november
end of itab1.
loop at itab.
l_mon1 = itab-date1+1(2).
l_year1 = itab-date1+3(4).
itab1-mon = l_mon1.
append itab1.
clear itab1.
l_mon2 = itab-date2+1(2).
l_year2 = itab-date2+3(4).
itab1-mon = l_mon2.
append itab1.
clear itab1.
l_mon3 = itab-date3+1(2).
l_year3 = itab-date3+3(4).
itab1-mon = l_mon3.
append itab1.
clear itab1.
l_mon4 = itab-date4+1(2).
l_year4 = itab-date4+3(4).
itab1-mon = l_mon3.
append itab1.
clear itab1.
delete adjacent duplicates from itab1 comparing mon.
write one perform here to get month description for given month using CASE statement and store in itab1-mon_desc.
loop at itab1.
if l_mon_desc1 is initial.
l_mon_desc1 = itab1-mon_desc.
else.
l_mon_desc2 = itab1-mon_desc.
endif.
endloop.
write : 'material description' ,l_mon_desc1 , l_mon_desc2.
write : l_year1 ,l_year2 ,l_year3 ,l_year4 .
just assuming the layout what u had given
12-02-2005 4:47 AM
I think you are just trying to change the column headings from M112005->November 2005, M112004->November 2004, M122005->December 2005, M122004->December 2004. To change the headings you can modify the field catalog. Try something like this:
...........................
PERFORM change_headings
USING
*.. Table name
'?' "put your table name i here!!
*.. Fieldname
'M112005'
*.. Short...
'NOV 2005'
*.. Long
'November 2005'
*.. Medium
'November 2005'
*.. Dictionary Heading
'November 2005'.
*
&----
*& Form change_headings
&----
Changes the short, long, medium and and dictionary heading
fields for a given output field.
----
-->us_fieldname name of field to deal with
-->us_short text for short heading
-->us_long text for long heading
-->us_medium text for medium heading
-->us_heading text for dictionary heading
----
FORM change_headings
USING
us_tabname TYPE tabname
us_fieldname TYPE fieldname
us_short TYPE scrtext_s
us_long TYPE scrtext_l
us_medium TYPE scrtext_m
us_heading TYPE reptext.
*.. Short...
PERFORM set_fieldcat_attribute
USING
us_tabname
us_fieldname
'seltext_S'
us_short
t_fieldcat.
*.. Long
PERFORM set_fieldcat_attribute
USING
us_tabname
us_fieldname
'seltext_L'
us_long
t_fieldcat.
*.. Medium
PERFORM set_fieldcat_attribute
USING
us_tabname
us_fieldname
'seltext_M'
us_medium
t_fieldcat.
*.. Dictionary Heading
PERFORM set_fieldcat_attribute
USING
us_tabname
us_fieldname
'reptext_ddic'
us_heading
t_fieldcat.
ENDFORM. " change_headings
*
&----
*& Form SET_fieldCAT_attribute
&----
sets a fieldcat attribute,
e.g. can hide a field in ALV output, change title, etc
----
-->pv_table table name
-->pv_field field name
-->pv_attrib name of attribute to be changed
-->pv_newval new value to be put in attribute
-->pt_fieldcat field catlog
----
FORM set_fieldcat_attribute
USING pv_table TYPE tabname
pv_field TYPE fieldname
pv_attrib TYPE fieldname
pv_newval TYPE any
pt_fieldcat TYPE slis_t_fieldcat_alv
.
FIELD-SYMBOLS: <attrib>,
<fieldcat> TYPE slis_fieldcat_alv.
ensure working in upper case
TRANSLATE pv_table TO UPPER CASE.
ensure working in upper case
TRANSLATE pv_field TO UPPER CASE.
find the entry matching the input fieldname
READ TABLE pt_fieldcat ASSIGNING <fieldcat>
WITH KEY fieldname = pv_field tabname = pv_table.
if found..
IF sy-subrc = 0.
*.. set up the full name of field
CONCATENATE '<FIELDCAT>-' pv_attrib INTO w_field_name.
*.. point a field-symbol to it
ASSIGN (w_field_name) TO <attrib>.
*.. fill it with the input new value
<attrib> = pv_newval.
ENDIF.
ENDFORM. " set_fieldcat_attribute
12-02-2005 4:51 AM
Hi Pankaj,
1. What u are asking for is CROSS-TAB query.
2. ALV does not support this kind of format.
(Crystal Report supports this kind of reports)
3. However this data in alv
can be transferred to EXCEL in PIVOT format
( or pivot can be used in excel after transferring raw data)
4. As far as i know, without applying some logic
to the internal table and its conents,
it is not directly possible.
Regards,
Amit M.