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: 

Internal Table Output using Field symbols

Former Member
0 Kudos

I am having an internal table ITAB1 with following fields and values:

FLD1

FLD2

FLD3

V100

AA

100

V100

BB

2

V100

CC

3

I have another internal table ITAB2 with following fields and values:

FLD3

100

200

400

I want to append ITAB2 in ITAB1 in such a way that it should have the output as below (Based upon value in ITAB2, FLD1 and FLD3 should change when FLD2 = AA.).

FLD1

FLD2

FLD3

V100

AA

100

V100

BB

2

V100

CC

3

V200

AA

200

V200

BB

2

V200

CC

3

V400

AA

400

V400

BB

2

V400

CC

3

**I have an understanding how to do this using Work area, but I have to do this using field symbols as later there is possibility that I have to determine conditional value (FLD2 = AA) dynamically.

Would really appreciate the help provided.

Thanks

1 ACCEPTED SOLUTION

sivaganesh_krishnan
Contributor
0 Kudos

Hi Kaur,

I have tried in different way . Check the program.

*TYPES:BEGIN OF ty_s,

*  fld1 TYPE char4,

*  fld2 TYPE char4,

*  fld3 TYPE char4,

*  END OF ty_s.

TYPES :BEGIN OF ty_s1,

  fld TYPE char4,

  fld2 TYPE char4,

  fld3 TYPE char4,

  END OF ty_s1.

DATA itab3 TYPE TABLE OF ty_s1.

DATA itab TYPE TABLE OF ty_s1.

DATA x_itab TYPE ty_s1.

DATA itab1 TYPE TABLE OF ty_s1.

DATA x_itab1 TYPE ty_s1.

DATA var TYPE char8.

FIELD-SYMBOLS: <fs>   LIKE LINE OF itab1.

FIELD-SYMBOLS: <fs1>  LIKE LINE OF itab.


x_itab-fld = 'V100'.

x_itab-fld2 = 'AA'.

x_itab-fld3 = '100'.

APPEND x_itab TO itab.



x_itab-fld = 'V100'.

x_itab-fld2 = 'BB'.

x_itab-fld3 = '2'.

APPEND x_itab TO itab.



x_itab-fld = 'V100'.

x_itab-fld2 = 'CC'.

x_itab-fld3 = '3'.

APPEND x_itab TO itab.



IF sy-subrc EQ 0.

  x_itab1-fld3 = '100'.

  APPEND x_itab1 TO itab1.



  x_itab1-fld3 = '200'.

  APPEND x_itab1 TO itab1.



  x_itab1-fld3 = '400'.

  APPEND x_itab1 TO itab1.

ENDIF.

APPEND LINES OF itab1 TO itab3.

CLEAR itab1.

IF sy-subrc EQ 0.


  LOOP AT itab3 ASSIGNING <fs> .


    LOOP AT itab ASSIGNING <fs1> .

      CONCATENATE 'V' <fs>-fld3 INTO var.

      x_itab1-fld = var.

      x_itab1-fld2 = <fs1>-fld2.

      IF sy-tabix EQ 1.

        x_itab1-fld3 = <fs>-fld3.

      ELSE.

        x_itab1-fld3 = <fs1>-fld3.

      ENDIF.

      APPEND  x_itab1 TO itab1.



    ENDLOOP.



  ENDLOOP.



ENDIF.

WRITE 'Internal table'.



LOOP at itab1 INTO x_itab1.

WRITE :/ x_itab1-fld,

at 10   x_itab1-fld2 ,

at 20  x_itab1-fld3.

ENDLOOP.

Output:

5 REPLIES 5

former_member209120
Active Contributor
0 Kudos

Hi S Kaur,

Try like this..

TYPES : BEGIN OF ty_itab1,
         fld1 TYPE string,
         fld2 TYPE string,
         fld3 TYPE i,
         END OF ty_itab1,

         BEGIN OF ty_itab2,
         fld3 TYPE i,
         END OF ty_itab2.


DATA : it_itab1 TYPE TABLE OF ty_itab1,
        it_itab2 TYPE TABLE OF ty_itab2,
        it_itab3 TYPE TABLE OF ty_itab2,
        wa_itab1 TYPE ty_itab1,
        wa_itab3 TYPE ty_itab2.

perform itab using :
    'V100'    'AA'  ' ',
    'V100'    'BB'  '2',
    'V100'    'CC'  '3',
    'V200'    'AA'  ' ',
    'V200'    'BB'  '2',
    'V200'    'CC'  '3',
    'V400'    'AA'  ' ',
    'V400'    'BB'  '2',
    'V400'    'CC'  '3'.

wa_itab3-fld3 = '100'.
append wa_itab3 to it_itab2.
clear wa_itab3.
wa_itab3-fld3 = '200'.
append wa_itab3 to it_itab2.
clear wa_itab3.
wa_itab3-fld3 = '300'.
append wa_itab3 to it_itab2.
clear wa_itab3.


it_itab3 = it_itab2.

sort : it_itab1 by fld1 fld2,
        it_itab3 by fld3.

