Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Proyecto SIF/Veri*Factu/Ley Antifraude > Envío de registros y sus respuestas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #6  
Antiguo 30-01-2025
Rja750 Rja750 is offline
Miembro
 
Registrado: ene 2025
Posts: 156
Poder: 2
Rja750 Va por buen camino
En mi caso no uso la fecha del sistema ni de la AEAT, porque la AEAT va a estar muchas veces caida y el registro deberiamos grabarlo si o si en nuestros SIF y darle la factura verificable al cliente final. Si no quieres seguir facturando sin tener conexion a la AEAT pues un control en nuestro registro a modo de campo y aviso en pantalla y no seguimos facturando hasta que se restablezca la conexion con la AEAT (Bucle Timer), Una vez restablecida la comunicacion se envia el ultimo registro como se tenga que enviar y a seguir facturando. Pero la hora tiene que ser exacta, de lo contrario nos va a dar mucho dolor de cabeza tener registros rechazados por fechas, horas y huellas que no coinciden apilados en los clientes. Si tenemos un cliente que no se ha dado cuenta de que tiene la fecha y hora mal ¿que hacemos? Le podemos poner un control y decirle que cambie la pila de la CPU o pasamos de eso y mientras que su SO funcione y tenga internet, calculamos la fecha y hora fuera del Sistema, calculamos si estamos en invierno o verano para aplicar a la UTC el horario que tenemos en España(península) UTC + 1 o nó, pero todo fuera del sistema y de la AEAT que tambien cojera la hora por servidores sincronizados por satélite como Nopuedoponerenlaces.roa.es/cgi-bin/horautc

Este codigo está en VB.net para el que le venga bien. Esta comentado

Código:
   Try
		'Puede que tengas que ponerlo para asegurarte que el servidor no te rechaza por falta de seguridad
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

            Dim url As String = "Nopuedoponerenlaces.roa.es/cgi-bin/horautc"

            Dim request As WebRequest = WebRequest.Create(url)
            request.Timeout = 5000 ' Tiempo de espera de 5 segundos creo que sobrado

            Dim response As WebResponse = request.GetResponse() ' obtengo la respuesta del servidor

            Dim responseText As String
            Using stream As Stream = response.GetResponseStream()
                Using reader As New StreamReader(stream)
                    responseText = reader.ReadToEnd().Trim() ' Limpiar espacios o caracteres extra
                End Using
            End Using

            ' Tenemos una respuesta en una cadena de numeros(String) y hay que convertirla a un número de milisegundos
            Dim timestamp As Long
            If Long.TryParse(responseText, timestamp) Then 'Esta comprobacion la podemos omitir porque responseText siempre sera una cadena de 										numeros convertible a long pero bueno...
                Dim utcTime As DateTime = DateTimeOffset.FromUnixTimeMilliseconds(timestamp).UtcDateTime

	     'Determinar si estamos en horario de verano o invierno en España
                Dim year As Integer = utcTime.Year
                Dim ultimoMarzo As DateTime = New DateTime(year, 3, DateTime.DaysInMonth(year, 3))

                ' Buscamos el último domingo de marzo que es cuando entra el horario de verano)
                While ultimoMarzo.DayOfWeek <> DayOfWeek.Sunday
                    ultimoMarzo = ultimoMarzo.AddDays(-1)
                End While
                ultimoMarzo = New DateTime(year, 3, ultimoMarzo.Day, 2, 0, 0, DateTimeKind.Utc)

                ' Buscamos el último domingo de octubre que es cuando termina el horario de verano
                Dim ultimoOctubre As DateTime = New DateTime(year, 10, DateTime.DaysInMonth(year, 10))

                While ultimoOctubre.DayOfWeek <> DayOfWeek.Sunday
                    ultimoOctubre = ultimoOctubre.AddDays(-1)
                End While
                ultimoOctubre = New DateTime(year, 10, ultimoOctubre.Day, 1, 0, 0, DateTimeKind.Utc)

                ' Si estamos entre marzo y octubre estamos en horario de verano si no estamos en horario de invierno
                Dim esHorarioVerano As Boolean = utcTime >= ultimoMarzo AndAlso utcTime < ultimoOctubre

                ' Aplicamos 2 o 1 segun sea
                Dim offsetEspaña As Integer = If(esHorarioVerano, 2, 1)

                ' Calculamos la hora en España sin tener en cuenta el sistema
                Dim horaLocalEspaña As DateTime = utcTime.AddHours(offsetEspaña)

                ' lo muestro para que se vea, pero cada cual aplica a su forma
                MsgBox("Hora ajustada en España (Península): " & horaLocalEspaña.ToString("yyyy-MM-dd HH:mm:ss") & " (UTC+" & offsetEspaña & ")")
            Else
                MsgBox("Error: No se pudo interpretar el timestamp del servidor.")
            End If

        Catch ex As Exception
            MsgBox("Error al obtener la hora UTC: " & ex.Message)
        End Try

Última edición por Neftali [Germán.Estévez] fecha: 31-01-2025 a las 08:48:09. Razón: Añadir TAG's al código
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
TimeStamp Willo MySQL 4 22-03-2016 21:15:00
Consulta TimeStamp Jose Roman SQL 2 06-09-2012 04:03:11
TimeStamp = TimeStamp me da error Chogo Firebird e Interbase 7 16-03-2011 04:13:38
TIMESTAMP en restriccion Cañones SQL 6 28-08-2007 23:19:27
Timestamp y bde 5.2 Toni Firebird e Interbase 2 27-05-2003 09:26:33


La franja horaria es GMT +2. Ahora son las 19:33:21.


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