hola, buenas tardes.
He importado el último WSDL desde esta URL:
https://prewww2.aeat.es/static_files...cturacion.wsdl
el problema que tengo es que no consigo que en el array de registros de factura se carguen los objetos de tipo factura. No da ningún error pero el array de facturas está vacio cuando se manda
A ver si alguién ve algo en la estructura que no veo yo....
este el circuito de carga/envio
Código Delphi
[-]
procedure TFVeriFactu.bEnviarFacturasClick(Sender: TObject);
var
veriFactu : RegFactuSistemaFacturacion; listafacturas : Array_Of_RegistroFacturaType; res : RespuestaRegFactuSistemaFacturacionType; factura, anterior : TRegistroFactura; estado : string;
fila : integer;
CSeparadorDecimal:char;
Cabecera: CabeceraType;
begin
cseparadordecimal := formatSettings.DecimalSeparator;
FormatSettings.DecimalSeparator := '.';
screen.Cursor:=crHourglass;
SistemaInformatico_razonSocial :=editRazonSocial.Text;
SistemaInformatico_nif :=editNIF.Text;
SistemaInformatico_Nombre :=editNombre.Text;
SistemaInformatico_ID :=editID.text;
SistemaInformatico_Version :=editVersion.text;
SistemaInformatico_NumeroInstalacion :=editInstalacion.text;
veriFactu:=RegFactuSistemaFacturacion.Create;
veriFactu.Cabecera :=cabeceratype.Create;
veriFactu.Cabecera.ObligadoEmision :=PersonaFisicaJuridicaESType.Create;
veriFactu.Cabecera.ObligadoEmision.NombreRazon :=editEmisor.Text;
veriFactu.Cabecera.ObligadoEmision.NIF :=editNIFEmisor.Text;
DmVeriFactu.QVf_Registro.First;
fila := 0;
while Not DmVeriFactu.QVf_Registro.Eof do
begin
Fila := Fila+1;
CargarFactura( fila,factura,anterior, SistemaInformatico_Nombre); setLength(listaFacturas,fila); listaFacturas[ fila ]:= Alta_verifactu ( factura, anterior, editEmisor.Text ); DmVeriFactu.QVf_Registro.Next;
end;
veriFactu.RegistroFactura:= listaFacturas; try
HTTPRIO1.HTTPWebNode.ClientCertificate.SerialNum := Buscar_Certificado_SERIAL( comboCertificados.text ); Cargar_Entorno_Soap;
res:= RespuestaRegFactuSistemaFacturacionType.Create;
SistemaFacturacion.RespuestaRegFactuSistemaFacturacion(Res) :=
SistemaFacturacion.GetsfPortTypeVerifactu(false,HTTPRIO1.URL, HTTPRIO1).RegFactuSistemaFacturacion( verifactu );
procesarEnvio(res);
except
on E:Exception do
memoRes.text :=Format('Error al realizar el envío: (%s)-%s',[E.ClassName, E.Message]);
end;
screen.Cursor:=crDefault;
FormatSettings.DecimalSeparator := cseparadordecimal;
IF Memores.text > '' then
begin
muestraAviso(tInfo,bSi,fSi,'Se Encontraron Errores');
Pagecontrol2.activepage := TbResultado;
end else dbgemitidas.setfocus;
end;
y esta es la función donde se registra cada factura:
Código Delphi
[-]
function TFVeriFactu.Alta_VeriFactu( var facturaRegistro, registroAnterior:TRegistroFactura ; NombreEmisor:string ): RegistroFacturaType;
var
Factura : RegistroFacturaType;
Destinatario : PersonaFisicaJuridicaType;
ListaDestinatarios : Destinatarios2;
ListaDesglose : DesgloseType;
DetalleDesglose : DetalleType;
XSDatetime : TXSDatetime;
j:integer;
begin
Factura := RegistroFacturaType.Create;
Factura.RegistroAlta := RegistroAlta.Create;
Factura.RegistroAlta.IDVersion := VersionType._1_0;
Factura.RegistroAlta.IDFactura := IDFacturaExpedidaType.Create;
Factura.RegistroAlta.IDFactura.IDEmisorFactura := facturaRegistro.nifEmisor;
Factura.RegistroAlta.IDFactura.NumSerieFactura := facturaRegistro.numSerieFactura;
Factura.RegistroAlta.IDFactura.FechaExpedicionFactura := verifactuFecha( facturaRegistro.fechafactura ) ;
Factura.RegistroAlta.NombreRazonEmisor := NombreEmisor;
Factura.RegistroAlta.TipoFactura := ClaveTipoFacturaType.F1;
Factura.RegistroAlta.DescripcionOperacion := facturaRegistro.DescripcionOperacion;
Destinatario := PersonaFisicaJuridicaType.Create;
Destinatario.NombreRazon := facturaRegistro.cliente;
Destinatario.NIF := facturaRegistro.clienteNIF;
Destinatario.IDOtro := IDOtroType.Create;
Destinatario.IDOtro.CodigoPais := codigoPais( facturaRegistro.clienteCodPais );
Destinatario.IDOtro.IdType := tipoNIF( facturaRegistro.clientetipoNIF);
Destinatario.IDOtro.ID := facturaRegistro.clienteNIF;
ListaDestinatarios:= destinatarios2.Create();
SetLength(ListaDestinatarios, 1);
ListaDestinatarios[0] := Destinatario;
Factura.RegistroAlta.Destinatarios := ListaDestinatarios;
ListaDesglose := DesgloseType.Create();
for j:=low(facturaRegistro.desglose) to length(facturaRegistro.desglose)-1 do
Begin
DetalleDesglose := DetalleType.Create;
DetalleDesglose.ClaveRegimen := IdOperacionesTrascendenciaTributariaType._01;
DetalleDesglose.CalificacionOperacion := CalificacionOperacionType.S1;
DetalleDesglose.TipoImpositivo := FormatFloat('0.00',facturaRegistro.desglose[j].iva);
DetalleDesglose.BaseImponibleOimporteNoSujeto := FormatFloat('0.00',facturaRegistro.desglose[j].baseImp);
DetalleDesglose.CuotaRepercutida := FormatFloat('0.00',facturaRegistro.desglose[j].impiva);
if facturaRegistro.desglose[j].req<>0 then begin
DetalleDesglose.TipoRecargoEquivalencia := FormatFloat('0.00',facturaRegistro.desglose[j].req);
DetalleDesglose.CuotaRecargoEquivalencia := FormatFloat('0.00',facturaRegistro.desglose[j].impreq);
end;
SetLength(ListaDesglose, j+1 );
ListaDesglose[j] := DetalleDesglose ;
end;
Factura.RegistroAlta.Desglose:= ListaDesglose;
Factura.RegistroAlta.CuotaTotal := FormatFloat('0.00',facturaRegistro.cuotatotal);
Factura.RegistroAlta.ImporteTotal := FormatFloat('0.00',facturaRegistro.total);
Factura.RegistroAlta.Encadenamiento := Encadenamiento3.Create;
if registroAnterior.numSerieFactura='' then
Factura.RegistroAlta.Encadenamiento.PrimerRegistro:=PrimerRegistroCadenaType(0) else
begin
Factura.RegistroAlta.Encadenamiento.RegistroAnterior:=EncadenamientoFacturaAnteriorType.Create;
Factura.RegistroAlta.Encadenamiento.RegistroAnterior.IDEmisorFactura :=registroAnterior.nifEmisor;
Factura.RegistroAlta.Encadenamiento.RegistroAnterior.NumSerieFactura :=registroAnterior.numSerieFactura;
Factura.RegistroAlta.Encadenamiento.RegistroAnterior.FechaExpedicionFactura :=registroAnterior.fechaFactura;
Factura.RegistroAlta.Encadenamiento.RegistroAnterior.Huella :=registroAnterior.huella;
end;
sistemaInformatico( Factura );
XSDatetime := TXSDatetime.Create;
XSDatetime.AsDateTime := Now;
Factura.RegistroAlta.FechaHoraHusoGenRegistro := XSDatetime; Factura.RegistroAlta.FechaHoraHusoGenRegistro.FractionalSeconds := 0;
facturaRegistro.Huella := GenerarHuella_alta_RegistroVerifactu( Factura.RegistroAlta );
Factura.RegistroAlta.TipoHuella := TipoHuellaType._01;
Factura.RegistroAlta.Huella := facturaRegistro.Huella;
result:=factura;
end;
el problema es que el array de listafacturas parece estar vacio , si lo analizo con el debugger aparecen los registros del array con nil..
saludos..