Jump to content


Photo

Factura Electrónica para Argentina

Factura Electrónica AFIP

  • Please log in to reply
135 replies to this topic

#1 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 posts
  • LocationMar del Plata / Bs As / Argentina

Posted 02 April 2015 - 09:13 PM

Bueno, seguramente algunos ya habrán sufrido este tema jeje

 

En unos diás comienzo a dedicarme de lleno a la F.E., me gustaria saber si alguien la implemento desde este IDE y si me pueden adelantar algo al respecto.

 

Busque algo de información, aqui: http://www.afip.gob.ar/fe/

y me parece que lo más logico seria comenzar con la lectura de este manual http://www.afip.gob....dorCOMPGv25.pdf para saber por donde comenzar.

 

Algunas cosas que creo serán necesarias:

- Webservice

- crear y editar XML

- encriptar informacion

- firmar digitalmente

 

cualquier ayuda, comentario es más que Bienvenido.

 

muchas gracias :grin:


  • 0

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 02 April 2015 - 09:56 PM

El que puede asesorarte sobre cuestiones de webservices es el cuate @egostar. Yo la verdad es que nunca he tocado el tema, y deberé hacerlo pronto... porque según había escuchado ahora todos los argentinos de a pie deberemos emitir factura electrónica. ¿Es así?

 

Saludos,


  • 1

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14460 posts
  • LocationMéxico

Posted 02 April 2015 - 10:07 PM

Le he dado una mirada rápida al tema y se ve algo extenso, si tienes dudas puntuales con gusto puedo aportar algo de mi experiencia.

 

Lo más "fuerte" es la cuestión de firmado, depende mucho cual sea el requerimiento para firmar las facturas, pero hay componentes que lo hacen sin problema.

 

En cuanto al consumo del servicio Web depende mucho de como esté desarrollado, si no se puede importar el WSDL correctamente en Delphi se tiene la opción de crear los XML a mano, lo que realmente no tiene gran problema.

 

Lo que te recomiendo es que vayas descargando el programa soapUI para que obtengas los Request y Response del Servicio Web. Eso te ayudará mucho.

 

Saludos (y)


  • 1

#4 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 posts
  • LocationArgentina

Posted 02 April 2015 - 11:19 PM

Yo estoy usando esta libreria

 

http://www.bitingeni....ar/feafip.html

 

El componente es gratis, no se si tiene publicado el codigo fuente en algun lado. Desde delphi lo que se ve es una libreria externa y las funciones, procedimientos y atributos que podes llamar

 

Basicamente instancias un objeto, le pasas los certificados, cuit y luego llamas a los procedimientos/funciones y te devuelve el resultado de la autorizacion (cae, fecha vencimiento, id)

 

Para instalarlo, tenes que registrar la librearia "feafip.dll", con el conocido regserver32.exe. En el mismo paquete que se descarga, viene con un ejecutable que hace este trabajo por vos.

 

En la pagina del fabricante tenes ejemplos en varios lenguajes, incluido el propio delphi. Tambien esta toda la documentacion aca: http://www.bitingeni...com.ar/doc.html

 

 

Como comento el amigo egostar, lo dificil es el firmado, yo eso la verdad todavia no lei nada, pero creo que es un codigo de barras que debe cumplir cierta resolucion general de la afip

 

El mismo fabricante tiene otro componente, el FeGen, http://bitingenieria...roductos/fegen/

 

Este tambien pude utilizarlo efectivamente en delphi para generar la factura electronica, y genera el codigo de barras etc. El unico inconveniente es que trabaja con un sistema de plantillas (templates) PDF (extension .rtm si mal no recuerdo) del que no tengo ni idea, y en la plantilla que viene por defecto tiene los datos de la empresa del fabricante (bit ingenieria). Entonces me sale la factura con sus datos y el logo de ellos, etc.

 

Pero seguramente se le pueda encontrar la vuelta para generar la plantilla con algun programa y listo. De este no hay ejemplos en delphi pero la documentacion es bastante clara y sale andando facil.

 

Este FeGen la verdad no lo estudie mucho

 

El otro para hacerlo andar en delphi (esto no lo aclara en la documentacion) tenes que importarla desde el propio IDE, una ves la registras, tenes que ir a (por lo menos en Delphi 2010), Component -> Import Component -> Import a Type Library y ahi en el combo box buscas por "Feafip" y te tiene que aparecer. Das next, elegis la categoria en la que queres que te importe los componentes en la paleta del IDE, y despues tenes que generar el Package e instalarla

 

Cualquier cosa avisa, ahora en estos dias voy a andar viendo el tema de como generar el codigo de barras para el pdf y cuando llege a algo lo publico por aca

 

