Ver Mensaje Individual
  #1  
Antiguo Hace 1 Semana
aledieb aledieb is offline
Miembro
 
Registrado: jun 2005
Ubicación: Buenos Aires, Argentina
Posts: 107
Reputación: 13
aledieb Va por buen camino
Clase para Factura electrónica AFIP Argentina

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:

Código Delphi [-]
MiFCAFIP : TFCAfip;
En el evento OnCreate del formulario
Código Delphi [-]
MiFCAFIP := TFCAfip.Create( GetCurrentDir, ElCuitEmpresa ); // ElCuitEmpresa es un int64
MiFCAFIP.ArchClavePriv := 'claveprivada.txt'; // Archivo con la clave privada para el cuit 
MiFCAFIP.ArchCertPemCRT := 'certificadopem.crt'; // Archivo con el certificado creado en la página de la Afip
En el evento OnDestroy del formulario
Código Delphi [-]
MiFCAFIP.Destroy;
Esta línea genera el token y el sign:
Código Delphi [-]
MiFCAFIP.ObtenerTokenSign;
Las propiedades
Código Delphi [-]
MiFCAFIP.Token; // El token generado ( WideString )
MiFCAFIP.Sign; // El sign generado   ( WideString )
MiFCAFIP.expirationTA; // Texto con la fecha/hora según el código original de adripugliesso ( String )
MiFCAFIP.generationTA; // Texto con la fecha/hora según el código original de adripugliesso ( String )
MiFCAFIP.Generacion; // Fecha de generación ( TDateTime ) es lo mismo que los anteriores pero para poder usar en el código para controlar
MiFCAFIP.Expiracion; // Fecha de vencimiento ( TDateTime ) ídem
MiFCAFIP.LastError.codigo; // Código de error devuelto ( int ) solo un error por ahora
MiFCAFIP.LastError.mensaje; // Descripción de error devuelto ( String ) solo un error por ahora
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;
  // Hacer lo que se necesite con stResultado
  FreeAndNil( stResultado );
end;
Lo mismo para:
stResultado := MiFCAFIP.ConsultaComprobante( iCbteTipo, iCbteNro, iPtoVta );
// Este método aun no lo comprobé iCbteTipo, iCbteNro, iPtoVta son integer
// y los valores deben corresponder al comprobante que quieran consultar
stResultado := MiFCAFIP.ListaComprobantes; // Listado de códigos/descrip. comprobantes
stResultado := MiFCAFIP.ListaConceptos; // Listado de códigos/descrip. conceptos
stResultado := MiFCAFIP.ListaDocumentos; // Listado de códigos/descrip. documentos
stResultado := MiFCAFIP.ListaOpcional; // Listado de códigos/descrip. opcionales
stResultado := MiFCAFIP.ListaPuntosVenta; // Listado de Puntos de venta AUN NO COMPROBADO
stResultado := MiFCAFIP.ListaTributos; // Listado de códigos/descrip. tributos
stResultado := MiFCAFIP.ListaCotizacion( 'DOL' ); // Cotización oficial de moneda según el código devuelto en MiFCAFIP.ListaMonedas;
stResultado := MiFCAFIP.ListaMonedas; // Listado de códigos/descrip. monedas
stResultado := MiFCAFIP.ListaIvas; // Listado de códigos/descrip. IVAS
stResultado := MiFCAFIP.ListaPaises; // Listado de códigos/descrip. Países
// La única que es distinta y devuelve un integer con el último número de comprobante autorizado según los datos pasados
Var iUltComprobanteAutorizado : integer;
iUltComprobanteAutorizado := MiFCAFIP.ObtieneUltComp( puntoventa, idcomprobante : integer );

//Saber si los servidores AFIP funcionan:
  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.
Archivos Adjuntos
Tipo de Archivo: rar ClaseFCElecArgentina.rar (19,3 KB, 7 visitas)
__________________
Suerte
Alejandro
Responder Con Cita