Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-07-2023
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 112
Poder: 8
seccion_31 Va por buen camino
Buenos dias !

He leido el hilo atentamente, pero no soy capaz de importar los wsdl

desde las siguientes direcciones:

Entrada:
https://prewww2.aeat.es/static_files...nformacion.xsd

Salida:
https://prewww2.aeat.es/static_files...Suministro.xsd

Al importar, me da un error:

"
WSDL Import Error

An error was encontered importing....

....

Please verify that yo've entered the correct URL....
"

¿Podeis darme una mano por favor?

Con lo que aprendi en este foro de los SII, creo que luego podre seguir mas o menos solo, pero aqui ya no puedo continuar.

Saludos a tod@s

gracias
Responder Con Cita
  #2  
Antiguo 05-07-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por seccion_31 Ver Mensaje
He leido el hilo atentamente, pero no soy capaz de importar los wsdl

Al importar, me da un error:

https://prewww2.aeat.es/static_files...nformacion.xsd
https://prewww2.aeat.es/static_files...Suministro.xsd

Yo he probado a generarlos importante desde el IDE y me ha creado esto (os adjunto los fuentes); No os he revisado mucho pero no parece que tengan nada raro.
Archivos Adjuntos
Tipo de Archivo: zip SuministroInformacion.zip (7,7 KB, 31 visitas)
Tipo de Archivo: zip RespuestaSuministro.zip (3,7 KB, 19 visitas)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 05-07-2023
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 112
Poder: 8
seccion_31 Va por buen camino
muchas gracias por los archivos !

sin tener demasiado idea de esto, porque voy muy perdido (lo siento)

en estos archivos que he descargado tenemos:

interface(IXMLNode)


mientras a los que estoy acostumbrado con el SII, son:

class(TRemotable)


Entiendo que los archivos descargados con los interfaces IXMLNode, son para construir el archivo XML, que mas adelante sera firmado y enviado. (todavia no se muy bien como).
Podria crear el archivo XML de forma manual, pero veo mas conveniente intentarlo asi.

Voy a ver.

Saludos !
Responder Con Cita
  #4  
Antiguo 06-07-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por seccion_31 Ver Mensaje
muchas gracias por los archivos !
sin tener demasiado idea de esto, porque voy muy perdido (lo siento)
en estos archivos que he descargado tenemos:
...
Entiendo que los archivos descargados con los interfaces IXMLNode, son para construir el archivo XML, que mas adelante sera firmado y enviado. (todavia no se muy bien como).
Podria crear el archivo XML de forma manual, pero veo mas conveniente intentarlo asi.

Voy a ver.

Perdón.
Ahora que lo comentas, los he mirado con más detenimiento y les faltan las funciones que usamos para crear los XML.
Revisando la generación, he visto que la primera vez que lo he generado, no he seleccionado la opción siguiente:




Si los volvemos a generar y asignamos un nombre coherente, ahora sí aparecen las funciones que usamos para generar/cargar los XML.
En el caso de la petición estas:
Código Delphi [-]
function GetPeticionFacturacionAlta(Doc: IXMLDocument): IXMLSistemaFacturacionAltaFact;
function LoadPeticionFacturacionAlta(const FileName: string): IXMLSistemaFacturacionAltaFact;
function NewPeticionFacturacionAlta: IXMLSistemaFacturacionAltaFact;

Y en el caso de la respuesta estas:

Código Delphi [-]
function GetRespuestaFacturacionAlta(Doc: IXMLDocument): IXMLRespuestaComunAltaType;
function LoadRespuestaFacturacionAlta(const FileName: string): IXMLRespuestaComunAltaType;
function NewRespuestaFacturacionAlta: IXMLRespuestaComunAltaType;

A partir de ahí para generar un XML nuevo, deberíamos empezar por NewPeticionFacturacionAlta y para cargar la respuesta obtenida deberíamos usar LoadRespuestaFacturacionAlta o GetRespuestaFacturacionAlta.

Adjunto los nuevos ficheros.
Archivos Adjuntos
Tipo de Archivo: zip SuministroInformacion.zip (8,0 KB, 17 visitas)
Tipo de Archivo: zip RespuestaSuministro.zip (3,8 KB, 17 visitas)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 02-02-2024
_Io _Io is offline
Miembro
 
Registrado: ene 2024
Posts: 18
Poder: 0
_Io Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Perdón.
Ahora que lo comentas, los he mirado con más detenimiento y les faltan las funciones que usamos para crear los XML.
Revisando la generación, he visto que la primera vez que lo he generado, no he seleccionado la opción siguiente:




