‎2005 Jul 25 9:59 AM
Hello all,
I'm using method
cl_alv_table_create=>create_dynamic_table
to create an internal table (depending on the entered operation concern). Im' assigning the table to a field symbol. The data can be selected into this table reference (works fine). Unfortunately I'm not able to read the value fields (Type P) anymore. I guess they are packed. I tried to use the unpack command, but it doesn't work.
Can someone help me
Thank you
Dieter
Dieter
‎2005 Jul 25 10:44 AM
Hello Dieter,
First you create a dyn table :
call method ..
assign it_dyn_table->* to <it_dyn_table>
Second you assign a structure :
create data is_tmp like line of <it_dyn_table>.
assign is_tmp->* to <is_dyn_table>.Now, you have : a structure, an internal table and a fieldcatalog.
So you could play :
loop at <it_dyn_table> into <is_dyn_table>.
loop at it_fieldcat into is_fieldcat.
assign component is_fieldcat-fielname
of structure <is_dyn_table>
to <field>.
* Now <field> contain the good value. (field is type any)
endloop.
endloop.I hope that will help for your problem.
Regards
Frédéric
‎2005 Jul 25 12:25 PM
Hello Frederic,
I tried your coding, the loop and the assignment works fine. But I'm still not able to process the Packed value
The compoent 'ABSMG' of my structur contains the value
' 5720=000000000000000<000'
Assigning this component to a fied symbol of type any it contains: ' 5720=000000000000000<000'. When i try to use the unpack command on this field i receive the value
'33333333333333333333333333303'.
Any idea ?
Thank you
Dieter
‎2005 Jul 25 12:58 PM
try this.
field-symbols: <outtab> type any table,
<l_line> type any,
<l_field> type any.
data: new_table type ref to data.
data: new_line type ref to data.
call method cl_alv_table_create=>create_dynamic_table
exporting
it_fieldcatalog = it_fieldcat
importing
ep_table = new_table.
assign new_table->* to <outtab>.
create data new_line like line of <outtab>.
assign new_line->* to <l_line> .
loop at <outtab> assigning <l_line>.
write:/ <l_line> .
endloop .
if you go into debugging and see, even if <outtab> has a type p field ,the <l_line> which is like line of <outtab>, all the type p fields are converted to type c fields . looks like this is how SAP handles it internally.
Regards
Raja
‎2005 Jul 26 8:07 AM
Hi Dieter,
your problem looks strange, when you debug this program, the internal table contain good values ?
Maybe your problem is the type of the data that contain ABSMG. How did you set the type in the fieldcatalog ?
‎2005 Jul 26 8:25 AM
Hi Dieter,
you've to convert all p-fields to c-fields .
dynamically you can try that :
data charfield type string.
describe field <fs> type t.
if t = 'P'.
write <fs> to charfield.
...regards Andreas
‎2005 Jul 26 4:24 PM
Hi Frederic,
The fieldcatalog is set up by using FM 'REUSE_ALV_FIELDCATALOG_MERGE'. Here I pass the CE1XXXX(operating concern) table. Result: I receive a fieldcatalog of type SLIS_T_FIELDCAT_ALV.
Now I convert the fieldcatalog to another table of type
LVC_T_FCAT, by using a statement like
"move-corresponding gs_fcat to gs_fieldcat."
"append gs_fieldcat to gt_fieldcat".
After this I create the table by using method
cl_alv_table_create=>create_dynamic_table.
Now I assign the table to a field-symbol of type ref to data.( assign gt_ce1->* to <fs_1table>)
The select statement looks as follows
select * from (gv_tabnam)
into table <fs_1table>.
Checking <fs_1table> in the debugger, it contains the records, but all value fields (type p) are packed.
I tried to change the data type to type c, before building the fieldcatalogue,-> dump in FM
I also tried to use write to character field ... but it doesn't work.
‎2005 Jul 26 6:31 PM
After you field catalog is built, loop thru it and overwrite the "TYPE P" fields with type "C" also increase the field length a little.
Or if you problem is that you are accessing the entire record containing a type P, you can access just the fields one by one. This will allow your TYPE P field to look as it should. Check out the sample program below. Pay close attention to the loop after the form BUILD_REPORT.
report zrich_0003
no standard page heading.
type-pools: slis.
field-symbols: <dyn_table> type standard table,
<dyn_wa>,
<dyn_field>.
data: alv_fldcat type slis_t_fieldcat_alv,
it_fldcat type lvc_t_fcat.
selection-screen begin of block b1 with frame title text-001.
parameters: p_check type c.
selection-screen end of block b1.
start-of-selection.
perform build_dyn_itab.
perform build_report.
* Write out your dynamic internal table - one field at a time.
<b> loop at <dyn_table> into <dyn_wa>.
do.
assign component sy-index of structure <dyn_wa> to <dyn_field>.
if sy-subrc <> 0.
exit.
endif.
write:/ <dyn_field>.
enddo.
endloop.</b>
************************************************************************
* Build_dyn_itab
************************************************************************
form build_dyn_itab.
data: index(3) type c.
data: new_table type ref to data,
new_line type ref to data,
wa_it_fldcat type lvc_s_fcat.
* Create fields
clear index.
do 5 times.
index = sy-index.
clear wa_it_fldcat.
concatenate 'Field' index into
wa_it_fldcat-fieldname .
condense wa_it_fldcat-fieldname no-gaps.
wa_it_fldcat-datatype = 'CHAR'.
wa_it_fldcat-intlen = 5.
append wa_it_fldcat to it_fldcat .
enddo.
* Add a field that is TYPE P
clear wa_it_fldcat.
wa_it_fldcat-fieldname = 'FIELDP' .
wa_it_fldcat-datatype = 'CURR'.
wa_it_fldcat-intlen = 10.
append wa_it_fldcat to it_fldcat .
* 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.
*********************************************************************
* Form build_report
*********************************************************************
form build_report.
data: fieldname(20) type c.
data: fieldvalue(5) type c.
data: index(3) type c.
field-symbols: <fs1>.
* Create a record to add to table
do 5 times.
index = sy-index.
* Set up fieldname
concatenate 'FIELD' index into
fieldname .
condense fieldname no-gaps.
* Set up fieldvalue
concatenate 'FLD' index into
fieldvalue.
condense fieldvalue no-gaps.
assign component fieldname of structure <dyn_wa> to <fs1>.
<fs1> = fieldvalue.
enddo.
assign component 'FIELDP' of structure <dyn_wa> to <fs1>.
<fs1> = '1234.75'.
* Append to the dynamic internal table
append <dyn_wa> to <dyn_table>.
endform.
Regards.
Rich Heilman
Message was edited by: Rich Heilman
‎2006 Mar 15 9:43 AM
Hi,
I'm using your source code for creating and managing a dynamic table, but i have a problem:
I made differents fields with different length, but when my <dyn_table> is built, it has always fields type C and length 10 fixed.
Can i change this?
Thanks
‎2005 Jul 25 10:50 AM