Ver Mensaje Individual
  #4  
Antiguo 19-05-2019
manelb manelb is online now
Miembro
 
Registrado: mar 2017
Posts: 280
Reputación: 8
manelb Va por buen camino
Saludos a todos…

Hola oscarac, intentaré explicar nuestra experiencia sobre el tema por si te puede orientar…

Cuando en nuestro ERP desarrollamos la generación de facturas en formato xml, optamos por la generación “a pelo”, en formato texto, tal y como comenta el compañero dec.
Y así lo tenemos en la actualidad.

De todas formas, más tarde, investigamos sobre de qué forma los ficheros xsd que definen la estructura del xml podían utilizarse para simplificar el proceso y descubrimos el XML Data Binding.
Utilizando esta herramienta conseguimos generar una interface que permite generar y guardar de una forma más encapsulada la factura en formato xml.

En nuestro caso, la unidad que contiene la interface creada por el XML Data Binding a partir del xsd , contiene más de 6 mil líneas y esta es una muestra del código generado
Código Delphi [-]
{****************************************************************************************}
{                                                                                        }
{                                    XML Data Binding                                    }
{                                                                                        }
{         Generated on: 25/02/2017 16:38:47                                              }
{       Generated from: G:\DropBoxMBel\Dropbox\Facturacio Electronica\Facturaev3_2.xsd   }
{   Settings stored in: G:\DropBoxMBel\Dropbox\Facturacio Electronica\Facturaev3_2.xdb   }
{                                                                                        }
{****************************************************************************************}

unit Facturaev3_2;

interface

uses xmldom, XMLDoc, XMLIntf;

type

{ Forward Decls }

  IXMLFacturae = interface;
  IXMLFileHeaderType = interface;
  IXMLThirdPartyType = interface;
  IXMLTaxIdentificationType = interface;
  IXMLLegalEntityType = interface;
.
.
.
.
.
{ IXMLFacturae }

  IXMLFacturae = interface(IXMLNode)
    ['{4180325F-7A60-46DE-9C54-055114275527}']
    { Property Accessors }
    function Get_FileHeader: IXMLFileHeaderType;
    function Get_Parties: IXMLPartiesType;
    function Get_Invoices: IXMLInvoicesType;
    function Get_Extensions: IXMLExtensionsType;
    function Get_Signature: IXMLSignatureType_ds;
    { Methods & Properties }
    property FileHeader: IXMLFileHeaderType read Get_FileHeader;
    property Parties: IXMLPartiesType read Get_Parties;
    property Invoices: IXMLInvoicesType read Get_Invoices;
    property Extensions: IXMLExtensionsType read Get_Extensions;
    property Signature: IXMLSignatureType_ds read Get_Signature;
  end;
.
.
.
{ Global Functions }

function GetFacturae(Doc: IXMLDocument): IXMLFacturae;
function LoadFacturae(const FileName: string): IXMLFacturae;
function NewFacturae: IXMLFacturae;
.
.
.


Y un ejemplo de su llamada e inicio de construcción del xml
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Factura: IXMLFacturae;
begin
  Factura:= GetFacturae(xml); {xml es un TXMLDocument}
  Factura.FileHeader.SchemaVersion:='3.2';
  Factura.FileHeader.Modality:='I';
  Factura.FileHeader.InvoiceIssuerType:='EM';
.
.
.
end;

Saludos
Responder Con Cita