Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Proyecto SIF/Veri*Factu/Ley Antifraude > Registros de Facturacion y Eventos (XML)
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #10  
Antiguo Hace 2 Semanas
Avatar de bmfranky
bmfranky bmfranky is offline
Miembro
 
Registrado: may 2024
Ubicación: Gandia, Valencia
Posts: 599
Poder: 1
bmfranky Va por buen camino
Cita:
Empezado por rci Ver Mensaje
Hola, nosotros trabajamos en c#, importamos el wsdl y este genera unas clases con los objetos y sus propiedades.
Para crear un registro de facturación, creamos un objeto y lo rellenamos.
Para enviar ese registro, creamos otro objeto con todos los registros de facturación a enviar y lo enviamos directamente con las funciones que se generaron al importar el wsdl, pasándole el objeto para enviar.
No creamos el XML a pelo, de hecho no haría falta serializar el objeto a XML, si no fuera para guardarlo (en fichero o en base de datos).

Esto ya nos funciona pero hemos encontrado un caso que no funciona correctamente.

El tema está en el campo FechaHoraHusoGenRegistro, al importar el wsdl ese campo se crea como un DateTime.
En la documentación ese campo es una fecha en formato YYYY-MM-DDThh:mm:ssTZD (ej: 2024-01-01T19:20:30+01:00) (ISO 8601)
Al rellenar la propiedad en el objeto le indicamos que ese DateTime tiene DateTimeKind.Local para indicar que la hora representada es la hora local.
Para calcular la huella necesitamos esa fecha en formato de cadena y lo convertimos de forma que aparezca la información de la zona horaria.

Hemos visto que estas dos operaciones, utilizan la configuración de la zona horaria del ordenador donde se ejecuta.

Hasta aquí todo bien. En condiciones normales funciona perfectamente.

El problema lo tenemos cuando hay un ordenador con una configuración de zona horaria y otro con otra configuración.
Hemos visto que si el registro de facturación lo genera y lo envía el mismo ordenador, no hay problema.
Pero si el registro de facturación lo genera un ordenador y lo envía otro (con configuración de zona horaria distinta) luego la factura es aceptada con errores y el error es de la huella.
2000 El cálculo de la huella suministrada es incorrecta.

Puntualizar que en nuestro caso cada ordenador genera registros de facturación, se guardan en una BD central de un servidor, y en ese servidor hay un servicio que va enviando los RFs.

Imaginamos que el error ocurre porque el tipo de datos DateTime de c# no tiene información del desplazamiento respecto UTC y mira la configuración de zona horaria del ordenador donde se ejecuta. Pensamos que la función para enviar el objeto, también utiliza esa configuración y depende del ordenador envía una cosa u otra.
Por ejemplo desde un ordenador envía 2025-04-15T15:57:46+01:00 desde el otro envía 2025-04-15T15:57:46+02:00
Y claro cuando hacienda hace las validaciones y genera la huella, si la FechaHoraHusoGenRegistro no es la correcta, la huella cambia.

Hemos estado haciendo varias pruebas y buscando varias posibilidades pero no hemos encontrado la forma de solucionarlo.

Pensamos que tenemos varias opciones:

1. No permitir que varios ordenadores tengan distintas configuraciones de zona horaria.

2. Modificar las clases que se generan al importar el wsdl, cambiar el tipo del campo FechaHoraHusoGenRegistro para que sea una cadena y hacer el tratamiento nosotros del valor de la zona horaria

3. Para el envió, no trabajar con los objetos, sino utilizar una cadena con el XML y enviar ese string directamente haciendo un POST. (y controlar el valor de la zona horaria del campo).

Seguramente haremos la opción 1, no se si algún cliente nuestro requerirá configuraciones distintas.
Sobre la opción 2, no nos gusta demasiado porque cada vez que se actualice el wsdl se tendrá que volver a cambiar.
Sobre la opción 3, pensamos que en general es mejor para nosotros trabajar con los objetos, para rellenarlos y para tratar las respuestas obtenidas.

No se si alguno de vosotros trabaja en c# y se ha encontrado con este problema o si tenéis alguna otra idea para afrontar ese caso.

Muchas gracias
Hola, habeis probado a pasar el Date, como un parametro al mismo tiempo que enviais el registro y usarlo para generar la huella, asi seguro que es el mismo....

Osea que consultais la fecha hora al ordenador que hace el envio y la usais para generar el registro y la huella, asi seguro que es la misma, con unos segundos de diferencia.
El ordenador que hace el envio a su vez la consulta con la base de datos o internet o lo que sea.
__________________
Uno se alegra de ser útil. (Isaac Asimov)
Responder Con Cita
 



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
Consultas por franja horaria petercat SQL 2 17-04-2018 09:12:29
Obtener zona horaria en window 8 ingabraham Varios 0 28-08-2013 17:53:04
como caambiar la zona horaria desde delphi kurono Varios 4 19-08-2008 06:53:36
Zona Horaria palets API de Windows 2 23-10-2006 19:44:57
Zona horaria Genner Varios 1 17-04-2006 14:22:20


La franja horaria es GMT +2. Ahora son las 15:51:47.


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
Copyright 1996-2007 Club Delphi