Facturación electronica - España

Antonio Mart.
Posts: 174
Joined: Sat Feb 23, 2013 10:04 am

Re: Facturación electronica - España

Post by Antonio Mart. »

Carlos,

¿ Sabes tu si el componente aeatfact.dll sigue siendo valido para firmar oficial y digitalmente facturae ?
Lo digo porque por lo que he leído por ahí, ese componente no tiene continuidad y además no firma de forma correcta según
Ya conocía (y tambien había probado) la el activeX AEATFACT.DLL.
El problema es que esta librería valida documentos en "BASE 64 y firma PKKCS#7". Si embargo, el formato oficial de facturae utiliza una firma "XADES".
En la propia página de la AEAT, donde explican como funciona "Facturación Telemática en formato BASE64 y firma PKCS#7" y el uso de AEATFACT.DLL (aquí),aconsejan utilizar el nuevo formato de Factura electrónica: Facturae, basado en XML con firma XADES, que es el que yo necesito interpretar.
Aeatfact.dll no está implementado para reconocer el formato facturae.


Con lo cual parece que aeatfact.dll NO esta preparado (no sirve) para firmar facturae

Saludos
colthop
Posts: 505
Joined: Sat Apr 22, 2006 9:09 am
Location: Madrid - España

Re: Facturación electronica - España

Post by colthop »

Hola Antonio:

No puedo decirte si esta activo todavía o no, desde septiembre no veo ese tema, pero si puedes hacer una factura firmada puedes comprobar su validez en la pagina siguiente:

http://sedeaplicaciones2.minetur.gob.es/FacturaE/

Un saludo

Carlos
Colt Hop ED, S.L.
Carlos Blas Fernández Domínguez
Tlfo: 645847093
E-Mail: carlos@colthop.es

Nunca se termina de aprender, por eso necesito siempre ayuda.
Antonio Mart.
Posts: 174
Joined: Sat Feb 23, 2013 10:04 am

Re: Facturación electronica - España

Post by Antonio Mart. »

Carlos,

Esa página, de verificación, parece que fallara.

Por otra parte, quería preguntar a todos: ¿ alguien ha conseguido firmar facturas facturae con el estandar XAdES en modo "batch" ?

A ver si pudieramos generar las fras. y automaticamente quedaran firmadas sin intervencion del usuario.

Gracias.
Antonio Mart.
Posts: 174
Joined: Sat Feb 23, 2013 10:04 am

Re: Facturación electronica - España

Post by Antonio Mart. »

Hola,

Gracias a la clase de Manuel Calero Solís he conseguido generar el .xml.
Adjunto una clase envoltorio.

Me faltaría firmar con el estandar XAdEs.

Code: Select all | Expand