Loop at it_itab1 into wa_itab1.

at new fld1.
read TABLE it_itab3 into wa_itab3 INDEX 1.
if sy-subrc = 0.
wa_itab1-fld3 = wa_itab3-fld3.
MODIFY it_itab1 from wa_itab1 TRANSPORTING fld3.
delete it_itab3 INDEX 1.
clear wa_itab1.
endif.
ENDAT.
endloop.

Loop at it_itab1 into wa_itab1.

Write : / wa_itab1-fld1,
           wa_itab1-fld2,
           wa_itab1-fld3.
endloop.



*&---------------------------------------------------------------------*
*&      Form  itab
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_FLD1  text
*      -->P_FLD2  text
*      -->P_FLD3  text
*----------------------------------------------------------------------*
form itab  using    p_fld1 type any
                     p_fld2 type any
                     p_fld3 type any.

wa_itab1-fld1 = p_fld1.
wa_itab1-fld2 = p_fld2.
wa_itab1-fld3 = p_fld3.
append wa_itab1 to it_itab1.
clear wa_itab1.
endform.                    " itab


sivaganesh_krishnan
Contributor
0 Kudos

Hi Kaur,

I have tried in different way . Check the program.

*TYPES:BEGIN OF ty_s,

*  fld1 TYPE char4,

*  fld2 TYPE char4,

*  fld3 TYPE char4,

*  END OF ty_s.

TYPES :BEGIN OF ty_s1,

  fld TYPE char4,

  fld2 TYPE char4,

  fld3 TYPE char4,

  END OF ty_s1.

DATA itab3 TYPE TABLE OF ty_s1.

DATA itab TYPE TABLE OF ty_s1.

DATA x_itab TYPE ty_s1.

DATA itab1 TYPE TABLE OF ty_s1.

DATA x_itab1 TYPE ty_s1.

DATA var TYPE char8.

FIELD-SYMBOLS: <fs>   LIKE LINE OF itab1.

FIELD-SYMBOLS: <fs1>  LIKE LINE OF itab.


x_itab-fld = 'V100'.

x_itab-fld2 = 'AA'.

x_itab-fld3 = '100'.

APPEND x_itab TO itab.



x_itab-fld = 'V100'.

x_itab-fld2 = 'BB'.

x_itab-fld3 = '2'.

APPEND x_itab TO itab.



x_itab-fld = 'V100'.

x_itab-fld2 = 'CC'.

x_itab-fld3 = '3'.

APPEND x_itab TO itab.



IF sy-subrc EQ 0.

  x_itab1-fld3 = '100'.

  APPEND x_itab1 TO itab1.



  x_itab1-fld3 = '200'.

  APPEND x_itab1 TO itab1.



  x_itab1-fld3 = '400'.

  APPEND x_itab1 TO itab1.

ENDIF.

APPEND LINES OF itab1 TO itab3.

CLEAR itab1.

IF sy-subrc EQ 0.


  LOOP AT itab3 ASSIGNING <fs> .


    LOOP AT itab ASSIGNING <fs1> .

      CONCATENATE 'V' <fs>-fld3 INTO var.

      x_itab1-fld = var.

      x_itab1-fld2 = <fs1>-fld2.

      IF sy-tabix EQ 1.

        x_itab1-fld3 = <fs>-fld3.

      ELSE.

        x_itab1-fld3 = <fs1>-fld3.

      ENDIF.

      APPEND  x_itab1 TO itab1.



    ENDLOOP.



  ENDLOOP.



ENDIF.

WRITE 'Internal table'.



LOOP at itab1 INTO x_itab1.

WRITE :/ x_itab1-fld,

at 10   x_itab1-fld2 ,

at 20  x_itab1-fld3.

ENDLOOP.

Output:

former_member220538
Active Participant
0 Kudos

Hi,

Use this code

ty-tab1 contain 3 fields fld1,fld2,fld3
v_index and v_lines are integer with value 0
v_fld3 is a charter type of length 3


FIELD-SYMBOLS <fs> TYPE ty_tab1.
DESCRIBE TABLE t_tab2 LINES v_lines.
"Appending Values to Table
DO v_lines - 1 TIMES.
  INSERT LINES OF t_tab1 FROM 1 TO v_lines INTO TABLE t_tab1.
ENDDO.

"Using Field Symbol To Modify Values
LOOP AT t_tab1 ASSIGNING <fs>.
  IF sy-tabix MOD v_lines EQ 1.
    v_index = v_index + 1.
  ENDIF.
  READ TABLE t_tab2 INTO v_fld3 INDEX v_index.
  IF sy-subrc EQ 0.
    CONCATENATE <fs>-fld1(1) v_fld3 INTO <fs>-fld1.
    IF <fs>-fld2 = 'AA'.
      <fs>-fld3 = v_fld3.
    ENDIF.
  ENDIF.
ENDLOOP.

Regards,

Jeffin

Former Member
0 Kudos

Hi,

i think this will work for you