Si los volvemos a generar y asignamos un nombre coherente, ahora sí aparecen las funciones que usamos para generar/cargar los XML.
En el caso de la petición estas:
Código Delphi [-]
function GetPeticionFacturacionAlta(Doc: IXMLDocument): IXMLSistemaFacturacionAltaFact;
function LoadPeticionFacturacionAlta(const FileName: string): IXMLSistemaFacturacionAltaFact;
function NewPeticionFacturacionAlta: IXMLSistemaFacturacionAltaFact;

Y en el caso de la respuesta estas:

Código Delphi [-]
function GetRespuestaFacturacionAlta(Doc: IXMLDocument): IXMLRespuestaComunAltaType;
function LoadRespuestaFacturacionAlta(const FileName: string): IXMLRespuestaComunAltaType;
function NewRespuestaFacturacionAlta: IXMLRespuestaComunAltaType;

A partir de ahí para generar un XML nuevo, deberíamos empezar por NewPeticionFacturacionAlta y para cargar la respuesta obtenida deberíamos usar LoadRespuestaFacturacionAlta o GetRespuestaFacturacionAlta.

Adjunto los nuevos ficheros.
Buenos días.

Yo estaba utilizando el archivo wsdl, para generar los XML y he visto este post de nuestro compañero Neftali .
¿Qué utilizáis vosotros? los xsd o wsdl ?
Estuve en su momento mirando los xsd, pero no me salían las funciones que se utilizan para generar los xml y las descarté.

No se ve en el post, que opciones se puso apara que generara dichas funciones, ¿La sabéis?

Muchas Gracias.
Responder Con Cita
  #6  
Antiguo 02-02-2024
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por _Io Ver Mensaje
Yo estaba utilizando el archivo wsdl, para generar los XML y he visto este post de nuestro compañero Neftali .
¿Qué utilizáis vosotros? los xsd o wsdl ?
Estuve en su momento mirando los xsd, pero no me salían las funciones que se utilizan para generar los xml y las descarté.

No se ve en el post, que opciones se puso apara que generara dichas funciones, ¿La sabéis?

En las primeras pruebas estuvimos haciendo importaciones, como tú dices, con WSDL y los XSD.
Pero parece que la opción que "llega a buen puerto" es mediante WSDL.
Que además parece que cuadra más con lo que piden:
"El envío se realizará por vía telemática, concretamente mediante Servicios Web SOAP"
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 02-02-2024
_Io _Io is offline
Miembro
 
Registrado: ene 2024
Posts: 18
Poder: 0
_Io Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
En las primeras pruebas estuvimos haciendo importaciones, como tú dices, con WSDL y los XSD.
Pero parece que la opción que "llega a buen puerto" es mediante WSDL.
Que además parece que cuadra más con lo que piden:
"El envío se realizará por vía telemática, concretamente mediante Servicios Web SOAP"
Continuamos con WSDL

Muchas Gracias.
Responder Con Cita
  #8  
Antiguo 06-07-2023
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 112
Poder: 8
seccion_31 Va por buen camino
Buenos dias !

Os presento mi duda mas importante a la hora de generar el XML, usando el databinding, segun el esquema XSD que amablemente me envio Neftali.

Código Delphi [-]
procedure TForm2.Button5Click(Sender: TObject);
var
    alta: IXMLSistemaFacturacionAltaFact;
begin
      alta:=NewSistemaFacturacionAltaFact;
      alta.Cabecera.IDVersion:='1';
      alta.Cabecera.ObligadoEmision.NombreRazon:='Nombre de prueba';

      memo1.Lines.Text:=alta.XML;
end;

Hasta ahi sencillo, tengo el objeto XML de alta de factura, y me deja indicar la cabecera y todo lo que de ella pende.

Perfecto.

¿pero y el resto de nodos que tengo que añadir? ¿como lo hago? (tengo las definiciones en el .pas con los interfaces pero no se como usarlos mas alla de este pequeño codigo).

he tratado de mil maneras y no consigo añadirlos.

x favor, ¿alguien puede sacarme de esta duda?

Saludos cordiales.
Responder Con Cita
  #9  
Antiguo 06-07-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por seccion_31 Ver Mensaje
¿pero y el resto de nodos que tengo que añadir? ¿como lo hago? (tengo las definiciones en el .pas con los interfaces pero no se como usarlos mas alla de este pequeño codigo).
Con los últimos ficheros que te he subido, un código como este, genera y guarda un XML con datos:

