Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Envío de registros y sus respuestas (https://www.clubdelphi.com/foros/forumdisplay.php?f=66)
-   -   ERROR 2004 El valor del campo FechaHoraHusoGenRegistro debe ser la fecha actual del s (https://www.clubdelphi.com/foros/showthread.php?t=97604)

edinru 25-07-2025 13:04:47

ERROR 2004 El valor del campo FechaHoraHusoGenRegistro debe ser la fecha actual del s
 
Estoy teniendo problemas con el envío del soap-xml a verifactu.



Estoy haciendo adaptaciones, viendo el de seccion31, pero para usar en delphi 12 con httprio, como una aplicacion de consola que se lance,….

Todo me funciona “mas o menos” bien, ya conecta con verifactu, devuelve los errores.

Pero hay un error que me tiene loco, aunque verifactu dice (en su respuesta soap) que lo admite pero con warning.

Es la fecha de huso, que por mas que le doy vueltas no consigo enviarla con el valor correcto.

He analizado parte del codigo de seccion31, y hay una cosa en particular que me resulta curiosa:



ESTE ES CODIGO DE SECCION31

Código Delphi [-]
    // XSDatetime
    ahora:=Now;
    XSDatetime := TXSDatetime.Create;
    XSDatetime.AsDateTime := ahora;
    XSDatetime.UseZeroMilliseconds := False;
    XSDatetime.Millisecond := 0;
    XSDatetime.UseZeroMilliseconds := False;
    XSDatetime.FractionalSeconds := 0;

        Factura.RegistroAlta.FechaHoraHusoGenRegistro     :=XSDatetime; // Formato: YYYY-MM-DDThh:mm:ssTZD (ej: 2024-01-01T19:20:30+01:00) (ISO 8601)

str:=Factura.FechaHoraHusoGenRegistro.NativeToXS;


        huellaSinCodificar:=GenerarHuella_alta_RegistroVerifactu(sesion,indice,Factura.RegistroAlta, false);




function GenerarHuella_alta_RegistroVerifactu( sesion, indice:integer; alta:RegistroFacturacionAltaType; devuelveHuella:boolean):string;
var
   CadenaTemporalHuella,huellaAnterior:string;
   indiceAnterior:integer;
begin
    huellaAnterior:=sesiones[sesion].facturas[  getIndexHuellaAnterior(sesion, indice) ].huellaAnterior;

    CadenaTemporalHuella:= 'IDEmisorFactura='+         alta.IDFactura.IDEmisorFactura+'&'+
                           'NumSerieFactura='+         alta.IDFactura.NumSerieFactura+'&'+
                           'FechaExpedicionFactura='+  alta.IDFactura.FechaExpedicionFactura+'&'+
                           'TipoFactura='+             TipoFacturaVerifactuToString( alta.TipoFactura )+'&'+
                           'CuotaTotal='+              alta.CuotaTotal+'&'+
                           'ImporteTotal='+            alta.ImporteTotal+'&'+
                           'Huella='+                  huellaAnterior+'&'+
                           'FechaHoraHusoGenRegistro='+alta.FechaHoraHusoGenRegistro.NativeToXS;

AQUI TERMINA CODIGO DE SECCION31

Esta generando la huella con alta.FechaHoraHusoGenRegistro.NativeToXS; es decir

El método NativeToXS convierte el valor de fecha y hora de formato nativo de Delphi (TDateTime) a una cadena en formato ISO 8601 extendido (por ejemplo: 2024-07-25T14:48:32+02:00), que es el formato requerido por los XML de Verifactu/SII.
Si utilizo ese criterio

Código:

2025-07-25 12:41:25 TPreparadorFacturas.IDEmisorFactura=XXXF&NumSerieFactura=VERI-9017&FechaExpedicionFactura=25-07-2025&TipoFactura=F1&CuotaTotal=21.00&ImporteTotal=121.00&Huella=&FechaHoraHusoGenRegistro=2025-07-25T12:41:25+02:00

Siempre me da error

Código:

2025-07-25 12:41:26  C¢digoErrorRegistro = 2000
2025-07-25 12:41:26  DescripcionErrorRegistro = El c lculo de la huella suministrada es incorrecta.

Datos de entrada c lculo huella:
Código:

IDEmisorFactura=XXXF&NumSerieFactura=VERI-9017&FechaExpedicionFactura=25-07-2025&TipoFactura=F1&CuotaTotal=21.00&ImporteTotal=121.00&Huella=&FechaHoraHusoGenRegistro=2025-07-25T12:41:25.000Z
 Huella calculada: E5870096D057B3D1A10B05FB410DEFBB82FC6FFE89AAF38DB56A3A3A8F35BF15
2025-07-25 12:41:26 Proceso finalizado


Fijate en su cadena, ellos han calculado con hora ZULU, pero no la real ZULU sino una que se han inventado con la hora local y la Z al final

Total, que les hago caso y les envío la fechahuso en “su formato ZULU” EN LA GENERACION DE LA HUELLA, EN EL XML TIENE QUE IR EN UTC

Ya queda resuelto el error 2000, lo que entiendo que la huella esta ya bien (observa que la he tenido que enviar en un formato distinto al de seccion31)

Pero me devuelven el siguiente mensaje

Código:

2025-07-25 12:45:41 TPreparadorFacturas.IDEmisorFactura=XXXF&NumSerieFactura=VERI-9018&FechaExpedicionFactura=25-07-2025&TipoFactura=F1&CuotaTotal=21.00&ImporteTotal=121.00&Huella=&FechaHoraHusoGenRegistro=2025-07-25T12:45:41.000Z
2025-07-25 12:45:41 TPreparadorFacturas.35FEC3F257B4C58873C9D448E7D173C3BFBA7BE0E8975C56EDBF3A99BDE39C5C
2025-07-25 12:45:41 EstadoEnvio = ParcialmenteCorrecto
2025-07-25 12:45:41 Factura [VERI-9018 | 25-07-2025]: INCORRECTA (estado AceptadoConErrores).
2025-07-25 12:45:41  C¢digoErrorRegistro = 2004
2025-07-25 12:45:41  DescripcionErrorRegistro = El valor del campo FechaHoraHusoGenRegistro debe ser la fecha actual del sistema de la AEAT, admiti‚ndose un margen de error de: 240 segundos.
2025-07-25 12:45:41 Proceso finalizado


DUDAS: ¿como es posible que a seccion31 le este funcionando correcto y acepten la fechaHuso (en la generacion de la huella) con UTC? ¿Será algo del SOAP que tenga que definirle como generico y yo no lo este haciendo?

DUDAS: no hay ningun margen excedido de 240 segundos, tarda menos de un segundo en hacerlo todo, fijate en las horas del log.

IMPORTANTE: COMO ESTOY REALIZANDO MIL PRUEBAS SOBRE LO MISMO, REUTILIZO LA FACTURA, LE INCREMENTO UN NUMERO Y CAMBIO EL NUMERO DE INSTALACION, LE PONGO CUALQUIER COSA DISTINTA, Y LA HUELLA ANTERIOR SIEMPRE LA DEJO VACIA (SE SUPONE QUE ES LA PRIMERA)


Por favor, a ver si algún alma caritativa se apiada.

Gracias de todas formas

edinru 25-07-2025 17:49:23

me contesto a mi mismo antes que nadie. el problema viene por que tipo de fechahuso se graba en el xml, utilizando la importacion nativa de verifactu y generando el xml te pone por defecto una fecha ZULU, que esta bien, pero seria ZULU REAL, con mas o menos tiempo, SOLUCION= Simular un ZULU con la fecha actual del sistema, convertirlo de nuevo a datetime y darselo al pas de importacion de verifactu. si luego lo monto os comparto la parte del codigo

Neftali [Germán.Estévez] 28-07-2025 10:07:41

Por favor utilizad TAGs cuando añadáis código a los mensajes.
Te recomiendo además [edinru] revisar la guía de estilo de los foros.


La franja horaria es GMT +2. Ahora son las 20:27:14.

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