![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
|
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 |
|
#2
|
|||
|
|||
|
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 ![]() |
|
#3
|
||||
|
||||
|
Cita:
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
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. |
|
#4
|
|||
|
|||
|
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. |
|
#5
|
||||
|
||||
|
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. |
|
#6
|
|||
|
|||
|
Cita:
<?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);
![]() |
|
#7
|
|||
|
|||
|
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;
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 |
![]() |
|
|
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 |
|