
¿Cómo integrar FacturaSend con Visual FoxPro: Guía práctica para desarrolladores exigentes?
¿Es posible integrar un sistema moderno con una tecnología clásica?
Aunque Visual FoxPro es una tecnología veterana, todavía es muy utilizada por muchas empresas en Paraguay y Latinoamérica, especialmente en sistemas internos estables y confiables. Pero con la llegada obligatoria de la Facturación Electrónica, surge la gran duda:
¿Se puede integrar una API moderna como FacturaSend con Visual FoxPro?
La buena noticia es: sí, se puede. Y en este artículo te mostramos cómo hacerlo de manera práctica, rápida y con ejemplos reales de código.
Entendiendo el desafío: Facturación Electrónica en VFP
Visual FoxPro no fue diseñado para conectarse directamente a servicios web modernos como las APIs REST. Sin embargo, con algunas herramientas intermedias y lógica bien estructurada, se puede lograr una comunicación fluida con los servicios de FacturaSend.
Los puntos clave a considerar:
- Enviar documentos en formato JSON desde VFP.
- Hacer peticiones HTTP seguras (POST, GET).
- Procesar las respuestas para obtener el estado del documento.
- Controlar reintentos y validaciones desde código propio.
Herramientas necesarias para la integración
Para conectar tu sistema VFP con FacturaSend, podés apoyarte en herramientas externas y librerías como:
WinHttp.WinHttpRequest.5.1
para realizar peticiones HTTP.MSXML2.ServerXMLHTTP
en versiones más antiguas.- Scripts intermedios en Python o PowerShell (si querés desacoplar la lógica).
- Un manejador de errores que permita interpretar el estado asincrónico de SIFEN.
Estructura básica del código
Este es un ejemplo simplificado del código que encontrarás en nuestro repositorio GitHub:
SET PROCEDURE TO .\fsClass\de, .\fsClass\cliente, .\fsClass\usuario, .\fsClass\factura, .\fsClass\item, .\fsClass\condicion, .\fsClass\entrega, .\nfJson\nfJsonCreate, .\nfJson\nfJsonRead data = CREATEOBJECT("de") data.tipo_documento = 1 data.establecimiento = 2 data.punto = 1 data.numero = 1007094 data.fecha = '2023-01-23T10:00:00' data.tipo_impuesto = 1 ** Cliente data.cliente = CREATEOBJECT("cliente") data.cliente.contribuyente = .t. data.cliente.tipo_contribuyente = 1 data.cliente.tipo_operacion = 1 data.cliente.ruc = '80069563-1' data.cliente.razon_social = 'TIPS S.A. - TECNOLOGIA Y SERVICIOS' data.cliente.pais = 'PRI' data.cliente.codigo = 'CLI001' ** Usuario data.usuario = CREATEOBJECT("usuario") data.usuario.documento_tipo = 1 data.usuario.documento_numero = '2005001' data.usuario.nombre = 'MARCOS JARA' data.usuario.cargo = 'Cajero' **Factura data.factura = CREATEOBJECT("factura") data.factura.presencia = 1 ** Items DIMENSION data.items(2) data.items(1) = CREATEOBJECT("item") data.items(1).codigo = 1050 data.items(1).descripcion = 'Pilsen Litro ' data.items(1).observacion = 'no beberla caliente' data.items(1).cantidad = 2 data.items(1).precio_unitario = 7500 data.items(1).iva_tipo = 1 data.items(1).iva_base = 100 data.items(1).iva = 10 data.items(2) = CREATEOBJECT("item") data.items(2).codigo = 1060 data.items(2).descripcion = 'Dorada Premium' data.items(2).observacion = 'Tomarla bien helada' data.items(2).cantidad = 3 data.items(2).precio_unitario = 8754 data.items(2).iva_tipo = 1 data.items(2).iva_base = 100 data.items(2).iva = 10 ** Condicion data.condicion = CREATEOBJECT("condicion") data.condicion.tipo = 1 DIMENSION data.condicion.entregas(1) data.condicion.entregas(1) = CREATEOBJECT("entrega") data.condicion.entregas(1).tipo = 1 data.condicion.entregas(1).monto = 1450000 data.condicion.entregas(1).moneda = 'PYG' cData = nfJsonCreate(data, .t., .f.) SET ALTERNATE TO json.txt ADDITIVE SET ALTERNATE ON ? "[" + cData + "]" SET ALTERNATE OFF * Envio a FacturaSend oHTTP = CREATEOBJECT('Msxml2.ServerXMLHTTP.6.0') oHTTP.OPEN("POST","https://api.facturasend.com.py/empresa0/lote/create", .f.) oHTTP.setRequestHeader("User-Agent", "FacturaSend from VFP 9") oHTTP.setRequestHeader("Content-Type", "application/json;charset=utf-8") lcBasicAuth = "Bearer " + "api_key_9FFC28EB-5376-4392-B757-86E372FBB398a" oHTTP.setRequestHeader("Authorization", lcBasicAuth) ** Aqui radica la diferencia entre el Sincrono y el Asincrono. oHTTP.SEND("[" + cData + "]") ** Para enviar varios, utilizar este formato **oHTTP.SEND("[" + cData + ", " + cData1 + ", " + cData2 + ", " + cDataN + "]") ? "Status Response: " + STR(oHTTP.Status) cRespuesta = oHTTP.ResponseText ? cRespuesta * Convertir respuesta de la API en formato JSON-STRING a OBJETO VFP vfpJsonObject = nfJsonRead(cRespuesta, .f.) ? vfpJsonObject.success IF ( ! vfpJsonObject.success) ? vfpJsonObject.error ENDIF
Este bloque permite enviar un documento y obtener la respuesta de FacturaSend. Luego podés utilizar el CDC recibido para consultar el estado de aprobación en SIFEN (recordá que es asincrónico).
Accedé al ejemplo completo en GitHub
Hemos preparado un repositorio abierto con un ejemplo funcional, para que puedas probar la integración directamente desde tu entorno de Visual FoxPro.
📎 Repositorio GitHub oficial:
🔗 https://github.com/TIPS-SA/facturacionelectronicapy-vfp9-client-example
Incluye:
- Código fuente VFP9.
- Ejemplo de petición HTTP.
- Consulta de estado de documentos.
- Documentación paso a paso.
Otras soluciones para integración con VFP
El código presentado en la sección superior contiene ejemplos de invocación de llamadas a la API de FacturaSend desde VFP. Hay que tener en cuenta que el ejemplo en GitHub no es una solución completa, sino solamente una demostración. El interesado puede descargar el código de Git y completar las clases SCX con los campos faltantes, para integrarla con su sistema.
Pero si desea una solución más completa y profesional, que incluya las llamadas a la API desde VFP y además de eso los formularios donde se visualizan los documentos electrónicos y desde donde se puedan realizar operaciones de forma visual, FacturaSend recomienda utilizar la Solución de Ever, la cual se describe en el siguiente artículo.
Soporte y acompañamiento técnico personalizado
Sabemos que trabajar con tecnologías mixtas puede ser desafiante. Por eso, en FacturaSend ofrecemos acompañamiento técnico para desarrolladores, especialmente para integraciones en lenguajes como VFP.
¿Tenés dudas? Escribinos por WhatsApp y te ayudamos a iniciar con una cuenta gratuita.
Conclusión
Integrar FacturaSend con Visual FoxPro no sólo es posible, sino que puede ser el puente para modernizar tu sistema sin tener que reescribirlo desde cero. Con la documentación abierta y nuestra comunidad de soporte, podés cumplir con SIFEN y mantener la agilidad de tu desarrollo.
Facturá electrónicamente desde Visual FoxPro con confianza. Usá FacturaSend.