Ver Mensaje Individual
  #11  
Viejo 29/03/10, 19:03:07
AlexisChavero
 
Mensajes: n/a
Post Bajar Dynpros Y Tablas A Txt

Hola a todos,
En una oportunidad me brindaron el siguiente codigo para bajar tablas Z a un archivo .TXT (plano), espero que les sirva:

*&---------------------------------------------------------------------*
*& Report ZZZ_UP_DOWN_TABLAS *
*&---------------------------------------------------------------------*
REPORT ZZZ_UP_DOWN_TABLAS NO STANDARD PAGE HEADING LINE-SIZE 142.
************************************************************************
* Elementos de texto del programa: *
************************************************************************
* Textos de Seleccion *
* P_DIR_D Directorio Salida *
* P_DIR_U Archivo Entrada *
* P_DWLD Download? *
* P_TEST Solo Prueba *
* P_UPLD Uppload? *
* SO_TABL Tablas *
* Simbolos de Texto *
* 900 El Siguiente Objeto es Estandar: *
* S01 Obtener Tablas *
* S02 Guardar Tablas *
************************************************************************

* tabla interna para info de tablas
TYPES: BEGIN OF ty_tablas,
line(600) type C,
END OF ty_tablas.

**************
* Tablas Std *
**************
TABLES: trdir, tadir, dd02l,
trkey. "Clave completa de un objeto transporte

*******************
* Tablas Internas *
*******************
* reporte de objetos a bajar/subir
DATA: BEGIN OF gt_reporte OCCURS 0,
name LIKE trdir-name, "nombre objeto
object LIKE tadir-object, "tipo de objeto
text LIKE trdirt-text, "descripcion
END OF gt_reporte.

* tabla con info de tablas
DATA W_SALIDA TYPE ty_tablas OCCURS 0 WITH HEADER LINE.
DATA W_ENTRADA TYPE ty_tablas OCCURS 0 WITH HEADER LINE.

DATA:
W_TABL_INFO TYPE RPY_TABL OCCURS 0 WITH HEADER LINE,
W_TABL_TECH TYPE RPY_TBTECH OCCURS 0 WITH HEADER LINE,
W_TABL_FIELDS TYPE RPY_FIEL OCCURS 0 WITH HEADER LINE,
W_DTEL_INFO TYPE RPY_DTEL OCCURS 0 WITH HEADER LINE,
W_DOMA_INFO TYPE RPY_DOMA OCCURS 0 WITH HEADER LINE,
W_DOMA_VALUES TYPE RPY_DVAL OCCURS 0 WITH HEADER LINE.

DATA: wc_dir type string,
guiobj type ref to cl_gui_frontend_services,
wc_name type string,
wt_filetable type filetable,
wc_filter type string,
wc_rc type i,
wc_uact type i.

**************
* Variables *
**************
DATA: wi_tam LIKE sy-fdpos, " Long. de string
wc_nok. " Validaciones de directorios

**************
* Constantes *
**************
CONSTANTS: cc_mens1(150) TYPE c VALUE 'Ingrese nombres de Tablas.',
cc_mens2(150) TYPE c VALUE 'Ingrese directorio de download.',
cc_mens3(150) TYPE c VALUE 'Ingrese Archivo de upload.',
cc_error(30) TYPE c VALUE 'Error en la apertura del arch.'.

*************************
* Pantalla de Selección *
*************************

* DOWNLOAD?
PARAMETER: p_dwld RADIOBUTTON GROUP rad1. "Download?
SELECTION-SCREEN: BEGIN OF BLOCK bl1 WITH FRAME TITLE text-s01.
* Objetos a Bajar:
SELECT-OPTIONS: so_tabl FOR dd02l-tabname. "Tablas
PARAMETER: p_dir_d LIKE rlgrap-filename DEFAULT 'C:\'.
"Directorio

SELECTION-SCREEN: END OF BLOCK bl1.