Código Delphi [-]
...
uses
  SuministroInformacion;

procedure TForm3.Button1Click(Sender: TObject);
var
  IFact:IXMLSistemaFacturacionAltaFact;
begin
  IFact := NewPeticionFacturacionAlta;

  IFact.Cabecera.IDVersion := '1.0';

  IFAct.Cabecera.ObligadoEmision.NombreRazon := 'Pepe Lotas';
  IFAct.Cabecera.ObligadoEmision.NIF := '12345678N';
  IFAct.Cabecera.ObligadoEmision.NombreRazonRepresentante := 'Representante';


  ...



  IFact.OwnerDocument.SaveToFile('r:\fact1.xml')

end;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #10  
Antiguo 06-07-2023
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 112
Poder: 8
seccion_31 Va por buen camino
gracias x la respuesta tan rapida.

las funciones las tenia, como se ve en el pequeño ejemplo de codigo que publique. hasta ahi perfecto.

Y como digo, puedo como bien indicas acceder al objeto cabecera, y todos sus descendientes:

Código Delphi [-]
  IFAct.Cabecera.ObligadoEmision.NombreRazon := 'Pepe Lotas';
  IFAct.Cabecera.ObligadoEmision.NIF := '12345678N';
  IFAct.Cabecera.ObligadoEmision.NombreRazonRepresentante := 'Representante';

Pero sigo sin entender, como creo un objeto nuevo, con digamos:

PeriodoLiquidacion

ó

RegistroFacturacion

Para seguir con la generacion del XML


Es decir algo asi:

Código Delphi [-]
IFAct.PeriodoLiquidacion.ejercicio:='2023';

Eso es lo que no se hacer.

Saludos cordiales
Responder Con Cita
  #11  
Antiguo 06-07-2023
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 112
Poder: 8
seccion_31 Va por buen camino
He creado este codigo que genera un archivo XML, calcado al del ejemplo de ermendalenda:

Es un codigo muy basico, pero quizas a alguien le ayude, ahora voy a mirar como calcular la huella, que creo ha sido tratado en este foro.

(no lo formateo porque lo altera para mal)

Código Delphi [-]type TSistemaInformatico=record nombreRazon:string; NIF:string; IdsistemaInformatico:string; version:string; numeroInstalacion:string; TipoUsoSistema:string; end; TEncadenamiento=record IdEmisorFacturaAnterior:string; NumSerieFacturaAnterior:string; FechaExpedicionFacturaAnterior:Tdatetime; HuellaFacturaAnterior:string; end; TPeriodoliquidacion=record ejercicio:string; periodo:string; end; TIDFactura=record IdEmisor_nif:string; NumSerieFacturaEmisor:string; FechaExpedicionFacturaEmisor:Tdatetime; end; TDesglose=record claveRegimen:string; CalificacionOperacion:string; TipoImpositivo:real; BaseImponibleOImporteNoSujeto:real; CuotaRepercutida:real; end; TRegistroFactura=record PeriodoLiquidacion:TPeriodoliquidacion; IDFactura:TIDFactura; tipoFactura:string; FechaOperacion:Tdatetime; DescripcionOperacion:String; Desglose:array of TDesglose; ImporteTotal:real; EncadenamientoFacturaAnterior:TEncadenamiento; SistemaInformatico:TSistemaInformatico; end;



procedimientos:


Código:
function moneda(n:real):string;
begin
      FormatSettings.DecimalSeparator := '.';
      result:=trim(Format('%8.2f',[n]));
end;

function nodo(clave, valor:string):string;
begin
      result:='<'+clave+'>'+valor+'</'+clave+'>';
end;

procedure cabecera(xmlLista:TStringList; idVersion:string; NombreRazon, Nif:string);
begin
       if idVersion='' then idVersion:='0.1';

       xmlLista.add('<?xml version="1.0" encoding="UTF-8"?>');
       xmlLista.add('<SistemaFacturacionAltaFact xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd">');
       xmlLista.add('<Cabecera>');
       xmlLista.add(nodo('IDVersion',idVersion));
       xmlLista.add('<ObligadoEmision>');
       xmlLista.add(nodo('NombreRazon',NombreRazon));
       xmlLista.add(nodo('NIF',Nif));
       xmlLista.add('</ObligadoEmision>');
       xmlLista.add('</Cabecera>');
end;

