PDA

Ver la Versión Completa : Que son y para que se usan los field-simbos


Leonel Espitia Torres
25/10/10, 15:53:56
Quisiera saber que son los field-simbols y para que se utilizan

Crismol
25/10/10, 19:40:06
Hola, bueno yo los Field-symbols los asocio a punteros, es decir, para mi son un puntero que apunta a una tabla interna y te sirven para acceder a ella, leer e insertar registros.

Espero t sirva ^.^

mitosap
26/10/10, 14:36:16
Hola Leonel.

Complementando a Crismol, con un workarea (WA) tienes que hacer un modify a la tabla si quieres cambiar datos, con un field-symbols (FS) es directo porque es un "puntero" a ese registro.
Fijate en este ejm. que ubique en este foro, el cual explica lo anterior.

EJEMPLO 1.

REPORT ZRFI_PRUEBA_VARIAS_JOA.

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.
* Elevamos al cuadrado
DO 4 TIMES.
LINE-COL1 = SY-INDEX.
LINE-COL2 = SY-INDEX ** 2.
APPEND LINE TO ITAB.
ENDDO.

WRITE: 'Tabla Inicial'.
LOOP AT ITAB ASSIGNING <FS>.
WRITE: / <FS>-COL1, <FS>-COL2.
ENDLOOP.

* Ahora usaremos los FS (punteros de registro) para asignar a 2 el valor de
* 100
READ TABLE ITAB WITH TABLE KEY COL1 = 2 ASSIGNING <FS>.
<FS>-COL2 = 100.

* Ahora usaremos los FS (punteros de registro) para eliminar la fila 3
READ TABLE ITAB WITH TABLE KEY COL1 = 3 ASSIGNING <FS>.
DELETE ITAB INDEX 3.

* Aqui volvemos a escribir la tabla ya modificada.
SKIP.
WRITE: 'Tabla Alterada'.
LOOP AT ITAB ASSIGNING <FS>.
WRITE: / <FS>-COL1, <FS>-COL2.
ENDLOOP.



Otra ventaja de los field-symbols es el performance, para ello hay otro ejm. posteado en algun foro que se explica por si solo. Se compara la velocidad usando WA y FS.

EJEMPLO 2.

REPORT ZRFI_PRUEBA_VARIAS_JOA.

TYPES: BEGIN OF ty_data,
value TYPE string,
END OF ty_data.

DATA: t_data TYPE STANDARD TABLE OF ty_data,
w_data TYPE ty_data.

FIELD-SYMBOLS: <fs_data> LIKE LINE OF t_data.

DATA: rt_str TYPE i,
rt_end TYPE i,
run_time1 TYPE p DECIMALS 2,
run_time2 TYPE p DECIMALS 2.

DO 500000 TIMES.
w_data-value = sy-index.
APPEND w_data TO t_data.
ENDDO.

GET RUN TIME FIELD rt_str.
LOOP AT t_data INTO w_data.

ENDLOOP.

GET RUN TIME FIELD rt_end.
run_time1 = ( rt_end - rt_str ) / 1000000 .

WRITE: 'Runtime WORKAREA', run_time1.

*------------------------------------------------

GET RUN TIME FIELD rt_str.
LOOP AT t_data ASSIGNING <fs_data>.

ENDLOOP.
GET RUN TIME FIELD rt_end.
run_time2 = ( rt_end - rt_str ) / 1000000 .

WRITE: 'Runtime FIELD-SYMBOL', run_time2.

Este último ejemplo esta en este link
http://atejada.blogspot.com/2008/01/workarea-vs-field-symbols.html


Saludos.