Hola me vi obligado a utilizar la facturas electrónicas y estuve buscando ayudas para poder implementarlo, encontré estos post
https://www.clubdelphi.com/foros/showthread.php?t=73179 ,
http://www.clubdelphi.com/foros/showthread.php?t=88675 y a partir del trabajo de adripugliesso empecé a preparar una clase para usar la factura electrónica, aun no esta terminado, falta terminar de implementar la obtención del cae/caea y el control de errores. Está basado totalmente en el trabajo de adripugliesso, incluso verán su código casi sin modificar.
La clase esta sin terminar y hay que hacerle bastantes ajustes pero le puede servir a alguien para empezar con su sistema.
Para usarlo deben incluir la clase en el uses y hay que poner los certificados y las librerías de openssl (con el exe) en la carpeta donde estará el ejecutable de la aplicación (yo use la versión de openssl sin instalador), (se puede cambiar sin mucho trabajo)
En la sección public del formulario:
En el evento OnCreate del formulario
Código Delphi
[-]MiFCAFIP := TFCAfip.Create( GetCurrentDir, ElCuitEmpresa ); MiFCAFIP.ArchClavePriv := 'claveprivada.txt'; MiFCAFIP.ArchCertPemCRT := 'certificadopem.crt';
En el evento OnDestroy del formulario
Esta línea genera el token y el sign:
Código Delphi
[-]MiFCAFIP.ObtenerTokenSign;
Las propiedades
Código Delphi
[-]MiFCAFIP.Token; MiFCAFIP.Sign; MiFCAFIP.expirationTA; MiFCAFIP.generationTA; MiFCAFIP.Generacion; MiFCAFIP.Expiracion; MiFCAFIP.LastError.codigo; MiFCAFIP.LastError.mensaje;
Para usar los métodos (excepto el de obtención de cae que aún no termine de ajustar, pero no es difícil de implementar)
Código Delphi
[-]var
stResultado : TStringList;
begin
stResultado := TStringList.Create;
stResultado := MiFCAFIP.ListaComprobantes;
FreeAndNil( stResultado );
end;
Lo mismo para:
stResultado := MiFCAFIP.ConsultaComprobante( iCbteTipo, iCbteNro, iPtoVta );
stResultado := MiFCAFIP.ListaComprobantes; stResultado := MiFCAFIP.ListaConceptos; stResultado := MiFCAFIP.ListaDocumentos; stResultado := MiFCAFIP.ListaOpcional; stResultado := MiFCAFIP.ListaPuntosVenta; stResultado := MiFCAFIP.ListaTributos; stResultado := MiFCAFIP.ListaCotizacion( 'DOL' ); stResultado := MiFCAFIP.ListaMonedas; stResultado := MiFCAFIP.ListaIvas; stResultado := MiFCAFIP.ListaPaises; Var iUltComprobanteAutorizado : integer;
iUltComprobanteAutorizado := MiFCAFIP.ObtieneUltComp( puntoventa, idcomprobante : integer );
if MiFCAFIP.Dummy then
ShowMessage('Servidores funcionan');
Para el caso en que se deba reiniciar el sistema se puede guardar en un archivo ini el token, sign y las fechas de generación y vencimiento y antes de generar el token/sign leerlo desde el ini y guardarlo luego de obtenerlo, método que se debería incluir en la clase o implementar la modificación de las propiedades para hacerlo fuera de la clase.
Adjunto el código de la clase y las unidades de webservice importadas.