SELECTION-SCREEN: ULINE.

* UPLOAD?
PARAMETER: p_upld RADIOBUTTON GROUP rad1. "Upload ?
SELECTION-SCREEN: BEGIN OF BLOCK bl2 WITH FRAME TITLE text-s02.
PARAMETER: p_dir_u LIKE rlgrap-filename DEFAULT 'C:\'.
"irectorio

* Tipos de objetos a Subir:

SELECTION-SCREEN: SKIP.
SELECTION-SCREEN: END OF BLOCK bl2.

PARAMETER: p_langu LIKE sy-langu DEFAULT sy-langu NO-DISPLAY.

PARAMETER: p_test AS CHECKBOX DEFAULT 'X'.

************************
* AT SELECTION-SCREEN *
************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dir_d.

CREATE OBJECT GUIOBJ.

CALL METHOD guiobj->directory_browse
EXPORTING
WINDOW_TITLE = 'Seleccione el Directorio Destino'
CHANGING
selected_folder = wc_dir
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
others = 4
.

CHECK sy-subrc EQ 0.

MOVE wc_dir to p_dir_d.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dir_u.

CREATE OBJECT GUIOBJ.

wc_filter = '(Archivos de Texto *.txt)|*.txt|'.
REFRESH wt_filetable.

CALL METHOD guiobj->file_open_dialog
EXPORTING
WINDOW_TITLE = 'Seleccione el Archivo a Procesar'
FILE_FILTER = wc_filter
CHANGING
file_table = wt_filetable
rc = wc_rc
USER_ACTION = wc_uact
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
others = 5
.

CHECK sy-subrc EQ 0.

CHECK wc_uact NE guiobj->ACTION_CANCEL.

READ TABLE wt_filetable INDEX 1 INTO wc_name.

MOVE wc_name to p_dir_u.

AT SELECTION-SCREEN.
CASE 'X'.
WHEN p_dwld.
* si no cargaron nombres de objetos...
IF so_tabl IS INITIAL.
MESSAGE e899(mm) WITH cc_mens1.
ENDIF.
* si no cargaron directorio de download
IF p_dir_d IS INITIAL.
MESSAGE e899(mm) WITH cc_mens2.
ELSE.
PERFORM chequear_directorio USING p_dir_d CHANGING wc_nok.
ENDIF.
WHEN p_upld.
* si no cargaron directorio de upload
IF p_dir_u IS INITIAL.
MESSAGE e899(mm) WITH cc_mens3.
ELSE.
* PERFORM chequear_directorio USING p_dir_u CHANGING wc_nok.
ENDIF.
ENDCASE.

************************
* START-OF-SELECTION *
************************
START-OF-SELECTION.

CLEAR: W_SALIDA, W_ENTRADA, W_TABL_INFO, W_TABL_TECH,
W_TABL_FIELDS, W_DTEL_INFO, W_DOMA_INFO, W_DOMA_VALUES.
REFRESH: W_SALIDA, W_ENTRADA, W_TABL_INFO, W_TABL_TECH,
W_TABL_FIELDS, W_DTEL_INFO, W_DOMA_INFO, W_DOMA_VALUES.

IF wc_nok IS INITIAL.

* DOWNLOAD
IF p_dwld EQ 'X'.

PERFORM bajar_tablas.

* UPLOAD
ELSE.

PERFORM subir_tablas.

ENDIF.

* REPORTE
PERFORM imprimir_reporte.

ENDIF.

*********************
* END-OF-SELECTION *
*********************
END-OF-SELECTION.

*&---------------------------------------------------------------------*
*& Form chequear_directorio
*&---------------------------------------------------------------------*
FORM chequear_directorio CHANGING: p_dir wc_nok.

DATA: lc_exist.

CHECK NOT p_dir IS INITIAL.

