Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Preguntas técnicas, códigos, esquemas, envíos,... (https://www.clubdelphi.com/foros/forumdisplay.php?f=87)
-   -   Factura electrónica, formato UBL,... (https://www.clubdelphi.com/foros/showthread.php?t=98086)

Noe277 30-07-2026 08:01:33

Factura electrónica, formato UBL,...
 
Actualización sobre la Solución Pública de Facturación Electrónica (SPFE) - 10-09-2026
Se comunica que el día 10 de septiembre de 2026 a las 10:00 h. se celebrará el seminario web "Actualización sobre la Solución Pública de Facturación Electrónica (SPFE)".




Si está interesado en asistir, por favor acceda a la página web que se indica a continuación. Tras rellenar unos mínimos datos de registro, recibirá un mensaje en la dirección de correo que haya comunicado en dicho formulario de registro, informando de los datos necesarios para acceder al seminario web de la reunión. Es importante una correcta identificación de la entidad participante a efectos de registrar adecuadamente las preguntas que se formulen.https://agenciatributaria.zoom.us/we...QYa_Xh-_EKY8Jg

Se ruega que los asistentes formulen las posibles preguntas para cada una de las intervenciones mediante la opción "Preguntas y respuestas" que ofrece Zoom.

El orden del día previsto para el seminario (1:15 h) es el siguiente:

Actualización del contenido del proyecto de orden ministerial y anexos.
Información técnica sobre los servicios de la SPFE y ejemplos.
La información ofrecida en dicha reunión se difundirá posteriormente en la siguiente página web:

https://www.agenciatributaria.es/AEA...olladores.html

Si tiene dudas o preguntas acerca de la organización del seminario, puede enviar un mensaje a la siguiente dirección: [email protected]

seccion_31 23-09-2026 18:26:13

buenos dias !

Perdonar que os pregunte las dudas:

He leido el foro facturaE que arranca en 2014? y no tengo claro que toda esa informacion se aplique ahora,

Podeis darme una mano de como empezar con facturaE ? porque tampoco logro encontrar los enlaces con la AEAT con los webservices y detalles tecnicos para enviar las facturas electronicas?

Como veis ando muy perdido y acabo de aterrizar despues de las vacaciones.

Saludos !

bmfranky 24-09-2026 09:38:10

Cita:

Empezado por seccion_31 (Mensaje 572707)
buenos dias !

Perdonar que os pregunte las dudas:

He leido el foro facturaE que arranca en 2014? y no tengo claro que toda esa informacion se aplique ahora,

Podeis darme una mano de como empezar con facturaE ? porque tampoco logro encontrar los enlaces con la AEAT con los webservices y detalles tecnicos para enviar las facturas electronicas?

Como veis ando muy perdido y acabo de aterrizar despues de las vacaciones.

Saludos !

Hola, las ultimas versiones las tienes aquí, aunque tengo que preguntarte para que quieres liarte con ella, porque para b2b , sera un nuevo formato y para el FACE, deberías de ver el formato y documentación aquí, por lo que acabo de ver hay publicadas bastantes novedades a día 22/09/2026.
Un saludo.

seccion_31 24-09-2026 11:54:35

Cita:

Empezado por bmfranky (Mensaje 572711)
Hola, las ultimas versiones las tienes aquí, aunque tengo que preguntarte para que quieres liarte con ella, porque para b2b , sera un nuevo formato y para el FACE, deberías de ver el formato y documentación aquí, por lo que acabo de ver hay publicadas bastantes novedades a día 22/09/2026.
Un saludo.

perdon:

me refiero al b2b, de la nueva ley crea y crece.

¿estan los datos tecnicos publicados para remitir las facturas a la plataforma del estado?

No los veo por ningun lado.

Por otro lado el formato UBL 2.1 ya lo tengo resuelto.

Saludos !

CarlosMz 24-09-2026 17:20:54

Cita:

Empezado por seccion_31 (Mensaje 572712)
perdon:

me refiero al b2b, de la nueva ley crea y crece.

¿estan los datos tecnicos publicados para remitir las facturas a la plataforma del estado?

No los veo por ningun lado.

Por otro lado el formato UBL 2.1 ya lo tengo resuelto.

Saludos !

El formato UBL requiere de firma avanzada Xades como FacturaE ¿?

seccion_31 24-09-2026 18:57:28

Cita:

Empezado por CarlosMz (Mensaje 572713)
El formato UBL requiere de firma avanzada Xades como FacturaE ¿?

En cualquier caso autofirma command line lo firma sin problema

El tema es que no se donde está la información técnica 🤔

Saludos!

bmfranky 24-09-2026 19:06:02

Cita:

Empezado por seccion_31 (Mensaje 572714)
En cualquier caso autofirma command line lo firma sin problema

El tema es que no se donde está la información técnica 🤔

Saludos!

Hola, aun no han colgado nada en firme, la mala noticia a medias para ti , es que el formato UBL es el nuevo 2.5 que difiere algo del 2.1 que preparaste, aunque teniéndolo ya avanzado cuando saquen los anexos no te sera muy difícil modificarlo.

seccion_31 24-09-2026 20:48:21

gracias !

Creo que no habrá mucha diferencia entre 2.5 y 2.1, actualmente paso la factura completa, incluyendo vencimientos, de cualquier manera veré que cambios hay para tener el tema del UBL listo.

Saludos !

edari 25-09-2026 09:00:15

Cita:

Empezado por seccion_31 (Mensaje 572712)
perdon:

me refiero al b2b, de la nueva ley crea y crece.

¿estan los datos tecnicos publicados para remitir las facturas a la plataforma del estado?

No los veo por ningun lado.

Por otro lado el formato UBL 2.1 ya lo tengo resuelto.

Saludos !


Para ver la documentación de UBL 2.1. este sería el link?


https://docs.oasis-open.org/ubl/UBL-2.1.html


Gracias

seccion_31 25-09-2026 09:27:03

Ese enlace es muy amplio yo creo.

Te cuento lo que yo hago.

Utilizo un sistema de records que luego analizo mediante rtti para generar el XML. Ya fue un poco expuesto en el componente que he desarrollado para verifactu (para facturae), pero la version actual soporta el UBL perfecto:

Ejemplo del record de facturaUBL:

Código:

  TFacturaUBL = record
    ext_UBLExtensions            : TUBLExtensions;
    cbc_UBLVersionID            : TFacturaUBLString;
    cbc_CustomizationID          : TFacturaUBLString;
    cbc_ProfileID                : TFacturaUBLString;
    cbc_ID                      : TFacturaUBLString;
    cbc_UUID                    : TFacturaUBLString;
    cbc_IssueDate                : TFacturaUBLString;
    cbc_IssueTime                : TFacturaUBLString;
    cbc_InvoiceTypeCode          : TFacturaUBLString;
    cbc_Note                    : TFacturaUBLString;
    cbc_DocumentCurrencyCode    : TFacturaUBLString;

    cac_AccountingSupplierParty  : TPartyAccounting;    // emisor (nosotros)
    cac_AccountingCustomerParty  : TPartyAccounting;    // receptor (cliente)

    cac_PaymentMeans            : TPaymentMeans;                            // forma de pago
    cac_PaymentTerms            : array [0..MAXVTOS]  of TPaymentTerms;

    cac_AllowanceCharge          : array [0..MAXTOTALS] of TAllowanceCharge;  // importe
    cac_TaxTotal                : array [0..MAXTOTALS] of TTaxTotal;        // impuestos
    cac_LegalMonetaryTotal      : TLegalMonetaryTotal;
    cac_InvoiceLine              : array of TInvoiceLine;

    _rttiForceNoTocar :array of Byte;      // para que el rtti genere estructura
  end;

Relleno los records normalmente:

Código:

      facturaUBL.cbc_UBLVersionID:='2.1';
      facturaUBL.cbc_ID                    :=alltrim(dbFacturas.fieldbyname('nsernumero').text);
      facturaUBL.cbc_IssueDate              :=DatefacturaE( dbFacturas.fieldbyname('fecha').asdatetime );
      facturaUBL.cbc_InvoiceTypeCode        :='380';
      facturaUBL.cbc_DocumentCurrencyCode  :='EUR';

      // datos del emisor
      facturaUBL.cac_AccountingSupplierParty.cac_party.cac_PartyIdentification.cbc_ID_SchemeID  :=dbEmpresa.FieldByName('cif').Text;
      facturaUBL.cac_AccountingSupplierParty.cac_party.cac_PartyName.cbc_Name                    :=dbEmpresa.FieldByName('firmaco').Text;
      facturaUBL.cac_AccountingSupplierParty.cac_party.cac_PartyLegalEntity.cbc_RegistrationName :=dbEmpresa.FieldByName('firmaco').Text;
      facturaUBL.cac_AccountingSupplierParty.cac_party.cac_PostalAddress.cbc_StreetName          :=dbEmpresa.FieldByName('direccion').Text;
      facturaUBL.cac_AccountingSupplierParty.cac_party.cac_PostalAddress.cbc_CityName            :=dbEmpresa.FieldByName('poblacion').Text;
      facturaUBL.cac_AccountingSupplierParty.cac_party.cac_PostalAddress.cbc_PostalZone          :=dbEmpresa.FieldByName('codpostal').text;

      facturaUBL.cac_AccountingSupplierParty.cac_party.cac_PostalAddress.cac_Country.cbc_IdentificationCode    :='ES';
      facturaUBL.cac_AccountingSupplierParty.cac_party.cac_PartyTaxScheme.cbc_CompanyID                        :=dbEmpresa.FieldByName('cif').Text;

Ajusto algunas opciones:

Código:

    // opciones globales del recordToXML
    XMLEmptyValues :=false;    // sin valores vacios
    XMLEmptyNodes  :=true;      // sin nodos vacios
    XMLRemoveSpaces:=true;      // sin espacios extras (por izda. o dcha.)
    XMLAutoUTF8    :=true;      // convierte todos los string a UTF-8 automaticamente
    XMLPrefijos_CAC_CBC_EXT:=true;  // necesitamos convertir cac_ID  a  cac:ID

y luego llamo aqui:

Código:

recordToXML('uTipoFacturaUBL.TFacturaUBL',@FacturaUBL,archivo,@UBL_CallBack,'','Invoice');
Y se genera el XML UBL

Probablemente cuando tenga toda la informacion, acabe publicado en el componente de verifactu.



Fijate en los nodos de mi record para darle un vistazo a la documentacion. que pienso pueden ser los esenciales para generar una factura.

edari 25-09-2026 10:21:08

Cita:

Empezado por seccion_31 (Mensaje 572719)
Ese enlace es muy amplio yo creo.

Te cuento lo que yo hago.

Utilizo un sistema de records que luego analizo mediante rtti para generar el XML. Ya fue un poco expuesto en el componente que he desarrollado para verifactu (para facturae), pero la version actual soporta el UBL perfecto:

Ejemplo del record de facturaUBL:

Código:

  TFacturaUBL = record
    ext_UBLExtensions            : TUBLExtensions;
    cbc_UBLVersionID            : TFacturaUBLString;
    cbc_CustomizationID          : TFacturaUBLString;
    cbc_ProfileID                : TFacturaUBLString;
    cbc_ID                      : TFacturaUBLString;
    cbc_UUID                    : TFacturaUBLString;
    cbc_IssueDate                : TFacturaUBLString;
    cbc_IssueTime                : TFacturaUBLString;
    cbc_InvoiceTypeCode          : TFacturaUBLString;
    cbc_Note                    : TFacturaUBLString;
    cbc_DocumentCurrencyCode    : TFacturaUBLString;

    cac_AccountingSupplierParty  : TPartyAccounting;    // emisor (nosotros)
    cac_AccountingCustomerParty  : TPartyAccounting;    // receptor (cliente)

    cac_PaymentMeans            : TPaymentMeans;                            // forma de pago
    cac_PaymentTerms            : array [0..MAXVTOS]  of TPaymentTerms;

    cac_AllowanceCharge          : array [0..MAXTOTALS] of TAllowanceCharge;  // importe
    cac_TaxTotal                : array [0..MAXTOTALS] of TTaxTotal;        // impuestos
    cac_LegalMonetaryTotal      : TLegalMonetaryTotal;
    cac_InvoiceLine              : array of TInvoiceLine;

    _rttiForceNoTocar :array of Byte;      // para que el rtti genere estructura
  end;

Relleno los records normalmente:

Código:

      facturaUBL.cbc_UBLVersionID:='2.1';
      facturaUBL.cbc_ID                    :=alltrim(dbFacturas.fieldbyname('nsernumero').text);
      facturaUBL.cbc_IssueDate              :=DatefacturaE( dbFacturas.fieldbyname('fecha').asdatetime );
      facturaUBL.cbc_InvoiceTypeCode        :='380';
      facturaUBL.cbc_DocumentCurrencyCode  :='EUR';

      // datos del emisor
      facturaUBL.cac_AccountingSupplierParty.cac_party.cac_PartyIdentification.cbc_ID_SchemeID  :=dbEmpresa.FieldByName('cif').Text;
      facturaUBL.cac_AccountingSupplierParty.cac_party.cac_PartyName.cbc_Name                    :=dbEmpresa.FieldByName('firmaco').Text;
      facturaUBL.cac_AccountingSupplierParty.cac_party.cac_PartyLegalEntity.cbc_RegistrationName :=dbEmpresa.FieldByName('firmaco').Text;
      facturaUBL.cac_AccountingSupplierParty.cac_party.cac_PostalAddress.cbc_StreetName          :=dbEmpresa.FieldByName('direccion').Text;
      facturaUBL.cac_AccountingSupplierParty.cac_party.cac_PostalAddress.cbc_CityName            :=dbEmpresa.FieldByName('poblacion').Text;
      facturaUBL.cac_AccountingSupplierParty.cac_party.cac_PostalAddress.cbc_PostalZone          :=dbEmpresa.FieldByName('codpostal').text;

      facturaUBL.cac_AccountingSupplierParty.cac_party.cac_PostalAddress.cac_Country.cbc_IdentificationCode    :='ES';
      facturaUBL.cac_AccountingSupplierParty.cac_party.cac_PartyTaxScheme.cbc_CompanyID                        :=dbEmpresa.FieldByName('cif').Text;

Ajusto algunas opciones:

Código:

    // opciones globales del recordToXML
    XMLEmptyValues :=false;    // sin valores vacios
    XMLEmptyNodes  :=true;      // sin nodos vacios
    XMLRemoveSpaces:=true;      // sin espacios extras (por izda. o dcha.)
    XMLAutoUTF8    :=true;      // convierte todos los string a UTF-8 automaticamente
    XMLPrefijos_CAC_CBC_EXT:=true;  // necesitamos convertir cac_ID  a  cac:ID

y luego llamo aqui:

Código:

recordToXML('uTipoFacturaUBL.TFacturaUBL',@FacturaUBL,archivo,@UBL_CallBack,'','Invoice');
Y se genera el XML UBL

Probablemente cuando tenga toda la informacion, acabe publicado en el componente de verifactu.



Fijate en los nodos de mi record para darle un vistazo a la documentacion. que pienso pueden ser los esenciales para generar una factura.


Gracias, le hecho un vistazo ^\||/

David M 05-10-2026 11:56:06

BOE publicado SPFE
 
Hoy han publicado el BOE con documentación técnica de la SPFE:

https://www.boe.es/boe/dias/2026/10/...2026-20587.pdf

Faneka 05-10-2026 12:02:09

Gracias, le damos un vistazo.

emailesc 06-10-2026 09:11:07

Venga, ahora a correr todos con los desarrollos, no sea que lo vayan a retrasar a ultima hora y NO os pillen con todo el trabajo hecho :D

Noe277 14-10-2026 09:07:00

Buenas,

Han publicado en la web de desarrolladores de la AEAT la documentación tecnica

https://www.agenciatributaria.es/AEA...ca__SPFE_.html

seccion_31 15-10-2026 14:18:33

Cita:

Empezado por Noe277 (Mensaje 572885)
Buenas,

Han publicado en la web de desarrolladores de la AEAT la documentación tecnica

https://www.agenciatributaria.es/AEA...ca__SPFE_.html

gracias!

¿ puede alguien x favor, publicar un ejemplo muy básico de como enviar un UBL ?

(no generar el UBL, solo enviar)


La franja horaria es GMT +2. Ahora son las 18:24:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi