FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Muchas gracias iMia
yo también tuve problemas inicialmente con el Data Binding por el import y probé con esa herramienta que mencionas pero no quedé muy contento con el resultado.. Total, que investigando y probando, di con que si descargaba el xsd externo al que hace referencia el del Facturae y lo ponía en el mismo directorio, el Data Binding funcionaba perfectamente. El problema es que todo el XML es perfecto menos el elemento Facturae que sale sin el fe: de las narices . Probé como bien dices poniendo fe:Facturae pero entonces pone el prefijo fe: en todos los elementos del XML y, en consecuencia, el XML no valida. He encontrado algún "apaño" pero me gustaría saber si existe alguna manera elegante de conseguir el prefijo fe solo en elemento y no en sus hijos. No sé si es culpa del DataBinding que no acaba de hacerlo bien del todo o yo que ando algo confundido con mis pocos conocimientos de xml.. se te ocurre alguna cosa? yo ya no sé qué más probar |
#2
|
|||
|
|||
Lo debe hacer por que propaga el namespace en los nodos hijos. Eso era algo que no me cuadraba y poor eso reescribí los tiposwsin heredar el namespace.
Mira de modificar el tipo tfacturae para que en el create no lo traslade a los tipos contenidos. (Perdon por la redaccion, estoy desde la tablet) |
#3
|
|||
|
|||
No pasa nada por la redacción, se entiende.. Gracias por ser tan rápido/a.. Eso he estado intentando pero no lo consigo de ninguna manera.. Tienes algún ejemplo de código si no te importa de como hacer para no trasladar el namespace, si no te importa? Muy agradecido
|
#4
|
|||
|
|||
Como te he comentado, he reescrito todos los tipos de nuevo, sin nada de los namespaces.
A ver si manana te poongo el codigo completo del tipo facturae, para que veas lo simple (y mal para otros casos) que lo he dejado. |
#5
|
|||
|
|||
Sería de gran utilidad, muchas gracias.. aquí está una parte del mío (la de los nodos principales, todo no me deja por excesivamente largo) tal como salen del Data Binding por si queda más claro lo que quería decir
|
#6
|
|||
|
|||
Como verás lo he simplificado al máximo. y escribo el xml casi de forma literal
Código:
/// Tipo TFacturae type TFacturae = class private fFileHeader: TFileHeader; fParties: TParties; fInvoices: TInvoices; // fExtensions: TExtensions; public constructor Create; /// function ToXml: IXMLDOMElement; /// property FileHeader: TFileHeader read fFileHeader write fFileHeader; property Parties: TParties read fParties write fParties; property Invoices: TInvoices read fInvoices write fInvoices; // property fExtensions: TExtensions read fExtensions write fExtensions; end; { TFacturae } XMLNode_eFact_32_Facturae = 'fe:Facturae'; XMLNode_eFact_32_FileHeader = 'FileHeader'; XMLNode_eFact_32_SchemaVersion = 'SchemaVersion'; XMLNode_eFact_32_Modality = 'Modality'; XMLNode_eFact_32_InvoiceIssuerType = 'InvoiceIssuerType'; constructor TFacturae.Create; begin fFileHeader := TFileHeader.Create; fParties := TParties.Create; fInvoices := TInvoices.Create; end; function TFacturae.ToXml: IXMLDOMElement; var XMLDoc: IXMLDOMDocument; XMLElement: IXMLDOMElement; begin XMLDoc := CoFreeThreadedDOMDocument30.Create; try XMLElement := XMLDoc.createElement( XMLNode_eFact_32_Facturae ); if XMLElement <> nil then begin XMLElement.AppendChild(Self.fFileHeader.ToXml); XMLElement.AppendChild(Self.fParties.ToXml); XMLElement.AppendChild(Self.fInvoices.ToXml); end; result := XMLElement; finally end; end; type TFileHeader = class private fSchemaVersion: string; // (E) fModality: string; // (E) fInvoiceIssuerType: string; // (E) // fThirdParty: TThirdParty; fBatch: TBatch; // fFactoringAssignmentData: TFactoringAssignmentData; public constructor Create; function ToXml: IXMLDOMNode; property SchemaVersion: string read fSchemaVersion write fSchemaVersion; property Modality: string read fModality write fModality; property InvoiceIssuerType: string read fInvoiceIssuerType write fInvoiceIssuerType; property Batch: TBatch read fBatch write fBatch; end; { FFileHeaderType } C_SchemaVersion_3_2 = '3.2'; C_Modality_Individual = 'I'; C_PersonTypeCode_Fisica = 'F'; C_PersonTypeCode_Juridica = 'J'; C_ResidenceTypeCodeType_R = 'R'; /// - Residente en España C_ResidenceTypeCodeType_U = 'U'; /// - Residente en la UE C_InvoiceIssuerType_Emisor = 'EM'; constructor TFileHeader.Create; begin fSchemaVersion := C_SchemaVersion_3_2_1; fModality := C_Modality_Individual; fInvoiceIssuerType := C_InvoiceIssuerType_Emisor; fBatch := TBatch.Create; end; function TFileHeader.ToXml: IXMLDOMNode; var XMLElement: IXMLDOMElement; begin XMLElement := NewElementNode( nil, XMLNode_eFact_32_FileHeader ); if XMLElement <> nil then begin XMLElement.appendChild(NewTextNode(XMLElement, XMLNode_eFact_32_SchemaVersion, Self.fSchemaVersion, 0)); XMLElement.appendChild(NewTextNode(XMLElement, XMLNode_eFact_32_Modality, Self.fModality, 0)); XMLElement.appendChild(NewTextNode(XMLElement, XMLNode_eFact_32_InvoiceIssuerType, Self.fInvoiceIssuerType, 0)); XMLElement.appendChild(Self.fBatch.ToXml); end; result := XMLElement; end; ... |
#7
|
|||
|
|||
Perdón pero he andado liado y no he podido responder antes... Pues es un gran trabajo, interesante la aproximación que has hecho al problema y la manera que has encontrado de resolverlo.. Me lo miraré más a fondo a ver si consigo rehacer mi código también . una lástima que el binding no consiga hacerlo directamente ¡Muchísimas gracias!
|
#8
|
|||
|
|||
Cita:
Esta es mi primera (bueno segunda) vez , no se si lo hago correctamente, en cualquier caso gracias. Veo que has implementado codigo para la facturae, podrias pasarme algun ejemplo o las clases, muchas gracias . |
#9
|
|||
|
|||
Hola a tod@s.
Finalmente he logrado generar la firma electrónica con el formato XAdES_EPES que es el utilizado para la FACTURAe, inicialmente comencé con Java, pero a medio camino probé las librerías de SecureBlackBox VCL de la empresa eldos.com/sbb/. Son fantásticas y muy completas, abandoné el Java y opté por desarrollarlo en Delphi XE5, en el enlace se puede descargar (incluye ejemplos muy interesantes), son librerías de pago, si deseas tener los fuentes, pero en mi caso fue suficiente con los archivos .dcu y los manuales (además de estudiar la información que ofrece el Ministerio de Industria), puede crear un pequeño programa que firmara el archivo .xml incrustando la firma electrónica, lo valido en la sede electrónica del Ministerio de Industria y todo OK. Comparto la opinión de iMia, lo importante es entender el problema y los requerimientos, pensar la solución y no simplemente copiar el código. Saludos. |
#10
|
|||
|
|||
Has optado por una opción muuuuuy interesante... que ya pensé en su momento pero descarté por el coste del SBB... ya que no sabía que no hacía falta comprar los componentes si no quieres los fuentes, y que con los dcu's habia suficiente...
Aunque sea en 2 programas diferentes, así lo tienes todo en Delphi... Cuando tenga más tiempo miraré esa opción... EDITO: Acabo de mirar la web, y la licencia de pruebas tiene limitación de tiempo... creo que tendrás que pasar por caja... Última edición por iMia fecha: 19-02-2015 a las 17:51:32. |
#11
|
|||
|
|||
Pasar por caja...
Hola.
Sí, tiene una limitación de tiempo, aún estoy en plazo y no sabré si tendré problemas hasta llegar la fecha. Estas librerías tienen un control de licencia que no había visto en ningún otro código, se llama a una función a la cual se le pasa una cadena encriptada, con algún algoritmo del tipo HASH, es algo como: SetLicenseKey('660067560EFA9ACA818A0F134ED8D16D6D425561114AC7B9..... El nivel de control es alto y no es para menos si se tratan de librerías que encriptan y establecen marcas de seguridad con certificados digitales. Probablemente sí tenga que pasar por caja, aunque tengo mis dudas porque sólo uso las librerías compiladas (dcu), no lo sé.... De todas formas, la urgencia que teníamos en el desarrollo me llevó a optar por este camino y hasta dentro de dos meses no se vence la licencia, creo que llegado el día pasaré por caja con gusto, librerías como esas (a mi juicio) tienen un precio mucho mayor. |
#12
|
|||
|
|||
Hola a todos!!
Llevo leyendo 2 días sobre el tema de la Facturae y aun que avanzo voy superlento. Os explico, utilizo Delphi 2010, he bajado de la web www . facturae.gob.es / FORMATO /Paginas /version-3-2.aspx el esquema XSD [XML]. Estoy intentando crear con el XML Data Binding los tipos, funciones, etc. Aquí viene el problema, el archivo con el esquema XSD viene con extensión .XML, lo cambio a .XSD y cuando el wizard del XML Data Binding intenta crear la unit con los tipos, funciones, etc da un error que en mi caso es "Acceso denegado" (raro no rarisismo). He probado a convertir un archivo XML(un borrador de Facturae creado con el programa del ministerio de industria) a XSD mediante la web www . flame-ware.com /products /xml-2-xsd y el XML Data Binding funciona correctamente, el problema es que el esquema XSD que se crea no cubre todos los casos que aborda el formato Facturae 3.2.1. ¿Alguien sabe porque da error el XML Data Binding? Muchísimas gracias, estoy de los nervios. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Mexico - Como crear sellos en FACTURA ELECTRONICA.. | pcicom | API de Windows | 12 | 10-11-2012 18:46:55 |
Factura Electrónica | aig | Varios | 13 | 10-12-2010 17:12:44 |
factura electronica | spia | Varios | 2 | 22-02-2009 21:30:06 |
Factura electronica AUNA | Aprendiz | Varios | 5 | 01-09-2005 10:44:15 |
programa para validar formato de archivo de texto | n3mohack | Varios | 4 | 21-04-2005 00:27:00 |
|