Saludos


  • 2

#5 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 posts
  • LocationMar del Plata / Bs As / Argentina

Posted 03 April 2015 - 06:53 AM

gracias a todos, con esto ya tengo mucho por donde comenzar.

 

^_^


  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14460 posts
  • LocationMéxico

Posted 08 April 2015 - 08:58 AM

Hola Nikolas, 

 

¿Cómo vas con éste asunto?

 

He estado leyendo el manual que colocaste y veo que se requiere de un token y de una firma que se obtiene de otro webService (WSAA), estuve buscando información al respecto y veo que la función del WSAA es entregar una llave de acceso compuesta por el token y el sign que se utiliza en el cuerpo del xml de la factura.

 

El proceso que veo es simple, solicitas tu token al wsaa y cuando se obtiene lo pegas en el xml de tu factura.


xml
  1. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsaa="http://wsaa.view.sua.dvadac.desein.afip.gov">
  2. <soapenv:Header/>
  3. <soapenv:Body>
  4. <wsaa:loginCms>
  5. <wsaa:in0>?</wsaa:in0>
  6. </wsaa:loginCms>
  7. </soapenv:Body>
  8. </soapenv:Envelope>

Hay algunas cosas que investigar (y)

 

Saludos


  • 0

#7 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 posts
  • LocationMar del Plata / Bs As / Argentina

Posted 08 April 2015 - 11:59 AM

Hola Nikolas, 

 

¿Cómo vas con éste asunto?

 

He estado leyendo el manual que colocaste y veo que se requiere de un token y de una firma que se obtiene de otro webService (WSAA), estuve buscando información al respecto y veo que la función del WSAA es entregar una llave de acceso compuesta por el token y el sign que se utiliza en el cuerpo del xml de la factura.

 

El proceso que veo es simple, solicitas tu token al wsaa y cuando se obtiene lo pegas en el xml de tu factura.


xml
  1. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsaa="http://wsaa.view.sua.dvadac.desein.afip.gov">
  2. <soapenv:Header/>
  3. <soapenv:Body>
  4. <wsaa:loginCms>
  5. <wsaa:in0>?</wsaa:in0>
  6. </wsaa:loginCms>
  7. </soapenv:Body>
  8. </soapenv:Envelope>

Hay algunas cosas que investigar (y)

 

Saludos

 

aun no puede comenzar, si todo va bien el Lunes proximo arranco ^o|


  • 0

#8 Amadis

Amadis

    Member

  • Miembros
  • PipPip
  • 13 posts

Posted 20 May 2015 - 06:58 AM

Hola. Alguna novedad en el asuonto? Alguien puede aportar algún ejemplo de como generar una factura y que medios y/o componentes se usaron?.


  • 0

#9 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 posts
  • LocationArgentina

Posted 21 May 2015 - 10:10 AM

Buenas, yo al final termine usando esto:
 
El instalador que viene de "fabrica" viene configurado solamente para que te sirva para homologacion (pruebas). Si lo queres llevar a entorno de produccion (facturas reales) hay que modificar algo en los binarios que generan el instalador (es codigo python), hay un tutorial en la misma pagina que explica como hacerlo. O bien pagas y te lo hacen todo. Yo todavia no lo toque y por el momento sigo en pruebasss
 
En la pagina hay muchisima documentacion y ejemplos en todos los lenguajes, incluso dephi. Siguiendolos yo llege a esto y funciona, me falta probar la modalidad batch

