Sorting on Field Symbols
Hi,
I have created ztable and table maintenance generator for the same. So its already generated code like
PROCESS BEFORE OUTPUT.
MODULE LISTE_INITIALISIEREN.
LOOP AT EXTRACT WITH CONTROL
TCTRL_YS014 CURSOR NEXTLINE.
MODULE LISTE_SHOW_LISTE.
ENDLOOP. etc....
Here EXTRACT Is a internal table of type ANY... Now i am getting records sorted by key fields of Z-table.
But I need Sort by some other fields.. So i am trying to sort EXTRACT but not able to...
Can anybody helpme on this..
Rayudu
Hi rayudu,
this process may help u.Please check.
FIELD-GROUPS: HEADER, ORDER, PRODUCT.
use insert statement to add the field to teh field-group which u want
to sort.
use extract statement to populate u r field-group.
And sort by field.
Thanks,
Vamsi
Similar Messages
-
How to use field-symbols in MODIFY ... TRANSPORTING and SORT
Hi,
I need to increase the performance of an abap report using the field-symbols. More exactly the code is the following.
TYPES:
BEGIN OF itab_structure.
INCLUDE STRUCTURE nameofstructure.
TYPES:
RECNO LIKE sy-tabix,
END OF itab_structure.
DATA:
itab TYPE STANDARD TABLE OF itab_structure
WITH HEADER LINE
WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 0.
SORT itab ASCENDING BY f1.
LOOP AT itab WHERE f1 = '10'.
itab-fn= value-n.
MODIFY itab
TRANSPORTING fx fy fz ft
WHERE f1 = c1_filed AND
f2 = c2_field.
ENDLOOP.
I need your suggestions in this kind of conversion or solution.
SORT itab ASCENDING BY f1 (<-- I don't know if in this case the better performances should be obtained using field symbols and in which way)
FIELD-SYMBOLS: <fs_itab_line> TYPE LINE OF itab.
LOOP AT itab ASSIGNING <fs_itab_line> WHERE
<fs_itab_line>-f1 = '10'.
MODIFY itab
TRANSPORTING fx fy fz ft
WHERE f1 = c1_filed AND
f2 = c2_field.
(I don't know if in this case the better performances should be obtained using field symbols and in which way)
ENDLOOP.
I wish to implement the field symbols or the better performance in terms of execution time in all my abap code, where it is possible.
Any suggestion will be well appreciated.
Thanks in advance for your kind support.
Regards,
GiovanniDear All,
I have appeciated your suggestions and I can conclude these points in my case:
1) The "sort" statement is not optimized in a different way using filed-symbols
2) The loop with "where" condition on a standard table is performed using filed-symbols
But ... my last point to investigate is about the statement MODIFY table TRANSPORTING f1, f2 WHERE conditions.
More exactly, in my code the execution logic of the abap code expects a global modification of the same table at the end of every (primary) loop, using the MODYFY statement.
In other words in my code I can locate two loops on the same table in the following logic:
LOOP AT table1 WHERE f1 = '10'. (#1)
updates to table1
set c1_filed, c2_filed
LOOP AT table1. (#2)
IF f1 = c1_filed AND
f2 = c2_filed.
table1-fx = 'x'.
table1-fy = 'y'.
table1-fz = 'z'.
table1-ft = 't'.
ENDIF.
MODIFY table1.
ENDLOOP. (#2)
ENDLOOP. (#1)
In better way (maybe more fast in terms of execution time) to modify a set of lines (MODIFY...TRANSPORTING...WHERE):
LOOP AT table1 WHERE f1 = '10'.
table1-fx= 'x'.
table1-fy= 'y'.
table1-fz= 'z'.
table1-ft= 't'.
MODIFY itab
TRANSPORTING fx fy fz ft
WHERE f1 = c1_filed AND
f2 = c2_field.
ENDLOOP.
My aim is to use field-symbols everywhere possible for speeding up the execution of my code,by maintaining this logic.
My proposal should be the following but I need your kind opinion.
FIELD-SYMBOLS: <fs_#1_line> TYPE LINE OF table1.
FIELD-SYMBOLS: <fs_#2_line> TYPE LINE OF table1.
LOOP AT table1 WHERE f1 = '10' ASSIGNING <fs_#1_line>. (#1)
updates to table1
set c1_filed, c2_filed
LOOP AT table1 ASSIGNING <fs_#2_line>. (#2)
IF <fs_#2_line>-f1 = c1_filed AND
<fs_#2_line>-f2 = c2_filed.
<fs_#2_line>-fx = 'x'.
<fs_#2_line>-fy = 'y'.
<fs_#2_line>-fz = 'z'.
<fs_#2_line>-ft = 't'.
ENDIF.
ENDLOOP. (#2)
ENDLOOP. (#1)
Your kind support is very important for me.
Thanks in advance.
Regards,
Giovanni -
Sort itab by using field symbol
All,
I have a field symbol that pointing to a field value in work area of an internal table i_sort ( For example work area that contains the field name having a value MATNR' ( this decides only at runtime) )
My requirement is i need to sort another table for example i_tab (structure same as records in i_sort) using this field symbol.
Any Info?
a®Hi,
Check the below report sorting table VBAP based on field VBELN dynamically.
Let me know if u need any clarification.
REPORT ZTEST1.
tables: dd03l.
field-symbols: <fs1> type any,
<fs2> type any.
data:
wa_1 type vbak,
w_index type sy-index.
data:
itab like standard table of vbap,
ftab like standard table of dd03l.
select * from vbap into table itab
up to 10 rows.
select single * from vbak into wa_1 where vbeln ne space.
assign wa_1-vbeln to : <fs1>,
<fs2>.
do.
assign component sy-index of structure wa_1 to <fs1>.
if <fs1> = <fs2>.
w_index = sy-index.
exit.
endif.
enddo.
select *
from DD03L
into table ftab
where TABNAME eq 'VBAK'.
sort ftab by position.
read table ftab with key position = w_index into dd03l.
sort itab by (dd03l-FIELDNAME).
Thanks,
- Ram -
Field symbols and READ TABLE with system code 4
Hi,
I have a hashed table and I am using field symbols to point to it to retrieve the field content. I then use it in the READ TABLE statement in the following way:
Loop at x_data assign <fs>.
ASSIGN COMPONENT 'xxx' OF STRUCTURE <fs> TO <c1>.
ASSIGN COMPONENT 'xxx' OF STRUCTURE <fs> TO <c2>.
READ TABLE ZZZZ assign <fs> with table key a1 = <c1>
a2 = <c2>.
If sy-subrc = 0.
endif.
I ran the debugger and I keep getting a 4. I am not able to get the value from a1 and a2 to see what it is and why it is causing a 4 sy-subrc. I know the value from the hashed table and the values c1 and c2 are the same, so the sy-subrc should be 0.
How would I read a hashed table using field symbols? I know that usig a standard table, I have to sort the table on the key fields() before I actually can do the READ TABLE using the binary search.
Please advise. Thanks
RTHai Rob
Go through the following Code
Field-Symbols are place holders for existing fields.
A Field-Symbol does not physically reserve space for a field but points to a field, which is not known until run time of the program.
Field-Symbols are like Pointers in Programming language C .
Syntax check is not effective.
Syntax :
Data : v1(4) value abcd.
Field-symbols <fs>.
Assign v1 to <fs>.
Write:/ <fs>.
DATA: BEGIN OF LINE,
COL1 TYPE I,
COL2 TYPE I,
END OF LINE.
DATA ITAB LIKE SORTED TABLE OF LINE WITH UNIQUE KEY COL1.
FIELD-SYMBOLS <FS> LIKE LINE OF ITAB.
DO 4 TIMES.
LINE-COL1 = SY-INDEX.
LINE-COL2 = SY-INDEX ** 2.
APPEND LINE TO ITAB.
ENDDO.
READ TABLE ITAB WITH TABLE KEY COL1 = 2 ASSIGNING <FS>.
<FS>-COL2 = 100.
READ TABLE ITAB WITH TABLE KEY COL1 = 3 ASSIGNING <FS>.
DELETE ITAB INDEX 3.
IF <FS> IS ASSIGNED.
WRITE '<FS> is assigned!'.
ENDIF.
LOOP AT ITAB ASSIGNING <FS>.
WRITE: / <FS>-COL1, <FS>-COL2.
ENDLOOP.
The output is:
1 1
2 100
4 16
Thanks & regards
Sreenivasulu P -
Getting a runtime error in block alv that field symbol has been assigned
hi to all experts ,
im getting a runtime error that field symbol has not been assigned in functionmodule reuse_alv_block_list_display
i tried a lot to rectify the error ,im unable to do it thats i have posted here
*& Report ZHAI_ALV_BLOCK_LIST
REPORT ZHAI_ALV_BLOCK_LIST.
type-pools:slis.
tables:mara.
DATA:BEGIN OF IT_MARA OCCURS 0,
MATNR LIKE MARA-MATNR,
MBRSH LIKE MARA-MBRSH,
MATKL LIKE MARA-MATKL,
END OF IT_MARA.
data: begin of IT_DESC OCCURS 0,
MATNR like MAKT-MATNR,
MAKTX like MAKT-MAKTX,
end of IT_DESC.
data: begin of IT_MARD occurs 0,
MATNR like mard-matnr,
WERKS like mard-werks,
LGORT like mard-lgort,
LABST like mard-labst,
end of IT_MARD.
data: IT_FCAT TYPE SLIS_T_FIELDCAT_ALV ,
WA_FCAT LIKE LINE OF IT_FCAT,
IT_FCAT1 type slis_t_fieldcat_alv,
WA_FCAT1 LIKE LINE OF IT_FCAT1,
IT_FCAT2 TYPE SLIS_T_FIELDCAT_ALV,
WA_FCAT2 LIKE LINE OF IT_FCAT2,
wa_layout type SLIS_LAYOUT_ALV,
it_event type SLIS_T_EVENT,
wa_event like line of it_event,
wa_layout like line of it_layout,
V_REPID LIKE SY-REPID.
select-options:so_matnr for mara-matnr.
start-of-selection.
perform f_select_data.
DEFINE ADD_CATALOGUE1.
WA_FCAT-COL_POS = &1.
WA_FCAT-fieldname = &2.
WA_fcat-tabname = &3.
wa_fcat-emphasize = &4.
wa_fcat-ref_tabname = &5.
APPEND WA_FCAT TO IT_FCAT.
END-OF-DEFINITION.
DEFINE ADD_CATALOGUE2.
WA_FCAT1-COL_POS = &1.
WA_FCAT1-fieldname = &2.
WA_fcat1-tabname = &3.
wa_fcat1-emphasize = &4.
wa_fcat1-ref_tabname = &5.
APPEND WA_FCAT1 TO IT_FCAT1.
END-OF-DEFINITION.
DEFINE ADD_CATALOGUE3.
WA_FCAT2-COL_POS = &1.
WA_FCAT2-fieldname = &2.
WA_fcat2-tabname = &3.
wa_fcat2-emphasize = &4.
wa_fcat2-ref_tabname = &5.
APPEND WA_FCAT2 TO IT_FCAT2.
END-OF-DEFINITION.
perform f_build_fcat.
*perform f_build_fcat1.
perform f_build_fcat2.
PERFORM F_BUILD_LAYOUT.
PERFORM F_BUILD_EVENTS.
PERFORM F_BLOC_DISPLAY.
*& Form f_select_data
FORM f_select_data .
select matnr
mbrsh
matkl
from mara into table it_mara where matnr
in so_matnr.
if it_mara[] is not initial.
select matnr
maktx
from makt
into table it_desc
for all entries in it_mara
where matnr eq it_mara-matnr.
endif.
if it_desc[] is not initial.
select matnr
werks
lgort
labst
from mard
into table it_mard
for all entries in it_desc
where matnr eq it_desc-matnr.
endif.
ENDFORM. " f_select_data
*& Form f_build_fcat
FORM f_build_fcat .
ADD_CATALOGUE2:
'1' 'MATNR' 'IT_MARA' 'C500' 'MARA',
'2' 'MBRSH' 'IT_MARA' 'C600' 'MARA',
'3' 'MATKL' 'IT_MARA' 'C300' 'MARA'.
ENDFORM. " f_build_fcat
**& Form f_build_fcat1
FORM f_build_fcat1 .
ADD_CATALOGUE1:
'1' 'MATNR' 'IT_DESC' 'C500' 'MAKT',
'2' 'MAKTX' 'IT_DESC' 'C600' 'MAKT'.
ENDFORM. " f_build_fcat1
*& Form f_build_fcat2
FORM f_build_fcat2.
ADD_CATALOGUE3:
'1' 'MATNR' 'IT_MARD' 'C500' 'MARD',
'2' 'WERKS' 'IT_MARD' 'C600' 'MARD',
'3' 'LGORT' 'IT_MARD' 'C200' 'MARD',
'4' 'LABST' 'IT_MARD' 'C300' 'MARD'.
ENDFORM. " f_build_fcat2
*& Form F_BLOC_DISPLAY
text
--> p1 text
<-- p2 text
FORM F_BLOC_DISPLAY .
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IS_LAYOUT = wa_layout
IT_FIELDCAT = it_fcat
I_TABNAME = 'IT_MARA'
IT_EVENTS = it_event
IT_SORT =
I_TEXT = ' '
TABLES
T_OUTTAB = IT_MARA
EXCEPTIONS
PROGRAM_ERROR = 1
MAXIMUM_OF_APPENDS_REACHED = 2
OTHERS = 3
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IS_LAYOUT = wa_layout
IT_FIELDCAT = it_fcat1
I_TABNAME = 'IT_DESC'
IT_EVENTS = IT_EVENT
IT_SORT =
I_TEXT = ' '
TABLES
T_OUTTAB = IT_DESC
EXCEPTIONS
PROGRAM_ERROR = 1
MAXIMUM_OF_APPENDS_REACHED = 2
OTHERS = 3
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IS_LAYOUT = wa_LAYOUT
IT_FIELDCAT = IT_FCAT2
I_TABNAME = 'IT_MARD'
IT_EVENTS = IT_EVENT
IT_SORT =
I_TEXT = ' '
TABLES
T_OUTTAB = IT_MARD
EXCEPTIONS
PROGRAM_ERROR = 1
MAXIMUM_OF_APPENDS_REACHED = 2
OTHERS = 3
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " F_BLOC_DISPLAY
*& Form F_BUILD_LAYOUT
text
--> p1 text
<-- p2 text
FORM F_BUILD_LAYOUT .
wa_layout-edit = 'X'.
wa_layout-window_titlebar = 'MOHAMMED ABDUL HAI'.
wa_layout-zebra = 'X'.
ENDFORM. " F_BUILD_LAYOUT
*& Form F_BUILD_EVENTS
text
--> p1 text
<-- p2 text
FORM F_BUILD_EVENTS .
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = IT_EVENT
EXCEPTIONS
LIST_TYPE_WRONG = 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.
SORT IT_EVENT BY NAME.
READ TABLE it_event INTO wa_event WITH KEY NAME = 'TOP_OF_PAGE' bINARY
SEArch.
if sy-subrc eq 0.
wa_event-form = 'F_TOP_OF_PAGE'.
ENDIF.
MODIFY IT_EVENT FROM WA_EVENT INDEX SY-TABIX TRANSPORTING FORM.
READ TABLE IT_EVENT INTO WA_EVENT WITH KEY NAME = 'USER_COMMAND' BINARY SEARCH.
WA_EVENT-FORM = 'F_USER_COMMAND'.
MODIFY IT_EVENT FROM wa_event INDEX SY-TABIX TRANSPORTING FORM.
ENDFORM. " F_BUILD_EVENTSHi,
When does this runtime error occur? When displaying output (calling FM) or.....
I copied your coding and made a few minor changes and It's working fine for my now:
REPORT ZHAI_ALV_BLOCK_LIST.
TYPE-POOLS:slis.
TABLES:mara.
DATA:BEGIN OF it_mara OCCURS 0,
matnr LIKE mara-matnr,
mbrsh LIKE mara-mbrsh,
matkl LIKE mara-matkl,
END OF it_mara.
DATA: BEGIN OF it_desc OCCURS 0,
matnr LIKE makt-matnr,
maktx LIKE makt-maktx,
END OF it_desc.
DATA: BEGIN OF it_mard OCCURS 0,
matnr LIKE mard-matnr,
werks LIKE mard-werks,
lgort LIKE mard-lgort,
labst LIKE mard-labst,
END OF it_mard.
DATA: it_fcat TYPE slis_t_fieldcat_alv ,
wa_fcat LIKE LINE OF it_fcat,
it_fcat1 TYPE slis_t_fieldcat_alv,
wa_fcat1 LIKE LINE OF it_fcat1,
it_fcat2 TYPE slis_t_fieldcat_alv,
wa_fcat2 LIKE LINE OF it_fcat2,
wa_layout TYPE slis_layout_alv,
it_event TYPE slis_t_event,
wa_event LIKE LINE OF it_event,
* wa_layout like line of it_layout,
v_repid LIKE sy-repid.
SELECT-OPTIONS:so_matnr FOR mara-matnr.
START-OF-SELECTION.
PERFORM f_select_data.
DEFINE add_catalogue1.
wa_fcat-col_pos = &1.
wa_fcat-fieldname = &2.
wa_fcat-tabname = &3.
wa_fcat-emphasize = &4.
wa_fcat-ref_tabname = &5.
append wa_fcat to it_fcat.
END-OF-DEFINITION.
DEFINE add_catalogue2.
wa_fcat1-col_pos = &1.
wa_fcat1-fieldname = &2.
wa_fcat1-tabname = &3.
wa_fcat1-emphasize = &4.
wa_fcat1-ref_tabname = &5.
append wa_fcat1 to it_fcat1.
END-OF-DEFINITION.
DEFINE add_catalogue3.
wa_fcat2-col_pos = &1.
wa_fcat2-fieldname = &2.
wa_fcat2-tabname = &3.
wa_fcat2-emphasize = &4.
wa_fcat2-ref_tabname = &5.
append wa_fcat2 to it_fcat2.
END-OF-DEFINITION.
PERFORM f_build_fcat.
PERFORM f_build_fcat1.
PERFORM f_build_fcat2.
PERFORM f_build_layout.
PERFORM f_build_events.
PERFORM f_bloc_display.
*& Form f_select_data
FORM f_select_data .
SELECT matnr
mbrsh
matkl
FROM mara INTO TABLE it_mara WHERE matnr
IN so_matnr.
IF it_mara[] IS NOT INITIAL.
SELECT matnr
maktx
FROM makt
INTO TABLE it_desc
FOR ALL ENTRIES IN it_mara
WHERE matnr EQ it_mara-matnr.
ENDIF.
IF it_desc[] IS NOT INITIAL.
SELECT matnr
werks
lgort
labst
FROM mard
INTO TABLE it_mard
FOR ALL ENTRIES IN it_desc
WHERE matnr EQ it_desc-matnr.
ENDIF.
ENDFORM. " f_select_data
*& Form f_build_fcat
FORM f_build_fcat .
add_catalogue2:
'1' 'MATNR' 'IT_MARA' 'C500' 'MARA',
'2' 'MBRSH' 'IT_MARA' 'C600' 'MARA',
'3' 'MATKL' 'IT_MARA' 'C300' 'MARA'.
ENDFORM. " f_build_fcat
**& Form f_build_fcat1
FORM f_build_fcat1 .
add_catalogue1:
'1' 'MATNR' 'IT_DESC' 'C500' 'MAKT',
'2' 'MAKTX' 'IT_DESC' 'C600' 'MAKT'.
ENDFORM. " f_build_fcat1
*& Form f_build_fcat2
FORM f_build_fcat2.
add_catalogue3:
'1' 'MATNR' 'IT_MARD' 'C500' 'MARD',
'2' 'WERKS' 'IT_MARD' 'C600' 'MARD',
'3' 'LGORT' 'IT_MARD' 'C200' 'MARD',
'4' 'LABST' 'IT_MARD' 'C300' 'MARD'.
ENDFORM. " f_build_fcat2
*& Form F_BLOC_DISPLAY
* text
FORM f_bloc_display .
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
i_callback_program = sy-repid.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
is_layout = wa_layout
it_fieldcat = it_fcat1
i_tabname = 'IT_MARA'
it_events = it_event
*IT_SORT =
*I_TEXT =
TABLES
t_outtab = it_mara
EXCEPTIONS
program_error = 1
maximum_of_appends_reached = 2
OTHERS = 3
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
is_layout = wa_layout
it_fieldcat = it_fcat1
i_tabname = 'IT_DESC'
it_events = it_event
*IT_SORT =
*I_TEXT =
TABLES
t_outtab = it_desc
EXCEPTIONS
program_error = 1
maximum_of_appends_reached = 2
OTHERS = 3
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
is_layout = wa_layout
it_fieldcat = it_fcat2
i_tabname = 'IT_MARD'
it_events = it_event
*IT_SORT =
*I_TEXT = ' '
TABLES
t_outtab = it_mard
EXCEPTIONS
program_error = 1
maximum_of_appends_reached = 2
OTHERS = 3
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " F_BLOC_DISPLAY
*& Form F_BUILD_LAYOUT
FORM f_build_layout .
wa_layout-edit = 'X'.
wa_layout-window_titlebar = 'MOHAMMED ABDUL HAI'.
wa_layout-zebra = 'X'.
ENDFORM. " F_BUILD_LAYOUT
*& Form F_BUILD_EVENTS
FORM f_build_events .
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = it_event
EXCEPTIONS
list_type_wrong = 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.
SORT it_event BY name.
READ TABLE it_event INTO wa_event WITH KEY name = 'TOP_OF_PAGE' BINARY
SEARCH.
IF sy-subrc EQ 0.
wa_event-form = 'F_TOP_OF_PAGE'.
ENDIF.
MODIFY it_event FROM wa_event INDEX sy-tabix TRANSPORTING form.
READ TABLE it_event INTO wa_event WITH KEY name = 'USER_COMMAND' BINARY
SEARCH.
wa_event-form = 'F_USER_COMMAND'.
MODIFY it_event FROM wa_event INDEX sy-tabix TRANSPORTING form.
ENDFORM. " F_BUILD_EVENTS -
Assign Type conflict with field symbols
I have two tables tab1 & tab2, want to assign field values from tab1 to tab2 suing field symbols. Deatils are :
TYPES: BEGIN OF ty_tab1,
item1 TYPE char20,
item2 TYPE char20,
val1 type i,
val2 type i,
END OF ty_tab1,
BEGIN OF ty_tab2,
item1 TYPE char20,
item2 TYPE char20,
END OF ty_tab2.
DATA: it_tab1 TYPE TABLE OF ty_tab1,
it_tab2 TYPE TABLE OF ty_tab2.
FIELD-SYMBOLS <fs_tab1> TYPE ty_tab1.
<fs_tab2t> type ty_tab2.
LOOP AT it_tab1 assigning <fs_tab1>.
READ TABLE it_tab2 assigning <fs_tab2> WITH KEY item1 = <fs_tab1>-item1
item2 = <fs_tab1>-item2.
IF sy-subrc EQ 0.
ASSIGN COMPONENT 'ITEM1' OF STRUCTURE <fs_tab1> TO <fs_tab2>.
ASSIGN COMPONENT 'ITEM2' OF STRUCTURE <fs_tab1> TO <fs_tab2>.
endif.
endloop.
Getting error msg
You attempted to assign a field to a typed field symbol, but the field does not have the required type.
whats the reason of error.
Edited by: Matt on May 27, 2011 8:59 AM - added tagsTaken from example dump
A new value is to be assigned to the field "...", although this field is
entirely or partly protected against changes.
The following are protected against changes:
- Character literals or numeric literals
- Constants (CONSTANTS)
- Parameters of the category IMPORTING REFERENCE for functions and
methods
- Untyped field symbols not yet assigned a field using ASSIGN
- TABLES parameters if the actual parameter is protected against changes
- USING reference parameters and CHANGING parameters for FORMs, if the
actual parameter is protected against changes and
- Accesses using field symbols if the field assigned using ASSIGN is
protected (or partially protected, e.g. key components of an internal
table with the type SORTED or HASHED TABLE) against changes
- Accesses using references, if the field bound to the reference is
protected (or partially protected) against changes
- External write accesses to READ-ONLY attributes,
- Content of a shared object area instance accessed using a shared lock
(ATTACH_FOR_READ).
You likely fall in one of these cases. Check each and if still unsure please share your code so we can reproduce the error.
Regards
Marcin -
How to pass field symbol or table from one view to another view in abap web dynpro?
I am creating an Inbound Outbound ALV report in ABAP Web Dynpro. However at selection-screen I have select options and fetching is done at view2. Problem is we can pass parameter using inbound outbound parameters but how to pass internal table or field-symbols from one view to another view? I made use of Assistance Class too but its not very clear to me. Please give me some example or code to sort this problem out.
I am creating an Inbound Outbound ALV report in ABAP Web Dynpro. However at selection-screen I have select options and fetching is done at view2. Problem is we can pass parameter using inbound outbound parameters but how to pass internal table or field-symbols from one view to another view? I made use of Assistance Class too but its not very clear to me. Please give me some example or code to sort this problem out.
-
What are field symbols and field groups.? Have you used "component idx of structure" clause with field groups?
Hi
this will help you
reward if usefull
<b><u>FIELD-SYMBOLS</u></b>
<u>Syntax</u>
FIELD-SYMBOLS <fs> { typing | STRUCTURE struc DEFAULT dobj }.
Extras:
1. ... typing
2. ... STRUCTURE struc DEFAULT dobj
The FIELD-SYMBOLS statement declares a field symbol <fs>. The name conventions apply to the name fs. The angle brackets of the field symbols indicate the difference to data objects and are obligatory. You can declare field symbols in any procedure and in the global declaration section of an ABAP program, but not in the declaration section of a class or an interface. You can use a field symbol in any operand position in which it is visible and which match the typing defined using typing.
After its declaration, a field symbol is initial - that is, it does not reference a memory area. You have to assign a memory area to it (normally using the ASSIGN statement) before you can use it as an operand. Otherwise an exception will be triggered.
<b><u>FIELD-GROUPS</u></b>
<u>Syntax</u>
FIELD-GROUPS { header | field_group }.
Declaration of a field group for the extract dataset of the program. Each field group represents the name of a line structure of the extract dataset. You can create as many field groups as you wish in a program. You define the actual components of a field group with the statement INSERT.
The denominator of a field group is either the predefined name header or any name field_group. If you declare a field group header, it automatically becomes the beginning part of all remaining field groups of the program and its components constitute the standard sort key of the extract dataset for the statement SORT.
The statement FIELD-GROUPS is possible in the global declaration-part of an ABAP program, as well as in the subprograms and function modules. Field groups that are declared in procedures are visible only there.
As you can only define global data objects as components of field groups with the statement INSERT, we recommend to declare field groups only in the global declaration part as well. -
Field Symbols, Field String, and Field Group.
Hi,
Can you differentiate between filed symbols, field strings and field groups,
With regards,
Bharath Mohan BHi,
Field Symbols
Field symbols are placeholders or symbolic names for other fields. They do not physically reserve space for a field, but point to its contents. A field symbol cam point to any data object. The data object to which a field symbol points is assigned to it after it has been declared in the program.
Whenever you address a field symbol in a program, you are addressing the field that is assigned to the field symbol. After successful assignment, there is no difference in ABAP whether you reference the field symbol or the field itself. You must assign a field to each field symbol before you can address the latter in programs.
Field symbols are similar to dereferenced pointers in C (that is, pointers to which the content operator * is applied). However, the only real equivalent of pointers in ABAP, that is, variables that contain a memory address (reference) and that can be used without the contents operator, are reference variables in ABAP Objects.
All operations programmed with field symbols are applied to the field assigned to it. For example, a MOVE statement between two field symbols moves the contents of the field assigned to the first field symbol to the field assigned to the second field symbol. The field symbols themselves point to the same fields after the MOVE statement as they did before.
You can create field symbols either without or with type specifications. If you do not specify a type, the field symbol inherits all of the technical attributes of the field assigned to it. If you do specify a type, the system checks the compatibility of the field symbol and the field you are assigning to it during the ASSIGN statement.
Field symbols provide greater flexibility when you address data objects:
If you want to process sections of fields, you can specify the offset and length of the field dynamically.
You can assign one field symbol to another, which allows you to address parts of fields.
Assignments to field symbols may extend beyond field boundaries. This allows you to address regular sequences of fields in memory efficiently.
You can also force a field symbol to take different technical attributes from those of the field assigned to it.
The flexibility of field symbols provides elegant solutions to certain problems. On the other hand, it does mean that errors can easily occur. Since fields are not assigned to field symbols until runtime, the effectiveness of syntax and security checks is very limited for operations involving field symbols. This can lead to runtime errors or incorrect data assignments.
While runtime errors indicate an obvious problem, incorrect data assignments are dangerous because they can be very difficult to detect. For this reason, you should only use field symbols if you cannot achieve the same result using other ABAP statements.
For example, you may want to process part of a string where the offset and length depend on the contents of the field. You could use field symbols in this case. However, since the MOVE statement also supports variable offset and length specifications, you should use it instead. The MOVE statement (with your own auxiliary variables if required) is much safer than using field symbols, since it cannot address memory beyond the boundary of a field. However, field symbols may improve performance in some cases.
check the below links u will get the answers for your questions
http://help.sap.com/saphelp_nw04/helpdata/en/fc/eb3860358411d1829f0000e829fbfe/content.htm
http://www.sts.tu-harburg.de/teaching/sap_r3/ABAP4/field_sy.htm
http://searchsap.techtarget.com/tip/1,289483,sid21_gci920484,00.html
Syntax Diagram
FIELD-SYMBOLS
Basic form
FIELD-SYMBOLS <fs>.
Extras:
1. ... TYPE type
2. ... TYPE REF TO cif
3. ... TYPE REF TO DATA
4. ... TYPE LINE OF type
5. ... LIKE s
6. ... LIKE LINE OF s
7. ... TYPE tabkind
8. ... STRUCTURE s DEFAULT wa
The syntax check performed in an ABAP Objects context is stricter than in other ABAP areas. See Cannot Use Untyped Field Symbols ad Cannot Use Field Symbols as Components of Classes.
Effect
This statement declares a symbolic field called <fs>. At runtime, you can assign a concrete field to the field symbol using ASSIGN. All operations performed with the field symbol then directly affect the field assigned to it.
You can only use one of the additions.
Example
Output aircraft type from the table SFLIGHT using a field symbol:
FIELD-SYMBOLS <PT> TYPE ANY.
DATA SFLIGHT_WA TYPE SFLIGHT.
ASSIGN SFLIGHT_WA-PLANETYPE TO <PT>.
WRITE <PT>.
Addition 1
... TYPE type
Addition 2
... TYPE REF TO cif
Addition 3
... TYPE REF TO DATA
Addition 4
... TYPE LINE OF type
Addition 5
... LIKE s
Addition 6
... LIKE LINE OF s
Addition 7
... TYPE tabkind
Effect
You can define the type of the field symbol using additions 2 to 7 (just as you can for FORM parameters (compare Defining the Type of Subroutine Parameters). When you use the ASSIGN statement, the system carries out the same type checks as for USING parameters of FORMs.
This addition is not allowed in an ABAP Objects context. See Cannot Use Obsolete Casting for FIELD SYMBOLS.
In some cases, the syntax rules that apply to Unicode programs are different than those for non-Unicode programs. See Defining Types Using STRUCTURE.
Effect
Assigns any (internal) field string or structure to the field symbol from the ABAP Dictionary (s). All fields of the structure can be addressed by name: <fs>-fieldname. The structured field symbol points initially to the work area wa specified after DEFAULT.
The work area wa must be at least as long as the structure s. If s contains fields of the type I or F, wa should have the structure s or at least begin in that way, since otherwise alignment problems may occur.
Example
Address components of the flight bookings table SBOOK using a field symbol:
DATA SBOOK_WA LIKE SBOOK.
FIELD-SYMBOLS <SB> STRUCTURE SBOOK
DEFAULT SBOOK_WA.
WRITE: <SB>-BOOKID, <SB>-FLDATE.
Related
ASSIGN, DATA
Additional help
Declaring Field Symbols
FIELD GROUPS
are used to hold/handle large amount of data when the internal table are not useful
we use EXTRACT statement, HEADER structure in them
see the example
REPORT demo_extract.
NODES: spfli, sflight.
FIELD-GROUPS: header, flight_info, flight_date.
START-OF-SELECTION.
INSERT: spfli-carrid spfli-connid sflight-fldate
INTO header,
spfli-cityfrom spfli-cityto
INTO flight_info.
GET spfli.
EXTRACT flight_info.
GET sflight.
EXTRACT flight_date.
END-OF-SELECTION.
SORT STABLE.
LOOP.
AT FIRST.
WRITE / 'Flight list'.
ULINE.
ENDAT.
AT flight_info WITH flight_date.
WRITE: / spfli-carrid , spfli-connid, sflight-fldate,
spfli-cityfrom, spfli-cityto.
ENDAT.
AT flight_date.
WRITE: / spfli-carrid , spfli-connid, sflight-fldate.
ENDAT.
AT LAST.
ULINE.
WRITE: cnt(spfli-carrid), 'Airlines'.
ULINE.
ENDAT.
ENDLOOP.
FIELD STRING is nothing but a string with one row of records.
Reward points if useful
regards
Anji -
Can I use field symbol in AT events? How?
Hi all,
I want to use field symbol in <b>AT END OF</b> event
Can I use field symbol in such event as it takes table fields only.
Kinldy look in to pseudo:
Loop itab.
AT END OF <FS1>.
ENDAT.
Endloop.
I tried in my program but it's giving me a short dump.
If it is possible to use field symbol in AT events, kindly tell me how..??
Thanks in Advance.
SagarHi,
i don't know your reqirement but it is possible:
DATA: t1(4), t2 TYPE i.
FIELD-GROUPS: header.
INSERT t2 t1 INTO header.
t1 ='AABB'. t2 = 1. EXTRACT header.
t1 ='BBCC'. t2 = 2. EXTRACT header.
t1 ='AAAA'. t2 = 2. EXTRACT header.
t1 ='AABB'. t2 = 1. EXTRACT header.
t1 ='BBBB'. t2 = 2. EXTRACT header.
t1 ='BBCC'. t2 = 2. EXTRACT header.
t1 ='AAAA'. t2 = 1. EXTRACT header.
t1 ='BBBB'. t2 = 1. EXTRACT header.
t1 ='AAAA'. t2 = 3. EXTRACT header.
t1 ='AABB'. t2 = 1. EXTRACT header.
SORT BY t1 t2.
*Here begins the definition of the field symbols
FIELD-SYMBOLS:
<t1> TYPE ANY,
<t2> TYPE ANY.
ASSIGN t1 TO <t1>.
ASSIGN t2 TO <t2>.</b>
LOOP.
AT FIRST.
WRITE 'Start of LOOP'.
ULINE.
ENDAT.
AT NEW <t1>.
WRITE / ' New T1:'.
ENDAT.
AT NEW <t2>.
WRITE / ' New T2:'.
ENDAT.
WRITE: /14 t1, t2.
AT END OF <t2>.
WRITE / 'End of T2'.
ENDAT.
AT END OF <t1>.
WRITE / 'End of T1'.
ENDAT.
AT LAST.
ULINE.
ENDAT.
ENDLOOP.
Regards,
Gianpietro -
Hi,
its possible form internal table like this:
tabname | row | columnName | columnValue
t005 | 1 | land1 | AD
t005 | 1 | landk | AND
t005 | 1 | lnplz | 00
t005 | 2 | land1 | AS
t005 | 2 | landk | ND
t005 | 2 | lnplz | 01
to create internal table "t005" in this structure:
row| land1 | landk | lnplz | ...
1 | AD | AND | 00
2 | AS | ND | 01
(use field-symbols, or dynamic attribute declarations...)
thanks, mTry this...
Get the T005 data into internal table as first table...
tabname | row | columnName | columnValue
t005 | 1 | land1 | AD
t005 | 1 | landk | AND
t005 | 1 | lnplz | 00
t005 | 2 | land1 | AS
t005 | 2 | landk | ND
t005 | 2 | lnplz | 01
Now declare another internal table in the form...
row| land1 | landk | lnplz | ...
sort itab_t005 by tablename row.
now loop at itab_t005.
at new row.
clear itab_new.
endat.
if itab_t005-columename eq 'land1.
itab_new-land1 = itab_t005-columevalue.
endif.
the same for other two....
at end of row.
append itab_new.
endat.
endloop.
Hope this will solve ur porblem... -
Hi Guys
I am using a field sym in the foll way and iam getting a dump.
ls_fcat = mod_fcat( ls_fcat ).
method mod_fcat.
field-SYMBOLS: <l> like line of rt.
LOOP AT rt ASSIGNING <l>.
CASE <l>-fieldname.
WHEN 'VALUE_CONTRACT_E'.
CLEAR: <l>-ref_field,<l>-ref_table.
<l>-coltext = text-h01. <l>-SCRTEXT_L = text-h01.
<l>-SCRTEXT_M = text-h02. <l>-SCRTEXT_S = text-h02.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
ENDMETHOD.
endmethod.
When the control goes to clear it gives me a dump.I dont understand why coz iam already assignin <l> at every loop pass.
Please help!!
ThanksHi Guys
This is the error i get
A new value is to be assigned to the field "<L>", although this field is entirely or partly protected against changes.
The following are protected against changes:
- Character literals or numeric literals
- Constants (CONSTANTS)
- Parameters of the category IMPORTING REFERENCE for functions and
methods
- Untyped field symbols not yet assigned a field using ASSIGN
- TABLES parameters if the actual parameter is protected against changes
- USING reference parameters and CHANGING parameters for FORMs, if the
actual parameter is protected against changes and
- Accesses using field symbols if the field assigned using ASSIGN is
protected (or partially protected, e.g. key components of an internal
table with the type SORTED or HASHED TABLE) against changes
- Accesses using references, if the field bound to the reference is
protected (or partially protected) against changes
- External write accesses to READ-ONLY attributes,
- Content of a shared object area instance accessed using a shared lock
(ATTACH_FOR_READ).
Thanks -
Hi ,
i try to do this statement and i have dump
BEGIN OF tt_agr ,
agr_name TYPE agr_name,
text TYPE agr_title,
END OF tt_agr .
FIELD-SYMBOLS: <ls_retr_txt1> TYPE tt_agr.
LOOP AT lt_help ASSIGNING <ls_help_value>.
SPLIT <ls_help_value> AT space INTO ls_agr-agr_name ls_agr-text.
SHIFT ls_agr-text LEFT DELETING LEADING space.
READ TABLE It_retr_roles ASSIGNING <ls_retr_txt1> WITH KEY agr_name = ls_agr-agr_name.
IF sy-subrc = 0.
<ls_retr_txt1>-text = ls_agr-text . "<- here the dump occuer
ENDIF.
ENDLOOP.
this is the dump analysis what i miss here ?
Error analysis
A new value is to be assigned to the field "<LS_RETR_TXT1>", although this
field is
entirely or partly protected against changes.
The following are protected from change:
- Character literals or numerical literals.
- CONSTANTS.
- Parameters of the category IMPORTING REFERENCE in functions and
methods.
- untyped field symbols, that have not been assigned a field using
ASSIGN.
- TABLES parameters, if the actual parameter is protected against
changes.
- USING reference parameters and CHANGING parameters in FORMs,
if the actual parameter is protected against changes.
- Access using field symbols if the field assigned using ASSIGN is
partly or completely protected (for example key components of internal
table of the type SORTED or HASHED TABLE).
- Access using field symbols if the field assigned using ASSIGN contains
components of a secondary key that is currently in use in a
higher-level LOOP statement.
- Access using references if the field bound to the reference is
(partly) protected against changes.
- Write access from outside to READ-ONLY attributes.
- Content of a shared objects area instance accessed using a shared lock
(ATTACH_FOR_READ.
- Rows or fields of a table that are currently being serialized by a
Simple Transformation.
Regards
JoyHi,
if It_retr_roles is defined as CHANGING (which is against naming rules, should be Ct_retr_roles), then the table is defined as SORTED OR HASHED and field TEXT is part of the key. Key fields may never be changed.
You may build a new local internal table and replace the original at end of method.
Regards,
Clemens -
Delete Reference for field symbol
Hi
i have thes code
FUNCTION Z_DEMO.
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(INCLUDE_STRUCTURE) TYPE TABNAM
*" TABLES
*" DATA_PACKAGE_TA
DATA: it_data TYPE REF TO data.
FIELD-SYMBOLS: <fs_itab> TYPE STANDARD TABLE.
CREATE DATA it_data TYPE STANDARD TABLE OF (INCLUDE_STRUCTURE).
ASSIGN it_data->* TO <fs_itab>.
assign DATA_PACKAGE_TA[] to <fs_it_dp>.
sort <fs_itab> by ('COSTCENTER') ('CALMONTH') ('CURRENCY').
delete adjacent duplicates
from <fs_itab>
comparing ('COSTCENTER') ('CALMONTH') ('CURRENCY').
(1) Its workes good but it delete lines from DATA_PACKAGE_TA also how i can delete just from
the field symbol <fs_itab> and keep the itab without change ????
(2) How I can build an another itab like DATA_PACKAGE_TA ??????
Thanks and regardes .hi!
instead of:
assign DATA_PACKAGE_TA[] to <fs_itab>.
just do like this:
<fs_itab>[] = DATA_PACKAGE_TA[].
then you can delete from <fs_itab> without deleting the other internal table.
Bye,
Andrew83.
Hope this help you. -
Hi SDN's
I have createad dynamic internal table using the method cl_alv_table_create=>create_dynamic_table from the blog
/people/rich.heilman2/blog/2005/07/27/dynamic-internal-tables-and-structures--abap
i am struck at the last point. what i wanted to know is the the internal table is in the form of a Field Symbol <FS> . But i have an internal table which already contains the data.. how do i move the data from internal tables to the Dynamic internal table.. I had already posted previously, but not able to understand .. can some body help me in understanding to get the data from Internal table to the dynamic internal table
<b>My internal table</b> is in the below format
Alloc no|ChargeCode |Amount |
A119 |301 |100 |
A119 |301 |200 |
A119 |302 |150 |
A119 |302 |250 |
A119 |303 |100 |
A229 |301 |100 |
A229 |321 |100 |
A239 |301 |100 |
A239 |303 |50 |
and i have the <b>dynaic internal table</b> format as below
Alloc No|301 |302 |303 |321 |
A119 |300 |400 |100 |NIL |
A229 |100 |NIL |NIL |100 |
A239 |100 |NIL |50 |NIL |
Please help me in understanding to move the data in to the above formatHi Pratyu Usha,
I started dealing with it recently, so I'll try to help...
I built the dynamic table row after row.
To do this efficiently, the static (non-dynamic) table must be sorted by "Alloc No".
Then you need a field-symbol for the work-area line of the dynamic table:
ASSIGN LOCAL COPY OF INITIAL LINE OF <dynamic-table> TO <line>.
where <dynamic-table> is the field-symbol representing your dynamic table.
then you loop at your static table, and for each line of the static table you assign the right column of the dynamic table's line to other field-symbol:
ASSIGN COMPONENT StaticTable-ChargeCode OF STRUCTURE <line> TO <field>.
where <field> is another field-symbol and StaticTable is your static table...
For example, suppose that you're currently in the first row of your static table - <field> will point to the column named "301" of the work-area of your dynamic table.
now you just put the value inside that column:
<field> = StaticTable-Amount.
OR if you want to sum the value:
ADD StaticTable-Amount to <field>.
Now, at end of "Alloc no", you need to add your dynamic work-area to the dynamic table:
APPEND <line> TO <dynamic-table>.
CLEAR: <line>.
There.
That should work.
Please let me know!
Alon
Maybe you are looking for
-
I have been trying to save a document in illustrator and every time I try to, a dialog box pops up and says the following- Can't save the illustration. You do not have enough access privileges. id: -5000....This has been happening ever since I switch
-
Is there a way to prevent Elements from autoloading the last edited file on startup?
Every time I start Elements I have to wait for it to autoload the last edited image before I can do anything. Is there a way to turn this off? I'm on a MacBook Pro running the current system 10.9.2 with 8 GB ram, 2.93 GHz Intel Core 2 Duo.
-
Event timer for Leopard or Tiger?
Hey all, I want to create an Automator script that will execute at a certain time. Is there a Unix command for this? Thanks, -Dan Uff
-
How do I re-enable open or save setting when I click on the download file?
My initial Firefox download setting was this: When I click on the link I would like to download, it asks me whether I want to '''open the file or save''' the file. Underneath, there was a check box to click on, in case you do not want the dialogue bo
-
There a a few problems/limitations I'm running into with the Adobe Content Viewer for Ipad 1 (not tested on 2), like: Autoplaying more than 1 multiple-state is impossible. Only the object in the highest place in the layers is visible (like having pul