Ver Mensaje Individual
  #3  
Viejo 26/10/10, 14:36:16
mitosap mitosap is offline
Member
 
Fecha de Ingreso: sep 2009
Mensajes: 57
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



Saludos.
Responder Con Cita