* Agrego la barra al final del path por si no la pusieron...
REPLACE '\\' WITH '@#' INTO p_dir.
CONCATENATE p_dir '\' INTO p_dir.
REPLACE '\\' WITH '\' INTO p_dir.
REPLACE '@#' WITH '\\' INTO p_dir.

CALL FUNCTION 'WS_QUERY'
EXPORTING
filename = p_dir
query = 'DE' "directory exists
IMPORTING
return = lc_exist
EXCEPTIONS
inv_query = 1
no_batch = 2
frontend_error = 3
OTHERS = 4.

IF lc_exist NE 1.
wc_nok = 'X'.
MESSAGE i001(00) WITH 'El directiorio, ' p_dir 'no existe.'.
ENDIF.

ENDFORM. " chequear_directorio

*&---------------------------------------------------------------------*
*& Form subir_tablas
*&---------------------------------------------------------------------*
FORM subir_tablas.

* levanto el archivo
PERFORM armar_tabla_upload.

IF p_test IS INITIAL.

PERFORM upload_tablas.

ENDIF.

ENDFORM. " subir_tablas

*&---------------------------------------------------------------------*
*& Form CHEQUEAR_CLASE
*&---------------------------------------------------------------------*
FORM chequear_clase USING value(p_name) type TADIR-OBJ_NAME
CHANGING p_subrc LIKE sy-subrc.

P_SUBRC = 0.

SELECT SINGLE DEVCLASS
FROM TADIR
INTO TADIR-DEVCLASS
WHERE OBJ_NAME EQ P_NAME.

IF sy-subrc <> 0 OR ( tadir-devclass(1) NE 'Z' AND
tadir-devclass(1) NE 'Y' AND
tadir-devclass NE '$TMP' ).
WRITE: / text-900, p_name.
p_subrc = 4.
ENDIF.

ENDFORM. " CHEQUEAR_CLASE

*&---------------------------------------------------------------------*
*& Form ARMAR_TABLA_UPLOAD
*&---------------------------------------------------------------------*
FORM armar_tabla_upload.

DATA: LC_ENTRADA TYPE STRING,
LC_TABLA(15) TYPE C.

MOVE P_DIR_U TO LC_ENTRADA.

CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = LC_ENTRADA
tables
data_tab = W_ENTRADA
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17
.
IF sy-subrc <> 0.
ENDIF.

LOOP AT W_ENTRADA.

CASE W_ENTRADA.

WHEN '###$$$%%%&&&:TABL_INFO'.
LC_TABLA = 'TABL_INFO'.

WHEN '###$$$%%%&&&:TABL_TECH'.
LC_TABLA = 'TABL_TECH'.

WHEN '###$$$%%%&&&:TABL_FIELDS'.
LC_TABLA = 'TABL_FIELDS'.

WHEN '###$$$%%%&&&TEL_INFO'.
LC_TABLA = 'DTEL_INFO'.

WHEN '###$$$%%%&&&OMA_INFO'.
LC_TABLA = 'DOMA_INFO'.

WHEN '###$$$%%%&&&OMA_VALUES'.
LC_TABLA = 'DOMA_VALUES'.

WHEN OTHERS.

CASE LC_TABLA.

WHEN 'TABL_INFO'.
MOVE W_ENTRADA TO W_TABL_INFO.
APPEND W_TABL_INFO.
GT_REPORTE-NAME = W_TABL_INFO-TABLNAME.
GT_REPORTE-OBJECT = 'TABL'.
GT_REPORTE-TEXT = W_TABL_INFO-SHORTTEXT.
APPEND GT_REPORTE.

WHEN 'TABL_TECH'.
MOVE W_ENTRADA TO W_TABL_TECH.
APPEND W_TABL_TECH.

WHEN 'TABL_FIELDS'.
MOVE W_ENTRADA TO W_TABL_FIELDS.
APPEND W_TABL_FIELDS.

WHEN 'DTEL_INFO'.
MOVE W_ENTRADA TO W_DTEL_INFO.
APPEND W_DTEL_INFO.
GT_REPORTE-NAME = W_DTEL_INFO-DTELNAME.
GT_REPORTE-OBJECT = 'DTEL'.
GT_REPORTE-TEXT = W_DTEL_INFO-DDTEXT.
APPEND GT_REPORTE.

WHEN 'DOMA_INFO'.
MOVE W_ENTRADA TO W_DOMA_INFO.
APPEND W_DOMA_INFO.
GT_REPORTE-NAME = W_DOMA_INFO-DOMANAME.
GT_REPORTE-OBJECT = 'DOMA'.
GT_REPORTE-TEXT = W_DOMA_INFO-SHORTTEXT.
APPEND GT_REPORTE.

WHEN 'DOMA_VALUES'.
MOVE W_ENTRADA TO W_DOMA_VALUES.
APPEND W_DOMA_VALUES.

ENDCASE.

ENDCASE.

ENDLOOP.

ENDFORM. " ARMAR_TABLA_UPLOAD

*&---------------------------------------------------------------------*
*& Form bajar_tablas
*&---------------------------------------------------------------------*
FORM bajar_tablas .

PERFORM cargar_tablas.

IF p_test IS INITIAL.

PERFORM gravar_archivo_tablas.

ENDIF.

ENDFORM. " bajar_tablas

*&---------------------------------------------------------------------*
*& Form imprimir_reporte
*&---------------------------------------------------------------------*
FORM imprimir_reporte .

WRITE:/5 'Fecha: ', sy-datum, 30 'Usuario:' , sy-uname.

SKIP 1.

ULINE.
FORMAT COLOR COL_KEY.
WRITE: 1 '|', 3 'Objeto' , 45 '|' , 47 'Tipo' , 53 '|',
56 'Descripción' , 142 '|'.
FORMAT COLOR OFF.

ULINE.

LOOP AT gt_reporte.
WRITE:/1 '|', 3 gt_reporte-name , 45 '|' , 47 gt_reporte-object ,
53 '|', 56 gt_reporte-text , 142 '|'.


ENDLOOP.
ULINE.

ENDFORM. " imprimir_reporte

*&---------------------------------------------------------------------*
*& Form cargar_tablas
*&---------------------------------------------------------------------*
FORM cargar_tablas .

DATA:
LC_TABLAS TYPE RPY_TABL OCCURS 0 WITH HEADER LINE,
LC_TABL_INFO TYPE RPY_TABL,
LC_TABL_TECH TYPE RPY_TBTECH,
LC_TABL_FIELDS TYPE RPY_FIEL OCCURS 0 WITH HEADER LINE,

LC_SUBRC TYPE SY-SUBRC,
LC_NAME TYPE TADIR-OBJ_NAME.

CALL FUNCTION 'RPY_TABLE_SELECT'
EXPORTING
TABLE_NAME = 'Z*'
TABLES
tabl_inf_tab = LC_TABLAS
EXCEPTIONS
CANCELLED = 1
NOT_FOUND = 2
PERMISSION_ERROR = 3
OTHERS = 4
.
IF sy-subrc <> 0.
ENDIF.

LOOP AT LC_TABLAS.

IF NOT LC_TABLAS-TABLNAME IN SO_TABL.

DELETE LC_TABLAS.

ELSE.

MOVE LC_TABLAS-TABLNAME TO LC_NAME.
PERFORM CHEQUEAR_CLASE USING LC_NAME
CHANGING LC_SUBRC.
IF LC_SUBRC NE 0.
DELETE LC_TABLAS.
ENDIF.

ENDIF.

ENDLOOP.

LOOP AT LC_TABLAS.

REFRESH: LC_TABL_FIELDS.

CALL FUNCTION 'RPY_TABLE_READ'
EXPORTING
table_name = LC_TABLAS-TABLNAME
IMPORTING
TABL_INF = LC_TABL_INFO
TABL_TECHNICS = LC_TABL_TECH
tables
tabl_fields = LC_TABL_FIELDS
EXCEPTIONS
CANCELLED = 1
NOT_FOUND = 2
PERMISSION_ERROR = 3
ILLEGAL_TYPE = 4
OTHERS = 5
.
IF sy-subrc <> 0.
ENDIF.

GT_REPORTE-NAME = LC_TABL_INFO-TABLNAME.
GT_REPORTE-OBJECT = 'TABL'.
GT_REPORTE-TEXT = LC_TABL_INFO-SHORTTEXT.
APPEND GT_REPORTE.

APPEND LC_TABL_INFO TO W_TABL_INFO.
IF NOT LC_TABL_TECH IS INITIAL.
APPEND LC_TABL_TECH TO W_TABL_TECH.
ENDIF.

LOOP AT LC_TABL_FIELDS.

APPEND LC_TABL_FIELDS TO W_TABL_FIELDS.

IF LC_TABL_FIELDS-DTELNAME(1) EQ 'Z'.
PERFORM LEER_ELEMENTO_DATO USING
LC_TABL_FIELDS-DTELNAME.
ENDIF.

ENDLOOP.

ENDLOOP.

ENDFORM. " cargar_tablas

*&---------------------------------------------------------------------*
*& Form gravar_archivo_tablas
*&---------------------------------------------------------------------*
FORM gravar_archivo_tablas .

DATA: LC_SALIDA TYPE STRING.

LOOP AT W_TABL_INFO.
AT FIRST.
MOVE '###$$$%%%&&&:TABL_INFO' TO W_SALIDA.
APPEND W_SALIDA.
ENDAT.
MOVE W_TABL_INFO TO W_SALIDA.
APPEND W_SALIDA.
ENDLOOP.

LOOP AT W_TABL_TECH.
AT FIRST.
MOVE '###$$$%%%&&&:TABL_TECH' TO W_SALIDA.
APPEND W_SALIDA.
ENDAT.
MOVE W_TABL_TECH TO W_SALIDA.
APPEND W_SALIDA.
ENDLOOP.

LOOP AT W_TABL_FIELDS.
AT FIRST.
MOVE '###$$$%%%&&&:TABL_FIELDS' TO W_SALIDA.
APPEND W_SALIDA.
ENDAT.
MOVE W_TABL_FIELDS TO W_SALIDA.
APPEND W_SALIDA.
ENDLOOP.

LOOP AT W_DTEL_INFO.
AT FIRST.
MOVE '###$$$%%%&&&TEL_INFO' TO W_SALIDA.
APPEND W_SALIDA.
ENDAT.
MOVE W_DTEL_INFO TO W_SALIDA.
APPEND W_SALIDA.
ENDLOOP.

LOOP AT W_DOMA_INFO.
AT FIRST.
MOVE '###$$$%%%&&&OMA_INFO' TO W_SALIDA.
APPEND W_SALIDA.
ENDAT.
MOVE W_DOMA_INFO TO W_SALIDA.
APPEND W_SALIDA.
ENDLOOP.

LOOP AT W_DOMA_VALUES.
AT FIRST.
MOVE '###$$$%%%&&&OMA_VALUES' TO W_SALIDA.
APPEND W_SALIDA.
ENDAT.
MOVE W_DOMA_VALUES TO W_SALIDA.
APPEND W_SALIDA.
ENDLOOP.

CONCATENATE P_DIR_D 'SALIDA_TABLAS.TXT' INTO LC_SALIDA.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = LC_SALIDA
tables
data_tab = W_SALIDA
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22
.
IF sy-subrc <> 0.
ENDIF.

ENDFORM. " gravar_archivo_tablas

*&---------------------------------------------------------------------*
*& Form upload_tablas
*&---------------------------------------------------------------------*
form upload_tablas .

DATA:
LC_DOMA_INFO TYPE RPY_DOMA,
LC_DOMA_VALUES TYPE RPY_DVAL OCCURS 0 WITH HEADER LINE,
LC_DTEL_INFO TYPE RPY_DTEL,
LC_TABL_INFO TYPE RPY_TABL,
LC_TABL_TECH TYPE RPY_TBTECH,
LC_TABL_FIELDS TYPE RPY_FIEL_U OCCURS 0 WITH HEADER LINE.

LOOP AT W_DOMA_INFO.

MOVE W_DOMA_INFO TO LC_DOMA_INFO.
REFRESH LC_DOMA_VALUES.

LOOP AT W_DOMA_VALUES WHERE DOMANAME = LC_DOMA_INFO-DOMANAME.

MOVE W_DOMA_VALUES TO LC_DOMA_VALUES.
APPEND LC_DOMA_VALUES.

ENDLOOP.

CALL FUNCTION 'RPY_DOMAIN_INSERT'
EXPORTING
doma_name = LC_DOMA_INFO-DOMANAME
doma_inf = LC_DOMA_INFO
tables
doma_values = LC_DOMA_VALUES
EXCEPTIONS
CANCELLED = 1
ALREADY_EXIST = 2
PERMISSION_ERROR = 3
NAME_NOT_ALLOWED = 4
NAME_CONFLICT = 5
INTERNAL_ERROR = 6
OTHERS = 7
.
IF sy-subrc <> 0.
ENDIF.

ENDLOOP.

LOOP AT W_DTEL_INFO.

MOVE W_DTEL_INFO TO LC_DTEL_INFO.

CALL FUNCTION 'RPY_DATAELEMENT_INSERT'
EXPORTING
dataelement_name = LC_DTEL_INFO-DTELNAME
dtel_inf = LC_DTEL_INFO
transport_number = SPACE
EXCEPTIONS
CANCELLED = 1
ALREADY_EXIST = 2
PERMISSION_ERROR = 3
NAME_NOT_ALLOWED = 4
NAME_CONFLICT = 5
ILLEGAL_TYPE = 6
OBJECT_INCONSISTENT = 7
DB_ACCESS_ERROR = 8
OTHERS = 9
.
IF sy-subrc <> 0.
ENDIF.

ENDLOOP.

LOOP AT W_TABL_INFO.

MOVE W_TABL_INFO TO LC_TABL_INFO.
READ TABLE W_TABL_TECH WITH KEY TABLNAME = LC_TABL_INFO-TABLNAME.
IF SY-SUBRC EQ 0.
MOVE W_TABL_TECH TO LC_TABL_TECH.
ELSE.
CLEAR LC_TABL_TECH.
ENDIF.
REFRESH LC_TABL_FIELDS.

LOOP AT W_TABL_FIELDS WHERE TABLNAME = LC_TABL_INFO-TABLNAME.

MOVE-CORRESPONDING W_TABL_FIELDS TO LC_TABL_FIELDS.
APPEND LC_TABL_FIELDS.

ENDLOOP.

CALL FUNCTION 'RPY_TABLE_INSERT'
EXPORTING
table_name = LC_TABL_INFO-TABLNAME
tabl_inf = LC_TABL_INFO
TABL_TECHNICS = LC_TABL_TECH
tables
tabl_fields = LC_TABL_FIELDS
EXCEPTIONS
CANCELLED = 1
ALREADY_EXIST = 2
PERMISSION_ERROR = 3
NAME_NOT_ALLOWED = 4
NAME_CONFLICT = 5
DB_ACCESS_ERROR = 6
OTHERS = 7
.
IF sy-subrc <> 0.
ENDIF.

ENDLOOP.

endform. " upload_tablas

*&---------------------------------------------------------------------*
*& Form LEER_ELEMENTO_DATO
*&---------------------------------------------------------------------*
form LEER_ELEMENTO_DATO using p_dtelname.

