Application Development 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: 

Delete Problem in Field symbols

Former Member
0 Kudos

Hi Experts,

I want to know why my both tables adjacent duplicates are getting deleted even though i have used only <gt_display> ..how to overcome this.

TYPES : BEGIN OF t_struct,
         name(10),
         place,
         amount TYPE i,
         END OF t_struct.

DATA : i_tab TYPE TABLE OF t_struct,
        wa TYPE t_struct.

DATA : lv_name TYPE string.

FIELD-SYMBOLS : <gt_display_hold> TYPE  STANDARD TABLE.
FIELD-SYMBOLS : <gt_display>      TYPE STANDARD TABLE.
FIELD-SYMBOLS : <gt_display_temp> TYPE STANDARD TABLE.

FIELD-SYMBOLS : <gs_display_hold> TYPE any.
FIELD-SYMBOLS : <ls_display> TYPE any.
FIELD-SYMBOLS : <gs_display> TYPE any.


FIELD-SYMBOLS : <name> TYPE any.
FIELD-SYMBOLS : <amount> TYPE any.
FIELD-SYMBOLS : <t_amount> TYPE any.



CLEAR : wa.
wa-name = 'PAVAN'.
wa-place = 'H'.
wa-amount = 10.
APPEND wa TO i_tab.

CLEAR : wa.
wa-name = 'PAVAN'.
wa-place = 'H'.
wa-amount = 15.
APPEND wa TO i_tab.

CLEAR : wa.
wa-name = 'PAVAN'.
wa-place = 'H'.
wa-amount = 20.
APPEND wa TO i_tab.

CLEAR : wa.
wa-name = 'NANI'.
wa-place = 'H'.
wa-amount = 10.
APPEND wa TO i_tab.

CLEAR : wa.
wa-name = 'NANI'.
wa-place = 'H'.
wa-amount = 10.
APPEND wa TO i_tab.

CLEAR : wa.
wa-name = 'NANI'.
wa-place = 'H'.
wa-amount = 10.
APPEND wa TO i_tab.



ASSIGN i_tab TO <gt_display_hold>.


ASSIGN <gt_display_hold> TO <gt_display>.

ASSIGN <gt_display_hold> TO <gt_display_temp>.


lv_name = 'NAME'.

SORT <gt_display>      BY (lv_name).
SORT <gt_display_temp> BY (lv_name).
DELETE ADJACENT DUPLICATES FROM <gt_display> COMPARING (lv_name).

Thanks

Pavan.N


4 REPLIES 4

Former Member
0 Kudos

Hi,

Its becoz both the field symbols are assigned to the same table.

Try the below code once,you will understand.

   TYPES : BEGIN OF T_STRUCT,
         NAME(10),
         PLACE,
         AMOUNT TYPE I,
         END OF T_STRUCT.

DATA : I_TAB TYPE TABLE OF T_STRUCT,
I_TAB2 TYPE TABLE OF T_STRUCT,
        WA TYPE T_STRUCT.

DATA : LV_NAME TYPE STRING.

FIELD-SYMBOLS : <GT_DISPLAY_HOLD> TYPE  STANDARD TABLE.
FIELD-SYMBOLS : <GT_DISPLAY_HOLD2> TYPE  STANDARD TABLE.
FIELD-SYMBOLS : <GT_DISPLAY>      TYPE STANDARD TABLE.
FIELD-SYMBOLS : <GT_DISPLAY_TEMP> TYPE STANDARD TABLE.

FIELD-SYMBOLS : <GS_DISPLAY_HOLD> TYPE ANY.
FIELD-SYMBOLS : <LS_DISPLAY> TYPE ANY.
FIELD-SYMBOLS : <GS_DISPLAY> TYPE ANY.


FIELD-SYMBOLS : <NAME> TYPE ANY.
FIELD-SYMBOLS : <AMOUNT> TYPE ANY.
FIELD-SYMBOLS : <T_AMOUNT> TYPE ANY.



CLEAR : WA.
WA-NAME = 'PAVAN'.
WA-PLACE = 'H'.
WA-AMOUNT = 10.
APPEND WA TO I_TAB.

CLEAR : WA.
WA-NAME = 'PAVAN'.
WA-PLACE = 'H'.
WA-AMOUNT = 15.
APPEND WA TO I_TAB.

CLEAR : WA.
WA-NAME = 'PAVAN'.
WA-PLACE = 'H'.
WA-AMOUNT = 20.
APPEND WA TO I_TAB.

CLEAR : WA.
WA-NAME = 'NANI'.
WA-PLACE = 'H'.
WA-AMOUNT = 10.
APPEND WA TO I_TAB.

CLEAR : WA.
WA-NAME = 'NANI'.
WA-PLACE = 'H'.
WA-AMOUNT = 10.
APPEND WA TO I_TAB.

CLEAR : WA.
WA-NAME = 'NANI'.
WA-PLACE = 'H'.
WA-AMOUNT = 10.
APPEND WA TO I_TAB.

