Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Temas legales (https://www.clubdelphi.com/foros/forumdisplay.php?f=65)
-   -   Factura Electronica (FacturaE) (https://www.clubdelphi.com/foros/showthread.php?t=97938)

Daviid 12-12-2025 13:38:10

Factura Electronica (FacturaE)
 
Alguien sabe cuando es obligatorio usar la factura electronica?

Se ve esto afectado en alguna manera por VeriFactu?

Estoy mezclando cosas? Tengo en la cabeza que la FacturaE seria obligatoria en 2026.

ermendalenda 12-12-2025 13:50:16

Cita:

Empezado por Daviid (Mensaje 571270)
Alguien sabe cuando es obligatorio usar la factura electronica?

Se ve esto afectado en alguna manera por VeriFactu?

Estoy mezclando cosas? Tengo en la cabeza que la FacturaE seria obligatoria en 2026.


Hola hay un hilo para las facturas electrónicas, no obstante Facturae es obligatorio para las empresas que facturan a Organizaciones publicas hace años B2G, lo que no es obligatorio, aún, es lo que supongo que preguntas, el B2B, la nueva normativa de la ley Crea y Crece, que aún está en desarrollo normativo/reglamentario.
No hay noticias y me temo que el retraso de Verifactu puede provocar un retraso adicional de la factura eletrónica, con la que se ha liado no creo que saquen ambas a la vez, estaba prevista sacarla en breve y dar el periodo de adaptación, si siguen con lo previsto se va a liar más parda aún.
Por otro lado esta normativa no sería Facturae, es otro formato, UBL 2.1 según normativa europea, o también puedes optar por contratar y remitir a un punto de entrada privado (de pago), por ejemplo B2Brouter, que te dan más facilidades de formato, y que ellos apañen el resto: generar el UBL, remitan al punto de entrada común(que aún no está definido), etc..


Así que trabquilo de momento

Daviid 12-12-2025 13:52:27

Cita:

Empezado por ermendalenda (Mensaje 571271)
Hola hay un hilo para las facturas electrónicas, no obstante Facturae es obligatorio para las empresas que facturan a Organizaciones publicas hace años B2G, lo que no es obligatorio, aún, es lo que supongo que preguntas, el B2B, la nueva normativa de la ley Crea y Crece, que aún está en desarrollo normativo/reglamentario.
No hay noticias y me temo que el retraso de Verifactu puede provocar un retraso adicional de la factura eletrónica, con la que se ha liado no creo que saquen ambas a la vez, estaba prevista sacarla en breve y dar el periodo de adaptación, si siguen con lo previsto se va a liar más parda aún.
Por otro lado esta normativa no sería Facturae, es otro formato, UBL 2.1 según normativa europea, o también puedes optar por contratar y remitir a un punto de entrada privado (de pago), por ejemplo B2Brouter, que te dan más facilidades de formato, y que ellos apañen el resto: generar el UBL, remitan al punto de entrada común(que aún no está definido), etc..


Así que trabquilo de momento

Gracias, donde esta el hilo para las facturas electrónicas que no lo encuentro?

ermendalenda 12-12-2025 13:53:53

Por aquí, si no me equivoco:
https://www.clubdelphi.com/foros/sho...5&goto=newpost

Daviid 12-12-2025 13:54:41

Cita:

Empezado por ermendalenda (Mensaje 571273)

Gracias, estaba buscando un foro como "Proyecto SIF/Veri*Factu/Ley Antifraude" :p

ermendalenda 12-12-2025 13:56:37

Cita:

Empezado por Daviid (Mensaje 571274)
Gracias, estaba buscando un foro como "Proyecto SIF/Veri*Factu/Ley Antifraude" :p


De momento un hilo solo, supongo que los moderadores ya decidirán, en su momento, si hacer la subdivisión temática, como este de Verifactu

bmfranky 13-12-2025 11:11:35

Ley crea y crece
 
Hola el Hilo es aquí, yo ya me he subscrito por si acaso...

seccion_31 15-12-2025 18:42:15

El componente para verifactu ya soporta el formato FacturaE de tal forma que al terminar el envio de las facturas, puede generar, y opcionalmente firmar las facturas en formato facturaE. Mediante varios eventos captura los datos que le faltan para conformar el XML. Documentado en el programa Demo.

Durante los primeros meses del año que viene soportara de la misma forma el formato UBL 2.1

Saludos !


Cita:

Hay que incluir 3 eventos claves para que la generación sea exitosa:

// indica si la factura debe procesarse, y los datos generales de la factura electronica, algunos ya prefijados
procedure TForm1.onDatosFacturaE( Sender: TObject; numSerieFactura:string; indice:integer; var facturaEData:TFacturaEData; var procesa:boolean);

// datos de cada linea de la factura
procedure TForm1.onLineasFacturaE( Sender: TObject; numSerieFactura:string; indice,nlinea:integer; var facturaELinea:TInvoiceLine; var sigue:boolean);

// fin de la factura, informativo
procedure TForm1.onCompletaFacturaE( Sender: TObject; numSerieFactura:string; indice:integer; filename:string);

//Con sesion iniciada generacion de la factura electronica FacturaE: Indicando la ruta de almacenamiento
VeriFactuD7.generaFacturaE( xmlFacturaE );

Esta llamada dispara los eventos arriba indicados, despues de esta llamada, se puede cerrar la sesion.


function autoFirmaFacturaE(xmlName,xmlNameFirmado:string; var error:string):boolean;

Permite firmar una factura XML con los certificados especificados en la sesion. Es posible hacer esto en el evento: onCompletaFacturaE cuando la factura ya ha sido generada.

bmfranky 15-12-2025 19:59:07

Cita:

Empezado por seccion_31 (Mensaje 571329)
El componente para verifactu ya soporta el formato FacturaE de tal forma que al terminar el envio de las facturas, puede generar, y opcionalmente firmar las facturas en formato facturaE. Mediante varios eventos captura los datos que le faltan para conformar el XML. Documentado en el programa Demo.

Durante los primeros meses del año que viene soportara de la misma forma el formato UBL 2.1

Saludos !

Gracias por la info, tendré que pegar un vistazo a la implementación que has desarrollado para crearme algo parecido.

FelixDL 29-12-2025 08:45:15

Cita:

Empezado por seccion_31 (Mensaje 571329)
El componente para verifactu ya soporta el formato FacturaE de tal forma que al terminar el envio de las facturas, puede generar, y opcionalmente firmar las facturas en formato facturaE. Mediante varios eventos captura los datos que le faltan para conformar el XML. Documentado en el programa Demo.

Durante los primeros meses del año que viene soportara de la misma forma el formato UBL 2.1

Saludos !

Buenas,

¿ Pero ya se sabe el formato del XML de FacturaE ? Lo digo por el comentario de "ya soporta el formato FacturaE"

Saludos

ermendalenda 29-12-2025 13:39:09

Cita:

Empezado por FelixDL (Mensaje 571551)
Buenas,

¿ Pero ya se sabe el formato del XML de FacturaE ? Lo digo por el comentario de "ya soporta el formato FacturaE"

Saludos

FacturaE no ha cambiado eso, se va a seguir usando para los envios a los organismos oficiales -B2G- a tarves ee Face, y alguna empresas lo usan para B2B.
La normativa nueva de factura electronica no va em facturaE, va orientado a otro formato, UBL 2.1 para los B2B. Pero sin dejar de usarse FacturaE(de momento)

FelixDL 30-12-2025 08:27:57

Buenas,

Quieres decir que¿ el formato que se usa para mandar facturas a FACE es el que se usa parará para el nuevo formato de factura electrónica entre empresas ?

Saludos

Noe277 30-12-2025 08:50:32

UBL o FacturaE
 
Entonces si tuviésemos que empezar a desarrollar la factura electrónica que haríais.

Desarrollaríais UBL 2.1 y luego un conversor para FacturaE.

FacturaE y conversor UBL 2.1

o las 2 por separado.

Yo en el programa tengo 49999... y pico casos de factura que existen y no se cual es la mejor forma de abordar esto.

ermendalenda 30-12-2025 08:50:34

Cita:

Empezado por FelixDL (Mensaje 571565)
Buenas,

Quieres decir que¿ el formato que se usa para mandar facturas a FACE es el que se usa parará para el nuevo formato de factura electrónica entre empresas ?

Saludos


No, como comento en el post, será UBL 2.1

ermendalenda 30-12-2025 09:13:12

Cita:

Empezado por Noe277 (Mensaje 571566)
Entonces si tuviésemos que empezar a desarrollar la factura electrónica que haríais.

Desarrollaríais UBL 2.1 y luego un conversor para FacturaE.

FacturaE y conversor UBL 2.1

o las 2 por separado.

Yo en el programa tengo 49999... y pico casos de factura que existen y no se cual es la mejor forma de abordar esto.

Ten en cuenta una cosa, el desarrollo aún está en pañales, pero puede pasar una cosa, y es que con el formato UBL tengas suficiente. Los endpoints de FACE admiten un formato específico de UBL para enviar dicho formato, con lo cual te puedes encontrar la sorpresa de que te curres FacturaE y finalmente te sobre ese formato por que lo puedes hacer todo en UBL 2.1, aunque yo, actualmente, genero ambos a la vez, ya que FacturaE lo necesitaba ya, ya cada uno lo que vea más conveniente.
Por otro lado, convertir de uno a otro lo veo más complicado, ten en cuenta que pueden haber incompatibilidades entre un formato y otro en cuanto a:
-Formato de decimales
-Longitudes de textos diferentes
-Nodos que pueden estar en uno sí y en otro no.


Resumiendo, si actualmente no necesita ningún cliente tuyo Facturae, yo abordaría directamente UBL 2.1 y si son 2 ó 3 Faces los que tiene que hacer que lo haga manualmente con el software gratuito de Facturae y le pegas los nodos de QR con una pequeña función,, como algún usuario a propuesto.

Noe277 30-12-2025 10:12:22

Facturae
 
Cita:

Empezado por ermendalenda (Mensaje 571568)
Ten en cuenta una cosa, el desarrollo aún está en pañales, pero puede pasar una cosa, y es que con el formato UBL tengas suficiente. Los endpoints de FACE admiten un formato específico de UBL para enviar dicho formato, con lo cual te puedes encontrar la sorpresa de que te curres FacturaE y finalmente te sobre ese formato por que lo puedes hacer todo en UBL 2.1, aunque yo, actualmente, genero ambos a la vez, ya que FacturaE lo necesitaba ya, ya cada uno lo que vea más conveniente.
Por otro lado, convertir de uno a otro lo veo más complicado, ten en cuenta que pueden haber incompatibilidades entre un formato y otro en cuanto a:
-Formato de decimales
-Longitudes de textos diferentes
-Nodos que pueden estar en uno sí y en otro no.


Resumiendo, si actualmente no necesita ningún cliente tuyo Facturae, yo abordaría directamente UBL 2.1 y si son 2 ó 3 Faces los que tiene que hacer que lo haga manualmente con el software gratuito de Facturae y le pegas los nodos de QR con una pequeña función,, como algún usuario a propuesto.

Ya tengo un programa funcionando con facturae con muchos clientes pero estamos desarrollando un programa nuevo y para no trabajar a lo tonto dos veces.
Espero que pronto saquen normativa para poder saber a que atenernos y ver a que santo hay que rezar para no sufrir tanto como con el verifactu

ermendalenda 30-12-2025 10:51:44

Cita:

Empezado por Noe277 (Mensaje 571569)
Ya tengo un programa funcionando con facturae con muchos clientes pero estamos desarrollando un programa nuevo y para no trabajar a lo tonto dos veces.
Espero que pronto saquen normativa para poder saber a que atenernos y ver a que santo hay que rezar para no sufrir tanto como con el verifactu

El gran problema va a ser identificar si la factura se va declarar fiinlmente como B2B o B2C, no tenemos una bola mágica, eso en ocasiones se produce después de la emisión. Ya les he informado a los de facturaelectronica y me dicen lo mismo, que hasta que ellos no tengan el reglamento no saben a que atenerse, así que toca esperar a ver que desarrollan primero los legisladores, van a faltar santos, agua bendita para rociar toda la oficina, quemar incienso.. aunque creo que es mejor hacer un exorcismo

FacilIng 06-03-2026 16:08:27

Cita:

Empezado por Noe277 (Mensaje 571569)
Ya tengo un programa funcionando con facturae con muchos clientes ...

Perdona una pregunta :rolleyes: ¿funcionando y firmando los XML de FacturaE?

Pq nosotros el XML de FacturaE ya lo generamos correctamente y ningún problema cuando lo firmas con Autofirma de FACE :) ...
Pero lo que queremos ahora es firmar nosotros mismos el XML para conseguir el XSIG firmado a través de nuestro SW y ahí es donde estamos teniendo problemas :confused: pq no vemos cómo hacerlo y los NuGet que encontramos no están operativos ni funcionan ...
He visto por aquí la librería Java externa que algunos de vosotros utilizáis, pero tampoco nos apetece tener que instalar Java a nuestros clientes cuando nunca lo hemos necesitado ...
Nuestro SW está programado en VB.net y nos gustaría encontrar alguna forma de hacerlo :o ...

Se agradecen sugerencias :rolleyes: ...
¡Gracias!

Noe277 11-03-2026 09:00:56

Facturae
 
Cita:

Empezado por FacilIng (Mensaje 572039)
Perdona una pregunta :rolleyes: ¿funcionando y firmando los XML de FacturaE?

Pq nosotros el XML de FacturaE ya lo generamos correctamente y ningún problema cuando lo firmas con Autofirma de FACE :) ...
Pero lo que queremos ahora es firmar nosotros mismos el XML para conseguir el XSIG firmado a través de nuestro SW y ahí es donde estamos teniendo problemas :confused: pq no vemos cómo hacerlo y los NuGet que encontramos no están operativos ni funcionan ...
He visto por aquí la librería Java externa que algunos de vosotros utilizáis, pero tampoco nos apetece tener que instalar Java a nuestros clientes cuando nunca lo hemos necesitado ...
Nuestro SW está programado en VB.net y nos gustaría encontrar alguna forma de hacerlo :o ...

