donde si tiene un error es en la anulacion (DLL)
en la 3.0 estara corregido
pero si quereis corregirlo ya:
uverifactuFuncs.pas (D10):
reemplazar esta funcion:
Código:
function anulacionfactura_verifactu(sesion:integer; cabecera:TVeriFactuInicio; indice:integer):RegistroFacturaType;
var
Factura : RegistroFacturaType;
Destinatario : PersonaFisicaJuridicaType;
ListaDestinatarios : Destinatarios;
ListaDesglose : DesgloseType;
DetalleDesglose : DetalleType;
XSDatetime : TXSDatetime;
j:integer;
_huellaAnterior : string;
facturaRegistro : TRegistrofactura;
begin
facturaRegistro:=sesiones[sesion].facturas[indice];
Factura := RegistroFacturaType.Create;
Factura.RegistroAnulacion := RegistroAnulacion.Create;
Factura.RegistroAnulacion.IDVersion := VersionType._1_0;
Factura.RegistroAnulacion.IDFactura := IDFacturaExpedidaBajaType.Create;
Factura.RegistroAnulacion.IDFactura.IDEmisorFacturaAnulada := cabecera.emisor.nifEmisor;
Factura.RegistroAnulacion.IDFactura.NumSerieFacturaAnulada := facturaRegistro.numSerieFactura;
Factura.RegistroAnulacion.IDFactura.FechaExpedicionFacturaAnulada := verifactuFecha( facturaRegistro.fechafactura ) ; // (dd-mm-yyyy)
// Encadenamiento
Factura.RegistroAnulacion.Encadenamiento := Encadenamiento2.Create;
// ¿ es el primer registro ?
if sesiones[sesion].facturas[indice-1].huella='' then Factura.RegistroAnulacion.Encadenamiento.PrimerRegistro:=PrimerRegistroCadenaType(0) // S
else
begin
Factura.RegistroAnulacion.Encadenamiento.RegistroAnterior:=EncadenamientoFacturaAnteriorType.Create;
Factura.RegistroAnulacion.Encadenamiento.RegistroAnterior.IDEmisorFactura :=cabecera.emisor.nifEmisor;
Factura.RegistroAnulacion.Encadenamiento.RegistroAnterior.NumSerieFactura :=sesiones[sesion].facturas[indice-1].numSerieFactura;
Factura.RegistroAnulacion.Encadenamiento.RegistroAnterior.FechaExpedicionFactura :=sesiones[sesion].facturas[indice-1].fechaFactura;
Factura.RegistroAnulacion.Encadenamiento.RegistroAnterior.Huella :=sesiones[sesion].facturas[indice-1].huella;
end;
// Sin registro previo: (anulacion de facturas fuera de verifactu)
if sesiones[sesion].facturas[indice].sinregistroPrevio then
Factura.RegistroAnulacion.SinRegistroPrevio:=SinRegistroPrevioType.S;
// sistemaInformatico
sistemaInformatico( cabecera, Factura );
//XSDatetime
XSDatetime := TXSDatetime.Create;
XSDatetime.UseZeroMilliseconds := False;
XSDatetime.AsDateTime := Now;
XSDatetime.Millisecond := 0;
XSDatetime.UseZeroMilliseconds := False;
XSDatetime.FractionalSeconds := 0;
Factura.RegistroAnulacion.FechaHoraHusoGenRegistro := XSDatetime; // Formato: YYYY-MM-DDThh:mm:ssTZD (ej: 2024-01-01T19:20:30+01:00) (ISO 8601)
// Huella
facturaRegistro.Huella := GenerarHuella_anulacion_RegistroVerifactu( Factura.RegistroAnulacion );
sesiones[sesion].facturas[indice].huella:=facturaRegistro.Huella;
Factura.RegistroAnulacion.TipoHuella := TipoHuellaType._01;
Factura.RegistroAnulacion.Huella := facturaRegistro.Huella;
// fin, devolver el objeto RegistroFacturacionAnulacionType creado desde la informacion contenida en el record TRegistroFactura (ver utiles.pas)
result:=factura;
end;