Full type specification
REPORT demo_field_symbols_type .
DATA: BEGIN OF line,
col1(1) TYPE c,
col2(1) TYPE c VALUE 'X',
END OF line.
FIELD-SYMBOLS
LIKE line.
ASSIGN line TO
.
MOVE
-col2 TO
-col1.
WRITE:
-col1,
-col2.
Forcing structures
REPORT demo_field_symbols_structure .
DATA: wa(10) TYPE c VALUE '0123456789'.
DATA: BEGIN OF line1,
col1(3) TYPE c,
col2(2) TYPE c,
col3(5) TYPE c,
END OF line1.
DATA: BEGIN OF line2,
col1(2) TYPE c,
col2 TYPE sy-datum,
END OF line2.
* obsolete -------------------------------------------------------------
FIELD-SYMBOLS:
STRUCTURE line1 DEFAULT wa,
STRUCTURE line2 DEFAULT wa.
* correct --------------------------------------------------------------
FIELD-SYMBOLS
LIKE line1.
ASSIGN wa TO
CASTING.
FIELD-SYMBOLS
LIKE line2.
ASSIGN wa TO
CASTING.
* ----------------------------------------------------------------------
WRITE: /
-col1,
-col2,
-col3,
/
-col1,
-col2.
SKIP.
WRITE: /
-col1,
-col2,
-col3,
/
-col1,
-col2.
Static assign
REPORT demo_field_symbols_stat_assign .
FIELD-SYMBOLS:
TYPE ANY,
TYPE i.
DATA: text(20) TYPE c VALUE 'Hello, how are you?',
num TYPE i VALUE 5,
BEGIN OF line1,
col1 TYPE f VALUE '1.1e+10',
col2 TYPE i VALUE '1234',
END OF line1,
line2 LIKE line1.
ASSIGN text TO
.
ASSIGN num TO
.
DESCRIBE FIELD
LENGTH
.
WRITE: /
, 'has length', num.
ASSIGN line1 TO
.
ASSIGN line2-col2 TO
.
MOVE
TO line2.
ASSIGN 'LINE2-COL2 =' TO
.
WRITE: /
,
.
Assign with offset
REPORT demo_field_symbols_stat_as_off .
FIELD-SYMBOLS
TYPE ANY.
DATA: BEGIN OF line,
string1(10) VALUE '0123456789',
string2(10) VALUE 'abcdefghij',
END OF line.
WRITE / line-string1+5.
ASSIGN line-string1+5 TO
.
WRITE /
.
ASSIGN line-string1+5(*) TO
.
WRITE /
.
REPORT demo_field_symbols_stat_as_of2 .
FIELD-SYMBOLS
TYPE ANY.
DATA: BEGIN OF line,
a TYPE c VALUE '1', b TYPE c VALUE '2',
c TYPE c VALUE '3', d TYPE c VALUE '4',
e TYPE c VALUE '5', f TYPE c VALUE '6',
g TYPE c VALUE '7', h TYPE c VALUE '8',
END OF line,
off TYPE i,
len TYPE i VALUE 2.
DO 2 TIMES.
off = sy-index * 3.
ASSIGN line-a+off(len) TO
.
= 'XX'.
ENDDO.
DO 8 TIMES.
off = sy-index - 1.
ASSIGN line-a+off(1) TO
.
WRITE
.
ENDDO.
Dynamic assign
REPORT demo_field_symbols_dynami_as_2 .
TABLES sbook.
DATA: name1(20) TYPE c VALUE 'SBOOK-FLDATE',
name2(20) TYPE c VALUE 'NAME1'.
FIELD-SYMBOLS
TYPE ANY.
ASSIGN TABLE FIELD (name1) TO
.
WRITE: / 'SY-SUBRC:', sy-subrc.
ASSIGN TABLE FIELD (name2) TO
.
WRITE: / 'SY-SUBRC:', sy-subrc.
Assigning field symbols
REPORT demo_field_symbols_dynami_as_3 .
DATA: BEGIN OF s,
a TYPE c VALUE '1', b TYPE c VALUE '2', c TYPE c VALUE '3',
d TYPE c VALUE '4', e TYPE c VALUE '5', f TYPE c VALUE '6',
g TYPE c VALUE '7', h TYPE c VALUE '8',
END OF s.
DATA off TYPE i.
FIELD-SYMBOLS
TYPE ANY.
ASSIGN s-a TO
.
DO 4 TIMES.
off = sy-index - 1.
ASSIGN
+off(1) TO
.
WRITE
.
ENDDO.
Assigning a structure by component
REPORT demo_field_symbols_assign_comp .
DATA: BEGIN OF line,
col1 TYPE i VALUE '11',
col2 TYPE i VALUE '22',
col3 TYPE i VALUE '33',
END OF line.
DATA comp(5) TYPE c VALUE 'COL3'.
FIELD-SYMBOLS:
TYPE ANY,
TYPE ANY,
TYPE ANY.
ASSIGN line TO
.
ASSIGN comp TO
.
DO 3 TIMES.
ASSIGN COMPONENT sy-index OF STRUCTURE
TO
.
WRITE
.
ENDDO.
ASSIGN COMPONENT
OF STRUCTURE
TO
.
WRITE /
.
Casting with field symbol type
REPORT demo_field_symbols_casting.
TYPES: BEGIN OF t_date,
year(4) TYPE n,
month(2) TYPE n,
day(2) TYPE n,
END OF t_date.
FIELD-SYMBOLS
TYPE t_date.
ASSIGN sy-datum TO
CASTING.
WRITE / sy-datum.
SKIP.
WRITE: /
-year , /
-month, /
-day.
Casting with explicit type
REPORT demo_field_symbols_casting_typ.
TYPES: BEGIN OF t_date,
year(4) TYPE n,
month(2) TYPE n,
day(2) TYPE n,
END OF t_date.
FIELD-SYMBOLS:
TYPE ANY,
TYPE n.
ASSIGN sy-datum TO
CASTING TYPE t_date.
WRITE / sy-datum.
SKIP.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE
TO
.
IF sy-subrc <> 0.
EXIT.
ENDIF.
WRITE /
.
ENDDO.
Casting with predefined data types
REPORT demo_field_symbols_assign_type .
DATA txt(8) TYPE c VALUE '19980606'.
DATA mytype(1) VALUE 'X'.
FIELD-SYMBOLS
TYPE ANY.
ASSIGN txt TO
.
WRITE /
.
SKIP.
* obsolete -------------------------------------------------------------
ASSIGN txt TO
TYPE 'D'.
WRITE /
.
ASSIGN txt TO
TYPE mytype.
WRITE /
.
SKIP.
* correct --------------------------------------------------------------
ASSIGN txt TO
CASTING TYPE d.
WRITE /
.
ASSIGN txt TO
CASTING TYPE (mytype).
WRITE /
.
Casting decimla places
REPORT demo_field_symbols_assign_deci .
DATA: pack1 TYPE p DECIMALS 2 VALUE '400',
pack2 TYPE p DECIMALS 2,
pack3 TYPE p DECIMALS 2.
FIELD-SYMBOLS:
TYPE ANY ,
TYPE ANY.
WRITE: / 'PACK1', pack1.
SKIP.
* obsolete -------------------------------------------------------------
ASSIGN pack1 TO
DECIMALS 1.
WRITE: / '
',
.
pack2 =
.
WRITE: / 'PACK2', pack2.
ASSIGN pack2 TO
DECIMALS 4.
WRITE: / '
',
.
pack3 =
+
.
WRITE: / 'PACK3', pack3.
= '1234.56789'.
WRITE: / '
',
.
WRITE: / 'PACK2', pack2.
SKIP.
* correct --------------------------------------------------------------
ASSIGN pack1 TO
CASTING TYPE p DECIMALS 1.
WRITE: / '
',
.
pack2 =
.
WRITE: / 'PACK2', pack2.
ASSIGN pack2 TO
CASTING TYPE p DECIMALS 4.
WRITE: / '
',
.
pack3 =
+
.
WRITE: / 'PACK3', pack3.
= '1234.56789'.
WRITE: / '
',
.
WRITE: / 'PACK2', pack2.
Data areas for field symbols
REPORT demo_field_symbols_assign_err .
DATA: text1(10) TYPE c, text2(10) TYPE c, text3(5) TYPE c.
FIELD-SYMBOLS
TYPE ANY.
DO 100 TIMES. "Runtime-Error!
ASSIGN text1+sy-index(1) TO
.
ENDDO.
Data references
REPORT demo_data_reference.
TYPES: BEGIN OF t_struct,
col1 TYPE i,
col2 TYPE i,
END OF t_struct.
DATA: dref1 TYPE REF TO data,
dref2 TYPE REF TO data.
FIELD-SYMBOLS:
TYPE t_struct,
TYPE i.
CREATE DATA dref1 TYPE t_struct.
ASSIGN dref1->* TO
.
-col1 = 1.
-col2 = 2.
dref2 = dref1.
ASSIGN dref2->* TO
CASTING.
WRITE /
.
GET REFERENCE OF
-col2 INTO dref2.
ASSIGN dref2->* TO
.
WRITE /
.
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1653907