Se agradecen sugerencias :rolleyes: ...
¡Gracias!


De momento estamos conectando con autofirma, el programa es c#. Lo que si hacemos es conectar directamente con el autofirma desde el programa. En su momento por el 2016 no encontramos la manera de hacerlo y lo que dices había que instalar cosas externas. Volveremos a mirar si hay otra manera ya que vamos a sacar programa nuevo.

FacilIng 11-03-2026 13:27:32

Cita:

Empezado por Noe277 (Mensaje 572053)
De momento estamos conectando con autofirma, el programa es c#. Lo que si hacemos es conectar directamente con el autofirma desde el programa.

Ostras! :rolleyes: Qué quieres decir con lo de "estamos conectando con Autofirma"?
Nosotros generamos el XML de la FacturaE y es el cliente el que abre Autofirma y selecciona el xml correspondiente ...
¿Vosotros hacéis la llamada a Autofirma por línea de comandos con parámetros? ¿Cómo lo hacéis? :cool:

Cita:

Empezado por Noe277 (Mensaje 572053)
Volveremos a mirar si hay otra manera ya que vamos a sacar programa nuevo.

Ostras otra vez! :D
Si encontráis alguna forma de hacerlo actualmente, ya decís, pq nosotros no hemos sido capaces de encontrar nada ...

Muchas gracias! :)

novatico 11-03-2026 15:17:14

Nosotros hacemos la siguiente llamada por línea de comandos:

Cita:

AutoFirmaCommandLine sign -i %1 -o %2 -store auto -format facturae -filter subject.contains:%3 -xml -config signatureProductionCountry=ESPAÑA
donde %1 es el fichero xml generado con la factura, %2 el fichero xml resultante ya firmado, y %3 es el CIF/NIF del certificado que se va a usar para firmar.

Para que funcione, yo copio, desde la carpeta de instalación de Aufirma, lo siguiente:

AutofirmaCommandLine.exe
y las carpetas:
certutil, y
jre

y las añado en la carpeta de instalación de mi aplicación.

Noe277 12-03-2026 12:09:12

Autofirma
 
Yo lo que hice en su momento fue descargarme el proyecto de autofirma lo toque por alguna cosilla ("No me acuerdo ") y a mis clientes les paso el .jar de autofirma personalizado a una carpeta y luego desde mi programa le paso los parámetros y lo firma.

Me ahorraba el tema por si no tenían instalado el autofirma y se lo pasaba yo. Antes la gente no sabia ni que era un certificado.


El proyecto https://github.com/ctt-gob-es/clienteafirma

Jarogo08 12-03-2026 17:52:04

