![]() |
Ojo con el TimeStamp de Respuesta
Por si a alguien le sirve:
Ya alguien comentó que el timestamp no lo devuelve si no ha aceptado al menos un registro del lote. Pero, el nuevo tiempo sí o sea, hay que volver a esperar 60 segundos a partir de cuando? Pues no está muy claro, pero me voy a anotar la fecha hora de mi sistema como si fuera el timestamp cuando no haya timestamp de vuelta. |
Cita:
|
Cita:
|
Cita:
Código:
/// <summary>Puede preguntar a @novatico Cita:
|
Aqua lo tenéis convertido a Delphi 10 y probado. Espero que os sirva
Librerías utilizadas: IdHTTP y IdSSLOpenSSL para manejar la conexión HTTPS. System.DateUtils para trabajar con fechas y convertir ticks Unix a TDateTime. Formato de la fecha: Utiliza FormatDateTime para formatear las fechas en el formato ISO 8601 con zona horaria. Manejo de errores: Si ocurre un error durante la solicitud HTTP, devuelve la hora local en el formato esperado. Conversión de ticks Unix: La API devuelve ticks Unix en milisegundos. Esto se divide entre 1000 para convertirlos a segundos antes de usar UnixToDateTime. Dependencia de OpenSSL: Asegúrate de que tu entorno tenga acceso a las DLL de OpenSSL (libeay32.dll y ssleay32.dll o sus equivalentes actuales) para que TIdSSLIOHandlerSocketOpenSSL funcione correctamente. |
Y esto seria para delphi 7:
Código:
unit Unit2; |
Hola.
He intentado usar la función pero me sale este error. ¿Sabéis como poder solucionarlo? Error connecting with SSL. error 1409442E:SSL routines:SSL3_READ_BYTES: tlsv 1 alert protocol version Gracias!!!! |
prueba con este: A mi me funciona correctamente en delphi 7
Código:
unit Unit2; |
Gracias por la respuesta tan rápida.
He probado el código y en la línea "Respuesta := Http.Get('https://www2.roa.es/cgi-bin/horautc');" me sigue saliendo el error. Me da que hay algún problema de compatibilidad de versiones de SSL o algo así. Un saludo. |
Desactiva el antivirus y prueba
|
La dll que estoy usando son :ssleay32.dll version 1.0.2.21
libeay32.dll version 1.0.2.21 |
En delphi con Indy tiene cuatro protocolos distintos para hacerlo de una manera mucho mas sencilla y ademas te sincroniza la hora con el PC.
Os pongo un ejemplo de dos de ellos con TidTimeUDP y TidSNTP:
|
Hola.
He probado el código y funciona de maravilla. Solo que hay que ejecutar la aplicación en modo administrador. Seguiré investigando el error "connecting with SSL. error 1409442E:SSL routines:SSL3_READ_BYTES: tlsv 1 alert protocol version" Muchas gracias. |
Creo que hay una opción en la s propiedades(botón derecho raton) para que siempre se ejecute como administrador o metiendo la aplicación en un .bat y las propiedades del .bat como administrador, alguna vez lo he hecho.
|
Si en las propiedades del acceso directo, en opciones avanzadas, hay un check para ejecutar como administrador. Pero ¿Habría alguna forma de actualizar la hora del sistema sin entrar como administrador?
. |
En Windows ¿Porqué no comprobáis que el parámetro "Establecer hora automáticamente" este activado?.
Con eso ya tenéis una capa de seguridad para aseguraos que la hora es correcta. Se puede lograr utilizando llamadas a la API de Windows y accediendo al registro, ya que esta configuración está almacenada allí. La clave relevante del registro es: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters Dentro de esta clave, el valor Type indica cómo se configura la hora del sistema: "NTP" indica que la sincronización automática está activada (Network Time Protocol). "NoSync" indica que no está activada. |
Cita:
Te lo pongo |
Cita:
pero en .net hay comandos directos. te pongo como me funciona a mi Generas desde la aplicacion un .bat y le pones estas 3 lineas: "cmd /c Time " & hora_buff "cmd /c date " & date_buff "exit" donde date_buff u hora_buff son las horas capturadas poniendo la fecha en formato español dd/mm/yyyy y despues ejecutas desde el programa: ShellExecute 0, "runas", "[pathcompleto archivo.bat]", requireAdministrator, vbNullString, 0 el shellexexute es de las apis de windows y tienes que declarar esta funcion Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Segun como tengas el windows configurado te puede salir un mensaje de que es una aplicacion externa o algo asi, y le tienes que decir que no te avise mas poniendole al minimo la barra de avisos. Te recomiendo que le pongas un sleep (espera) de 0.5segundos despues de la ejecucion del shellexecute |
Cita:
si lo que quieres es recuperar solo la hora no hace falta el permiso de administrador, lo unico que cuando llames a las funciones, no le indiques True o no indiques nada. El ejecutable puedes ponerlo para que se ejecute en modo administrador desde las opciones del proyecto en el apartado Application -> Manifest -> Execution Level -> Require Adminsitrator |
Voy a probar lo que habéis puesto. Qué haríamos sin la ayuda de este foro. Sois los mejores.
Muchas gracias!!!! |
Cita:
Cuando pregunté al mail de Veri*Factu me remitieron a la siguiente web: https://sede.agenciatributaria.gob.e...a_oficial.html, pero no me he puesto a leerla a fondo. |
Cita:
|
Cita:
Pero si, se puede usar. |
Cita:
|
Cita:
|
Les traigo una pequeña mejora del código de mqm, que permite pasarle el UTC que queramos. Por tanto, independientemente de la fecha, hora y región que tenga el equipo desde el que se ejecuta la aplicación, nos dará siempre la fecha-hora de Internet correcta:
|
Estuve intentando hacer la función anterior con TRESTClient, pero al ejecutar la petición me da el error 403 forbidden:
¿Alguien tiene idea de cómo hacer que funcione con TRESTClient? Esto nos ahorraría tener que usar las librerías Openssl. |
Lo conseguí con objetos TNetHTTPClient:
Acordarse de poner en el uses: System.Net.HttpClient, System.Net.URLClient, System.Net.HttpClientComponent |
Actualizado el mensaje #2 que recopila códigos con este hilo.
|
Cita:
|
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 |
Cita:
Ya cada uno que diseñe como crea más conveniente, pero no acabo de entender algunas cuestiones que planteas, por ejemplo la hora se coge del ROA(armada) no es de la aeat. Otra cosa 3s el timestamp de la respuesta del ultimo envio. Por otro lado dices como de darle la posibilidaf(supongo que te refieres a parametrizae) la decisión de que si no se puede enviar no se puede facturar, cosa que particularmente veo un error por varios motivos, primero que el vendedor tiene que tener instrucciones de que hacer en ese caso(se lo anota?, le dice al valiente que no se factura?, se vende pero sin facturar?) Otra cosa que tu sistema dependa de Internet para generar los qr, so no no tiene sentido, se acumula y se envía como incidencia cuando vuelva imternet, pararlo es más negativo que positivo. No sé, cada uno vé claro su operativa según su soft2are y el tipo de clientes. |
Otra cosa, octubre de 2026 es, presumiblemente, el último cambio de horario, com lo cual nos quedarimos con horario de invierno eternamente( a mi particularmente me gusta mas el horario de verano incluso para invierno). Me lo he dejado previsto, incluso parametrizado por si vuelven a cambiar de idea, y esa fecha está ahí al lado.
Por otro lado si vas a controlar las horas es recomendable desactivar de Windows/linux/otros cualquier intención de estos de cambios automáticos |
Cita:
He hablado con algunos gestores y me comentan que tienen muchos problemas con la conexión con la AEAT en el envío de documentación y no es nuevo de ahora, imagino que cuando estemos todos atacando a sus servidores va a ser lo más. Bueno el tema del desfase horario si lo van a quitar simplificaría más el código pero tendremos que tenerlo en cuenta. |
Cita:
Sigo sin entender muy bien tu prodecimiento, pero el que la lleva...Las proformas no llevan QR y las facturas normales se pueden generar e intentar enviar al momento , y se teintenta hasta que se pueda, si el problema es de ellos ya lo identificarán. |
Cita:
|
Actualizo el mensaje #2 con la recopilación de códigos.
Gracias por compartirlos. |
Cita:
No puedes/debes poner el envío de la factura como parte de la operativa del cobro de la factura, o sea, hay unos controles definidos en la norma que te obligan a que esos envíos lo hagas en segundo plano, por ejemplo, hay que respetar unos tiempos de espera entre envios, también por el escenario que pones de ejemplo, si en un momento dato no hay conexión puedes seguir emitiendo y encadenando y cuando haya conexión tienes que volver. A comenzar el control de flujos, ver cuantas tienes pendientes de enviar, y enviarlas juntas en un soloenvio(máximo 1000 facturas), pero no puedes hacer saltar en los envíos, tiene que ser secuencialmente r3specto a su generación cronológica y encadenamiento. Creo que te tienes que repasar la documentación de verifactu empezando por la Orden Ministerial. Saludos |
Cita:
Exacto, eso que ha dicho ermendalenda |
Cita:
|
| La franja horaria es GMT +2. Ahora son las 15:25:07. |
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