delphi
  1. var
  2.     WSAA, WSFEv1, tra, cms, ta, CAE, ok: Variant;
  3.     Id: integer;
  4.     Certificado, ClavePrivada, cache, url_wsdl, proxy, CUIT,
  5.     TotalNeto, TotalIVA, Fecha: string;
  6. begin
  7.  
  8. try
  9. CoInitialize(NIL);
  10. try
  11. // Crear objeto interface Web Service Autenticación y Autorización
  12. WSAA := CreateOleObject('WSAA');
  13.  
  14. // Generar un Ticket de Requerimiento de Acceso (TRA)
  15. tra := WSAA.CreateTRA;
  16.  
  17. // Certificado: certificado es el firmado por la AFIP
  18. // ClavePrivada: la clave privada usada para crear el certificado
  19. // Generar el mensaje firmado (CMS)
  20. // Especificar la ubicacion de los archivos certificado y clave privada
  21. cms := WSAA.SignTRA(tra, Certificado, ClavePrivada);
  22.  
  23. // Llamar al web service para autenticar:
  24. ta := WSAA.CallWSAA(cms, 'https://wsaahomo.afip.gov.ar/ws/services/LoginCms'); // Hologación
  25.  
  26. // Una vez obtenido, se puede usar el mismo token y sign por 6 horas
  27. // (este período se puede cambiar)
  28.  
  29. // Crear objeto interface Web Service de Factura Electrónica
  30. WSFEv1 := CreateOleObject('WSFEv1');
  31. // Setear tocken y sing de autorización (pasos previos)
  32. WSFEv1.Token := WSAA.Token;
  33. WSFEv1.Sign := WSAA.Sign;
  34. WSFEv1.CUIT := CUIT;
  35.  
  36. // Conectar al Servicio Web de Facturación
  37. cache := ''; // directorio temporal (usar predeterminado)
  38. url_wsdl := 'https://wswhomo.afip.gov.ar/wsfev1/service.asmx'; // usar servicios1 para producción
  39. proxy := ''; // información de servidor intermedio (si corresponde)
  40. ok := WSFEv1.Conectar(cache, url_wsdl, proxy); // homologación
  41.  
  42. if not(OK) then
  43. raise Exception.Create('Conexion erronea');
  44.  
  45. with Comprobante do
  46. begin
  47.  
  48. TotalNeto := FormatFloat('0.##', (StrToCurr(ImporteNetoGrav1) +
  49. StrToCurr(ImporteNetoGrav2) +
  50. StrToCurr(ImporteNetoGrav3)));
  51.  
  52. TotalIVA := FormatFloat('0.##', (StrToCurr(ImporteIVA1) +
  53. StrToCurr(ImporteIVA2) +
  54. StrToCurr(ImporteIVA3)));
  55.  
  56.  
  57. Id := WSFEv1.CompUltimoAutorizado(TipoComp, PuntoVenta);
  58. DateTimeToString(Fecha, 'yyyymmdd', Date);
  59. // Llamo al WebService de Autorización para obtener el CAE
  60. WSFEv1.CrearFactura(1 {Concepto = Productos}, TipoDoc, NroDoc, TipoComp, PuntoVenta,
  61. Id + 1, Id + 1, Total, '0.00' { total conceptos }, TotalNeto,
  62. TotalIVA, PercepRetDeIngrBrutos, ImporteOpEx,
  63. Fecha, '', '', '', {fecha_vto_pago y desde / hasta. Solo usado por servicios }
  64. 'PES', '1.000');
  65.  
  66. if StrToCurr(ImporteIVA1) > 0 then
  67. WSFEv1.AgregarIva(CodigoIVA(AlicuotaIVA1), ImporteNetoGrav1, ImporteIVA1);
  68.  
  69. if StrToCurr(ImporteIVA2) > 0 then
  70. WSFEv1.AgregarIva(CodigoIVA(AlicuotaIVA2), ImporteNetoGrav2, ImporteIVA2);
  71.  
  72. if StrToCurr(ImporteIVA3) > 0 then
  73. WSFEv1.AgregarIva(CodigoIVA(AlicuotaIVA3), ImporteNetoGrav3, ImporteIVA3);
  74.  
  75. // ingresos brutos -> Segun tabla AFIP Codigo = 02 Descripcion = Impuestos provinciales
  76. if StrToCurr(PercepRetDeIngrBrutos) > 0 then
  77. WSFEv1.AgregarTributo(2, 'Impuestos provinciales', Total, { fix mePorcIngBrutos, } PercepRetDeIngrBrutos);
  78. end;
  79.  
  80. // solicito CAE
  81. CAE := WSFEv1.CAESolicitar;
  82.  
  83. if WSFEv1.Resultado <> 'A' then
  84. begin
  85. Writeln;
  86. with Comprobante do
  87. Writeln(Format('No se obtuvo cae para comp %s nro %s fecha %s', [TipoComp, NroComp, FechaEmision]));
  88. Writeln('Obs: ' + WSFEv1.Obs);
  89. Writeln('ErrMsg: ' + WSFEv1.ErrMsg);
  90. end;
  91.  
  92. if WSFEv1.Resultado = 'A' then
  93. begin
  94. // grabo en el archivo que me mandaron el CAE y fecha vto
  95. Comprobante.CAE := CAE;
  96. Comprobante.FechaVtoCae := WSFEv1.Vencimiento;
  97. end;
  98. end;
  99. finally
  100. CoUninitialize;
  101. end;
  102.  

 
Luego el comprobante PDF lo genero con un QuickReport de toda la vida, para el codigo de barras en la misma pagina tenes una utilidad que te genera una imagen .png que importas en el reporte y listo
 
Esta utilidad se llama PyI25, aca el enlace 
 
http://www.sistemasa...CódigosdeBarras
  • 1

#10 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 posts
  • LocationMar del Plata / Bs As / Argentina

Posted 25 May 2015 - 07:02 PM

Lo primero que veo molesto es la clave con el "openssl" ya que hay que generar una por cliente, ademas de tener en cuenta el OS del mismo (32 o 64 bits).


  • 0

#11 Amadis

Amadis

    Member

  • Miembros
  • PipPip
  • 13 posts

Posted 27 May 2015 - 09:09 AM

Hola OrtuAgustin.

 

¿con ese código Modalidad batch que pusiste? se genera la factura?  ¿y donde se detallan los items/artículos que la componen?.

 

Otra consulta en que Unit se encuentra el procedimiento   CoInitialize(NIL);

Para los objetos Ole he agregado Vcl.OleAuto.

 

¿alguien tiene un ejemplo completo de como generar de 0 un factura?. Gracias


  • 0

#12 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 posts
  • LocationMar del Plata / Bs As / Argentina

Posted 27 May 2015 - 04:04 PM


Otra consulta en que Unit se encuentra el procedimiento   CoInitialize(NIL);

Para los objetos Ole he agregado Vcl.OleAuto.

 

 

mira esto:

 

 

uses
  ComObj


  • 0

#13 Amadis

Amadis

    Member

  • Miembros
  • PipPip
  • 13 posts

Posted 03 June 2015 - 06:38 AM

mira esto:

Agregué la uses ComObj pero el CoInitialize(NIL); sigue sin reconocerlo.

 

¿no podrías compartir un formulario completo a  modo de demo de como generar una factura?.

 

Desde ya la comunidad lo agradecerá


  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14460 posts
  • LocationMéxico

Posted 03 June 2015 - 12:24 PM

Agregué la uses ComObj pero el CoInitialize(NIL); sigue sin reconocerlo.

 
El uses que debes agregar es ActiveX.

 

Aunque se recomienda ulilizar CoInitializeEx que si se encuentra en ComObj.

 

Saludos


  • 0

#15 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 477 posts

Posted 07 June 2015 - 11:24 AM

La principal utilidad de FE es no tener que enviar el papel por el transporte o correo.. En el caso de un negocio como supermercado sirve si es mayorista para enviarle a un super o negocio de otra ciudad, pero.. con la AFIP: se pueden ver los datos de la factura electronica generada, es decir por parte del adquiriente? Si un super le compra a un proveedor de Buenos Aires, este puede realizar factura electronica, y yo desde Entre Rios puedo consultar(y tambien desde Delphi) esa factura.

 

Creo que ademas de generarla se tiene que poder consultar, gracias..


  • 0

#16 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 477 posts

Posted 08 June 2015 - 07:05 AM

Veo que solo le pasas el importe neto y el iva, la descripcion no va entonces? Osea partiendo del formulario como el de ticket que tiene el detalle de la transaccion, solo se pasa el neto y el iva, supongo a partir de ahi calcular la base imponible y la alicuota, y los subtotales.

 

Y los datos del solicitante donde se pasan?


  • 0

#17 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 posts
  • LocationArgentina

Posted 08 June 2015 - 07:45 PM

En el ws nuevo, el WSFEv1, no se pasa el detalle de la factura, solamente los totales, en otros regimenes si

 

Los datos del solicitante se pasan cuando le mandas los certificados, es como hacer un login


  • 0

#18 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 477 posts

Posted 09 June 2015 - 05:40 AM

 

Los datos del solicitante se pasan cuando le mandas los certificados, es como hacer un login

Ese es el certificado que pasas aqui:


delphi
  1. cms := WSAA.SignTRA(tra, Certificado, ClavePrivada);


  • 0

#19 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 posts
  • LocationArgentina

Posted 09 June 2015 - 11:42 AM

Exactamente, ahora que veo mi propio post, falta la parte que, tal como dice el comentario, "especificar la ubicacion de los archivos"
 
Esa parte la habre sacado del codigo que postie porque yo tengo un objeto (TSystemSettings) el cual cuenta con dos variables que me indican la ubicacion de esos archivos
 
Pero seria cuestion de hacer algo asi
 
 

delphi
  1. ClavePrivada := <RUTA>\clave.key
  2. Certificado := <RUTA>\cert.crt


Salute!
  • 1

#20 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 477 posts

Posted 11 June 2015 - 04:47 AM

Bueno yo programo en Delphi no en Lazarus pero: existe alguna forma de probar un sistema sin datos reales, por supuesto la parte de facturacion electronica? probar si esta bien hecho?


  • 0





Also tagged with one or more of these keywords: Factura Electrónica, AFIP

IP.Board spam blocked by CleanTalk.