¿os referís a tener un xml en una ruta y a partir de él generar el xsig?

FacilIng 13-03-2026 08:02:57

Cita:

Empezado por novatico (Mensaje 572056)
Nosotros hacemos la siguiente llamada por línea de comandos:

> AutoFirmaCommandLine sign -i %1 -o %2 -store auto -format facturae -filter subject.contains:%3 -xml -config signatureProductionCountry=ESPAÑA

donde %1 es el fichero xml generado con la factura, %2 el fichero xml resultante ya firmado, y %3 es el CIF/NIF del certificado que se va a usar para firmar.

Para que funcione, yo copio, desde la carpeta de instalación de Aufirma, lo siguiente:

AutofirmaCommandLine.exe
y las carpetas:
certutil, y
jre

y las añado en la carpeta de instalación de mi aplicación.

Muchas gracias @novatico! :D

FacilIng 13-03-2026 08:03:27

Cita:

Empezado por Noe277 (Mensaje 572060)
Yo lo que hice en su momento fue descargarme el proyecto de autofirma lo toque por alguna cosilla ("No me acuerdo ") y a mis clientes les paso el .jar de autofirma personalizado a una carpeta y luego desde mi programa le paso los parámetros y lo firma.
Me ahorraba el tema por si no tenían instalado el autofirma y se lo pasaba yo. Antes la gente no sabia ni que era un certificado.
El proyecto https://github.com/ctt-gob-es/clienteafirma

Ostras! :D Esto no lo sabía yo :) puede ser nuestra solución ...

Muchas gracias @Noe277

FacilIng 13-03-2026 08:04:50

Cita:

Empezado por Jarogo08 (Mensaje 572064)
¿os referís a tener un xml en una ruta y a partir de él generar el xsig?

