Skip to content

Tablas y suscriptores

Esta sección pretende detallar la extensibilidad de la solución.

Se indicarán las tablas y los suscritores del sistema para facilitar la creación de extensiones que pueden utilizarse para adecuar la solución a las necesidades del cliente.

Aclaración

Dado que la finalidad de la solución es generar ficheros XML que cumplan la normativa de facturación electrónica de las administraciones públicas, las tablas y suscriptores del sistema detallados en esta sección serán los afectados por dicha generación de ficheros XML.

Tablas

Las tablas del sistema que permiten la generación de ficheros XML se describen en los siguientes apartados.

Estas tablas se rellenan a partir de tablas del sistema (facturas/abonos de venta/servicio), y a partir de estas tablas, se generan los ficheros XML que serán firmados digitalmente por la solución.

Cabeceras eSign Facturae

  • Nombre de la tabla: INNESGFeHeaders
  • Caption: eSign Facturae Headers
  • Clave primaria: INNESGFeDocumentType, INNESGFeDocumentNo

Esta tabla se crea a partir de una factura/abono de venta/servicio.

Líneas eSign Facturae

  • Nombre de la tabla: INNESGFeLines
  • Caption: eSign Facturae Lines
  • Clave primaria: INNESGFeDocumentType, INNESGFeDocumentNo, INNESGFeLineNo

Esta tabla se crea a partir de una línea de factura/abono de venta/servicio.

Salida impuestos eSign Facturae

  • Nombre de la tabla: INNESGFeTaxesOutput
  • Caption: eSign Facturae Taxes Outputs
  • Clave primaria: INNESGFeDocumentType, INNESGFeDocumentNo, INNESGFeLineNo

Esta tabla se crea a partir de los impuestos de una factura/abono de venta/servicio.

Detalle pagos eSign Facturae

  • Nombre de la tabla: INNESGFePaymentDetails
  • Caption: eSign Facturae Payment Details
  • Clave primaria: INNESGFeDocumentType, INNESGFeDocumentNo, INNESGFeLineNo

Esta tabla se crea a partir de los movimientos de cliente, que contienen la forma de pago, de una factura/abono de venta/servicio.

Atención

Todas las tablas tienen en común los campos INNESGFeDocumentType y INNESGFeDocumentNo en la clave primaria. INNESGFeDocumentType es un option con los valores: Invoice, Credit Memo, Invoice Service, Credit Memo Service. INNESGFeDocumentNo se corresponde con el nº de factura/abono de venta/servicio cuyas tablas son: Sales Invoice Header, Sales Cr.Memo Header, Service Invoice Header y Service Cr.Memo Header. A partir de cualquier registro de las tablas, y utilizando estos campos, se podría obtener la factura/abono de venta/servicio para realizar las modificacoines oportunas.

Cabecera lectura eSign Facturae

  • Nombre de la tabla: INNESGFeHeadersRead
  • Caption: eSign Facturae headers read
  • Clave primaria: INNESGFeDocumentNo

Esta tabla se crea a partir de la importación de documentos Facturae.

Suscriptores

Los suscriptores del sistema permiten modificar el flujo de trabajo de la generación del fichero XML.

Estos suscriptores pueden afectar a la creacion de las tablas anteriores o a la generación del propio XML.

Todos los suscriptores se encuentran en la codeunit INNESGFePublishers.

Creación de tablas

Para cada tabla de las anteriores, se ha añadido un suscriptor que permite modificar el valor de un campo del registro antes de ser insertado.

OnBeforeInsertHeaders

INNESGFePublishers.OnBeforeInsertHeaders(var Header: INNESGFeHeaders)

Se ejecuta antes de hacer el insert en la tabla INNESGFeHeaders.

A partir de la clave primaria de INNESGFeHeader se puede obtener el documento original (factura/abono de venta/servicio).

OnBeforeInsertLines

INNESGFePublishers.OnBeforeInsertLines(var Lines: Record INNESGFeLines; Headers: Record INNESGFeHeaders)

Se ejecuta antes de hacer el insert en la tabla INNESGFeLines.

