Hola !
El componente desde Delphi 7 ya envia y devuelve la respuesta. Ya es operativo en la DEMO que importaba de una hoja de calculo, compilada con D7.
En este otro ejemplo de codigo de delphi 7 se procesa la respuesta tras un envio:
Código:
procedure TForm1.procesarEnvio(resultado:TResultadoEnvio);
var
desError,error,estado,factura, emisor:string;
j:integer;
_ok,_oke,_err:integer;
begin
memoXML.Lines.LoadFromFile(xmlEnvio);
memoXML.Text:=FormatXMLData(memoXML.Text);
memoRes.lines.clear;
memoRes.lines.Add('Se ha realizado el envío');
memoRes.Lines.Add('');
memoRes.Lines.Add('Estado Del Envio:'+resultado.EstadoEnvio );
memoRes.lines.Add('CSV: ' + resultado.CSV);
memoRes.lines.Add('TimeStamp: ' + resultado.Fecha+' '+resultado.Hora);
memoRes.Lines.Add('');
_ok :=0; // nº facturas OK
_oke :=0; // nº facturas OK ( aceptada con errores )
_err :=0; // nº facturas con errores
for j:=0 to resultado.nFacturas-1 do
begin
factura := resultado.facturas[j].NumSerieFactura;
emisor := resultado.facturas[j].IDEmisorFactura;
estado := resultado.facturas[j].estado;
error := inttostr(resultado.facturas[j].errorcodigo);
desError := resultado.facturas[j].descripcionError;
memoRes.Lines.Add( factura + ' ' + estado + ' '+error+' '+desError ); // ver en pantalla
if resultado.facturas[j].OK then // Es correcto ó aceptado con errores
begin
// colocar el csv y huella en la factura
if facturasEnviadas.locate('emisor;NumSerieFactura',vararrayof([emisor, factura ]),[]) then
begin
FacturasEnviadas.edit;
FacturasEnviadas.fieldbyName('csv').text :=resultado.CSV;
FacturasEnviadas.FieldByName('huella').text :=resultado.facturas[j].huellaFactura;
FacturasEnviadas.fieldbyName('situacion').text:=estado;
FacturasEnviadas.post;
end;
if resultado.facturas[j].aceptadoConErrores then inc(_oke) else inc(_ok);
end
else
inc(_err); // Es erronea
end;
memoRes.Lines.Add('');
memoRes.Lines.Add('Facturas Aceptadas: '+inttostr(_ok) );
memoRes.Lines.Add('Facturas Aceptadas Con Errores: '+inttostr(_oke) );
memoRes.Lines.Add('Facturas Con Errores: '+inttostr(_err) );
// tiempo de espera:
if resultado.tiempoDeEspera<>'' then memoRes.Lines.Add('Se Ha Establecido Un Tiempo De Espera Proximo Envio De '+resultado.tiempoDeEspera);
end;
En teoria, sube factura, tickets, rectificativas, comunitarias, y exportación. (hasta 1.000 facturas x envio) Pero lamentablemente ahora mismo no se bien como cubrir el resto de casos.
Genera el QR
Ya esta implementado el cotejo contra la AEAT con el nuevo objeto de consulta: tan simple como llamar a una funcion desde DELPHI 7 y se devuelve un array con los resultados:
Lo voy a incoporar en una aplicacion real que espero empiece a ser probada en un entorno real de facturacion al inicio de año enviandolas a pre-produccion, e imprimiendo el codigo QR real sobre la factura, como demo. Pero todo muy real.
Pero claro, me doy cuenta de la responsabilidad que adquiero una vez publicado, esto NO es una demo.
Permite hacer todo el trabajo desde Delphi 7 con el apoyo de la aplicacion servidora, y desde la version 10 en adelante, puede usarse como una unidad, sin mas con un uses.
En unas semanas una vez probado veo que hacer.