Sip, correcto :) ...
Nos gustaría hacerlo "desde dentro" de nuestro SW (vb.net) sin tener que usar Autofirma, ni aplicaciones externas :D ...
¿Tienes la solución mágica @Jarogo08? ;)

Noe277 13-03-2026 08:55:18

Librerias
 
Cita:

Empezado por FacilIng (Mensaje 572069)
Sip, correcto :) ...
Nos gustaría hacerlo "desde dentro" de nuestro SW (vb.net) sin tener que usar Autofirma, ni aplicaciones externas :D ...
¿Tienes la solución mágica @Jarogo08? ;)

1) FirmaXadesNet en GitHub (proyecto C# para XAdES)

Este proyecto no es de Facturae directamente, pero es una biblioteca en C# que permite crear firmas XAdES (BES, EPES, etc.) y puede usarse para firmar un XML Facturae si configuras bien los parámetros de política.

2) FirmaXadesNetCore en NuGet (versión .NET Standard)

Una adaptación de FirmaXadesNet compatible con .NET Standard / .NET 6 / .NET 7 / .NET 8, lo que facilita usarlo en proyectos modernos.

Jarogo08 13-03-2026 09:53:21

Cita:

Empezado por FacilIng (Mensaje 572069)
Sip, correcto :) ...
Nos gustaría hacerlo "desde dentro" de nuestro SW (vb.net) sin tener que usar Autofirma, ni aplicaciones externas :D ...
¿Tienes la solución mágica @Jarogo08? ;)


Sí, nosotros lo hacemos!
Déjame montarte un ejemplo y lo pongo aquí. A ver si me da tiempo hoy!

FacilIng 13-03-2026 11:03:59

Cita:

Empezado por Jarogo08 (Mensaje 572071)
Sí, nosotros lo hacemos!
Déjame montarte un ejemplo y lo pongo aquí. A ver si me da tiempo hoy!

Espero ansioso!!! :D:D:D

Jarogo08 13-03-2026 12:18:30

Aplicación de Windows Forms, un formulario con un botón (está en VB. NET)

Código:

Imports java.security
Imports java.io
Imports java.util
Imports java.security.cert
Imports javax.xml.parsers
Imports es.mityc.javasign.pkstore
Imports es.mityc.javasign.pkstore.keystore
Imports es.mityc.javasign.trust
Imports es.mityc.javasign.xml.xades.policy
Imports es.mityc.firmaJava.libreria.xades
Imports es.mityc.javasign.xml.refs
Imports es.mityc.firmaJava.libreria.utilidades
Imports org.w3c.dom
Imports sviudes.blogspot.com
Imports System.Xml


Public Class Form1

    Private Sub btnFirmarXML_Click(sender As Object, e As EventArgs) Handles btnFirmarXML.Click

        Dim ArchivoXML As String = "C:\Prueba\Factura.xml"
        Dim ArchivoXMLFirmado As String = "C:\Prueba\Factura.xsig"
        Dim ArchivoCertificado As String = "C:\Prueba\Certificado.pfx"
        Dim PasswordCertificado As String = "PasswordCertificado"

        Dim ClavePrivada As PrivateKey = Nothing
        Dim Proveedor As Provider = Nothing
        Dim Certificado As java.security.cert.X509Certificate = CargaCertificado(ArchivoCertificado, PasswordCertificado, ClavePrivada, Proveedor)

        ' Si hay certificado
        If Certificado IsNot Nothing Then

            ' Política de firma
            TrustFactory.instance = es.mityc.javasign.trust.TrustExtendFactory.newInstance()
            TrustFactory.truster = es.mityc.javasign.trust.MyPropsTruster.getInstance()
            PoliciesManager.POLICY_SIGN = New es.mityc.javasign.xml.xades.policy.facturae.Facturae31Manager()
            PoliciesManager.POLICY_VALIDATION = New es.mityc.javasign.xml.xades.policy.facturae.Facturae31Manager()

            ' Crear datos a firmar
            Dim dataToSign As DataToSign = New DataToSign()
            dataToSign.setXadesFormat(EnumFormatoFirma.XAdES_BES) ' XadES-PES
            dataToSign.setEsquema(XAdESSchemas.XAdES_132)
            dataToSign.setPolicyKey("facturae31")
            dataToSign.setAddPolicy(True)
            dataToSign.setXMLEncoding("UTF-8")
            dataToSign.setEnveloped(True)
            dataToSign.addObject(New ObjectToSign(New AllXMLToSign(), "facturae31", Nothing, "text/xml", Nothing))
            dataToSign.setDocument(CargaXML(ArchivoXML))

            ' Firmar
            Dim res() As Object = New FirmaXML().signFile(Certificado, dataToSign, ClavePrivada, Proveedor)

            ' Guardamos la firma en un fichero
            UtilidadTratarNodo.saveDocumentToOutputStream(res(0), New FileOutputStream(ArchivoXMLFirmado), True)

            MsgBox("Fichero " & ArchivoXMLFirmado & " generado correctamente", MsgBoxStyle.OkOnly, "btnFirmarXML_Click")
        Else
            MsgBox("No es posible acceder al certificado", MsgBoxStyle.OkOnly, "btnFirmarXML_Click")
        End If

    End Sub

    Public Shared Function CargaXML(ByVal Ruta As String) As Document

        Dim dbf As DocumentBuilderFactory = DocumentBuilderFactory.newInstance()
        dbf.setNamespaceAware(True)

        Return dbf.newDocumentBuilder().parse(New BufferedInputStream(New FileInputStream(Ruta)))
    End Function

    Public Shared Function CargaCertificado(ByVal Ruta As String, ByVal Clave As String, ByRef ClavePrivada As PrivateKey, ByRef Proveedor As Provider) As X509Certificate
        Dim Certificado As X509Certificate = Nothing

        Proveedor = Nothing
        ClavePrivada = Nothing

        ' Carga certificado de fichero PFX
        Dim ks As KeyStore = KeyStore.getInstance("PKCS12")
        ks.load(New BufferedInputStream(New FileInputStream(Ruta)), Clave.ToCharArray())
        Dim storeManager As IPKStoreManager = New KSStore(ks, New PassStoreKS(Clave))
        Dim certificates As List = storeManager.getSignCertificates()

        ' Si encontramos el certificado
        If certificates.size() = 1 Then
            Certificado = certificates.get(0)

            ' Obtención de la clave privada asociada al certificado
            ClavePrivada = storeManager.getPrivateKey(Certificado)

            ' Obtención del proveedor encargado de las labores criptográficas
            Proveedor = storeManager.getProvider(Certificado)
        End If

        Return Certificado
    End Function