///////////////// CLASS TEnvoltorioFacturaElectronica////// Clase envoltorio para la clase TFacturaElectronica de// Manuel Calero Sol¡s. (Gracias Manuel)///////////////////////////////////////////////////////////////////////////#Include "FiveWin.Ch"*//-------------------------------------------------------------------------//// Ejemplo de la clase// Hay que asignar los datos en el metodo ::AsignaDatos()FUNCTION TestFacturaElectronica()Local oEnvoEnv:= TEnvoltorioFacturaElectronica():New()oEnv:cNif   := "43787173S"oEnv:cNumFac:= "A-00001/13"oEnv:cCli   := "43000001"oEnv:lFirmar:= .f.oEnv:lEnviar:= .t.oEnv:Activate()IF oEnv:lError   oEnv:ShowErr()   oenv:showmsg()ENDIFRETURN NIL****//-------------------------------------------------------------------------//CLASS TEnvoltorioFacturaElectronica   METHOD New()   METHOD Activate()   DATA cNif                   // Obligatorio. Al menos para firmar   DATA cNumFac                // Obligatorio. Nº de factura.   DATA cCli                   // Obligatorio. Codigo de cliente de la fra.   DATA lFirmar                // Opcional. Si se quiere o no firmar   DATA lEnviar                // Opcional. Si se quiere enviar por email   DATA cPathGuardar    HIDDEN // Opcional. Por si se quiere tener almacen de fras. enviadas   DATA cFileXml        HIDDEN // Fichero xml resultante   DATA cFileXmlFir     HIDDEN // Fichero xml resultante firmado, si se llega a firmar   DATA oFactuE         HIDDEN   DATA oTree           HIDDEN   METHOD InstanciaClase() HIDDEN   METHOD AsignaDatos()    HIDDEN   METHOD GeneraXml()      HIDDEN   DATA lError          READONLY   METHOD ShowMsg()     INLINE ::oTree:ShowMsg()  // Muestra todos los mensajes de error y no error   METHOD ShowErr()     INLINE ::oTree:ShowErr()  // Muestra solo los mensajes que son de errorENDCLASS*//-------------------------------------------------------------------------//METHOD New()                  CLASS TEnvoltorioFacturaElectronica::lFirmar:= .t.::lEnviar:= .t.::lError := .f.RETURN Self*//-------------------------------------------------------------------------//METHOD Activate()             CLASS TEnvoltorioFacturaElectronica::InstanciaClase()::AsignaDatos()::GeneraXml()::lError:= ::oTree:lError()RETURN NIL*//-------------------------------------------------------------------------//METHOD InstanciaClase()          CLASS TEnvoltorioFacturaElectronicaLocal cIniFile:= FileCarValidos(::cCli+ Space(1)+ ::cNumFac) // Quitar (o sustituir) caracteres no validos para nombre de archivo*::cFileXml:= cIniFile+ ".Xml"IF ::lFirmar   ::cFileXmlFir:= cIniFile+ "Fir"+ ".Xml"ENDIF*::oTree:= TSimulateTreeForFacturaElectronica():New()*::oFactuE:= TFacturaElectronica():New(::oTree)*IF ::lFirmar   ::cFileXml   := cIniFile+ " - Origen.Xml"   ::cFileXmlFir:= cIniFile+ ".Xml"   *ELSE   ::cFileXml   := cIniFile+ ".Xml"   ::cFileXmlFir:= NILENDIF::oFactuE:cFicheroOrigen := ::cFileXml::oFactuE:cFicheroDestino:= ::cFileXmlFir*//-------------------------------------------------------------------------//METHOD AsignaDatos()             CLASS TEnvoltorioFacturaElectronica// AQUI asignar estos datos::oFactuE:nTotalGrossAmount              := 0::oFactuE:nTotalGeneralDiscounts         := 0::oFactuE:nTotalGeneralSurcharges        := 0::oFactuE:nTotalGrossAmountBeforeTaxes   := 0::oFactuE:nTotalTaxOutputs               := 0::oFactuE:nTotalTaxesWithheld            := 0::oFactuE:nInvoiceTotal                  := 0::oFactuE:nTotalOutstandingAmount        := 0::oFactuE:nTotalExecutableAmount         := 0::oFactuE:nTotalReimbursableExpenses     := 0::oFactuE:nInvoiceTotalAmount            := 0// AQUI asignar oSellerParty y oBuyerParty::oFactuE:oSellerParty                   := ::oFactuE:oSellerParty::oFactuE:oBuyerParty                    := ::oFactuE:oBuyerParty// AQUI rellenar estos arrays::oFactuE:aTax                           := {}::oFactuE:aDiscount                      := {}::oFactuE:aItemLine                      := {}::oFactuE:aInstallment                   := {}RETURN NIL**//-------------------------------------------------------------------------//METHOD GeneraXml()             CLASS TEnvoltorioFacturaElectronica::oFactuE:GeneraXml()IF ::lFirmar   ::oFactuE:Firma()   ::oFactuE:VerificaFirma()ENDIFIF ::lEnviar   ::oFactuE:Enviar()ENDIFRETURN NIL*//-------------------------------------------------------------------------//// Esta clase simula un objeto oTree que utiliza Manuel en su clase parece// ser para obtener informacion de la generacion xml de la factura.// Nosotros simulamos esa clase para, primero aprovechar su uso y segundo,// dejar intacto el codigo de Manuel.CLASS TSimulateTreeForFacturaElectronica   METHOD New()   METHOD Add()   METHOD Expand()       INLINE NIL   DATA nNivel INIT 1    HIDDEN   DATA aMsg    INIT {}  HIDDEN   DATA aMsgErr INIT {}  HIDDEN   METHOD ShowMsg()   METHOD ShowErr()   METHOD lError()       INLINE !Empty(::aMsgErr)ENDCLASS*//-------------------------------------------------------------------------//METHOD New()            CLASS TSimulateTreeForFacturaElectronicaRETURN Self*//-------------------------------------------------------------------------//// nTipoMsg: 1 Ok, vacio error.METHOD Add(cTexto, nTipoMsg)   CLASS TSimulateTreeForFacturaElectronicaLocal oTreeoTree:= TSimulateTreeForFacturaElectronica():New()oTree:nNivel:= Self:nNivel+ 1*Aadd(::aMsg, {cTexto, nTipoMsg})IF Empty(nTipoMsg)   Aadd(::aMsgErr, {cTexto, nTipoMsg})ENDIFRETURN oTree*//-------------------------------------------------------------------------//METHOD ShowMsg()        CLASS TSimulateTreeForFacturaElectronicaLocal cMsg#Define MSG_ a[1]+ Space(1)+ "["+ hb_ValToStr(a[2])+ "]"cMsg:= Arr2String(::aMsg, {|a| MSG_ }, CRLF )*MsgInfo(cMsg, "Mensajes")RETURN NIL*//-------------------------------------------------------------------------//METHOD ShowErr()        CLASS TSimulateTreeForFacturaElectronicaLocal cMsg*cMsg:= Arr2String(::aMsgErr, {|a| MSG_ }, CRLF )*MsgInfo(cMsg, "Errores")RETURN NIL**//---------------------------------------------------------------------------//// Funciones que faltan para compilar la clase de Manuel CaleroFUNCTION nRouDiv()   ; RETURN 2FUNCTION FullCurDir(); RETURN CurDriveDir()FUNCTION DToIso(d)Local cc:= Str(Year(d),  4)+ "-"+;    Str(Month(d), 2)+ "-"+;    Str(Day(d),   2)RETURN c*//-------------------------------------------------------------------------//STATIC FUNCTION FileCarValidos(c); RETURN c*//-------------------------------------------------------------------------//STATIC FUNCTION Arr2String( aList, bMTransform, cSep)local i, cList := ''DEFAULT cSep:= ","IF bMTransform == NIL   bMTransform:= {|x, nPos| x }ENDIFfor i = 1 to Len( aList )    cList += Eval(bMTransform, aList[ i ], i) + cSepnextreturn Left( cList, Len( cList ) - Len( cSep ) ) 

Saludos
elvira
Posts: 516
Joined: Fri Jun 29, 2012 12:49 pm

Re: Facturación electronica - España

Post by elvira »

Hola Antonio,

Por favor, ¿podrías compartir un ejemplo actualizado y con la firma?.

Muy agradecida!!
User avatar
José Vicente Beltrán
Posts: 282
Joined: Mon Oct 10, 2005 8:55 am
Location: Algeciras, España
Contact:

Re: Facturación electronica - España

Post by José Vicente Beltrán »

Antonio y Elvira,
Para firmar la factura electrónica os recomiendo la utilidad que ha puesto en este mismo foro Carlos (Colthop)
http://www.colthop.es/FirEleFa.zip

funciona muy bien, mediante una llamada a través de linea de comandos se puede integrar en nuestra aplicación y además tiene incorporada la ultima versión de los componentes de firma XADES validándose sin problemas en la página oficial al efecto en los tres puntos fundamentales:
- validación de formato
- validacion contable
- validación de firma

http://sedeaplicaciones2.minetur.gob.es ... /index.jsp

Saludos :shock:
elvira
Posts: 516
Joined: Fri Jun 29, 2012 12:49 pm

Re: Facturación electronica - España

Post by elvira »

Hola,

Si, muy agradecida, el tema es que cuando hay que hacer un envío masivo es un engorro porque el usuario tiene que seleccionar cada vez el certificado para cada operación de firma.

¿No existe algún .exe?. Creo que el aeatfact.dll ya no sirve :oops:
User avatar
José Vicente Beltrán
Posts: 282
Joined: Mon Oct 10, 2005 8:55 am
Location: Algeciras, España
Contact:

Re: Facturación electronica - España

Post by José Vicente Beltrán »

Efectivamente aeatfact.dll no sirve porque no firma en formato XAdES

Quizas te sea util la aplicacion EcoFirma, es un exe oficial
http://oficinavirtual.mityc.es/javawebs ... index.html

Aunque yo la he descartado en favor de la utilidad de Carlos

Saludos :shock:
elvira
Posts: 516
Joined: Fri Jun 29, 2012 12:49 pm

Re: Facturación electronica - España

Post by elvira »

Muy agradecida pero me sale una gui para seleccionar el fichero a firnar y no una linea de comando.

Lo que pretendo es firmar todas las facturas del mes y enviarlas por email, pero no puedo seleccionar 390 veces el mismo certificado para firmar todas!!!.
MOISES
Posts: 838
Joined: Wed Aug 22, 2007 10:09 am

Re: Facturación electronica - España

Post by MOISES »

Hola:

A ver si esto os sirve de ayuda:

http://evasar.uphero.com/firma/firma_electronica.rar

Un saludo
Saludos / Regards,

FWH 20.04, Harbour 3.2.0 dev (r1909261630) y BCC 7.40
Post Reply