Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Proyecto SIF/Veri*Factu/Ley Antifraude > General/Noticias
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-07-2025
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 662
Poder: 18
espinete Va camino a la fama
Guardar RF como XML

Buenas...

Estoy convirtiendo mi actual código, que realiza los envíos sobre la marcha a medida que se generan las facturas, para cumplir con la normativa de la AEAT, es decir, el dichoso envío por bloques, con tiempos de espera, etc.
Ya lo tengo implementado en el software en la nube, pero no en Delphi.

El problema que tengo es que no consigo guardar el RF como XML, ya que me hará falta más tarde cuando haga el envío.

1. Es decir, el software genera el RF, el QR, etc. y marca la factura como "pendiente de enviar"
2. Luego otra aplicación o servicio que está siempre abierta, comprueba las facturas pendientes, crea el bloque (con las que estén listas) y realiza el envío.

Mi duda es cómo rellenar el bloque desde la APP2, ya que no encuentro la forma de guardar el RF como XML en la APP1 ara luego "incrustarlo" en la lista de facturas del XML a enviar a Hacienda.

He visto algunos ejemplos pero me parecen un poco liosos, y el XML que obtengo no coincide con el que yo genero al enviar.

¿Cómo lo habéis hecho vosotros?

Sé que "simulando el envío" en el evento OnBeforeExecute del componente HTTPRIO puedo guardar el XML de salida, pero no sé si es la mejor opción o si hay otra manera.

Con TicketBAI el objeto SOAP tiene opción para exportar a XML con un simple Factura.XML
Responder Con Cita
  #2  
Antiguo 07-07-2025
xamminf xamminf is offline
Miembro
 
Registrado: ene 2017
Posts: 216
Poder: 10
xamminf Va por buen camino
Hola,

Algo colateral.
Me pareciera dices de crear el xml en el envio.
Que yo sepa el xml individual se ha de crear "estatutariamente" en el momento de crear el rf

Realmente no sé si te referiste al xml grande o al chico
Responder Con Cita
  #3  
Antiguo 08-07-2025
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.435
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 espinete Ver Mensaje
El problema que tengo es que no consigo guardar el RF como XML, ya que me hará falta más tarde cuando haga el envío.

1. Es decir, el software genera el RF, el QR, etc. y marca la factura como "pendiente de enviar"
2. Luego otra aplicación o servicio que está siempre abierta, comprueba las facturas pendientes, crea el bloque (con las que estén listas) y realiza el envío.

...

¿Cómo lo habéis hecho vosotros?

Sé que "simulando el envío" en el evento OnBeforeExecute del componente HTTPRIO puedo guardar el XML de salida, pero no sé si es la mejor opción o si hay otra manera.
Ya se ha comentado otras veces.
Según la documentación y para evitar problemas posteriores (sobre todo con fechas y horas) el RF se debe generar en el mismo momento de emitir la factura.
Lo más sencillo es, como has dicho, en el OneforeExecure.

En el ejemplo de [seccion_31] tienes el código sencillo que lo hace. Captura el evento con el siguinte procedimiento:
https://www.clubdelphi.com/foros/showthread.php?t=97004
Código Delphi [-]
procedure TEventosHttpPrio.BeforeExecute(const MethodName: string; SOAPRequest: TStream);
var
      ss  :TFileStream;
      sTmp:TStringList;
      CertStream: TMemoryStream;
      sesion:integer;
begin
      if fileNameBefore<>'' then
      begin
          sTmp := TStringList.Create;
          sTMP.SaveToStream(SOAPRequest);
          try
              SOAPRequest.Position := 0;
              sTmp.LoadFromStream(SOAPRequest);
              sTmp.text:=FormatXMLData(sTMP.Text);
              sTmp.SaveToFile(fileNameBefore);

          finally
              FreeAndNil(sTmp);
          end;
      end;

      if simular then abort;
end;

Una vez los tienes todos almacenados.
LA APP2 sólo tienes que recogerlos, montar el paquete y enviarlo.

NOTA: En el código lo guarda a fichero, nosotros en nuestroi caso lo enviamos a B.D. también.
__________________
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
  #4  
Antiguo 08-07-2025
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 662
Poder: 18
espinete Va camino a la fama
Lo siento, a veces me explico peor que la AEAT...

En efecto, el RF lo creo al emitir la factura, para poder obtener el QR e imprimirlo.

La otra APP2 solo hace los envíos (el XML "grande" que incluye una o 1000 facturas).

Mi duda es como guardar (la parte del XML de <RegistroFactura>) en la app1 para luego armar el nuevo XML del envío con todos esos RF.

Anteriormente hacia el envío en el momento de crear el RF, QR, etc (es decir, envío inmediato). Pero como hay que hacerle caso a Hacienda...

En el software en la nube no pasa nada porque el XML lo creo "a pelo", pero aquí no.
Responder Con Cita
  #5  
Antiguo 08-07-2025
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.435
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
Perdona, creo que soy yo el que no te había entendido.
Revisa el mensaje #2, donde hay referencias a varios códigos e hilos donde muestra cómo generar el XML de la factura.
https://www.clubdelphi.com/foros/sho...92&postcount=2
__________________
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
  #6  
Antiguo 08-07-2025
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 662
Poder: 18
espinete Va camino a la fama
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Perdona, creo que soy yo el que no te había entendido.
Revisa el mensaje #2, donde hay referencias a varios códigos e hilos donde muestra cómo generar el XML de la factura.
https://www.clubdelphi.com/foros/sho...92&postcount=2
Gracias. He probado el código y efectivamente me genera el XML del RF que estoy creando, pero me añade un nodo que no debería ir:

<?xml version="1.0"?>
<RegistroAlta>
<RegistroFacturacionType>
<IDVersion>1.0</IDVersion>
<IDFactura>

Y además añade ese <?xml version="1.0"?> al principio, aunque eso es lo de menos porque puedo quitarlo a mano.

Supongo que también debo quitar a mano el <RegistroFacturacionType> y </RegistroFacturacionType> para dejarlo limpio?

Ahora que tengo la parte del XML correspondiente al RF (uno o varios), habría que crear el XML del envío, con el "bloque" de RF a enviar.

¿Hay algún ejemplo para extraer todos los XML de los RF a enviar al crear el XML del envío?

Yo lo tengo más o menos así:

Código:
            veriFactu:=RegFactuSistemaFacturacion.Create;

            veriFactu.Cabecera   := cabeceratype.Create;
            veriFactu.Cabecera.ObligadoEmision := PersonaFisicaJuridicaESType.Create;
            veriFactu.Cabecera.ObligadoEmision.NombreRazon := VeriFactuForm.Edit7.Text;
            veriFactu.Cabecera.ObligadoEmision.NIF  := VeriFactuForm.Edit8.Text;
            veriFactu.Cabecera.RemisionVoluntaria := RemisionVoluntaria.Create;
            veriFactu.Cabecera.RemisionVoluntaria.Incidencia := IncidenciaType(1);  //0=S / 1=N

            setLength(listaFacturas,Query.RecordCount);

            j:=0;
            while not (Query.Eof) do
            begin
                mov:=Query.FieldByName('TIPO').AsString;
                fac:=Query.FieldByName('NUM').AsString;
                ser:=Query.FieldByName('SER').AsString;

                //Añadiendo Fac. al bloque...

                FacturaEnvio := obtenerXMLdelRF();
                listaFacturas[ j]:= FacturaEnvio;

                Query.next;
                inc(j);
            end;

            veriFactu.RegistroFactura:= listaFacturas;

            if length(listaFacturas)>0 then
                enviarbloque(verifactu);
La verdad es que no esperaba encontrarme con este inconveniente de tener que tratar con los XML. Yo era super feliz generando y enviando los XML sobre la marcha
Responder Con Cita
  #7  
Antiguo 09-07-2025
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 662
Poder: 18
espinete Va camino a la fama
Ok, he estado haciendo pruebas para convertir ahora de XML al objeto adecuado y tengo esta función:

Código:
function CargarRegistroAltaDesdeXML(const XMLText: string): RegistroFacturaType;
var
  XMLDoc: IXMLDocument;
  RootNode: IXMLNode;
  SOAPConv: TOPToSoapDomConvert;
  Resultado: RegistroFacturaType;
begin
  XMLDoc := TXMLDocument.Create(nil);
  try
    XMLDoc.LoadFromXML(XMLText);
    XMLDoc.Active := True;

    RootNode := XMLDoc.DocumentElement;

    SOAPConv := TOPToSoapDomConvert.Create(nil);
    try
      SOAPConv.Encoding := 'utf-8';
      SOAPConv.Options := [
        TSOAPConvertOption.soDontSendEmptyNodes,
        TSOAPConvertOption.soSendUntyped,
        TSOAPConvertOption.soTryAllSchema,
        TSOAPConvertOption.soUTF8EncodeXML
      ];

      Resultado := RegistroFacturaType.Create;
      Resultado.SOAPToObject(RootNode, RootNode, SOAPConv);

      Result := Resultado;

    finally
      SOAPConv.Free;
    end;

  finally
    XMLDoc := nil;
  end;
end;
Me estoy liando un poco con el objeto que debo usar: RegistroFacturaType, RegistroFacturacionAltaType... pero creo que con calma lo conseguiré.

Si alguien puede echarme un cable se lo agradecería, porque no sé si voy por buen camino o no. Nunca he usado los conversores estos Soap <-> XML
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
Guardar y Leer fotos directamente a una base de datos sin antes guardar como archivo rmeckbell Desarrollo en Delphi para Android 6 26-06-2017 18:24:20
como guardar en postgresql (como trabaja el datamodule) mematanlimon Lazarus, FreePascal, Kylix, etc. 0 15-02-2010 19:06:12
Como guardar .JPG como Bitmap en Base de Datos Javi2 Gráficos 4 25-03-2007 17:21:57
¿Cómo guardar el Valor de TColor como un String? nesetru Gráficos 3 27-02-2004 20:21:32


La franja horaria es GMT +2. Ahora son las 21:07:39.


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