End Class

Se necesitan las siguientes librerías al lado del ejecutable:


commons-logging-1.1.dll
facturaE_additional.dll
IKVM.OpenJDK.Core.dll
IKVM.OpenJDK.Security.dll
IKVM.OpenJDK.Text.dll
IKVM.OpenJDK.Util.dll
IKVM.OpenJDK.XML.API.dll
IKVM.OpenJDK.XML.Parse.dll
IKVM.Runtime.dll
MITyCLibAPI-1.0.4.dll
MITyCLibCert-1.0.4.dll
MITyCLibPolicy-1.0.4.dll
MITyCLibTrust-1.0.4.dll
MITyCLibTSA-1.0.4.dll
MITyCLibXADES-1.0.4.dll
xmlsec-1.4.2-ADSI-1.0.dll


No me preguntéis de donde se sacan porque las busqué hace unos 10 años y no tengo ni pajolera de donde las conseguí :D

No sé si tengo posibilidad de subir un rar con esta aplicación de ejemplo, así ya tendríais también las librerías

FacilIng 13-03-2026 12:30:45

Cita:

Empezado por Jarogo08 (Mensaje 572073)
Aplicación de Windows Forms, un formulario con un botón (está en VB. NET)

Código:

Imports java.security
Imports java.io
Imports java.util
Imports java.security.cert
Imports javax.xml.parsers
Imports es.mityc.javasign.pkstore
Imports es.mityc.javasign.pkstore.keystore
Imports es.mityc.javasign.trust
Imports es.mityc.javasign.xml.xades.policy
Imports es.mityc.firmaJava.libreria.xades
Imports es.mityc.javasign.xml.refs
Imports es.mityc.firmaJava.libreria.utilidades
Imports org.w3c.dom
Imports sviudes.blogspot.com
Imports System.Xml


