Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Errores (relacionados con al AEAT) (https://www.clubdelphi.com/foros/forumdisplay.php?f=78)
-   -   Error 4102 El XML no cumple el esquema - No indica que registro falla (https://www.clubdelphi.com/foros/showthread.php?t=97124)

rci 12-12-2024 18:30:49

Error 4102 El XML no cumple el esquema - No indica que registro falla
 
Hola, me he encontrado un caso que no se como resolver.
Es cuando al realizar un envío de registros de facturación a Veri*Factu, no hay respuesta en el formato esperado sino que se produce una excepción y el mensaje que indica es
Cita:

Codigo[4102].El XML no cumple el esquema. Falta informar campo obligatorio.: *el que sea*
Te avisa de lo que falla en el XML que has enviado, pero no da mas detalles.
Supongamos que enviamos varios registros de facturación a la vez, todos están correctos menos uno que por el motivo que sea, se ha generado mal y le falta una propiedad obligatoria.
Al recibir la excepción no indica cual de los registros de facturación están mal y claro... si hay 1000 pues te puedes volver loco.

Como estáis planteando este caso?

A lo mejor es necesario validar el XML de cada registro de facturación (RegistroFacturacionAltaType) con el esquema antes de crear el "paquete" con todos los registros a enviar (RegFactuSistemaFacturacion) ? Esto es posible?

Muchas gracias por vuestra ayuda!

Saludos

Faneka 13-12-2024 10:12:33

Yo valido cada RF antes de enviar, si tiene algun problema esa no se envía, se queda 'pendiente' y en el proximo envio se intenta de nuevo.

rci 13-12-2024 10:23:36

Cita:

Empezado por Faneka (Mensaje 560724)
Yo valido cada RF antes de enviar, si tiene algun problema esa no se envía, se queda 'pendiente' y en el proximo envio se intenta de nuevo.

Muchas gracias Faneka.
Estoy intentando validar el XML del registro de facturación contra el esquema xsd. De momento no se como hacerlo en c#. Estoy buscando y probando.
Si alguien lo sabe se lo agradeceré.

Saludos

ermendalenda 13-12-2024 18:02:42

Cita:

Empezado por Faneka (Mensaje 560724)
Yo valido cada RF antes de enviar, si tiene algun problema esa no se envía, se queda 'pendiente' y en el proximo envio se intenta de nuevo.

Si esa no se envía y envías los siguientes después lo tienes que mandar como subsanacion. Y generándo un nuevo registro encadenado al último generado, tampoco rmte valdría como incidencia, aunque supongo que lo habrás tenido en cuenta, por que si te ha fallado la validación va a seguir mal.

rci 16-12-2024 10:39:13

Cita:

Empezado por ermendalenda (Mensaje 560735)
Si esa no se envía y envías los siguientes después lo tienes que mandar como subsanacion. Y generándo un nuevo registro encadenado al último generado, tampoco rmte valdría como incidencia, aunque supongo que lo habrás tenido en cuenta, por que si te ha fallado la validación va a seguir mal.

gracias ermendalenda, de momento no he conseguido validar el XML de un registro de facturación contra el esquema XSD. :( (No se si crear otro hilo dedicado a validar XML contra XSD porque yo uso C#...)

A parte he hecho una consulta a veri*factu para ver si en lugar de que salte una excepción que no indica que registro de facturación está mal, si pueden contestar una respuesta en formado esperado e indicando el registro que falla. Me han contestado que lo están estudiando...

djatila 16-12-2024 13:32:54

Por si te sirve de algo. Una validez básica, es que puedas serializarlo.

rci 16-12-2024 15:21:12

Cita:

Empezado por djatila (Mensaje 560764)
Por si te sirve de algo. Una validez básica, es que puedas serializarlo.

Gracias djatila, serializarlo puedo pero al enviar se queja que le falta Desglose
Con las pruebas que he hecho de validar el XML contra el XSD no da error, como si fuera correcto, supongo que lo estoy haciendo mal.

sglorka 16-12-2024 16:06:13

Cita:

Empezado por rci (Mensaje 560708)
Hola, me he encontrado un caso que no se como resolver.
Es cuando al realizar un envío de registros de facturación a Veri*Factu, no hay respuesta en el formato esperado sino que se produce una excepción y el mensaje que indica es

Te avisa de lo que falla en el XML que has enviado, pero no da mas detalles.
Supongamos que enviamos varios registros de facturación a la vez, todos están correctos menos uno que por el motivo que sea, se ha generado mal y le falta una propiedad obligatoria.
Al recibir la excepción no indica cual de los registros de facturación están mal y claro... si hay 1000 pues te puedes volver loco.

Como estáis planteando este caso?

A lo mejor es necesario validar el XML de cada registro de facturación (RegistroFacturacionAltaType) con el esquema antes de crear el "paquete" con todos los registros a enviar (RegFactuSistemaFacturacion) ? Esto es posible?

Muchas gracias por vuestra ayuda!

Saludos

Mi recomendación es que hagas lo siguiente. Si mandas un bloque con 100 de RF's, y NO te rechaza el envío, entonces en la respuesta tienes información de las posibles aceptaciones con errores para que las corrijas. Si el envío es rechazado y no ha sido por una causa comunicaciones ( System.ServiceModel.EndpointNotFoundException, System.ServiceModel.CommunicationException ) si no por una causa del tipo ServiceModel (Error en el modelo ), entonces repites el envío pero en bloques de 1 en 1 hasta que hayas enviado los 100 Rf's. Es la única forma de averiguar qué registro está mal construido.

Puedes mejorar el algoritmo, si por ejemplo cuando vas por el quinto registro ya te lo rechaza entonces el siguiente bloque que mandas agrupas del el sexto hasta el 100. Y puede ser vuelto a rechazar por mala construcción, pues repites el proceso.

rci 16-12-2024 16:40:16

Cita:

Empezado por sglorka (Mensaje 560769)
Mi recomendación es que hagas lo siguiente. Si mandas un bloque con 100 de RF's, y NO te rechaza el envío, entonces en la respuesta tienes información de las posibles aceptaciones con errores para que las corrijas. Si el envío es rechazado y no ha sido por una causa comunicaciones ( System.ServiceModel.EndpointNotFoundException, System.ServiceModel.CommunicationException ) si no por una causa del tipo ServiceModel (Error en el modelo ), entonces repites el envío pero en bloques de 1 en 1 hasta que hayas enviado los 100 Rf's. Es la única forma de averiguar qué registro está mal construido.

Puedes mejorar el algoritmo, si por ejemplo cuando vas por el quinto registro ya te lo rechaza entonces el siguiente bloque que mandas agrupas del el sexto hasta el 100. Y puede ser vuelto a rechazar por mala construcción, pues repites el proceso.

Muchas gracias sglorka, es una buena idea.
Pensaba que era posible validar el XML contra el esquema XSD y que antes de enviar ya te dijera si "el XML no cumple el esquema" pero de momento no lo consigo.

rci 16-12-2024 16:43:41

Cita:

Empezado por rci (Mensaje 560759)
A parte he hecho una consulta a veri*factu para ver si en lugar de que salte una excepción que no indica que registro de facturación está mal, si pueden contestar una respuesta en formado esperado e indicando el registro que falla. Me han contestado que lo están estudiando...

Me han contestado que no pueden :(

Cita:

En este caso, desafortunadamente, no podemos dar otra salida, salvo un error general de tipo Soap Fault, aunque sea en una de las facturas de la remesa.
Esto es debido a que en el flujo de validaciones, una de las primeras cuestiones que evaluamos es si el XML completo es correcto a nivel sintáctico. Como falta el bloque "Desglose" de carácter obligatorio, se produce dicho error.
Tampoco es posible indicar la factura que se provoca el error, estamos muy limitados en la gestión de errores cuando se produce un error general de este tipo.

Sentimos las molestias.

Atentamente,
Atención al Usuario
Departamento de Informática Tributaria
Email: verifactu@correo.aeat.es
A ver si encuentro a alguien que haya podido validar el XML contra el esquema XSD (en c#.net). Sinó tendré que reenviar esos registros una a uno hasta encontrar el incorrecto, como propone sglorka

Saludos

ermendalenda 16-12-2024 17:30:53

Cita:

Empezado por rci (Mensaje 560771)
Me han contestado que no pueden :(



A ver si encuentro a alguien que haya podido validar el XML contra el esquema XSD (en c#.net). Sinó tendré que reenviar esos registros una a uno hasta encontrar el incorrecto, como propone sglorka

Saludos

Yo tampoco los válido pero la verdad es que no me preocupa demasiado, una vez depurado es raro que pase algo. Me preocupan más los errores no detectables, que gracias al foro he corregido alguno y los posibles cambios de version de verifactu o cambios en la normativa fiscal y que tengamos que cambiar los programas en caliente sin tener mucho tiempo d epru2bas, ya sabemos que aquí aprueban cosas para aplicar en 3 días.
Pero agarrate a la factura electronica. Eso sí que tiene un meneo, menos mal que ya la tengo lista(para la actualodad)

rci 16-12-2024 18:18:14

Cita:

Empezado por ermendalenda (Mensaje 560772)
Yo tampoco los válido pero la verdad es que no me preocupa demasiado, una vez depurado es raro que pase algo. Me preocupan más los errores no detectables, que gracias al foro he corregido alguno y los posibles cambios de version de verifactu o cambios en la normativa fiscal y que tengamos que cambiar los programas en caliente sin tener mucho tiempo d epru2bas, ya sabemos que aquí aprueban cosas para aplicar en 3 días.
Pero agarrate a la factura electronica. Eso sí que tiene un meneo, menos mal que ya la tengo lista(para la actualodad)

Gracias ermendalenda por tu respuesta. Lo tendré en cuenta

rci 17-12-2024 09:10:26

He creado un nuevo hilo en el foro de .Net preguntando sobre el tema, por si alguien puede ayudarme

https://www.clubdelphi.com/foros/showthread.php?t=97129

Muchas gracias


La franja horaria es GMT +2. Ahora son las 12:41:27.

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