Facturas electrónicas con FileMaker
La implementación de facturas electrónicas en las soluciones FileMaker existentes es un tema cada vez más importante en el mundo de los negocios digitales. En particular, la creciente obligación legal de utilizar facturas electrónicas para determinados procesos empresariales y las ventajas resultantes, como la rentabilidad y la automatización de procesos, hacen que sea esencial que las empresas desarrollen soluciones eficaces para procesar dichas facturas. En este contexto, existen varios estándares para las facturas electrónicas, entre ellos XRechnung y ZUGFeRD/Factur-X. Estas normas plantean distintos retos técnicos, sobre todo en lo que respecta a la lectura y el tratamiento de los datos que contienen.
Retos a la hora de importar facturas electrónicas
Uno de los mayores retos a la hora de importar facturas electrónicas es la variedad de formatos y tipos de datos que hay que procesar. Mientras que la estructura de la XRechnung es relativamente clara y sólo hay que analizar un documento XML, el tratamiento de una factura ZUGFeRD o Factur-X plantea un reto mayor. Se trata de documentos híbridos que contienen tanto un documento PDF como datos XML incrustados.
Diferencia entre XRechnung y ZUGFeRD/Factur-X
XRechnung: Esta norma contiene todos los datos relevantes de la factura en un archivo XML puro. La lectura de estos datos requiere analizar el documento XML para extraer la información necesaria. El principal reto reside en la complejidad del formato XML y en la necesidad de garantizar que todos los campos de datos relevantes se leen e interpretan correctamente.
ZUGFeRD/Factur-X: en este formato, los datos XML están incrustados en un archivo PDF. Esto significa que primero hay que extraer y analizar el PDF para acceder a los datos XML. Este proceso requiere herramientas especiales o plugins para extraer de forma fiable la información incrustada en el documento PDF.
Opciones para procesar archivos PDF en FileMaker
Un reto clave a la hora de importar facturas ZUGFeRD/Factur-X es extraer los datos XML del PDF. Existen varios enfoques y herramientas que pueden integrarse en FileMaker:
Plugin MBS (MonkeyBread Software)El plugin MBS es una potente extensión para FileMaker que ofrece una gran variedad de funciones, entre las que se incluyen completas capacidades de procesamiento de PDF. Con este complemento, FileMaker puede leer y analizar archivos PDF para extraer datos XML incrustados. También proporciona acceso a los metadatos del PDF y permite analizar y procesar el contenido que contiene. El complemento MBS es especialmente útil para los desarrolladores que necesitan una solución flexible y completa para procesar archivos PDF en sus flujos de trabajo de FileMaker.
Plugin DynaPDFEl complemento DynaPDF es otra potente herramienta para el procesamiento de PDF en FileMaker. Ofrece funciones para crear, modificar y leer archivos PDF y es ideal para acceder a datos XML incrustados en facturas ZUGFeRD/Factur-X. Con DynaPDF, los datos XML pueden extraerse de forma segura y estar disponibles para su posterior procesamiento en FileMaker. Además, el complemento ofrece funciones para analizar y extraer texto e imágenes de los PDF, lo que lo convierte en una solución versátil para las necesidades de procesamiento integral de PDF.
Requisitos y consideraciones técnicas
A la hora de utilizar este tipo de plugins y herramientas hay que tener en cuenta varios aspectos técnicos. Por un lado, se incluye la concesión de licencias de los plugins, ya que muchas de estas herramientas están sujetas a pago y ofrecen distintos modelos de licencia en función de la gama de funciones. Por otro lado, se requiere una planificación cuidadosa de la integración en las soluciones FileMaker existentes para garantizar que los plugins funcionen a la perfección y que no se produzcan problemas de compatibilidad.
Otro punto importante es el rendimiento de la solución. La lectura y el tratamiento de los datos XML de los PDF pueden requerir muchos recursos informáticos, sobre todo si hay que procesar simultáneamente grandes cantidades de facturas. Por tanto, es aconsejable diseñar la solución de forma que funcione eficazmente con los recursos disponibles y garantice una alta velocidad de procesamiento.
Software ERP FileMaker con procesamiento integrado de facturas electrónicas.
Más información
Importar y procesar XRechnung en FileMaker
Una implementación completa de la importación de una XRechnung en una solución FileMaker incluye, además de los campos obligatorios generales de la factura, el procesamiento de los elementos del documento (partidas) y una validación de los datos para garantizar la integridad de la información importada. El proceso se describe detalladamente a continuación.
Plugin BaseElements para el análisis sintáctico de XML
El complemento BaseElements simplifica considerablemente el procesamiento de datos XML en FileMaker. El complemento ofrece diversas funciones para ampliar la funcionalidad de FileMaker, incluido el análisis sintáctico de datos XML. Una de las funciones más utilizadas para este fin es BE_XPath, que se puede utilizar para extraer datos XML de un archivo o una variable.
Visión general del plugin BaseElements
El plugin BaseElements es un plugin gratuito diseñado específicamente para FileMaker con el fin de proporcionar funciones adicionales. Resulta especialmente útil para trabajar con XML, JSON, gestión de archivos y otros requisitos especiales que FileMaker no admite de forma nativa. Con la función BE_XPath, los datos XML se pueden extraer de forma rápida y precisa utilizando expresiones XPath para leer partes específicas del documento XML.
Instrucciones paso a paso para importar un XRechnung
1. preparativos en FileMaker
Asegúrese de que su base de datos FileMaker contiene las tablas y campos necesarios, tal y como se ha descrito anteriormente:
Tabla principal "Facturas":
- Número de factura
- Fecha de la factura
- Nombre del comprador
- Dirección del comprador
- Nombre del vendedor
- Dirección del vendedor
- Importe total
- Importe del impuesto sobre el valor añadido
- Moneda
- Condiciones de pago
Tabla vinculada "Partidas de factura":
- Descripción del artículo
- Cantidad
- Precio unitario
- Importe total del artículo
- Tipo del IVA
Curso intensivo de FileMaker
FileMaker rápido y eficaz
aprendizaje en 20 capítulos.
Participe gratuitamente
2. importar archivo XML
Cargue el contenido del archivo XML en una variable, por ejemplo, con la función Importar datos o leyendo el contenido directamente de un archivo.
Establecer variable [$xmlPath; Value: "Ruta/a/la/factura.xml"]
Establecer variable [$xmlContent; Value: BE_ReadTextFromFile($xmlPath)]
--- Importación de campos obligatorios con BE_XPath ---
Establecer variable [$Rechnchnchnchnumber; Value: BE_XPath($xmlContent; "//cbc:ID"; "cbc=urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2")].
Establecer variable [$Rechnungsdatum; Valor: DateTimeMySQLToFMDate ( BE_XPath($xmlContent; "//cbc:IssueDate"; "cbc=urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2") )]
Establecer variable [$CustomerName; Value: BE_XPath($xmlContent; "//*[local-name()='ContabilidadClienteParte']/*[local-name()='Parte']/*[local-name()='NombreParte']/*[local-name()='Nombre']"; "cbc=urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2|cac=urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2")].
Establecer variable [$CustomerAddress; Value: BE_XPath($xmlContent; "//*[local-name()='AccountingCustomerParty']/*[local-name()='Party']/*[local-name()='PostalAddress']/*[local-name()='StreetName']"; "cbc=urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2|cac=urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2") & ", " & BE_XPath($xmlContent; "//*[local-name()='AccountingCustomerParty']/*[local-name()='Party']/*[local-name()='PostalAddress']/*[local-name()='CityName']"; "cbc=urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2|cac=urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2")].
Establecer variable [1TP4VendorName; Value: BE_XPath($xmlContent; "//*[local-name()='ProveedorContableParte']/*[local-name()='Parte']/*[local-name()='NombreParte']/*[local-name()='Nombre']"; "cbc=urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2|cac=urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2")].
Establecer variable [1TP4VendorAddress; Value: BE_XPath($xmlContent; "//*[local-name()='ContabilidadParteProveedora']/*[local-name()='Parte']/*[local-name()='DirecciónPostal']/*[local-name()='NombreCalle']"; "cbc=urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2|cac=urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2") & ", " & BE_XPath($xmlContent; "//*[local-name()='AccountingSupplierParty']/*[local-name()='Party']/*[local-name()='PostalAddress']/*[local-name()='CityName']"; "cbc=urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2|cac=urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2")].
Establecer variable [$TotalAmount; Value: BE_XPath($xmlContent; "//cac:LegalMonetaryTotal/cbc:PayableAmount"; "cbc=urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2|cac=urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2")].
Establecer variable [$axTotal; Value: BE_XPath($xmlContent; "//cac:TaxTotal/cbc:TaxAmount"; "cbc=urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2|cac=urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2")].
Establecer variable [$Currency; Value: BE_XPath($xmlContent; "cbc:DocumentCurrencyCode")].
Establecer variable [$PaymentTerms; Value: BE_XPath($xmlContent; "//cac:PaymentTerms/cbc:Note"; "cbc=urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2|cac=urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2")].
--- Crear un nuevo registro de datos en la tabla principal ---
Nuevo registro de datos/consulta
Establecer valor de campo [Facturas::Número de factura; $Rnúmero de factura]
Establecer valor de campo [Facturas::Fecha de la factura; $RIfecha de la factura].
Establecer valor de campo [Facturas::Nombre del comprador; 1TP4Nombre del comprador]
Establecer valor de campo [Facturas::Dirección del comprador; 1TP4Dirección del comprador]
Establecer valor de campo [Facturas::Nombre del proveedor; 1TP4Nombre del proveedor]
Establecer valor de campo [Facturas::Dirección del proveedor; 1TP4Dirección del proveedor]
Establecer valor de campo [Facturas::Importe total; 1TP4Importe total]
Establecer valor de campo [Facturas::importe IVA; $MVAT importe]
Establecer valor de campo [Facturas::Moneda; $Currency]
Establecer valor de campo [Facturas::Condiciones de pago; $Terms of payment]
--- Importación de partidas ---
Establecer variable [$PositionenAnzahl; Value: BE_XPath($xmlContent; "count(//cac:InvoiceLine)")]
Establecer variable [$Counter; valor: 1]
Inicio del bucle
Establecer variable [$ArticleDescription; Value: BE_XPath($xmlContent; "//*[local-name()='LíneaFactura'][" & $lineIndex & "]/*[local-name()='Artículo']/*[local-name()='Nombre']"; "cbc=urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2|cac=urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2")].
Establecer variable [$Menge; Value: ReadAsNumber(Exchange(BE_XPath($xmlContent; "//*[local-name()='InvoiceLine'][" & $lineIndex & "]/*[local-name()='InvoicedQuantity']"; "cbc=urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2|cac=urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"); "."; ","))]
Establecer variable [$EInvoiceLine; Value: ReadAsNumber(Exchange(BE_XPath($xmlContent; "//*[local-name()='InvoiceLine'][" & $lineIndex & "]/*[local-name()='Price']/*[local-name()='PriceAmount']"; "cbc=urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2|cac=urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"); "."; ","))]
Establecer variable [$TotalAmountDerPosition; Value: BE_XPath($xmlContent; "//cac:InvoiceLine[" & $Counter & "]/cbc:LineExtensionAmount")].
Establecer variable [$MwStStatz; Value: ReadAsNumber(Exchange(BE_XPath($xmlContent;"//*[local-name()='InvoiceLine'][" & $lineIndex & "]/*[local-name()='Item']/*[local-name()='ClassifiedTaxCategory']/*[local-name()='Percent']"; "cbc=urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2|cac=urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"); "."; ","))]
Ir al diseño "Elementos de la factura"
Nuevo registro de datos/consulta
Establecer valor de campo [Elementos de la factura::Descripción del artículo; $ADescripción del artículo]
Establecer valor de campo [Elementos de la factura::Cantidad; $Cantidad]
Establecer valor de campo [Elementos de la factura::Precio unitario; $Precio unitario].
Establecer valor de campo [InvoiceItems::TotalAmountOfItem; $TotalAmountOfItem]
Establecer valor de campo [Elementos de la factura::Tipo de IVA; Tipo de IVA $M].
Salir del bucle Cuando $PositionsNumber = $Counter
Establecer variable [$Counter; valor: $Counter + 1].
Fin del bucle
3. validación de los datos importados
Compruebe que todos los campos obligatorios están presentes y que no falta ningún dato. Esto puede hacerse utilizando un script que garantice que todas las variables necesarias contienen valores.
En [ActualVoid(Facturas::Número de factura)]
Mostrar su propio cuadro de diálogo ["Error: Falta el número de factura"].
Salir del script actual
Fin cuando
En [ActualVoid(Facturas::Fecha factura)]
Mostrar su propio cuadro de diálogo ["Error: Falta la fecha de la factura"].
Salir del script actual
Fin cuando
--- Realizar más comprobaciones de validación para todos los campos obligatorios ---
En [Suma de los conceptos de la factura::Importe total del concepto ≠ Facturas::Importe total].
Mostrar su propio cuadro de diálogo ["Error: La suma de las partidas no coincide con el importe total"].
Salir del script actual
Fin cuando
Otros campos y datos de las facturas electrónicas
En nuestra guía, nos hemos centrado en la importación de los campos obligatorios más importantes para ofrecer una visión general básica de la integración de las facturas electrónicas en FileMaker. Sin embargo, es importante mencionar que las facturas electrónicas pueden contener muchos más campos e información que son importantes en función del caso de uso.
Por ejemplo, el ID de ruta, que se utiliza principalmente en el sector público para identificar unidades administrativas, puede desempeñar un papel crucial a la hora de determinar el destinatario correcto. Los campos adicionales, como los números de referencia específicos, la información de pago y los datos fiscales, también son relevantes para mejorar el procesamiento de las facturas y cumplir los requisitos legales y las necesidades individuales de las empresas. Por lo tanto, una implantación completa debe comprobarse cuidadosamente y, si es necesario, completarse con estos campos adicionales para garantizar una solución integral. Utilice el documentación oficial.
Cuatro plataformas FileMaker ERP para optimizar los procesos operativos.
Solicitar información
ZUGFeRD y mucho más con el plugin MBS y DynaPDF
En MBS FileMaker Plugin es un complemento muy versátil para FileMaker que proporciona funciones avanzadas, incluida la capacidad de leer y generar facturas electrónicas. Con el plugin MBS, los desarrolladores pueden implementar soluciones de automatización completas para manejar datos XML e información de facturas incrustada. Una función especialmente valiosa es la integración de DynaPDFuna potente biblioteca PDF que permite crear y manipular documentos PDF, incluidos los compatibles con el formato ZUGFeRD/Factur-X. Esto significa que el plugin no solo es capaz de leer los datos de los PDF e importarlos a FileMaker, sino también de generar nuevas facturas electrónicas que cumplan con los estándares actuales.
El plugin MBS viene con una extensa colección de archivos de ejemplo que cubren varios casos de uso, incluyendo la creación e importación de facturas de ZUGFeRD. Estos ejemplos proporcionan una base excelente para familiarizarse rápidamente con el funcionamiento del plugin. El fabricante también proporciona instrucciones detalladas en su sitio web que describen paso a paso cómo crear facturas electrónicas utilizando el plugin MBS y DynaPDF. Las instrucciones más recientes están disponibles en este enlace que también contiene enlaces de descarga para archivos de facturas electrónicas de muestra. Este recurso es especialmente útil para los desarrolladores que deseen profundizar en la automatización de los procesos de facturación en FileMaker y crear facturas electrónicas conformes a la ley según las normas ZUGFeRD/Factur-X.
Entrada en el foro sobre la integración de las facturas electrónicas
Hemos publicado un nuevo post en nuestro foro dedicado a la discusión sobre la integración y tramitación de facturas electrónicas en FileMaker. En este post, invitamos a todos los interesados a plantear preguntas personales y a compartir sus experiencias. Ya sea sobre el uso de plugins como el plugin MBS o el plugin BaseElements, la implementación de scripts o la optimización de flujos de trabajo, este post del foro es el lugar perfecto para intercambiar ideas y beneficiarse de la experiencia de la comunidad. Queremos fomentar un animado debate en el que se puedan discutir soluciones, retos y mejores prácticas. Pásese por aquí y participe en la conversación.
Resumen
La integración de la lectura de facturas electrónicas en las soluciones FileMaker existentes plantea varios retos, especialmente cuando se procesan facturas ZUGFeRD/Factur-X. Mientras que XRechnung es principalmente un reto basado en XML, el procesamiento de ZUGFeRD/Factur-X requiere el uso de herramientas y plugins PDF especiales como MBS y DynaPDF. Una planificación cuidadosa, la consideración de los requisitos técnicos y la selección de los plugins adecuados son cruciales para el éxito de la implantación de una solución eficaz y fiable.
El plugin gratuito BaseElements y el comando BE_XPath permiten procesar datos XML en FileMaker e importarlos de forma fiable. El uso de XPath permite una extracción precisa de la información relevante y una adaptación flexible a diferentes estructuras XML.
Si también deben importarse y leerse archivos ZUGFeRD o Factur-X, recomendamos utilizar el plugin MBS junto con el plugin DynaPDF, que también se suministra con los archivos de muestra correspondientes.