A partir de la clave primaria de INNESGFeLines se puede obtener la línea del documento original (factura/abono de venta/servicio). El campo INNESGFeLineNo se corresponde con el campo Line No. del la línea del documento original.

OnBeforeInsertTaxesOutputs

INNESGFePublishers.OnBeforeInsertTaxesOutputs(var TaxesOutputs: Record INNESGFeTaxesOutputs, TempVATAmountLine: "VAT Amount Line" temporary; Headers: Record INNESGFeHeaders)

Se ejecuta antes de hacer el insert en la tabla INNESGFeTaxesOutputs.

A partir de la clave primaria de INNESGFeTaxesOutputs se puede obtener el documento original (factura/abono de venta/servicio). Las líneas de impuestos se calculan según el estándar del sistema y se almacenan en la tabla temporal TempVATAmountLine. El campo INNESGFeLineNo se corresponde con cada línea de la tabla temporal TempVATAmountLine (ejemplo de números de líneas: 10.000, 20.000, 30.000, etc.).

OnBeforeInsertPaymentDetails

INNESGFePublishers.OnBeforeInsertPaymentDetails(var PaymentDetails: Record INNESGFePaymentDetails, CustLedgerEntry: "Cust. Ledger Entry"; Headers: Record INNESGFeHeaders)

Se ejecuta antes de hacer el insert en la tabla INNESGFePaymentDetails.

A partir de la clave primaria de INNESGFePaymentDetails se puede obtener el documento original (factura/abono de venta/servicio). Las líneas de pagos se calculan según los movimientos de cliente del sistema, que están en la tabla CustLedgerEntry. El campo INNESGFeLineNo se corresponde con cada línea de la tabla CustLedgerEntry (ejemplo de números de líneas: 10.000, 20.000, 30.000, etc.).

Generación del XML

La generación del XML se divide en 3 nodos básicos contenidos dentro del nodo principal. Este es el esquema básico que se ve afectado por los suscriptores:

<Facturae>

..<FileHeader>

..<Parties>

..<Invoices>

....<Invoice>

......<Items>

........<InvoiceLine>

  • FileHeader se rellena con información relativa a la factura/abono de venta/servicio: indentificación, versión, totales, etc.
  • Parties se rellena con información relativa al vendedor y comprador de la factura/abono de venta/servicio.
  • Invoices se rellena con información relativa a la factura/abono de venta/servicio.
  • InvoiceLine se rellena con información relativa a las líneas de la factura/abono de venta/servicio.

Los suscriptores existentes hacen referencia a los nodos Facturae, FileHeader, Parties, Invoices, Items y InvoiceLine.

OnBeforeGenerateXML

INNESGFePublishers.OnBeforeGenerateXML(var XmlElemRoot: XmlElement; var ExecuteNext: Boolean; Headers: Record INNESGFeHeaders)

Se ejecuta antes de crear los nodos FileHeader, Parties e Invoices dentro del nodo Facturae del XML.

La variable XmlElemRoot contiene únicamente el nodo Facturae y las definiciones de este.

La variable ExecuteNext permite que no se ejecute el código estándar de generación de los 3 nodos principales FileHeader, Parties e Invoices y sea el usuario quien rellene todo el XML a partir del nodo Facturae. Para ello, es necesario que esta variable tenga el valor false.

A partir de la clave primaria de INNESGFeHeader se puede obtener el documento original (factura/abono de venta/servicio). Este registro contiene la información necesaria para rellenar el XML.

OnAfterGenerateXML

INNESGFePublishers.OnAfterGenerateXML(var XmlElemRoot: XmlElement; var ExecuteNext: Boolean; Headers: Record INNESGFeHeaders)

Se ejecuta después de crear los nodos FileHeader, Parties y Invoices dentro del nodo Facturae del XML.

La variable XmlElemRoot contiene todos los nodos rellenos y la definición de estos.

La variable ExecuteNext no aplica.

A partir de la clave primaria de INNESGFeHeader se puede obtener el documento original (factura/abono de venta/servicio). Este registro contiene la información necesaria para completar el XML con la información necesaria.

OnBeforeSetFileHeader

INNESGFePublishers.OnBeforeSetFileHeader(var XmlElemRoot: XmlElement; var ExecuteNext: Boolean; Headers: Record INNESGFeHeaders)

Se ejecuta antes de crear el nodo FileHeader dentro del XML.

La variable XmlElemRoot contiene únicamente el nodo Facturae y las definiciones de este.

La variable ExecuteNext permite que no se ejecute el código estándar de generación del nodo FileHeader y sea el usuario quien rellene dicho nodo. Para ello, es necesario que esta variable tenga el valor false.

A partir de la clave primaria de INNESGFeHeader se puede obtener el documento original (factura/abono de venta/servicio). Este registro contiene la información necesaria para rellenar el XML.

OnAfterSetFileHeader

INNESGFePublishers.OnAfterSetFileHeader(var XmlElemRoot: XmlElement; var ExecuteNext: Boolean; Headers: Record INNESGFeHeaders)

Se ejecuta después de crear el nodo FileHeader dentro del XML.

La variable XmlElemRoot contiene el nodo FileHeader dentro del nodo Facturae y las definiciones de este.

La variable ExecuteNext no aplica.

A partir de la clave primaria de INNESGFeHeader se puede obtener el documento original (factura/abono de venta/servicio). Este registro contiene la información necesaria para rellenar el XML.

OnBeforeSetParties

INNESGFePublishers.OnBeforeSetParties(var XmlElemRoot: XmlElement; var ExecuteNext: Boolean; Headers: Record INNESGFeHeaders)

Se ejecuta antes de crear el nodo Parties dentro del XML.

La variable XmlElemRoot contiene el nodo FileHeader dentro del nodo Facturae y las definiciones de este.

La variable ExecuteNext permite que no se ejecute el código estándar de generación del nodo Parties y sea el usuario quien rellene dicho nodo. Para ello, es necesario que esta variable tenga el valor false.

A partir de la clave primaria de INNESGFeHeader se puede obtener el documento original (factura/abono de venta/servicio). Este registro contiene la información necesaria para rellenar el XML.

OnAfterSetParites

INNESGFePublishers.OnAfterSetParties(var XmlElemRoot: XmlElement; var ExecuteNext: Boolean; Headers: Record INNESGFeHeaders)

Se ejecuta después de crear el nodo Parties dentro del XML.

La variable XmlElemRoot contiene los nodos FileHeader y Parties dentro del nodo Facturae y las definiciones de este.

La variable ExecuteNext no aplica.

A partir de la clave primaria de INNESGFeHeader se puede obtener el documento original (factura/abono de venta/servicio). Este registro contiene la información necesaria para rellenar el XML.

OnBeforeSetInvoices

INNESGFePublishers.OnBeforeSetInvoices(var XmlElemRoot: XmlElement; var ExecuteNext: Boolean; Headers: Record INNESGFeHeaders)

Se ejecuta antes de crear el nodo Invoices dentro del XML.

La variable XmlElemRoot contiene los nodos FileHeader y Parties dentro del nodo Facturae y las definiciones de este.

La variable ExecuteNext permite que no se ejecute el código estándar de generación del nodo Invoices y sea el usuario quien rellene dicho nodo. Para ello, es necesario que esta variable tenga el valor false.

A partir de la clave primaria de INNESGFeHeader se puede obtener el documento original (factura/abono de venta/servicio). Este registro contiene la información necesaria para rellenar el XML.

OnAfterSetInvoices

INNESGFePublishers.OnAfterSetInvoices(var XmlElemRoot: XmlElement; var ExecuteNext: Boolean; Headers: Record INNESGFeHeaders)

Se ejecuta después de crear el nodo Invoices dentro del XML.

La variable XmlElemRoot contiene los nodos FileHeader, Parties e Invoices dentro del nodo Facturae y las definiciones de este.

La variable ExecuteNext no aplica.

A partir de la clave primaria de INNESGFeHeader se puede obtener el documento original (factura/abono de venta/servicio). Este registro contiene la información necesaria para rellenar el XML.

OnBeforeSetItems

INNESGFePublishers.OnBeforeSetItems(var XmlElemItems: XmlElement; Headers: Record INNESGFeHeaders; var ExecuteNext: Boolean)

Se ejecuta antes de crear el nodo Invoices/Invoice/Items dentro del XML.

La variable XmlElemItems está vacía.

La variable ExecuteNext permite que no se ejecute el código estándar de generación del nodo Invoices/Invoice/Items y sea el usuario quien rellene dicho nodo. Para ello, es necesario que esta variable tenga el valor false.

A partir de la clave primaria de INNESGFeHeader se puede obtener el documento original (factura/abono de venta/servicio). Este registro contiene la información necesaria para rellenar el XML.

OnAfterSetItems

INNESGFePublishers.OnAfterSetItems(var XmlElemItems: XmlElement; Headers: Record INNESGFeHeaders)

Se ejecuta después de crear el nodo Invoices/Invoice/Items dentro del XML.

La variable XmlElemItems contiene los nodos InvoiceLine creados a partir de las líneas.

A partir de la clave primaria de INNESGFeHeader se puede obtener el documento original (factura/abono de venta/servicio). Este registro contiene la información necesaria para rellenar el XML.

OnBeforeSetInvoiceLine

INNESGFePublishers.OnBeforeSetInvoiceLine(var XmlElemInvoiceLine: XmlElement; Lines: Record INNESGFeLines; var ExecuteNext: Boolean; Headers: Record INNESGFeHeaders)

Se ejecuta antes de crear el nodo Invoices/Invoice/Items/InvoiceLine dentro del XML.

La variable XmlElemInvoiceLine está vacía.

La variable ExecuteNext permite que no se ejecute el código estándar de generación del nodo Invoices/Invoice/Items/InvoiceLine y sea el usuario quien rellene dicho nodo. Para ello, es necesario que esta variable tenga el valor false.

A partir de la clave primaria de INNESGFeLines se puede obtener la línea del documento original (factura/abono de venta/servicio). Este registro contiene la información necesaria para rellenar el XML.

OnAfterSetInvoiceLine

INNESGFePublishers.OnAfterSetInvoiceLine(var XmlElemInvoiceLine: XmlElement; Lines: Record INNESGFeLines; Headers: Record INNESGFeHeaders)

Se ejecuta después de crear el nodo Invoices/Invoice/Items/InvoiceLine dentro del XML.

La variable XmlElemInvoiceLine contiene los nodos rellenados a partir de las líneas.

A partir de la clave primaria de INNESGFeLines se puede obtener la línea del documento original (factura/abono de venta/servicio). Este registro contiene la información necesaria para rellenar el XML.

Importación del XML

La importación del XML se divide en 3 nodos básicos contenidos dentro del nodo principal. Este es el esquema básico que se ve afectado por los suscriptores:

<Facturae>

..<FileHeader>

..<Parties>

..<Invoices>

....<InvoiceTaxOutput>

....<Items>

......<InvoiceLines>

....<InvoicePaymentDetails>

  • FileHeader se rellena con información relativa al nodo FileHeader del XML.
  • Parties se rellena con información relativa al nodo Parties del XML.
  • Invoices se rellena con información relativa a los nodos Invoices del XML.
  • InvoiceTaxOutput se rellena con información relativa al nodo TaxOutput de las facturas del XML.
  • InvoiceLine se rellena con información relativa al nodo InvoiceLine de las facturas del XML.
  • InvoicePaymentDetails se rellena con información relativa al nodo PaymentDetails de las facturas del XML.

OnAfterGetFacturae

INNESGFePublishers.OnAfterGetFacturae(var XmlDoc: XmlDocument; var HeadersRead: Record INNESGFeHeadersRead)

Se ejecuta después de crear el registro en la tabla INNESFFeHeadersRead a partir del XML.

La variable XmlDoc contiene todo el fichero XML.

La variable HeadersRead contiene el registro creado a partir del XML.

OnAfterGetFileHeader

INNESGFePublishers.OnAfterGetFileHeader(var XmlNodeFileHeader: XmlNode; var HeadersRead: Record INNESGFeHeadersRead)

Se ejecuta después de rellenar los campos de la tabla INNESFFeHeadersRead referidos al nodo FileHeader y antes de hacer Modify.

La variable XmlNodeFileHeader contiene el nodo FileHeader del fichero XML.

La variable HeadersRead contiene el registro creado a partir del XML.

OnAfterGetParties

INNESGFePublishers.OnAfterGetParties(var XmlNodeParties: XmlNode; var HeadersRead: Record INNESGFeHeadersRead)

Se ejecuta después de rellenar los campos de la tabla INNESFFeHeadersRead referidos al nodo Parties y antes de hacer Modify.

La variable XmlNodeParties contiene el nodo Parties del fichero XML.

La variable HeadersRead contiene el registro creado a partir del XML.

OnAfterGetInvoice

INNESGFePublishers.OnAfterGetInvoice(var XmlNodeInvoice: XmlNode; var Invoices: Record INNESGFeInvoices; HeadersRead: Record INNESGFeHeadersRead)

Se ejecuta después de rellenar los campos de la tabla INNESGFeInvoices referidos a cada línea del nodo Invoices y antes de hacer Insert.

La variable XmlNodeInvoice contiene el nodo Invoice del fichero XML.

La variable Invoices contiene el registro creado a partir de cada línea del XML.

La variable HeadersRead contiene el registro creado a partir del XML.

OnAfterGetInvoiceLine

INNESGFePublishers.OnAfterGetInvoiceLine(var XmlNodeInvoiceLine: XmlNode; var InvoicesLine: Record INNESGFeInvoicesLines; HeadersRead: Record INNESGFeHeadersRead)

Se ejecuta después de rellenar los campos de la tabla INNESGFeInvoicesLines referidos a cada línea del nodo Items\InvoiceLine y antes de hacer Insert.

La variable XmlNodeInvoiceLine contiene el nodo Item\InvoiceLine del fichero XML.

La variable InvoicesLine contiene el registro creado a partir de cada línea del XML.

La variable HeadersRead contiene el registro creado a partir del XML.

OnAfterGetInvoiceTaxOutput

INNESGFePublishers.OnAfterGetInvoiceTaxOutput(var XmlNodeInvoiceTaxOutput: XmlNode; var InvoicesTaxOutput: Record INNESGFeInvoicesTaxOutput; HeadersRead: Record INNESGFeHeadersRead)

Se ejecuta después de rellenar los campos de la tabla INNESGFeInvoicesTaxOutput referidos a cada línea del nodo TaxesOutputs\Tax y antes de hacer Insert.

La variable XmlNodeInvoiceTaxOutput contiene el nodo TaxexOutputs\Tax del fichero XML.

La variable InvoicesTaxOutput contiene el registro creado a partir de cada línea del XML.

La variable HeadersRead contiene el registro creado a partir del XML.

OnAfterGetInvoicePaymentDetail

INNESGFePublishers.OnAfterGetInvoicePaymentDetail(var XmlNodeInvoicePaymentDetail: XmlNode; var InvoicesPaymentDetail: Record INNESGFeInvoicesPaymDetail; HeadersRead: Record INNESGFeHeadersRead)

Se ejecuta después de rellenar los campos de la tabla INNESGFeInvoicesPaymentDetail referidos a cada línea del nodo PaymentDetails\Installment y antes de hacer Insert.

La variable XmlNodeInvoicePaymentDetail contiene el nodo PaymentDetails\Installment del fichero XML.

La variable InvoicesPaymentDetail contiene el registro creado a partir de cada línea del XML.

La variable HeadersRead contiene el registro creado a partir del XML.

Puertas de enlace (conectores)

Existen los siguientes conectores generales y dependientes de la puerta de enlace.

Generales

INNESGFePublishers.OnAfterGenerateXMLBeforeSendToGateway(var Headers: Record INNESGFeHeaders; Customer: Record Customer; var SendToGateway: Boolean)

Se ejecuta una vez generado el documento Facturae y antes de poder ser enviado a la puerta de enlace.

La variable Headers contiene el registro del documento Facturae.

La variable Customer contiene el registro del cliente del documento Facturae.

