Página 1 de 1

Depurar XML ya generado y sellado.

Publicado: Lun Ene 17, 2011 11:41 am
por s3cr3to
Buen día DADO.

Estoy analizando el código de la addenda para Soriana, ya he logrado añadirla y enviarla al servidor de prueba. (Todavia es un borrador mi aplicación y esta 99% basada en tu codigo fuente).

Ahora bien, al proveedor al que le compramos el generador de CFDs ha vuelto a meter las p@titas y debido al pendiente que tiene con nosotros de añadir las addendas, metio una corrección que le deja basura a todos mis CFDs (incluso si no necesitan addenda) en el area del schema:

Código: Seleccionar todo

version="2.0"
    xmlns="http://www.sat.gob.mx/cfd/2"
    xmlns:basurita="http://basurita"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd http://www.basurita.com/cfd http://www.basurita.com.mx/cfd/basurita.xsd">
Debido a esto, despues de añadir la addenda (soriana), tengo que abrir el XML y borrar la basura que esta en xmlns. Pero yo quiero que el usuario que va a añadir la addenda no tenga que meterse con el archivo xml manualmente (imaginate el daño!). Total estoy esperando que me corrijan la aplicacion, pero ya se estan tardando dias con algo tan simple y tengo cientos de documentos en espera de ser generados.

Total, mi intencion es limpiar la referencia del schema, y no logro determinar que usar, a como veo el codigo, una vez generado el CFD ya es de solo lectura y no puedo "tocar" nada extra excepto la addenda... (ojala este equivocado).

Intente atacando a los memos (aunque sospecho debo usar el CFD u otra variable en FacturaE), y usando la funcion ReemplazaCad. Pero en un caso me deja dos espacios que no se que son (¿fin de linea?), y en otro caso no lo reemplaza. Reemplazo en el memo con lo siguiente, pero me deja dos espacios que no logro determinar que son (sospecho son fin de linea):

Código: Seleccionar todo

Memo7.Lines.Text:= RemplazaCad( '', ' http://www.basura.com/cfd http://www.basura.com.mx/cfd/basura.xsd', Memo7.Lines.Text);
Este otro no encuentra la cadena, ahi es donde sospecho que son "Enters" or LF o algo:

Código: Seleccionar todo

Memo7.Lines.Text:= RemplazaCad('xmlns="http://www.sat.gob.mx/cfd/2"','xmlns="http://www.sat.gob.mx/cfd/2" xmlns:basura="http://www.basura.com/cfd"', Memo7.Lines.Text);
Quizas estoy atacando mal el problema, pues estoy un Memo en pantalla (con el texto del xml leído), cuando sospecho que debo trabajar directamente con el CFD. ¿Como puedo desde el codigo reemplazar en el CFD esa parte que esta mal conformada? quitando la basura que menciono arriba con lo que el SAT pide:

Código: Seleccionar todo

version="2.0"
    xmlns="http://www.sat.gob.mx/cfd/2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd">
¿En el código fuente habrá algo equivalente a?:

Código: Seleccionar todo

CFD.Set_xmlns('xmlns="http://www.sat.gob.mx/cfd/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd"')
Cuando intento esto:

Código: Seleccionar todo

FacturaEForm.CFD.SetAttribute('xmlns:xsi','http://www.w3.org/2001/XMLSchema-instance');
FacturaEForm.CFD.SetAttribute('xsi:schemaLocation','http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd');
surge este mensaje de error en la aplicación:

Código: Seleccionar todo

Attempt to modify a read-only node.
Tampoco puedo asignarlo directamente (es de solo lectura):

Código: Seleccionar todo

FacturaEForm.XMLDoc.SchemaRef:= 'xmlns="http://www.sat.gob.mx/cfd/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd';
Saludos cordiales y gracias por la ayuda que me puedan proporcionar.

S

Re: Depurar XML ya generado y sellado.

Publicado: Lun Ene 17, 2011 12:08 pm
por Dado
s3cr3to escribió:Buen día DADO.
S

Santo desm.... batman! je je je

Cada idea que se me ocurria ya la haz probado, deja "le muevo" un poco por aca y ver si puedo encontar una respuesta.

Re: Depurar XML ya generado y sellado.

Publicado: Lun Ene 17, 2011 12:35 pm
por Dado
Listo.

Debes usar

Código: Seleccionar todo

CFD.SetAttribute('xmlns:basurita',null);
CFD.SetAttribute('xsi:schemaLocation','http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd');
El error de "solo lectura" te lo marcaba en el atributo "xmlns:xsi" pero el "xsi:schemalocation" si lo puedes leer y escribir.

Saludos,

Gracias!!!

Publicado: Lun Ene 17, 2011 1:25 pm
por s3cr3to
Mr DADO...

Me dejaste con los ojos cuadrados. Solución sencilla, eficiente y wow!

GRACIAS!

¿necesito anexar algo para que el SAT acepta la estructura?

Publicado: Lun Ene 17, 2011 1:45 pm
por s3cr3to
Algo que olvide mencionar,

Ya anexo la addenda y le quito la basurita de mi proveedor.
Pero ahora el validador del SAT escupio algo nuevo:
Estructura :
Declaración del namespace de la addenda incorrecto
¿Necesito añadir algo parecido a lo que quite de la basurita, como?:

Código: Seleccionar todo

CFD.SetAttribute('xmlns:PaSoriana','http://algo.que.indique.que.es.addenda.de.soriana');
Si es asi, ¿tendras el dato o un ejemplo para contentar al validador del SAT? (lo estoy buscando pero nomas no lo encuentro.

Saludos y gracias por ayudarnos con tanta duda.

S
Actualización
DADO, este post tuyo
http://www.validacfd.com/phpbb3/viewtop ... =372#p3294.
No debes preocuparte, recuerda que la addenda no tiene valor fiscal. Lo que sucede es que los sistemas de validacion comparan tu XML contra un esquema pero cuando encuantran algo raro (addenda) luego luego repelan, pero no es importante este error.
Responde mi duda respecto al mensaje de estructura.

Saludos