Public Class Form1

    Private Sub btnFirmarXML_Click(sender As Object, e As EventArgs) Handles btnFirmarXML.Click

        Dim ArchivoXML As String = "C:\Prueba\Factura.xml"
        Dim ArchivoXMLFirmado As String = "C:\Prueba\Factura.xsig"
        Dim ArchivoCertificado As String = "C:\Prueba\Certificado.pfx"
        Dim PasswordCertificado As String = "PasswordCertificado"

        Dim ClavePrivada As PrivateKey = Nothing
        Dim Proveedor As Provider = Nothing
        Dim Certificado As java.security.cert.X509Certificate = CargaCertificado(ArchivoCertificado, PasswordCertificado, ClavePrivada, Proveedor)

        ' Si hay certificado
        If Certificado IsNot Nothing Then

            ' Política de firma
            TrustFactory.instance = es.mityc.javasign.trust.TrustExtendFactory.newInstance()
            TrustFactory.truster = es.mityc.javasign.trust.MyPropsTruster.getInstance()
            PoliciesManager.POLICY_SIGN = New es.mityc.javasign.xml.xades.policy.facturae.Facturae31Manager()
            PoliciesManager.POLICY_VALIDATION = New es.mityc.javasign.xml.xades.policy.facturae.Facturae31Manager()

            ' Crear datos a firmar
            Dim dataToSign As DataToSign = New DataToSign()
            dataToSign.setXadesFormat(EnumFormatoFirma.XAdES_BES) ' XadES-PES
            dataToSign.setEsquema(XAdESSchemas.XAdES_132)
            dataToSign.setPolicyKey("facturae31")
            dataToSign.setAddPolicy(True)
            dataToSign.setXMLEncoding("UTF-8")
            dataToSign.setEnveloped(True)
            dataToSign.addObject(New ObjectToSign(New AllXMLToSign(), "facturae31", Nothing, "text/xml", Nothing))
            dataToSign.setDocument(CargaXML(ArchivoXML))

            ' Firmar
            Dim res() As Object = New FirmaXML().signFile(Certificado, dataToSign, ClavePrivada, Proveedor)

            ' Guardamos la firma en un fichero
            UtilidadTratarNodo.saveDocumentToOutputStream(res(0), New FileOutputStream(ArchivoXMLFirmado), True)

            MsgBox("Fichero " & ArchivoXMLFirmado & " generado correctamente", MsgBoxStyle.OkOnly, "btnFirmarXML_Click")
        Else
            MsgBox("No es posible acceder al certificado", MsgBoxStyle.OkOnly, "btnFirmarXML_Click")
        End If

    End Sub

    Public Shared Function CargaXML(ByVal Ruta As String) As Document

        Dim dbf As DocumentBuilderFactory = DocumentBuilderFactory.newInstance()
        dbf.setNamespaceAware(True)

        Return dbf.newDocumentBuilder().parse(New BufferedInputStream(New FileInputStream(Ruta)))
    End Function

    Public Shared Function CargaCertificado(ByVal Ruta As String, ByVal Clave As String, ByRef ClavePrivada As PrivateKey, ByRef Proveedor As Provider) As X509Certificate
        Dim Certificado As X509Certificate = Nothing

        Proveedor = Nothing
        ClavePrivada = Nothing

        ' Carga certificado de fichero PFX
        Dim ks As KeyStore = KeyStore.getInstance("PKCS12")
        ks.load(New BufferedInputStream(New FileInputStream(Ruta)), Clave.ToCharArray())
        Dim storeManager As IPKStoreManager = New KSStore(ks, New PassStoreKS(Clave))
        Dim certificates As List = storeManager.getSignCertificates()

        ' Si encontramos el certificado
        If certificates.size() = 1 Then
            Certificado = certificates.get(0)

            ' Obtención de la clave privada asociada al certificado
            ClavePrivada = storeManager.getPrivateKey(Certificado)

            ' Obtención del proveedor encargado de las labores criptográficas
            Proveedor = storeManager.getProvider(Certificado)
        End If

        Return Certificado
    End Function

End Class

Se necesitan las siguientes librerías al lado del ejecutable:


commons-logging-1.1.dll
facturaE_additional.dll
IKVM.OpenJDK.Core.dll
IKVM.OpenJDK.Security.dll
IKVM.OpenJDK.Text.dll
IKVM.OpenJDK.Util.dll
IKVM.OpenJDK.XML.API.dll
IKVM.OpenJDK.XML.Parse.dll
IKVM.Runtime.dll
MITyCLibAPI-1.0.4.dll
MITyCLibCert-1.0.4.dll
MITyCLibPolicy-1.0.4.dll
MITyCLibTrust-1.0.4.dll
MITyCLibTSA-1.0.4.dll
MITyCLibXADES-1.0.4.dll
xmlsec-1.4.2-ADSI-1.0.dll


No me preguntéis de donde se sacan porque las busqué hace unos 10 años y no tengo ni pajolera donde las conseguí :D

No sé si tengo posibilidad de subir un rar con esta aplicación de ejemplo, así ya tendríais también las librerías

Ostias @Jarogo08 :D ese código me suena :rolleyes: ...
Lo encontré hace un par de semanas, tengo todas las librerías de las que hablas, pero no fui capaz de hacerlo funcionar ...
A ver si ahora con lo que tú me dices lo consigo ...

Muuuuuuuchas gracias!!! :)

Jarogo08 13-03-2026 12:37:28

Cita:

Empezado por FacilIng (Mensaje 572074)
Ostias @Jarogo08 :D ese código me suena :rolleyes: ...
Lo encontré hace un par de semanas, tengo todas las librerías de las que hablas, pero no fui capaz de hacerlo funcionar ...
A ver si ahora con lo que tú me dices lo consigo ...