DATA:
LC_DTEL_INFO TYPE RPY_DTEL,

LC_SUBRC TYPE SY-SUBRC,
LC_NAME TYPE TADIR-OBJ_NAME.

READ TABLE W_DTEL_INFO WITH KEY DTELNAME = P_DTELNAME.

CHECK SY-SUBRC NE 0.

MOVE P_DTELNAME TO LC_NAME.
PERFORM CHEQUEAR_CLASE USING LC_NAME
CHANGING LC_SUBRC.
CHECK LC_SUBRC EQ 0.

MOVE P_DTELNAME TO LC_DTEL_INFO-DTELNAME.

CALL FUNCTION 'RPY_DATAELEMENT_READ'
EXPORTING
dataelement_name = LC_DTEL_INFO-DTELNAME
IMPORTING
DTEL_INF = LC_DTEL_INFO
EXCEPTIONS
CANCELLED = 1
NOT_FOUND = 2
PERMISSION_ERROR = 3
ILLEGAL_TYPE = 4
OTHERS = 5
.
IF sy-subrc <> 0.
ENDIF.

GT_REPORTE-NAME = LC_DTEL_INFO-DTELNAME.
GT_REPORTE-OBJECT = 'DTEL'.
GT_REPORTE-TEXT = LC_DTEL_INFO-DDTEXT.
APPEND GT_REPORTE.

APPEND LC_DTEL_INFO TO W_DTEL_INFO.

IF LC_DTEL_INFO-DOMANAME(1) EQ 'Z'.
PERFORM LEER_DOMINIO USING
LC_DTEL_INFO-DOMANAME.
ENDIF.

endform. " LEER_ELEMENTO_DATO

*&---------------------------------------------------------------------*
*& Form LEER_DOMINIO
*&---------------------------------------------------------------------*
form LEER_DOMINIO using p_domaname.

DATA:
LC_DOMA_INFO TYPE RPY_DOMA,
LC_DOMA_VALUES TYPE RPY_DVAL OCCURS 0 WITH HEADER LINE,

LC_SUBRC TYPE SY-SUBRC,
LC_NAME TYPE TADIR-OBJ_NAME.

READ TABLE W_DOMA_INFO WITH KEY DOMANAME = P_DOMANAME.

CHECK SY-SUBRC NE 0.

MOVE P_DOMANAME TO LC_NAME.
PERFORM CHEQUEAR_CLASE USING LC_NAME
CHANGING LC_SUBRC.
CHECK LC_SUBRC EQ 0.

MOVE P_DOMANAME TO LC_DOMA_INFO-DOMANAME.

REFRESH: LC_DOMA_VALUES.

CALL FUNCTION 'RPY_DOMAIN_READ'
EXPORTING
doma_name = LC_DOMA_INFO-DOMANAME
IMPORTING
DOMA_INF = LC_DOMA_INFO
tables
doma_values = LC_DOMA_VALUES
EXCEPTIONS
CANCELLED = 1
NOT_FOUND = 2
PERMISSION_ERROR = 3
ILLEGAL_TYPE = 4
OTHERS = 5
.
IF sy-subrc <> 0.
ENDIF.

GT_REPORTE-NAME = LC_DOMA_INFO-DOMANAME.
GT_REPORTE-OBJECT = 'DOMA'.
GT_REPORTE-TEXT = LC_DOMA_INFO-SHORTTEXT.
APPEND GT_REPORTE.

APPEND LC_DOMA_INFO TO W_DOMA_INFO.

LOOP AT LC_DOMA_VALUES.

APPEND LC_DOMA_VALUES TO W_DOMA_VALUES.

ENDLOOP.

endform. " LEER_DOMINIO

No he tenido tiempo de probarlo, pero lo brindaron argumentando que funcinaba correctamente.
Saludos,
Alexis Chavero.
Responder Con Cita