I_TAB2 = I_TAB.

ASSIGN I_TAB TO <GT_DISPLAY_HOLD>.


ASSIGN I_TAB2 TO <GT_DISPLAY_HOLD2>.


ASSIGN <GT_DISPLAY_HOLD> TO <GT_DISPLAY>.

ASSIGN <GT_DISPLAY_HOLD2> TO <GT_DISPLAY_TEMP>.


LV_NAME = 'NAME'.

SORT <GT_DISPLAY>      BY (LV_NAME).
SORT <GT_DISPLAY_TEMP> BY (LV_NAME).
DELETE ADJACENT DUPLICATES FROM <GT_DISPLAY> COMPARING (LV_NAME).

former_member289261
Active Contributor
0 Kudos

Pavan Neerukonda wrote:

Hi Experts,

I want to know why my both tables adjacent duplicates are getting deleted even though i have used only <gt_display> ..how to overcome this.

TYPES : BEGIN OF t_struct,
         name(10),
         place,
         amount TYPE i,
         END OF t_struct.

DATA : i_tab TYPE TABLE OF t_struct,
        wa TYPE t_struct.

DATA : lv_name TYPE string.

FIELD-SYMBOLS : <gt_display_hold> TYPE  STANDARD TABLE.
FIELD-SYMBOLS : <gt_display>      TYPE STANDARD TABLE.
FIELD-SYMBOLS : <gt_display_temp> TYPE STANDARD TABLE.

FIELD-SYMBOLS : <gs_display_hold> TYPE any.
FIELD-SYMBOLS : <ls_display> TYPE any.
FIELD-SYMBOLS : <gs_display> TYPE any.


FIELD-SYMBOLS : <name> TYPE any.
FIELD-SYMBOLS : <amount> TYPE any.
FIELD-SYMBOLS : <t_amount> TYPE any.



CLEAR : wa.
wa-name = 'PAVAN'.
wa-place = 'H'.
wa-amount = 10.
APPEND wa TO i_tab.

CLEAR : wa.
wa-name = 'PAVAN'.
wa-place = 'H'.
wa-amount = 15.
APPEND wa TO i_tab.

CLEAR : wa.
wa-name = 'PAVAN'.
wa-place = 'H'.
wa-amount = 20.
APPEND wa TO i_tab.

CLEAR : wa.
wa-name = 'NANI'.
wa-place = 'H'.
wa-amount = 10.
APPEND wa TO i_tab.

CLEAR : wa.
wa-name = 'NANI'.
wa-place = 'H'.
wa-amount = 10.
APPEND wa TO i_tab.

CLEAR : wa.
wa-name = 'NANI'.
wa-place = 'H'.
wa-amount = 10.
APPEND wa TO i_tab.



ASSIGN i_tab TO <gt_display_hold>.


ASSIGN <gt_display_hold> TO <gt_display>.

ASSIGN <gt_display_hold> TO <gt_display_temp>. "This line means now both field symbols are pointing at same memory location i.e still only 1 table exists not 2. So no matter which field symbol you edit, the same record will be changed in the internal table.


lv_name = 'NAME'.

SORT <gt_display>      BY (lv_name).
SORT <gt_display_temp> BY (lv_name).
DELETE ADJACENT DUPLICATES FROM <gt_display> COMPARING (lv_name).

Thanks

Pavan.N


former_member184569
Active Contributor
0 Kudos

Hi Pavan,

There is some misunderstanding on field-symbols.

Here there are no two tables. There is just one table.

When you assign a fieldsymbol,  the field-symbol itself is not a variable, it just points to a variable that is already there.

In your program, all the field-symbols are pointing to just one table that is i_tab.

Which ever field-symbols you use to delete adjacent duplicates, the operation will be done in i_tab.

If you want two tables, you need to create two tables and use two field symbols to point to them if required.

Check this doc.

http://scn.sap.com/docs/DOC-42525

DATA : i_tab TYPE TABLE OF t_struct,
        wa TYPE t_struct.

DATA : i_tab_tmp TYPE TABLE OF t_struct,
        wa_tmp TYPE t_struct.

FIELD-SYMBOLS : <gt_display>      TYPE STANDARD TABLE.
FIELD-SYMBOLS : <gt_display_temp> TYPE STANDARD TABLE.

* After assiging values to i_tab,

i_tab_tmp[ ] = i_tab[ ].

ASSIGN i_tab TO <gt_display>.

ASSIGN i_tab_tmp TO <gt_display_temp>.

  lv_name = 'NAME'.

SORT <gt_display>      BY (lv_name).
SORT <gt_display_temp> BY (lv_name).
DELETE ADJACENT DUPLICATES FROM <gt_display> COMPARING (lv_name).

Now adjacent duplicate in only one table would be deleted.

Regards,

Susmitha

Former Member
0 Kudos

Hi Pavan,

Hope your problem is solved now.

Please close the thread.