Muuuuuuuchas gracias!!! :)


Pues copiando y pegando debería funcionarte, acabo de montar la aplicación para ponérosla y me va sin problema!

Sólo tienes que cambiar las 4 variables del principio del botón, obviamente

FacilIng 18-03-2026 15:25:31

Cita:

Empezado por Jarogo08 (Mensaje 572075)
Pues copiando y pegando debería funcionarte, acabo de montar la aplicación para ponérosla y me va sin problema!
Sólo tienes que cambiar las 4 variables del principio del botón, obviamente

¡Integrado en nuestro código y funcionando! :fff:fff:fff

¡¡¡Muchísimas gracias @Jarogo08!!! :)

Jarogo08 18-03-2026 17:09:18

Cita:

Empezado por FacilIng (Mensaje 572095)
¡Integrado en nuestro código y funcionando! :fff:fff:fff

¡¡¡Muchísimas gracias @Jarogo08!!! :)


Me debes una! :cool::cool: :D:D

FacilIng 18-03-2026 17:29:49

Cita:

Empezado por Jarogo08 (Mensaje 572097)
Me debes una! :cool::cool: :D:D

¡HECHO! :D
||-|| ||-|| ||-||

ermendalenda 24-03-2026 19:50:28

Nuevo cambio, acaban de aprobar el borrador del real decreto de factura electronica.
Otra vez volvemos a Facturae, mejor , sí, pero para volverse loco.
Lo peor no es el desarrollo, son los tiempos que dan para los cambios de estado de las factura que tendrán que matizar a que se refieren con 4 días habiles: no es lo mismo recibida, que aceptada, que anulada, que pagada...
Y 4 días habiles puede estar acorde para los envios de facturas emitidas y recibidas/contabilizadas(SII), pero para cambiar estados a facturas recibidas 4 días es un desastre monumental, y creo que poco alineado con la normatiba de facturacion en cuanto a tiempos de contabilización, para los departamentos de contabilidad/administración si se pretende que sea verificada ( la aceptación o no) las recibidas, seriamos esclavos.
espero qie maticen y no sea una locura. Espero que el cambio de eatado de 4 días se refieran a "recibida".
Aún no he leido completamente el borrador, pero ya me ha subido la tensión.

bmfranky 24-03-2026 20:07:57

Cita:

Empezado por ermendalenda (Mensaje 572120)
Nuevo cambio, acaban de aprobar el borrador del real decreto de factura electronica.
Otra vez volvemos a Facturae, mejor , sí, pero para volverse loco.
Lo peor no es el desarrollo, son los tiempos que dan para los cambios de estado de las factura que tendrán que matizar a que se refieren con 4 días habiles: no es lo mismo recibida, que aceptada, que anulada, que pagada...
Y 4 días habiles puede estar acorde para los envios de facturas emitidas y recibidas/contabilizadas(SII), pero para cambiar estados a facturas recibidas 4 días es un desastre monumental, y creo que poco alineado con la normatiba de facturacion en cuanto a tiempos de contabilización, para los departamentos de contabilidad/administración si se pretende que sea verificada ( la aceptación o no) las recibidas, seriamos esclavos.
espero qie maticen y no sea una locura. Espero que el cambio de eatado de 4 días se refieran a "recibida".
Aún no he leido completamente el borrador, pero ya me ha subido la tensión.

Puedes pasar enlace a donde lo han colgado, porfa.

ermendalenda 24-03-2026 23:37:53

Cita:

Empezado por bmfranky (Mensaje 572121)
Puedes pasar enlace a donde lo han colgado, porfa.

Nada, no hay borrador se me ha descargado una version del 2023, lo que he puesto es antiguo, ya me extrañaba que fuera facturae, a ver qur nos dicen.
Se ha aprobado pero hay que esperar... tic tac.

Noe277 25-03-2026 09:13:09

Real decreto
 
Cita:

Empezado por ermendalenda (Mensaje 572122)
Nada, no hay borrador se me ha descargado una version del 2023, lo que he puesto es antiguo, ya me extrañaba que fuera facturae, a ver qur nos dicen.
Se ha aprobado pero hay que esperar... tic tac.

En toda la prensa dicen que han aprobado el real decreto. ¿Pero cual es?

ermendalenda 25-03-2026 10:42:54

Cita:

Empezado por Noe277 (Mensaje 572125)
En toda la prensa dicen que han aprobado el real decreto. ¿Pero cual es?

Lo mas probable es que aalga mañaba en el BOE, de monento el único borrador que existe oficial y el único que tiene hacienda es el del 2025
https://portal.mineco.gob.es/Recurso...lectronica.pdf


La franja horaria es GMT +2. Ahora son las 06:58:00.

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