procedure iniciaRegistroAltaFacturas(xmlLista:TStringList);
begin
      xmlLista.add('<RegistroAltaFacturas>');
end;

function moneda(n:real):string;
begin
      FormatSettings.DecimalSeparator := '.';
      result:=trim(Format('%8.2f',[n]));
end;


procedure registroFacturacion(xmlLista:TStringList; registroFactura:TRegistroFactura);
var
  I:integer;
begin
      xmlLista.add('<RegistroFacturacion>');

      xmlLista.add('<PeriodoLiquidacion>');
      xmlLista.add(nodo('Ejercicio',registroFactura.PeriodoLiquidacion.ejercicio) );
      xmlLista.add(nodo('Periodo',registroFactura.PeriodoLiquidacion.periodo));
      xmlLista.add('</PeriodoLiquidacion>');

      xmlLista.add('<IdFactura>');
      xmlLista.add('<IdEmisorFactura>');
      xmlLista.add(nodo('NIF',registroFactura.IDFactura.IdEmisor_nif));
      xmlLista.add('</IdEmisorFactura>');

      xmlLista.add(nodo('NumSerieFacturaEmisor',registroFactura.IDFactura.NumSerieFacturaEmisor ));
      xmlLista.add(nodo('FechaExpedicionFacturaEmisor',datetostr(registroFactura.IDFactura.FechaExpedicionFacturaEmisor) ));
      xmlLista.add('</IdFactura>');

      xmlLista.add(nodo('TipoFactura',registroFactura.tipoFactura));
      xmlLista.add(nodo('FechaOperacion',datetostr(registroFactura.FechaOperacion)));
      xmlLista.add(nodo('DescripcionOperacion',registroFactura.DescripcionOperacion));

      // array de desgloses
      xmlLista.add('<Desglose>');
      for I := Low(registroFactura.Desglose) to High(registroFactura.Desglose) do
      begin
                xmlLista.add('<DetalleDesglose>');

                xmlLista.add(nodo('ClaveRegimen',registroFactura.Desglose[i].claveRegimen ));
                xmlLista.add(nodo('CalificacionOperacion',registroFactura.Desglose[i].CalificacionOperacion ));
                xmlLista.add(nodo('TipoImpositivo',moneda(registroFactura.Desglose[i].TipoImpositivo)));
                xmlLista.add(nodo('BaseImponibleOimporteNoSujeto',moneda(registroFactura.Desglose[i].BaseImponibleOImporteNoSujeto)));
                xmlLista.add(nodo('CuotaRepercutida',moneda(registroFactura.Desglose[i].CuotaRepercutida)));

                xmlLista.add('</DetalleDesglose>');
      end;
      xmlLista.add('</Desglose>');

      xmlLista.add(nodo('ImporteTotal',moneda(registroFactura.ImporteTotal)));

      xmlLista.add('<EncadenamientoFacturaAnterior>');
      xmlLista.add(nodo('IDEmisorFacturaAnterior',registroFactura.EncadenamientoFacturaAnterior.IdEmisorFacturaAnterior));
      xmlLista.add(nodo('NumSerieFacturaAnterior',registroFactura.EncadenamientoFacturaAnterior.NumSerieFacturaAnterior));
      xmlLista.add(nodo('FechaExpedicionFacturaAnterior',datetostr(registroFactura.EncadenamientoFacturaAnterior.FechaExpedicionFacturaAnterior)));
      xmlLista.add(nodo('HuellaFacturaAnterior',registroFactura.EncadenamientoFacturaAnterior.HuellaFacturaAnterior));
      xmlLista.add('</EncadenamientoFacturaAnterior>');


      xmlLista.add('<SistemaInformatico>');
      xmlLista.add(nodo('NombreRazon',registroFactura.SistemaInformatico.nombreRazon ));
      xmlLista.add(nodo('NIF', registroFactura.SistemaInformatico.NIF ) );
      xmlLista.add(nodo('IdSistemaInformatico', registroFactura.SistemaInformatico.IdsistemaInformatico ) );
      xmlLista.add(nodo('Version',registroFactura.SistemaInformatico.version));
      xmlLista.add(nodo('NumeroInstalacion',registroFactura.SistemaInformatico.numeroInstalacion));
      xmlLista.add(nodo('TipoUsoSistema',registroFactura.SistemaInformatico.TipoUsoSistema));
      xmlLista.add('</SistemaInformatico>');
      xmlLista.add('</RegistroFacturacion>');
end;


function finalizaRegistroAltaFacturas(xmlLista:TStringList):string;
var
  _huella:string;
begin
      // calculo de la huella: (por hacer)
      _huella:='005948F5A441A56ABF584804036409719AB89892608FD708BAB8AE5088C896AD';
      result:=_huella;
      //


      xmlLista.add('<DatosControl>');
      xmlLista.add(nodo('Huella',_huella) );
      xmlLista.add(nodo('TipoHash','01') );
      xmlLista.add(nodo('FechaGenRegistro',dateTostr(date)) );
      xmlLista.add(nodo('HoraGenRegistro',timeTostr(time)) );
      xmlLista.add(nodo('HUsoHorarioGenRegistro','02') );
      xmlLista.add('</DatosControl>');

      xmlLista.add('</RegistroAltaFacturas>');
      xmlLista.add('</SistemaFacturacionAltaFact>');
end;


// datos de la factura "desde la base de datos:"

procedure anadeDatosFactura(var factura:TRegistroFactura);
begin
      factura.PeriodoLiquidacion.ejercicio:='2022';
      factura.PeriodoLiquidacion.periodo:='3T';
      factura.IDFactura.IdEmisor_nif:='00000006Y';
      factura.IDFactura.NumSerieFacturaEmisor:='84.2.1.2566';
      factura.IDFactura.FechaExpedicionFacturaEmisor:=strtodate('31/07/2022');
      factura.tipoFactura:='F2';
      factura.FechaOperacion:=factura.IDFactura.FechaExpedicionFacturaEmisor;
      factura.DescripcionOperacion:='VENTA MINORISTA';

      setLength(factura.Desglose,1);

      factura.Desglose[0].claveRegimen:='01';
      factura.Desglose[0].CalificacionOperacion:='S1';
      factura.Desglose[0].TipoImpositivo:=4;
      factura.Desglose[0].BaseImponibleOImporteNoSujeto:=1;
      factura.Desglose[0].CuotaRepercutida:=0.04;

      factura.ImporteTotal:=1.04;

      // encadenamiento factura anterior
      factura.EncadenamientoFacturaAnterior.IdEmisorFacturaAnterior:='00000006Y';
      factura.EncadenamientoFacturaAnterior.NumSerieFacturaAnterior:='84.2.1.2565';
      factura.EncadenamientoFacturaAnterior.FechaExpedicionFacturaAnterior:=strTodate('31/07/2022');
      factura.EncadenamientoFacturaAnterior.HuellaFacturaAnterior:='9yYI6U89U3IUIQE345EUGWEBsd7EKFCBP9trtYUJSD0JFFKJKrtthAuysfadfWPE';

      // sistema informatico
      factura.SistemaInformatico.nombreRazon:='SISTEMAS INFORMATICOS TPV';
      factura.SistemaInformatico.NIF:='00000006Y';
      factura.SistemaInformatico.IdsistemaInformatico:='IDENTIFICADOR AEAT XXXX';
      factura.SistemaInformatico.version:='46.243.1';
      factura.SistemaInformatico.numeroInstalacion:='45';
      factura.SistemaInformatico.TipoUsoSistema:='01';
end;
// Click que genera el archivo XML

Código:
procedure TForm2.Button6Click(Sender: TObject);
var
  xml:TStringList;
  factura:TRegistroFactura;
begin
    xml:=TStringList.Create;

    cabecera(xml, '0.1', 'EMPRESA DE PRUEBA, S.A.','00000006Y');    

    iniciaRegistroAltaFacturas(xml);    <-- inicia la carga de facturas

    // por cada factura:
    
    anadeDatosFactura(factura);  // <-- carga de datos de la factura desde la "BD"
    registroFacturacion(xml, factura);    <-- carga la factura en el XML


    // final    
    finalizaRegistroAltaFacturas(xml);

    xml.SaveToFile('c:\final.xml');
    xml.Free;
end;

Última edición por Neftali [Germán.Estévez] fecha: 10-07-2023 a las 08:25:18. Razón: el codigo lo paso con errores al formatear
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Hijo de Informáticos gluglu Humor 3 13-03-2007 11:05:35
Adictos informaticos ... Trigger Humor 2 11-10-2004 12:18:32
Nosotros los Informáticos Trigger Humor 1 10-10-2004 14:58:09
Patrón de los Informáticos. obiwuan Varios 20 10-09-2003 14:44:54
Chistes Informaticos jhonny Humor 2 11-08-2003 21:59:09


La franja horaria es GMT +2. Ahora son las 18:28:18.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi