Thursday, January 31, 2008

Campos y tablas


La mayoría de veces, cuando estamos programando, necesitamos buscar en que tablas existe un campo...Y otras veces necesitamos saber en que tablas se encuentra dicho campo...O lo que es mejor, es que tablas se encuentras dos campos.

El proceso normal y acostumbrado, es ir a la SE11 y hacer un Where-Used list...Lo cual obviamente nos garantiza una lista de tablas, en las cuales no necesariamente no van a estar los dos campos que necesitamos...Por eso, hice un pequeño programa que nos hace la vida un poco más sencilla -;)




REPORT ydummy_atg.

TABLES: dd03l.

TYPES: BEGIN OF ty_dd03l,
tabname TYPE dd03l-tabname,
fieldname TYPE dd03l-fieldname,
END OF ty_dd03l.

DATA: t_dd03l TYPE STANDARD TABLE OF dd03l,
t_dd03l_aux TYPE STANDARD TABLE OF dd03l.

DATA : field1(30).

FIELD-SYMBOLS: <fs_dd03l> LIKE LINE OF t_dd03l,
<fs_dd03l_aux> LIKE LINE OF t_dd03l.

SELECTION-SCREEN BEGIN OF BLOCK test.
PARAMETERS:
p_field1 TYPE dd03l-fieldname,
p_field2 TYPE dd03l-fieldname.
SELECTION-SCREEN END OF BLOCK test.

START-OF-SELECTION.

SELECT dd03l~tabname fieldname
INTO TABLE t_dd03l
FROM ( dd03l INNER JOIN dd02l
ON dd03l~tabname EQ dd02l~tabname )
WHERE tabclass IN ('TRANSP','VIEW')
AND fieldname EQ p_field1
OR fieldname EQ p_field2.

SORT t_dd03l.

LOOP AT t_dd03l ASSIGNING <fs_dd03l>.
IF <fs_dd03l>-fieldname EQ p_field1.
READ TABLE t_dd03l ASSIGNING <fs_dd03l_aux>
WITH KEY tabname = <fs_dd03l>-tabname
fieldname = p_field2.
IF sy-subrc EQ 0.
APPEND <fs_dd03l_aux> TO t_dd03l_aux.
ENDIF.
ELSE.
READ TABLE t_dd03l ASSIGNING <fs_dd03l_aux>
WITH KEY tabname = <fs_dd03l>-tabname
fieldname = p_field1.
IF sy-subrc EQ 0.
APPEND <fs_dd03l_aux> TO t_dd03l_aux.
ENDIF.
ENDIF.
ENDLOOP.

DELETE ADJACENT DUPLICATES FROM t_dd03l_aux
COMPARING tabname.

LOOP AT t_dd03l_aux ASSIGNING <fs_dd03l_aux>.
WRITE:/ <fs_dd03l_aux>-tabname.
ENDLOOP.

AT LINE-SELECTION.

SET PARAMETER ID 'DTB' FIELD sy-lisel+0(15).

CALL TRANSACTION 'SE11' AND SKIP FIRST SCREEN.


Saludos,

Blag.

3 comments:

Alvaro G. Achín Agüero said...

es un programa muy util!!! aunque no este completo. lo hiciste a proposito???

Alvaro "Blag" Tejada Galindo said...

No está completo??? No se a que te refieres...El programa pide dos campos, y te devuelve todas las tablas y vistas donde están ambos campos...Si haces doble clic te llevan a la SE11...Que más crees que necesita???

Saludos,

Blag.

Alvaro G. Achín Agüero said...

ayer cuando copie el codigo no estaban definidos los FIELD-SYMBOLS, que raro, lo habre copiado mal!!!
es un programa muy util, hoy me sirvio de mucha ayuda.