REPORT ZAPC0046
NO STANDARD PAGE HEADING
LINE-SIZE 112.
DEFINE DEC_TABINT.
TABLES &1.
DATA I_&1 LIKE &1 OCCURS 100 WITH HEADER LINE.
END-OF-DEFINITION.
DEC_TABINT: DD01L, "DOMINIOS
DD01T, "DOMINIOS - TEXTOS
DD07L, "DOMINIOS - VALORES FIJOS
DD07T, "DOMINIOS - VALORES FIJOS - TEXTOS
DD02T,
DD02L,
DD03L,
DD03T,
DD04L,
DD04T,
DD08L, "RELACIONES
DD08T,
DD09L. "OPCIONES TECNICAS.
SELECTION-SCREEN BEGIN OF BLOCK A1 WITH FRAME.
SELECT-OPTIONS: S_TABNAM FOR DD02L-TABNAME DEFAULT 'Z*' OPTION CP
SIGN I,
S_ROLLNA FOR DD04L-ROLLNAME DEFAULT 'Z*' OPTION CP
SIGN I,
S_DOMNAM FOR DD01L-DOMNAME DEFAULT 'Z*' OPTION CP
SIGN I,
S_AS4USE FOR DD01L-AS4USER DEFAULT 'SAP' OPTION NE
SIGN I.
SELECTION-SCREEN END OF BLOCK A1.
SELECTION-SCREEN BEGIN OF BLOCK A2 WITH FRAME.
PARAMETERS: P_GRABAR AS CHECKBOX DEFAULT 'X',
P_LEER AS CHECKBOX DEFAULT ' ',
P_PRINT AS CHECKBOX DEFAULT 'X',
P_HTML AS CHECKBOX DEFAULT ' ',
P_PATH LIKE RLGRAP-FILENAME
DEFAULT 'C:\TEMP\' OBLIGATORY.
SELECTION-SCREEN END OF BLOCK A2.
AT SELECTION-SCREEN.
IF NOT P_GRABAR IS INITIAL AND
NOT P_LEER IS INITIAL.
MESSAGE E208(00) WITH ' you can select to Enter OR to Engrave'.
ENDIF.
IF NOT P_LEER IS INITIAL.
IF S_TABNAM-LOW IS INITIAL.
MESSAGE E208(00) WITH ' Alone can read himself a fichero at the same time '.
ENDIF.
ENDIF.
START-OF-SELECTION.
IF P_LEER = 'X'.
PERFORM LEER_FICHEROS.
ELSE.
PERFORM LEER_TABLAS.
ENDIF.
IF P_PRINT = 'X'.
PERFORM IMPRIMIR.
IF P_HTML = 'X'.
DATA I_HTML LIKE W3HTML OCCURS 100 WITH HEADER LINE.
CALL FUNCTION 'WWW_LIST_TO_HTML'
TABLES
HTML = I_HTML
EXCEPTIONS
OTHERS = 1.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = 'C:\TEMP\P.HTML'
FILETYPE = 'ASC'
TABLES
DATA_TAB = I_HTML
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
OTHERS = 8.
ENDIF.
ENDIF.
IF P_GRABAR = 'X'.
PERFORM GRABAR.
ENDIF.
*&---------------------------------------------------------------------*
*& Form LEER_TABLAS
*&---------------------------------------------------------------------*
* Lee las tablas que contienen la deficion de tablas.
*----------------------------------------------------------------------*
FORM LEER_TABLAS.
PERFORM LEER_TABLA.
PERFORM LEER_ELEMENTOS.
PERFORM LEER_DOMINIOS.
ENDFORM. " LEER_TABLAS
*&---------------------------------------------------------------------*
*& Form LEER_DOMINIOS
*&---------------------------------------------------------------------*
* Lee tablas con la definicion de dominios
*----------------------------------------------------------------------*
FORM LEER_DOMINIOS.
LOOP AT I_DD04L.
SELECT * FROM DD01L
APPENDING TABLE I_DD01L
WHERE DOMNAME = I_DD04L-DOMNAME
AND DOMNAME IN S_DOMNAM
AND AS4LOCAL = I_DD04L-AS4LOCAL.
ENDLOOP.
SORT I_DD01L.
DELETE ADJACENT DUPLICATES FROM I_DD01L.
LOOP AT I_DD01L.
SELECT * FROM DD01T
APPENDING TABLE I_DD01T
WHERE DOMNAME = I_DD01L-DOMNAME
AND AS4LOCAL = I_DD01L-AS4LOCAL
AND AS4VERS = I_DD01L-AS4VERS.
SORT I_DD01T.
DELETE ADJACENT DUPLICATES FROM I_DD01T.
SELECT * FROM DD07L
APPENDING TABLE I_DD07L
WHERE DOMNAME = I_DD01L-DOMNAME
AND AS4LOCAL = I_DD01L-AS4LOCAL
AND AS4VERS = I_DD01L-AS4VERS.
ENDLOOP.
SORT I_DD07L.
DELETE ADJACENT DUPLICATES FROM I_DD07L.
LOOP AT I_DD07L.
SELECT * FROM DD07T
APPENDING TABLE I_DD07T
WHERE DOMNAME = I_DD07L-DOMNAME
AND AS4LOCAL = I_DD07L-AS4LOCAL
AND AS4VERS = I_DD07L-AS4VERS
AND VALPOS = I_DD07L-VALPOS.
ENDLOOP.
ENDFORM. " LEER_DOMINIOS
*&---------------------------------------------------------------------*
*& Form IMPRIMIR
*&---------------------------------------------------------------------*
* Imprime los datos de las tablas
*----------------------------------------------------------------------*
FORM IMPRIMIR.
RANGES: R_ROLLNAME FOR DD04L-ROLLNAME,
R_DOMNAME FOR DD04L-DOMNAME.
DATA: L_HAY_DATOS.
LOOP AT I_DD02L.
NEW-PAGE.
* Descripcion tabla.
FORMAT COLOR COL_HEADING INTENSIFIED ON.
SKIP.
ULINE AT 1(77).
NEW-LINE.
WRITE: / SY-VLINE,
I_DD02L-TABNAME,
SY-VLINE.
LOOP AT I_DD02T WHERE TABNAME = I_DD02L-TABNAME
AND DDLANGUAGE = SY-LANGU.
WRITE: I_DD02T-DDTEXT,
SY-VLINE.
ENDLOOP.
NEW-LINE.
ULINE AT 1(77).
SKIP.
ULINE AT 1(47).
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE: / SY-VLINE,
(20) 'Tipo tabla ',
SY-VLINE,
(20) I_DD02L-TABCLASS,
SY-VLINE.
WRITE: / SY-VLINE,
(20) 'Perm.actual.tablas',
SY-VLINE,
(20) I_DD02L-MAINFLAG,
SY-VLINE.
WRITE: / SY-VLINE,
(20) 'Clase entrega',
SY-VLINE,
(20) I_DD02L-CONTFLAG,
SY-VLINE.
ULINE AT 1(47).
READ TABLE I_DD09L WITH KEY TABNAME = I_DD02L-TABNAME
AS4VERS = I_DD02L-AS4VERS.
IF SY-SUBRC = 0.
SKIP.
FORMAT COLOR COL_HEADING INTENSIFIED OFF.
ULINE AT 1(47).
WRITE: / SY-VLINE,
(43) 'OPCIONES TECNICAS' CENTERED,
SY-VLINE.
NEW-LINE.
ULINE AT 1(47).
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
WRITE: / SY-VLINE,
(20) 'Cl. datos',
SY-VLINE,
(20) I_DD09L-TABART,
SY-VLINE.
WRITE: / SY-VLINE,
(20) 'Categoria tam.',
SY-VLINE,
(20) I_DD09L-TABKAT,
SY-VLINE.
NEW-LINE.
ULINE AT 1(47).
ENDIF.
SKIP.
FORMAT COLOR COL_HEADING INTENSIFIED OFF.
ULINE AT 1(111).
WRITE: / SY-VLINE,
(107) ' CAMPOS' CENTERED,
SY-VLINE.
NEW-LINE.
ULINE AT 1(111).
FORMAT COLOR OFF.
LOOP AT I_DD03L WHERE TABNAME = I_DD02L-TABNAME
AND AS4VERS = I_DD02L-AS4VERS.
READ TABLE I_DD04T WITH KEY ROLLNAME = I_DD03L-ROLLNAME
DDLANGUAGE = SY-LANGU.
WRITE: /
SY-VLINE,
I_DD03L-FIELDNAME,
SY-VLINE,
I_DD03L-KEYFLAG,
SY-VLINE,
I_DD03L-ROLLNAME,
SY-VLINE,
I_DD03L-DATATYPE,
SY-VLINE,
(3) I_DD03L-LENG+3 NO-ZERO,
SY-VLINE,
I_DD03L-DOMNAME,
SY-VLINE,
(8) I_DD03L-CHECKTABLE,
SY-VLINE,
(40) I_DD04T-DDTEXT,
SY-VLINE.
CLEAR R_ROLLNAME.
R_ROLLNAME-OPTION = 'EQ'.
R_ROLLNAME-SIGN = 'I'.
R_ROLLNAME-LOW = I_DD03L-ROLLNAME.
APPEND R_ROLLNAME.
ENDLOOP.
NEW-LINE.
ULINE AT 1(111).
* ELEMENTOS DE DATOS
CLEAR L_HAY_DATOS.
LOOP AT I_DD04L WHERE ROLLNAME IN R_ROLLNAME
AND ROLLNAME IN S_ROLLNA.
L_HAY_DATOS = 'X'.
EXIT.
ENDLOOP.
IF L_HAY_DATOS = 'X'.
SKIP.
FORMAT COLOR COL_HEADING INTENSIFIED OFF.
ULINE AT 1(76).
WRITE: / SY-VLINE,
(72) 'ELEMENTOS DE DATOS PROPIOS' CENTERED,
SY-VLINE.
NEW-LINE.
ULINE AT 1(76).
FORMAT COLOR OFF.
LOOP AT I_DD04L WHERE ROLLNAME IN R_ROLLNAME
AND ROLLNAME IN S_ROLLNA.
READ TABLE I_DD04T WITH KEY ROLLNAME = I_DD04L-ROLLNAME
DDLANGUAGE = SY-LANGU.
READ TABLE I_DD01L WITH KEY DOMNAME = I_DD04L-DOMNAME.
WRITE: /
SY-VLINE,
I_DD04L-ROLLNAME,
SY-VLINE,
I_DD04L-DOMNAME,
SY-VLINE,
I_DD01L-DATATYPE,
SY-VLINE,
(3) I_DD01L-LENG+3 NO-ZERO,
SY-VLINE,
I_DD04T-SCRTEXT_S,
SY-VLINE,
I_DD04T-SCRTEXT_M,
SY-VLINE.
CLEAR R_DOMNAME.
R_DOMNAME-OPTION = 'EQ'.
R_DOMNAME-SIGN = 'I'.
R_DOMNAME-LOW = I_DD04L-DOMNAME.
APPEND R_DOMNAME.
ENDLOOP.
NEW-LINE.
ULINE AT 1(76).
ENDIF.
* DOMINIOS PROPIOS
CLEAR L_HAY_DATOS.
LOOP AT I_DD01L WHERE DOMNAME IN R_DOMNAME
AND DOMNAME IN S_DOMNAM.
L_HAY_DATOS = 'X'.
EXIT.
ENDLOOP.
IF L_HAY_DATOS = 'X'.
SKIP.
FORMAT COLOR COL_HEADING INTENSIFIED OFF.
ULINE AT 1(100).
WRITE: / SY-VLINE,
(96) 'DOMINIOS PROPIOS' CENTERED,
SY-VLINE.
NEW-LINE.
ULINE AT 1(100).
FORMAT COLOR OFF.
LOOP AT I_DD01L WHERE DOMNAME IN R_DOMNAME
AND DOMNAME IN S_DOMNAM.
READ TABLE I_DD01T WITH KEY DOMNAME = I_DD01L-DOMNAME
DDLANGUAGE = SY-LANGU
AS4VERS = I_DD01L-AS4VERS.
WRITE: /
SY-VLINE,
I_DD01L-DOMNAME,
SY-VLINE,
I_DD01L-DATATYPE,
SY-VLINE,
(3) I_DD01L-LENG+3 NO-ZERO,
SY-VLINE,
I_DD01L-ENTITYTAB,
SY-VLINE,
(57) I_DD01T-DDTEXT,
SY-VLINE.
LOOP AT I_DD07L WHERE DOMNAME = I_DD01L-DOMNAME
AND AS4VERS = I_DD01L-AS4VERS.
READ TABLE I_DD07T WITH KEY DOMNAME = I_DD07L-DOMNAME
AS4VERS = I_DD07L-AS4VERS
VALPOS = I_DD07L-VALPOS
DDLANGUAGE = SY-LANGU.
FORMAT COLOR COL_NORMAL INTENSIFIED ON.
WRITE: / SY-VLINE,
(4) '',
(18) 'VALORES FIJOS',
SY-VLINE,
I_DD07L-DOMVALUE_L,
SY-VLINE,
I_DD07L-DOMVALUE_H,
SY-VLINE,
(44) I_DD07T-DDTEXT,
SY-VLINE.
ENDLOOP.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
ENDLOOP.
NEW-LINE.
ULINE AT 1(100).
ENDIF.
FREE: R_ROLLNAME, R_DOMNAME.
ENDLOOP.
ENDFORM. " IMPRIMIR
*&---------------------------------------------------------------------*
*& Form LEER_TABLA
*&---------------------------------------------------------------------*
* Lee datos de tabla
*----------------------------------------------------------------------*
FORM LEER_TABLA.
SELECT * FROM DD02L INTO TABLE I_DD02L
WHERE TABNAME IN S_TABNAM
AND AS4LOCAL = 'A'
AND AS4USER IN S_AS4USE.
SORT I_DD02L.
LOOP AT I_DD02L.
* Descripcion tabla
SELECT * FROM DD02T
APPENDING TABLE I_DD02T
WHERE TABNAME = I_DD02L-TABNAME
AND AS4LOCAL = I_DD02L-AS4LOCAL
AND AS4VERS = I_DD02L-AS4VERS.
* Campos de tabla
SELECT * FROM DD03L
APPENDING TABLE I_DD03L
WHERE TABNAME = I_DD02L-TABNAME
AND AS4LOCAL = 'A'.
* Opciones tecnicas
SELECT * FROM DD09L
APPENDING TABLE I_DD09L
WHERE TABNAME = I_DD02L-TABNAME
AND AS4LOCAL = 'A'
AND AS4VERS = I_DD02L-AS4VERS.
* Relaciones
SELECT * FROM DD08L
APPENDING TABLE I_DD08L
WHERE TABNAME = I_DD02L-TABNAME
AND AS4LOCAL = I_DD02L-AS4LOCAL
AND AS4VERS = I_DD02L-AS4VERS.
SELECT * FROM DD08T
APPENDING TABLE I_DD08T
WHERE TABNAME = I_DD02L-TABNAME
AND AS4LOCAL = I_DD02L-AS4LOCAL
AND AS4VERS = I_DD02L-AS4VERS.
ENDLOOP.
* Descripcion campos tabla
LOOP AT I_DD03L.
SELECT * FROM DD03T
APPENDING TABLE I_DD03T
WHERE TABNAME = I_DD03L-TABNAME
AND FIELDNAME = I_DD03L-FIELDNAME
AND AS4LOCAL = 'A'.
ENDLOOP.
ENDFORM. " LEER_TABLA
*&---------------------------------------------------------------------*
*& Form LEER_ELEMENTOS
*&---------------------------------------------------------------------*
* Lee elementos de datos
*----------------------------------------------------------------------*
FORM LEER_ELEMENTOS.
LOOP AT I_DD03L.
SELECT * FROM DD04L
APPENDING TABLE I_DD04L
WHERE ROLLNAME = I_DD03L-ROLLNAME
AND AS4LOCAL = 'A'.
ENDLOOP.
SORT I_DD04L.
DELETE ADJACENT DUPLICATES FROM I_DD04L.
LOOP AT I_DD04L.
SELECT * FROM DD04T
APPENDING TABLE I_DD04T
WHERE ROLLNAME = I_DD04L-ROLLNAME
AND AS4LOCAL = I_DD03L-AS4LOCAL
AND AS4LOCAL = 'A'.
ENDLOOP.
SORT I_DD04T.
DELETE ADJACENT DUPLICATES FROM I_DD04T.
ENDFORM. " LEER_ELEMENTOS
*&---------------------------------------------------------------------*
*& Form GRABAR
*&---------------------------------------------------------------------*
* Graba las datos que definen las tablas en un fichero de texto
*----------------------------------------------------------------------*
FORM GRABAR.
DEFINE AP.
I_FICHERO = &1.
APPEND I_FICHERO.
END-OF-DEFINITION.
RANGES: R_ROLLNAME FOR DD04L-ROLLNAME,
R_DOMNAME FOR DD01L-DOMNAME.
DATA: BEGIN OF I_FICHERO OCCURS 100,
LINEA(1000),
END OF I_FICHERO.
DATA L_FICHERO LIKE RLGRAP-FILENAME.
LOOP AT I_DD02L.
FREE I_FICHERO.
FREE R_ROLLNAME.
AP '#&#DD02L'.
AP I_DD02L.
AP '#&#DD02T'.
LOOP AT I_DD02T WHERE TABNAME = I_DD02L-TABNAME.
AP I_DD02T.
ENDLOOP.
READ TABLE I_DD09L WITH KEY TABNAME = I_DD02L-TABNAME
AS4VERS = I_DD02L-AS4VERS.
IF SY-SUBRC = 0.
AP '#&#DD09L'.
AP I_DD09L.
ENDIF.
AP '#&#DD03L'.
LOOP AT I_DD03L WHERE TABNAME = I_DD02L-TABNAME
AND AS4VERS = I_DD02L-AS4VERS.
AP I_DD03L.
CLEAR R_ROLLNAME.
R_ROLLNAME-OPTION = 'EQ'.
R_ROLLNAME-SIGN = 'I'.
R_ROLLNAME-LOW = I_DD03L-ROLLNAME.
APPEND R_ROLLNAME.
ENDLOOP.
AP '#&#DD03T'.
LOOP AT I_DD03T WHERE TABNAME = I_DD02L-TABNAME.
AP I_DD03T.
ENDLOOP.
AP '#&#DD04L'.
LOOP AT I_DD04L WHERE ROLLNAME IN R_ROLLNAME.
AP I_DD04L.
CLEAR R_DOMNAME.
R_DOMNAME-OPTION = 'EQ'.
R_DOMNAME-SIGN = 'I'.
R_DOMNAME-LOW = I_DD04L-DOMNAME.
APPEND R_DOMNAME.
ENDLOOP.
AP '#&#DD04T'.
LOOP AT I_DD04T WHERE ROLLNAME IN R_ROLLNAME.
AP I_DD04T.
ENDLOOP.
AP '#&#DD01L'.
LOOP AT I_DD01L WHERE DOMNAME IN R_DOMNAME
AND DOMNAME IN S_DOMNAM.
AP I_DD01L.
ENDLOOP.
AP '#&#DD01T'.
LOOP AT I_DD01T WHERE DOMNAME IN R_DOMNAME
AND DOMNAME IN S_DOMNAM.
AP I_DD01T.
ENDLOOP.
AP '#&#DD07L'.
LOOP AT I_DD07L WHERE DOMNAME IN R_DOMNAME
AND DOMNAME IN S_DOMNAM.
AP I_DD07L.
ENDLOOP.
AP '#&#DD07T'.
LOOP AT I_DD07T WHERE DOMNAME IN R_DOMNAME
AND DOMNAME IN S_DOMNAM.
AP I_DD07T.
ENDLOOP.
AP '#&#DD08L'.
LOOP AT I_DD08L WHERE TABNAME = I_DD02L-TABNAME
AND AS4VERS = I_DD02L-AS4VERS.
AP I_DD08L.
ENDLOOP.
AP '#&#DD08T'.
LOOP AT I_DD08T WHERE TABNAME = I_DD02L-TABNAME
AND AS4VERS = I_DD02L-AS4VERS.
AP I_DD08T.
ENDLOOP.
IF I_DD02L-AS4VERS NE '0000'.
CONCATENATE P_PATH I_DD02L-TABNAME I_DD02L-AS4VERS '.TAB'
INTO L_FICHERO.
ELSE.
CONCATENATE P_PATH I_DD02L-TABNAME '.TAB' INTO L_FICHERO.
ENDIF.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = L_FICHERO
FILETYPE = 'ASC'
TABLES
DATA_TAB = I_FICHERO
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
OTHERS = 8.
ENDLOOP.
ENDFORM. " GRABAR
*&---------------------------------------------------------------------*
*& Form LEER_FICHEROS
*&---------------------------------------------------------------------*
* Lee las tablas almacenadas en los ficheros
*----------------------------------------------------------------------*
FORM LEER_FICHEROS.
DEFINE AP_TABLA.
WHEN '&1'.
I_&1 = I_FICHERO.
APPEND I_&1.
END-OF-DEFINITION.
DATA: BEGIN OF I_FICHERO OCCURS 100,
LINEA(1000),
END OF I_FICHERO.
DATA: L_FICHERO LIKE RLGRAP-FILENAME,
L_TABLA(5).
DATA I_TABLAS LIKE DD02L OCCURS 1 WITH HEADER LINE.
SELECT * FROM DD02L
INTO TABLE I_TABLAS
WHERE TABNAME IN S_TABNAM
AND AS4LOCAL = 'A'
AND AS4USER IN S_AS4USE.
LOOP AT I_TABLAS.
CONCATENATE P_PATH I_TABLAS-TABNAME '.TAB' INTO L_FICHERO.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = L_FICHERO
FILETYPE = 'ASC'
TABLES
DATA_TAB = I_FICHERO
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
OTHERS = 8.
LOOP AT I_FICHERO.
IF I_FICHERO(3) = '#&#'.
L_TABLA = I_FICHERO+3(5).
ELSE.
CASE L_TABLA.
AP_TABLA: DD01L,
DD01T,
DD07L,
DD07T,
DD02T,
DD02L,
DD03L,
DD03T,
DD04L,
DD04T,
DD08L,
DD08T,
DD09L.
ENDCASE.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM. " LEER_FICHEROS
Text elementsI | 001 | Grabar | I | 002 | Cargar | I | 003 | WHERE | R | | Copia definicion de tablas a ficheros | S | P_BORRAR | Borrar tabla antes de cargar | S | P_CARG | Cargar tabla | S | P_GRAB | Grabar tabla | S | P_PATH | Directorio de salida | S | P_TABLA | Tabla | S | P_W1 | Linea 1 | S | P_W2 | Linea 2 | S | P_W3 | Linea 3 | S | P_W4 | Linea 4 | S | P_W5 | Linea 5 |
|