MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 10/11/09, 15:32:00
lucia_12 lucia_12 is offline
Member
 
Fecha de Ingreso: jun 2009
Mensajes: 45
Hola ballan!

Ante todo, gracias por contestar.

He probado lo que me has dicho, y me crea un pdf pero no me deja abrirlo.

El código que he creado es el siguiente:

DATA: fic_binario TYPE xstring.
DATA: string_binario TYPE string.

DATA: BEGIN OF lines occurs 100,
tdline(132).
DATA: END OF lines.


"Se convierte el fichero de binario64 a binario

CALL FUNCTION 'SSFC_BASE64_DECODE'
EXPORTING
B64DATA = fichero_64
IMPORTING
BINDATA = fic_binario.


string_binario = fic_binario.

"Se pasa a tabla interna

CALL FUNCTION 'CONVERT_STRING_TO_TABLE'
EXPORTING
I_STRING = string_binario
I_TABLINE_LENGTH = 132
TABLES
ET_TABLE = lines.



CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = 'C:\Documents and Settings\usr\Escritorio\Fic1.pdf'
FILETYPE = 'BIN'

TABLES
DATA_TAB = lines .


No sé si puede ser por la longitud de cada línea de la tabla.
También he probado a insertar en la tabla el string sin utilizar la función 'CONVERT_STRING_TO_TABLE' y a utilizar open dataset, pero esto último es para crear archivos en el servidor y yo lo quiero en local.

¿Alguna idea de por qué me está fallando?

Gracias!!
Responder Con Cita
  #2  
Viejo 10/11/09, 16:02:32
ballan ballan is offline
Senior Member
 
Fecha de Ingreso: oct 2006
Mensajes: 671
Creo que el problema esta en que tu tabla esta definida como texto y no como datos binarios

Tu has definido tu tabla asi:

DATA: BEGIN OF lines occurs 100,
tdline(132).
DATA: END OF lines.

Asi almacenarias caracteres y lo que tienes que hacer es almacenar datos en binario

Prueba a definir tu tabla asi

DATA: BEGIN OF lines occurs 100,
tdline(1024) type x.
DATA: END OF lines.

Quiza te de problemas la funcion de convertir string en tabla pero entonces busca otra funcion o bien create un minialgoritmo de este estilo (tendras que cambiar algo pero es para que te hagas una idea)

data: lv_divisor type i,
lv_resto type i,
lv_longitud type i,
lv_indice type i.

do.

lv_longitud = strlen( cadena ).

lv_divisor = lv_longitud div 256.
lv_resto = lv_longitud div 256.

lv_indice = 256 * sy-index.

lines-tdline = lv_cadena+lv_indice(256).

append lines.
clear lines.

if lv_divisor is initial.

exit.

endif.

enddo.

Sigue probando y comenta los resultados
Responder Con Cita
  #3  
Viejo 10/11/09, 17:52:03
azua14 azua14 is offline
Senior Member
 
Fecha de Ingreso: jul 2007
Mensajes: 140
Hola..hace tpo tuve que imprimir un reporte a pdf..lamentablemente no recuerdo el codigo exacto..pero creo que lo que hicimos fue definir un tipo de impresora en sap que permitia guardar lo que uno le mandara al spool como un pdf.
Responder Con Cita
  #4  
Viejo 11/11/09, 09:52:06
lucia_12 lucia_12 is offline
Member
 
Fecha de Ingreso: jun 2009
Mensajes: 45
Al final me ha funcionado cambiando mi tabla a tipo binario y metiendo mediante código el string en la tabla, tal y como decía Ballan.

Sólo comentar, por si a alguien le ayuda, que el offset que he ido utilizando es 255 (no 256), ya que si no, el fichero pdf no se puede abrir.

Muchiiiiiiiisimas gracias por vuestra ayuda!!!
Responder Con Cita
  #5  
Viejo 12/11/09, 12:42:53
lucia_12 lucia_12 is offline
Member
 
Fecha de Ingreso: jun 2009
Mensajes: 45
Hola de nuevo!

Como dije al principio, el programa que estoy creando debe convertir tanto a pdf como a xml.

El problema es que cuando intento convertirlo a xml, me crea el archivo pero no me lo abre. Miro su contenido abiréndolo con un bloc de notas y veo que no me genera los tags (aunque sí el contenido), además me crea caracteres extaños.

Este es un ejemplo:

P1999-10-20 Alice SmithS16123 Maple StreetMill Valley CA90952  Robert SmithPê Old Town PA95819 PHurry, my lawn is going wild! 872-AA Lawnmower 1 148.95 PConfirm this is electric A926-AA Baby Monitor 1 39.98 AP1999-05-21


He probado a usar la función SAP_CONVERT_TO_XML_FORMAT, pero no me funciona.

¿Podríais ayudarme?

Gracias de antemano
Responder Con Cita
  #6  
Viejo 12/11/09, 14:08:08
ballan ballan is offline
Senior Member
 
Fecha de Ingreso: oct 2006
Mensajes: 671
Buenas

Necesitaria mas informacion

Cual es el origen de los datos? Los datos los recibes como un stream de datos en BASE64? los recibes en una tabla? en un xml?

Tambien ayudaria que pegaras el codigo que llevas hecho para que lo vieramos

Dame mas informacion y dependiendo del origen de datos te digo como podriamos hacerlo
Responder Con Cita
  #7  
Viejo 12/11/09, 14:48:30
lucia_12 lucia_12 is offline
Member
 
Fecha de Ingreso: jun 2009
Mensajes: 45
Hola ballan

Este es mi código:


DATA: pe_fichero TYPE string,
pe_fichero2 type xstring.

DATA: BEGIN OF i_lines_fichero occurs 0,
tdline(255) type x.
DATA: END OF i_lines_fichero.

DATA:
ruta type char30,
BIN_SIZE TYPE I,
contador_posiciones TYPE i VALUE 0,
longitud_fichero TYPE i,
fichero_binario TYPE xstring,
cociente TYPE i,
resto TYPE i,
r_registro_linea LIKE LINE OF i_lines_fichero,
fichero_base64 TYPE string,

ruta_funcion LIKE sapb-sappfad.


"Esto es un ejemplo de string binario correspondiente a un xml.
"Como no tengo ningún ejemplo de momento de string en base64
"correspondiente a un xml, lo que hago es pasar esto a binario64
"y luego a binario, para verificar que usando las funciones de
"más abajo, lo convierte bien.


CONCATENATE

'50313939392D31302D3230000B416C69636520536D697468533136313233204D'
'61706C65205374726565744D696C6C2056616C6C657920202020202020202043'
'41393039353200010C526F6265727420536D69746850EA1400004F6C6420546F'
'776E20202020202020202020202050413935383139005048757272792C206D79'
'206C61776E20697320676F696E672077696C6421003837322D4141004C61776E'
'6D6F7765720031003134382E39350050436F6E6669726D207468697320697320'
'656C65637472696300413932362D41410042616279204D6F6E69746F72003100'
'33392E3938004150313939392D30352D323100'


INTO pe_fichero.

pe_fichero2 = pe_fichero.


*Paso de binario a binario64

CALL FUNCTION 'SSFC_BASE64_ENCODE'
EXPORTING
BINDATA = pe_fichero2
* BINLENG =
IMPORTING
B64DATA = fichero_base64

.
IF SY-SUBRC <> 0.

ENDIF.


"Paso de binario64 a binario

CALL FUNCTION 'SSFC_BASE64_DECODE'
EXPORTING
B64DATA = fichero_base64
* B64LENG =
* B_CHECK =
IMPORTING
BINDATA = fichero_binario

.
IF SY-SUBRC <> 0.

ENDIF.


if fichero_binario = pe_fichero. "Si realmente lo convierte bien

longitud_fichero = XSTRLEN( fichero_binario ).
cociente = longitud_fichero div 255.
resto = longitud_fichero mod 255.


DO cociente TIMES.

r_registro_linea-tdline = fichero_binario+contador_posiciones(255).
APPEND r_registro_linea TO i_lines_fichero.
contador_posiciones = contador_posiciones + 255.
CLEAR r_registro_linea.

ENDDO.

r_registro_linea-tdline = fichero_binario+contador_posiciones(resto).
APPEND r_registro_linea TO i_lines_fichero.

ruta = 'C:\Documents and Settings\usr\Escritorio\Fic1.xml'.


CALL FUNCTION 'SAP_CONVERT_TO_XML_FORMAT'
EXPORTING
I_FILENAME = 'Fic1.xml'
I_XML_DOC_NAME = ruta
IMPORTING
PE_BIN_FILESIZE = BIN_SIZE
TABLES
I_TAB_SAP_DATA = i_lines_fichero
* CHANGING
* I_TAB_CONVERTED_DATA = i_lines_fichero
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2.

IF SY-SUBRC <> 0.

ENDIF.


CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = 'C:\Documents and Settings\usr\Escritorio\Fic1.xml'
FILETYPE = 'BIN'
TABLES
DATA_TAB = i_lines_fichero.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

else.

MESSAGE 'El archivo generado no es igual que el de entrada' TYPE 'I'.

endif.


Es el mismo código que me funcionaba para pdf, pero he añadido la función de convertir a xml. A lo mejor no la estoy usando bien o no es la que tengo que usar.

Gracias por contestar tan rápido
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 12:27:17.


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