Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-07-2014
Alexis De la Cr Alexis De la Cr is offline
Miembro
 
Registrado: may 2006
Ubicación: Puebla
Posts: 124
Poder: 18
Alexis De la Cr Va por buen camino
No aparece la leyenda encoding="UTF-8" en la cabecera de XML

Estimados amigos de Club Delphi

Les comento el siguiente problema que tengo. Tengo una Aplicación que genera CFDI desarrollada en delphi 2007 y la cual funciona correctamente en todas sus etapas. Sin embargo, por necesidades ajenas a mi, estoy migrando el codigo a Delphi XE2, y aqui vienen los problemas, los cuales he podido ir solucionando, pero hay uno que no hallo como, y esta relacionado con la generacion del archivo xml. Resulta que a la hora de Escribir el Archivo XML, no guarda la leyenda encoding="UTF-8" y aparece asi

Cita:
<?xml version="1.0"?>
cuando deberia aparecer de la siguiente forma

Cita:
<?xml version="1.0" encoding="UTF-8"?>
Entiendo que a partir de la Version 2009 ha habido cambios, sobre todo con la introduccion del unicode y pienso que debe ir por esta direccion el problema. El codigo que utilizo es el siguiente

Código Delphi [-]
  xmlDoc := TXMLDocument.Create(nil);
  xmlDoc.Active := True;
  xmlDoc.Version:='1.0';
  xmlDoc.Encoding:='UTF-8';
  iNode := xmlDoc.AddChild('cfdi:Comprobante') ;
  iNode.DeclareNamespace('cfdi','http://www.sat.gob.mx/cfd/3');
  .
  .
  .
  xmlDoc.XML.SaveToFile('c:\temporal.xml');
  xmlDoc.Active:=False;
  xmlDoc:=nil;


Alguna Sugerencia? Muchas Gracias por su ayuda
Responder Con Cita
  #2  
Antiguo 04-07-2014
Alexis De la Cr Alexis De la Cr is offline
Miembro
 
Registrado: may 2006
Ubicación: Puebla
Posts: 124
Poder: 18
Alexis De la Cr Va por buen camino
Acab de hacer una prueba de validación en el portal del SAT de un archivo xml generado con la version delphi 2007 y el resultado es el siguiente

Cita:
Versión del estándar: 3.2

Codificación
Comprobante expresado en UTF-8

Validación de estructura: Válido

Cadena original del CFDI:
.
.
.
.

Digestión SHA-1 de cadena original expresada en hexadecimal
d5bbf2489a69c437323c613f6544183b6b709319

Certificado usado : 00001000000301042574
Certificado reportado : 00001000000301042574

El sello del CFDI es válido

Cadena original del Complemento de Certificación:
.
.
.

Digestión SHA-1 de cadena original del complemento de certificación expresada en hexadecimal
76a5b097d0eda41e2ee501100f780018a68c41a0

Certificado usado : borrado
Certificado reportado : borrado

El sello de certificación no es válido


IMPORTANTE: Los resultados anteriores se presentan a efecto de que valide
la estructura, cadena original y sello de su CFDI. Para que una factura
electrónica sea válida para efectos fiscales, deberá reunir los requisitos que
establecen las disposiciones fiscales vigentes.
y ahora l que me dice con un archivo xml generado con Delphi XE2 usando la misma rutina

Cita:
Versión del estándar: 3.2

Codificación
Comprobante expresado en ANSI

Validación de estructura: Inválido

Se presentaron errores al leer el comprobante:temporal.xml
Error: Invalid byte 2 of 3-byte UTF-8 sequence.

IMPORTANTE: Los resultados anteriores se presentan a efecto de que valide
la estructura, cadena original y sello de su CFDI. Para que una factura
electrónica sea válida para efectos fiscales, deberá reunir los requisitos que
establecen las disposiciones fiscales vigentes.
Alguna Opinion? Gracias
Responder Con Cita
  #3  
Antiguo 04-07-2014
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Hola Alexis.

Me tomé un pequeño espacio para hacer una prueba de lo que comentas tanto en Delphi 2007 como en XE2 (aplicación Win32), y en ambos casos generó el XML con la cabecera correcta:

<?xml version="1.0" encoding="UTF-8"?>

Debe haber algo que estés haciendo de forma distinta en XE2 para que el resultado sea el que mencionas. ¿Podrías facilitarnos más detalles?
Responder Con Cita
  #4  
Antiguo 04-07-2014
Alexis De la Cr Alexis De la Cr is offline
Miembro
 
Registrado: may 2006
Ubicación: Puebla
Posts: 124
Poder: 18
Alexis De la Cr Va por buen camino
Estimado Al Gonzalez, pues te agradezco el hecho de que te hayas tomado el tiempo para responder. Te comento que ya resolví esa parte. Comencé haciendo la prueba de agregarle manualmente la leyenda faltante al encabezado con un editor de texto, sin embargo cuando intentaba abrirlo con el internet explorer para verificarlo, me marcaba el error de que había un carácter inválido, y por lo tanto no lo desplegaba, así que no era solo de que faltaba la leyenda. El problema estaba en la codificación del Archivo, que al no estar codificado en UTF8, pues obviamente no mostraba la susodicha leyenda.

el código ya solucionado es el siguiente:

Código Delphi [-]
xmlDoc.XML.SaveToFile('c:\temporal.xml', TEncoding.UTF8);

y listo, asunto arreglado.

Ahora tengo otros problemas, especificamente con el TSringStream y el famosisimo unicode, pero eso ya es harian de otro costal.

Gracias Al
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Usar TServerSocket y TClientSocket para enviar "streams" más o menos "grandes" dec Internet 9 04-08-2015 16:11:50
No me aparece la pestaña "Data Controls" en RAD Studio EX2 UDKO2 Varios 2 13-08-2012 16:35:52
Me aparece el error "Insufficient memory for this operation." ilichhernandez Varios 5 23-07-2010 18:48:16
Cabecera doble en grilla "DBGrid" StartKill Varios 3 11-11-2008 14:31:44
No aparece "InstallShield Objects for Delphi" en el InstallShield Express Pikot Varios 0 05-02-2007 05:00:26


La franja horaria es GMT +2. Ahora son las 23:56:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi