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

///////////////
// 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 oEnv

oEnv:= 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()
ENDIF

RETURN 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 error

ENDCLASS
*
//-------------------------------------------------------------------------//
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 TEnvoltorioFacturaElectronica
Local 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:= NIL
ENDIF
::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()
ENDIF

IF ::lEnviar
   ::oFactuE:Enviar()
ENDIF

RETURN 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 TSimulateTreeForFacturaElectronica

RETURN Self
*
//-------------------------------------------------------------------------//
// nTipoMsg: 1 Ok, vacio error.
METHOD Add(cTexto, nTipoMsg)   CLASS TSimulateTreeForFacturaElectronica
Local oTree

oTree:= TSimulateTreeForFacturaElectronica():New()
oTree:nNivel:= Self:nNivel+ 1
*

Aadd(::aMsg, {cTexto, nTipoMsg})
IF Empty(nTipoMsg)
   Aadd(::aMsgErr, {cTexto, nTipoMsg})
ENDIF
RETURN oTree
*
//-------------------------------------------------------------------------//
METHOD ShowMsg()        CLASS TSimulateTreeForFacturaElectronica
Local 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 TSimulateTreeForFacturaElectronica
Local cMsg
*
cMsg:= Arr2String(::aMsgErr, {|a| MSG_ }, CRLF )
*
MsgInfo(cMsg, "Errores")
RETURN NIL
*

*
//---------------------------------------------------------------------------//
// Funciones que faltan para compilar la clase de Manuel Calero
FUNCTION nRouDiv()   ; RETURN 2
FUNCTION FullCurDir(); RETURN CurDriveDir()
FUNCTION DToIso(d)
Local c
c:= 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 }
ENDIF

for i = 1 to Len( aList )
    cList += Eval(bMTransform, aList[ i ], i) + cSep
next

return Left( cList, Len( cList ) - Len( cSep ) )

 
Saludos
elvira
Posts: 462
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: 279
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: 462
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: 279
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: 462
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: 824
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