MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Upload de fondo archivos PDF a tabla Z (foro/showthread.php?t=73654)

ehrman 20/03/15 22:25:56

Upload de fondo archivos PDF a tabla Z
 
* Date (YYYY/MM/DD) : 2015/03/20
* Author : Luis Ehrman Gutierrez
* Required by : Cargue a base de datos de SAP archivos PDF
* ubicados en el server de aplicaciones SAP
*&---------------------------------------------------------------------*
* CHANGES LOG
*&---------------------------------------------------------------------*
* Description :
* Date (YYYY/MM/DD) :
* Author :
* Required by :
**&---------------------------------------------------------------------*

REPORT ZUPLOAD_PDF_BD.

"Definicion tabla Z en el diccionario de datos de SAP
*MANDT MANDT CLNT 3 0 Mandante
*FERTH FERTH CHAR 18 0 Nombre archivo plano pdf
*CONS CHAR 5 0 Numero de Lineas por File
*MATNR MATNR CHAR 18 0 Número de material
*LINE SO_TEXT255 CHAR 255 0 Campo de texto, longitud 255: Textos
*FECARGA DATUM DATS 8 0 Fecha

"Se declara tipo de tabla Hexadecimal
TYPES: BEGIN OF HEX_RECORD,
FIELD(1024) TYPE X,
END OF HEX_RECORD.

"Se declara tabla interna con tabla Z de la base de datos
DATA: BEGIN OF LT_ZTBMMPLANO OCCURS 100.
INCLUDE STRUCTURE ZTBMMPLANO.
DATA: END OF LT_ZTBMMPLANO.

"Se declara tabla interna para guardar conversion del binario de SAP
DATA: BINARY_ATT TYPE STANDARD TABLE OF SOLISTI1,
WA_BINARY_ATT TYPE SOLISTI1.

DATA: LT_TAB_EX2 TYPE STANDARD TABLE OF HEX_RECORD WITH HEADER LINE,
WA_TAB_EX2 TYPE HEX_RECORD,
LV_FNAME TYPE STRING,
LV_CONS(5) TYPE C,
X_STRING TYPE XSTRING,
S_STRING TYPE STRING,
S_STRING1 TYPE STRING.

"Ruta o directorio en el servidor de aplicaciones de SAP ubicacion del PDF
LV_FNAME = '/usr/sap/ACE/0530.PDF'.


START-OF-SELECTION.

"Se abre el archivo en la ruta del server de SAP en modo binario
OPEN DATASET LV_FNAME FOR INPUT IN BINARY MODE.
IF SY-SUBRC EQ 0.
DO.
"Se lee linea a linea y se lleva a la tabla Hexadecimal.
READ DATASET LV_FNAME INTO LT_TAB_EX2-FIELD.
IF SY-SUBRC EQ 0.
APPEND LT_TAB_EX2.
ELSE.
APPEND LT_TAB_EX2.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET LV_FNAME.

"Se recorre la tabla Interna Hexadecimal y se guarda todo su contenido
"en una variable tipo String
LOOP AT LT_TAB_EX2.
CLEAR: S_STRING1.
S_STRING1 = LT_TAB_EX2-FIELD.
CONCATENATE S_STRING S_STRING1 INTO S_STRING.
ENDLOOP.

"Se lleva el contenido de la variable tipo String una variable Xtring
X_STRING = S_STRING.
"Se hace la conversion de hexadecinal y se lleva a la tabla interna
"binaria de longitud 255
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
BUFFER = X_STRING
* APPEND_TO_TABLE = 'X' "Do not clear/refresh table
TABLES
BINARY_TAB = BINARY_ATT.
BREAK-POINT.

"Se hace una descarga el binario al disco local del pc
IF SY-BATCH <> 'X'. "Si se ejecuta de Fondo omite la descarga
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = 'C:\tmp\prueba.pdf'
FILETYPE = 'BIN'
TABLES
DATA_TAB = BINARY_ATT.
ENDIF.

"Se lleva el contenido del binario a la tabla interna con la
"misma estructura de la tabla Z definida en el diccionario de datos
LV_CONS = 1.
LOOP AT BINARY_ATT INTO WA_BINARY_ATT.
LT_ZTBMMPLANO-FERTH = '0530'.
LT_ZTBMMPLANO-MATNR = '000000000000061688'.
LT_ZTBMMPLANO-CONS = LV_CONS.
LT_ZTBMMPLANO-LINE = WA_BINARY_ATT-LINE.
LT_ZTBMMPLANO-FECARGA = SY-DATUM.
APPEND LT_ZTBMMPLANO.
LV_CONS = LV_CONS + 1.
ENDLOOP.

DELETE FROM ZTBMMPLANO.
COMMIT WORK.
"Se copia a la tabla Z el contenido binario del PDF
INSERT ZTBMMPLANO FROM TABLE LT_ZTBMMPLANO.
COMMIT WORK.

ENDIF.

coloso 23/03/15 11:05:31

Muchas gracias, me lo guardo por si algún día me hace falta.


Husos Horarios son GMT. La hora en este momento es 22:40:28.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web