La variable SendToGateway permite indicar si se envia a la puerta de enlace al regisrar el documento de venta.

Aclaración

Esta variable no se tiene en cuenta si en Configuración eSign Facturae está activo el campo Enviar a puerta de enlace. Se puede utilizar si para ciertos clientes se quiere enviar el documento Facturae a los conectores. En dicho caso, se puede tener deactivado el campo en Configuración eSign Facturae y a través del suscriptor poner la variable SendToGateway = true.

Este suscriptor está pensado para poder añadir archivos adjuntos al documento Facturae. Para ello, existe la siguiente función:

Headers.AddAttachmentStream(var IStream: InStream; NameWithFormat: Text)

Se debe llamar a dicha función con un InStream que contenga un archivo PDF y con el nombre de este y su formato.

Face

OnBeforeAddAttachmentFace

INNESGFePublishers.OnBeforeAddAttachmentFace(var Name: Text; var Attachment: Text; HeadersAttachment: Record INNESGFeHeadersAttachment; Headers: Record INNESGFeHeaders)

Se ejecuta antes de rellenar los datos del fichero adjunto que se envía a la plataforma Face.

La variable AttachmentName contiene el valor del nombre del fichero adjunto.

La variable Attachment contiene el fichero adjunto (PDF) codificado en base 64.

La variable HeadersAttachment contiene el registro del fichero adjunto.

La variable Headers contiene el registro del documento Facturae.

OnBeforeSendFace

INNESGFePublishers.OnBeforeSendFace(var Email: Text; var Name: Text; var Invoice: Text; var Headers: Record INNESGFeHeaders)

Se ejecuta antes de rellenar los datos del documento que se envía a la plataforma Face.

La variable Email contiene el email de notificación que utiliza la plataforma Face para notificar los distintos estados del documento.

La variable Invoice contiene el documento Facturae (XML) codificado en base 64.

La variable Headers contiene el registro del documento Facturae.

eFact

OnBeforeAddAttachmenteFact

INNESGFePublishers.OnBeforeAddAttachmenteFact(var Extension: Text; var Attachment: Text; HeadersAttachment: Record INNESGFeHeadersAttachment; Headers: Record INNESGFeHeaders)

Se ejecuta antes de rellenar los datos del fichero adjunto que se envía a la plataforma eFact.

La variable Extension contiene el valor de la extensión del fichero adjunto.

La variable Attachment contiene el fichero adjunto (PDF) codificado en base 64.

La variable HeadersAttachment contiene el registro del fichero adjunto.

La variable Headers contiene el registro del documento Facturae.

OnBeforeSendeFact

INNESGFePublishers.OnBeforeSendeFact(var Receptor: Text; var Invoice: Text; Headers: Record INNESGFeHeaders)

Se ejecuta antes de rellenar los datos del documento que se envía a la plataforma eFact.

La variable Receptor contiene el valor del campo Id. partner de los Códigos dirección utilizados en la plataforma eFact.

La variable Invoice contiene el documento Facturae (XML) codificado en base 64.

La variable Headers contiene el registro del documento Facturae.

OnBeforeCheckeFact

INNESGFePublishers.OnBeforeCheckeFact(var Reference: Text; var InvoiceNumber: Code[20]; var InvoiceDate: Integer; var InvoiceSupplier: Text; var InvoiceBuyer: Text; var InvoiceTotal: Text; Headers: Record INNESGFeHeaders)

Se ejecuta antes de rellenar los datos del documento que se comprueba en la plataforma eFact.

La variable Reference contiene el valor del campo Referencia del documento Facturae.

La variable InvoiceNumber contiene el valor del campo Nº documento del documento Facturae.

La variable InvoiceDate contiene el valor del campo Fecha emisión (año en 4 dígitos) del documento Facturae.

La variable InvoiceSupplier contiene el valor del campo Nif de la empresa.

La variable InvoiceBuyer contine el valor del campo Alias partner (Nif partner) del cliente del documento Facturae.

La variable InvoiceTotal contiene el valor del campo Total factura del documento Facturae.

La variable Headers contiene el registro del documento Facturae.

Idiomas

Este documento está disponible en los siguientes idiomas: