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: 

Untyped field symbols and table assignments

Former Member
0 Kudos

Hello folks,

I have a case where I want to move away from TABLES defenition for assigning untyped fields symbols. Let me give you all more details.

Here is my program which fetches a single record from condition tables and assigns it to a field symbol,

  • Local variables

DATA: V_TABNAM LIKE DFIES-TABNAME,

V_FIELDNAME(60) TYPE C,

V_TABREC(250) TYPE C.

  • Field symbols

  • FIELD-SYMBOLS: <CONDTAB>,

<KUNNRFLD>.

  • Find customer number in condition tables

LOOP AT RT_KOTABNR INTO S_KOTABNR.

CONCATENATE S_KOTABNR-KVEWE S_KOTABNR-KOTABNR INTO V_TABNAM.

*selcetion from condition tables

SELECT SINGLE *

INTO V_TABREC

FROM (V_TABNAM)

WHERE KNUMH = S_KOTABNR-KNUMH

AND DATAB <= SY-DATUM

AND DATBI >= SY-DATUM.

  • Condition record found

IF SY-SUBRC = 0.

ASSIGN (V_TABNAM) TO <CONDTAB>.

<CONDTAB> = V_TABREC.

  • Attempt load from sold-to

CONCATENATE V_TABNAM C_SOLD_TO_FLD INTO V_FIELDNAME

SEPARATED BY '-'.

ASSIGN (V_FIELDNAME) TO <KUNNRFLD>.

  • Sold-to assignment

IF SY-SUBRC = 0.

S_KUNNR-KUNNR = <KUNNRFLD>.

APPEND S_KUNNR TO RT_KUNNR.

The string V_TABREC assigns a record to <CONDTAB> with structure of table V_TABNAM.

The structures of the tables have been defined in the top include ,

  • Tables

TABLES: A968,

A969,

A971,

A972,

A974,

A976,

A977,

A978.

But as an addition few more A* tables were added and the program failed to assign V_TABNAM & V_TABREC to <CONDTAB> as the new tables are not declared in the top include.

I want the program to work for new tables without declaring them(adding to TABLES) in the top include. I tried defining the field symbol <CONDTAB> as ANY TABLE, but it throwed a syntax error as the type of V_TABREC and <CONDTAB> are incompatible.

Please help me to find a way to make the program to work for any tables without declaring them in TOP include.

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi,

Try this..replace the following code

Local variables 
DATA: V_TABNAM LIKE DFIES-TABNAME,
V_FIELDNAME(60) TYPE C,
V_TABREC(250) TYPE C.


Field symbols 
FIELD-SYMBOLS: <CONDTAB>, 
<KUNNRFLD>.


Find customer number in condition tables 
LOOP AT RT_KOTABNR INTO S_KOTABNR.
CONCATENATE S_KOTABNR-KVEWE S_KOTABNR-KOTABNR INTO V_TABNAM.

*selcetion from condition tables 
SELECT SINGLE *
INTO V_TABREC
FROM (V_TABNAM)
WHERE KNUMH = S_KOTABNR-KNUMH
AND DATAB <= SY-DATUM
AND DATBI >= SY-DATUM.


Condition record found 
IF SY-SUBRC = 0.
ASSIGN (V_TABNAM) TO <CONDTAB>.
<CONDTAB> = V_TABREC.

Attempt load from sold-to 
CONCATENATE V_TABNAM C_SOLD_TO_FLD INTO V_FIELDNAME
SEPARATED BY '-'.
ASSIGN (V_FIELDNAME) TO <KUNNRFLD>.

With this code..

DATA: t_data TYPE REF TO data.
FIELD-SYMBOLS: <fs> TYPE ANY.
DATA: v_tabname TYPE tabname.

LOOP AT RT_KOTABNR INTO S_KOTABNR.

  CONCATENATE S_KOTABNR-KVEWE S_KOTABNR-KOTABNR INTO V_TABNAM.


  CREATE DATA t_data TYPE (v_tabnam).

  ASSIGN t_data->* TO <fs>.

  CHECK sy-subrc = 0.

*selcetion from condition tables 
  SELECT SINGLE *
  INTO <fs>
  FROM (V_TABNAM)
  WHERE KNUMH = S_KOTABNR-KNUMH
  AND DATAB <= SY-DATUM
  AND DATBI >= SY-DATUM.


*Condition record found 
   IF SY-SUBRC = 0.

    ASSIGN COMPONENT 'KUNNR' OF STRUCTURE <FS> TO <KUNNRFLD>.

Sold-to assignment 
  IF SY-SUBRC = 0.
    S_KUNNR-KUNNR = <KUNNRFLD>.
    APPEND S_KUNNR TO RT_KUNNR.

  ENDIF.

   ENDIF.
ENDLOOP.

Thanks

Naren

2 REPLIES 2

Former Member
0 Kudos

Hi,

Try this..replace the following code

Local variables 
DATA: V_TABNAM LIKE DFIES-TABNAME,
V_FIELDNAME(60) TYPE C,
V_TABREC(250) TYPE C.


Field symbols 
FIELD-SYMBOLS: <CONDTAB>, 
<KUNNRFLD>.


Find customer number in condition tables 
LOOP AT RT_KOTABNR INTO S_KOTABNR.
CONCATENATE S_KOTABNR-KVEWE S_KOTABNR-KOTABNR INTO V_TABNAM.

*selcetion from condition tables 
SELECT SINGLE *
INTO V_TABREC
FROM (V_TABNAM)
WHERE KNUMH = S_KOTABNR-KNUMH
AND DATAB <= SY-DATUM
AND DATBI >= SY-DATUM.


Condition record found 
IF SY-SUBRC = 0.
ASSIGN (V_TABNAM) TO <CONDTAB>.
<CONDTAB> = V_TABREC.

Attempt load from sold-to 
CONCATENATE V_TABNAM C_SOLD_TO_FLD INTO V_FIELDNAME
SEPARATED BY '-'.
ASSIGN (V_FIELDNAME) TO <KUNNRFLD>.

With this code..

DATA: t_data TYPE REF TO data.
FIELD-SYMBOLS: <fs> TYPE ANY.
DATA: v_tabname TYPE tabname.

LOOP AT RT_KOTABNR INTO S_KOTABNR.

  CONCATENATE S_KOTABNR-KVEWE S_KOTABNR-KOTABNR INTO V_TABNAM.


  CREATE DATA t_data TYPE (v_tabnam).

  ASSIGN t_data->* TO <fs>.

  CHECK sy-subrc = 0.

*selcetion from condition tables 
  SELECT SINGLE *
  INTO <fs>
  FROM (V_TABNAM)
  WHERE KNUMH = S_KOTABNR-KNUMH
  AND DATAB <= SY-DATUM
  AND DATBI >= SY-DATUM.


*Condition record found 
   IF SY-SUBRC = 0.

    ASSIGN COMPONENT 'KUNNR' OF STRUCTURE <FS> TO <KUNNRFLD>.

Sold-to assignment 
  IF SY-SUBRC = 0.
    S_KUNNR-KUNNR = <KUNNRFLD>.
    APPEND S_KUNNR TO RT_KUNNR.

  ENDIF.

   ENDIF.
ENDLOOP.

Thanks

Naren

Former Member
0 Kudos

Naren,

Thanks for your reply. Your solution did work. The approach of dynamically creating strutures based on table was extremely helpful.I was rather trying to trying to manupulate work areas like s_a750, a_752,etc, for each table.