Está en la página 1de 7

FIELD-SYMBOLS : Asignacion y Comparacion de Datos en Forma Dinamica

en: 09 de Noviembre de 2012, 05:43:56 am

La de idea de esta rutina es no tener que estar asignando variables, estructuras o comparando siempre lnea a
lnea...
Esta idea llego cuando estaba desarrollando una aplicacin que debe maneja bastantes datos en memoria,
poder modificar
datos y luego reversar los datos, asignar valores a variables desde una pantalla a varios campos de distintas
reas de trabajo...
entonces pens...si SAP maneja el concepto de reas de trabajo...porque no aplicar esto a mi
programa...entonces pens en crear una
tabla interna con correlativos de reas o procesos y los campos de estructuras o variables que deseo estar
asignando de un lado a otro y
como resultado sali este programita...Ojala les sirva ...El cdigo fuente da para mucho mas...
Cualquier idea o aporte...ser bien recibido

REPORT y_proceso_dinamico.

*-----------------------------------------------------------------------------------------------------------------*
* Tabla para Catalogo de Campos de TBI's y Variables
* Para Utilizar Field-Symbols en Asignacion Dinamica
* De Datos desde un Lado a Otro...
*-----------------------------------------------------------------------------------------------------------------*
TYPES : BEGIN OF ty_itab,
proceso(5)
tabla01

TYPE n,
TYPE tabname,

campo01
tabla02

TYPE fieldname,
TYPE tabname,

campo02

TYPE fieldname,

" Correlativo Identifica Datos a Procesar


" Area de Trabajo 01
" Campo / Variable Area de Trabajo 01
" Area de Trabajo 01
" Campo / Variable Area de Trabajo 01

END OF ty_itab.
DATA : ti_itab
wa_itab

TYPE STANDARD TABLE OF ty_itab,


TYPE ty_itab.

*-----------------------------------------------------------------------------------------------------------------*
DATA : gd_telefono_01(15)
gd_telefono_02(15)

TYPE c,
TYPE c.

*-----------------------------------------------------------------------------------------------------------------*
DATA : lx_kna1

TYPE kna1.

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

DATA : gd_retorno(1)

TYPE c.

*-----------------------------------------------------------------------------------------------------------------*
DATA : BEGIN OF wa_area_001,
name1

LIKE lx_kna1-name1,

ort01

LIKE lx_kna1-ort01,

regio

LIKE lx_kna1-regio,

name3

LIKE lx_kna1-name3,

fono_01(20)

TYPE c,

fono_02(20)

TYPE c,

fecha

TYPE datum,

hora

TYPE uzeit,

END OF wa_area_001.
DATA : gd_usuario(15)

TYPE c.

*
*-----------------------------------------------------------------------------------------------------------------*
* MACRO : MC_ADD_TO_ITAB : Agrega definiciones de asignacion o comparacion
*-----------------------------------------------------------------------------------------------------------------*
*
DEFINE mc_add_to_itab.
*
clear : wa_itab.
wa_itab-proceso

= &1.

wa_itab-tabla01

= &2.

wa_itab-campo01
wa_itab-tabla02
wa_itab-campo02

= &3.
= &4.
= &5.

append wa_itab to ti_itab.


*
END-OF-DEFINITION.
*
*-----------------------------------------------------------------------------------------------------------------*
* START-OF-SELECTION
*-----------------------------------------------------------------------------------------------------------------*
*
START-OF-SELECTION.
*
PERFORM llena_tbi_diccionario.
*-----------------------------------------------------------------------------------------------------------------*
* llenado de las tablas internas o variables
* Aqui el Codigo...de Ejemplo. AREA 01
*-----------------------------------------------------------------------------------------------------------------*

wa_area_001-name1

= 'JUAN PEREZ GONZALEZ'.

wa_area_001-ort01

= 'CUALQUIER COSA'.

wa_area_001-regio

= '13'.

wa_area_001-name3

= 'NOMBRE TRES'.

wa_area_001-fono_01

= '(56 2) 6771474'.

wa_area_001-fono_02

= '(56 9) 9234532'.

gd_usuario

= 'XXXX'.

BREAK-POINT.
* REVISAR ESTADO DE WA_AREA_001 Y LX_KNA1 Y LA VARIABLE GD_USUARIO
*-----------------------------------------------------------------------------------------------------------------*
* Mover de Izquierda a Derecha.
PERFORM frm_proceso_dinamico USING 'DE_01_A_02'
'00001'
CHANGING gd_retorno.
BREAK-POINT.
* GD_RETORNO = 'T' --> OK
* GD_RETORNO = 'F' --> ERROR
*
* REVISAR ESTADO DE WA_AREA_001 Y LX_KNA1 Y LA VARIABLE GD_USUARIO

*-----------------------------------------------------------------------------------------------------------------*
* llenado de las tablas internas o variables
* Aqui el Codigo...de Ejemplo. AREA 02
*-----------------------------------------------------------------------------------------------------------------*
lx_kna1-name1

= 'JOSE LX_KNA1'.

gd_telefono_01

= '(56 2) LX_KNA1'.

gd_telefono_02

= '(56 9) LX_KNA1'.

*-----------------------------------------------------------------------------------------------------------------*
* Mover de Derecha a Izquierda.
PERFORM frm_proceso_dinamico USING 'DE_02_A_01'
'00001'
CHANGING gd_retorno.
BREAK-POINT.
* GD_RETORNO = 'T' --> OK
* GD_RETORNO = 'F' --> ERROR
*

* REVISAR ESTADO DE WA_AREA_001 Y LX_KNA1 Y LA VARIABLE GD_USUARIO


*-----------------------------------------------------------------------------------------------------------------*
* Validar si contenido de los campos son iguales.
PERFORM frm_proceso_dinamico USING '01_EQ_02'
'00001'
CHANGING gd_retorno.
BREAK-POINT.
* GD_RETORNO = 'T' --> OK
* GD_RETORNO = 'F' --> ERROR
*
* REVISAR ESTADO DE WA_AREA_001 Y LX_KNA1 Y LA VARIABLE GD_USUARIO
*-----------------------------------------------------------------------------------------------------------------*
* Mover de Izquierda a Derecha.
PERFORM frm_proceso_dinamico USING 'DE_01_A_02'
'00001'
CHANGING gd_retorno.
BREAK-POINT.
* GD_RETORNO = 'T' --> OK
* GD_RETORNO = 'F' --> ERROR
*
* REVISAR ESTADO DE WA_AREA_001 Y LX_KNA1 Y LA VARIABLE GD_USUARIO
*
*
END-OF-SELECTION.
*
*-----------------------------------------------------------------------------------------------------------------*
* Aqui es donde vamos agregando las estrcuras, tablas o variables que deaseamos
* asignar o comparar en un determinado momento
*-----------------------------------------------------------------------------------------------------------------*
*
FORM llena_tbi_diccionario.
REFRESH : ti_itab.
CLEAR

: ti_itab, wa_itab.

mc_add_to_itab

'00001'

'WA_AREA_001'

'NAME1'

'LX_KNA1'

'NAME1'.

mc_add_to_itab

'00001'

'WA_AREA_001'

'ORT01'

'LX_KNA1'

'ORT01'.

mc_add_to_itab

'00001'

'WA_AREA_001'

'REGIO'

'LX_KNA1'

'REGIO'.

mc_add_to_itab

'00001'

'WA_AREA_001'

'NAME3'

mc_add_to_itab

'00001'

'WA_AREA_001'

'FONO_01'

''

'GD_TELEFONO_01'.

mc_add_to_itab

'00001'

'WA_AREA_001'

'FONO_02'

''

'GD_TELEFONO_02'.

mc_add_to_itab

'00001'

'WA_AREA_001'

'FECHA'

''

'SY-DATUM'.

mc_add_to_itab

'00001'

'WA_AREA_001'

'HORA'

''

'SY-UZEIT'.

mc_add_to_itab

'00001'

''

'GD_USUARIO'

'LX_KNA1'

''

'NAME3'.

'SY-UNAME'.

ENDFORM.

"

*
*-----------------------------------------------------------------------------------------------------------------*
* FORM : FRM_PROCESO_DINAMICO : Realiza Asignaciones o Comparaciones se excluyen
*

las asignacines a variables de sistema "SY-*"

*-----------------------------------------------------------------------------------------------------------------*
*
FORM frm_proceso_dinamico USING

p_ld_sentido

p_ld_proceso
CHANGING p_gd_retorno.
*
DATA : ld_tbicamp1(40) TYPE c,
ld_tbicamp2(40) TYPE c.
DATA : ld_var_aux1(100) TYPE c,
ld_var_aux2(100) TYPE c.
FIELD-SYMBOLS : <fs_scr>, <fs_tbi>.
FIELD-SYMBOLS : <fs_ax1>, <fs_ax2>.
p_gd_retorno = 'T'.
*
LOOP AT ti_itab INTO wa_itab WHERE proceso EQ p_ld_proceso.
CLEAR : ld_tbicamp1, ld_tbicamp2.
*
IF ( wa_itab-tabla01 NE '' ).
CONCATENATE wa_itab-tabla01 '-' wa_itab-campo01 INTO ld_tbicamp1.
ELSE.
MOVE wa_itab-campo01 TO ld_tbicamp1.
ENDIF.
*
IF ( wa_itab-tabla02 NE '' ).
CONCATENATE wa_itab-tabla02 '-' wa_itab-campo02 INTO ld_tbicamp2.
ELSE.
MOVE wa_itab-campo02 TO ld_tbicamp2.

ENDIF.
ASSIGN (ld_tbicamp1) TO <fs_scr>.
ASSIGN (ld_tbicamp2) TO <fs_tbi>.
CASE p_ld_sentido.
WHEN 'DE_01_A_02'.
*
IF ( wa_itab-campo02+00(03) NE 'SY-' ).
IF ( wa_itab-tabla01 EQ '' ) AND ( wa_itab-tabla02 EQ '' ).
ASSIGN (ld_tbicamp2) TO <fs_ax2>.
<fs_tbi> = <fs_scr>.
ELSE.
<fs_tbi> = <fs_scr>.
ENDIF.
ENDIF.

*
WHEN 'DE_02_A_01'.
*
IF ( wa_itab-campo01+00(03) NE 'SY-' ).
IF ( wa_itab-tabla01 EQ '' ) AND ( wa_itab-tabla02 EQ '' ).
ASSIGN (ld_tbicamp2) TO <fs_ax2>.
<fs_scr> = <fs_ax2>.
ELSE.
<fs_scr> = <fs_tbi>.
ENDIF.
ENDIF.
*
WHEN '01_EQ_02'.
IF ( <fs_tbi> NE <fs_scr> ).
p_gd_retorno = 'F'.
EXIT.
ENDIF.
ENDCASE.
*

ENDLOOP.
*
ENDFORM.
*

"

También podría gustarte