TYPES : BEGIN OF ty_itab1,

         fld1 TYPE string,

         fld2 TYPE string,

         fld3 TYPE i,

         END OF ty_itab1,



         BEGIN OF ty_itab2,

         fld3 TYPE i,

         END OF ty_itab2.





DATA it_tab1 TYPE TABLE OF ty_itab1,

        it_tab3 TYPE TABLE OF ty_itab2,

        wa_tab1 TYPE ty_itab1,

        wa_tab3 TYPE ty_itab2.





FIELD-SYMBOLS: <f1> TYPE ty_itab1,

               <f2> STRUCTURE wa_tab1 DEFAULT %DUMMY%,

               <f3>  STRUCTURE wa_tab3 DEFAULT %DUMMY%,

               <f4>  TYPE ty_itab2.



ASSIGN wa_tab1 TO <f2>.



<f2>-fld1 = 'V100' .

<f2>-fld2 = 'AA' .

<f2>-fld3 = ' '.

APPEND <f2> TO it_tab1.



<f2>-fld1 = 'V100' .

<f2>-fld2 = 'BB' .

<f2>-fld3 = '2'.

APPEND <f2> TO it_tab1.



<f2>-fld1 = 'V100' .

<f2>-fld2 = 'CC' .

<f2>-fld3 = '3'.

APPEND <f2> TO it_tab1.



<f2>-fld1 = 'V200' .

<f2>-fld2 = 'AA' .

<f2>-fld3 = ' '.

APPEND <f2> TO it_tab1.



<f2>-fld1 = 'V200' .

<f2>-fld2 = 'BB' .

<f2>-fld3 = '2'.

APPEND <f2> TO it_tab1.



<f2>-fld1 = 'V200' .

<f2>-fld2 = 'CC' .

<f2>-fld3 = '3'.

APPEND <f2> TO it_tab1.



<f2>-fld1 = 'V400' .

<f2>-fld2 = 'AA' .

<f2>-fld3 = ' '.

APPEND <f2> TO it_tab1.



<f2>-fld1 = 'V400' .

<f2>-fld2 = 'BB' .

<f2>-fld3 = '2'.

APPEND <f2> TO it_tab1.



<f2>-fld1 = 'V400' .

<f2>-fld2 = 'CC' .

<f2>-fld3 = '3'.

APPEND <f2> TO it_tab1.



UNASSIGN <f2>.









ASSIGN  wa_tab3 TO <f3> .

<f3>-fld3 = '100'.

APPEND <f3> TO it_tab3.

<f3>-fld3 = '200'.

APPEND <f3> TO it_tab3.

<f3>-fld3 = '400'.

APPEND <f3> TO it_tab3.



UNASSIGN <f3>.



SORT : it_tab1 BY fld1 fld2,

       it_tab3 BY fld3.



LOOP AT it_tab1 ASSIGNING <f1>.

  READ TABLE it_tab3 INTO wa_tab3 INDEX 1.

  IF sy-subrc = 0.

    IF <f1>-fld2 = 'AA'.

      <f1>-fld3 = wa_tab3-fld3.

      DELETE it_tab3 INDEX 1.

    ENDIF.

  ENDIF.

ENDLOOP.

UNASSIGN <f1>.



LOOP AT it_tab1 ASSIGNING <f1>.



  WRITE : / <f1>-fld1,

             <f1>-fld2,

             <f1>-fld3.

ENDLOOP.

UNASSIGN <F1>.

former_member184569
Active Contributor
0 Kudos

Hi Kaur,

I would suggest you have a third internal table with the same structure as first internal table.

If I have understood correctly, you want to determine the field name (fld2) that is used for validation dynamically.

Try this logic.

DATA : it_itab1 TYPE TABLE OF ty_itab1,
         it_itab2 TYPE TABLE OF ty_itab1,
         it_itab3 TYPE TABLE OF ty_itab2,
         wa_itab1 TYPE ty_itab1,
         wa_itab2 type ty_itab1,
         wa_itab3 TYPE ty_itab2,
         lv_prev_fld1 type string,

          field_name type string.

FIELD-SYMBOLS : <fs1>,<fs2>.

" As required the field name can be assigned dynamically, maybe from a parameter.

field_name = 'FLD2'.  

assign wa_itab1 to <fs1>.

loop at it_itab3 into wa_itab3.
   loop at it_itab1 into wa_itab1.
     assign component field_name of STRUCTURE <fs1> to <fs2>.
     if <fs2> is ASSIGNED and <fs2> = 'AA'.  " AA can also be provided dynamically if required
       concatenate wa_itab1-fld1+0(1) wa_itab3-fld3 into wa_itab1-fld1.
       wa_itab1-fld3 = wa_itab3-fld3.
       append wa_itab1 to it_itab2.
     elseif not lv_prev_fld1 is INITIAL.
       wa_itab1-fld1 = lv_prev_fld1.
       append wa_itab1 to it_itab2.
     endif .
     lv_prev_fld1 = wa_itab1-fld1.
    endloop.
endloop.

The output is as required.



Assuming, fld1 and fld3 are character/string fields. Else you have to move them to string field to perform the concatenate operation.