Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-01-2022
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 671
Poder: 18
espinete Va camino a la fama
Cita:
Empezado por keys Ver Mensaje
Lo del iva con una factura a cero me paso a mi lo mismo y me han contestado esto de hacienda.
Hola, keys...

Yo me refiero a una factura que sí tiene importe, pero tiene artículos con varios IVAs (entre ellos, un IVA = 0).
Es decir, la factura sí tiene importe, y varias bases imponibles (una para cada tipo de IVA).

Mi duda es si, en el desglose del IVA, debo añadir también uno para el IVA 0 o solo se añaden los demás.

Por lógica, yo no añadiría el IVA 0 al desglose del IVA, pero como mucha lógica no hay en todo esto, pues no sé. De todas formas haré varias pruebas y si sigo con dudas les preguntaré a ellos.

Gracias
Responder Con Cita
  #2  
Antiguo 19-01-2022
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.238
Poder: 25
keys Va por buen camino
Cita:
Empezado por espinete Ver Mensaje
Hola, keys...

Yo me refiero a una factura que sí tiene importe, pero tiene artículos con varios IVAs (entre ellos, un IVA = 0).
Es decir, la factura sí tiene importe, y varias bases imponibles (una para cada tipo de IVA).

Mi duda es si, en el desglose del IVA, debo añadir también uno para el IVA 0 o solo se añaden los demás.

Por lógica, yo no añadiría el IVA 0 al desglose del IVA, pero como mucha lógica no hay en todo esto, pues no sé. De todas formas haré varias pruebas y si sigo con dudas les preguntaré a ellos.

Gracias
Si tiene iva a cero pero importe, tienes que añadir algun tipo de iva de los exentos.
Responder Con Cita
  #3  
Antiguo 19-01-2022
Ivan_Teleco Ivan_Teleco is offline
Registrado
 
Registrado: jul 2021
Posts: 7
Poder: 0
Ivan_Teleco Va por buen camino
Ayuda Con Enviar Xml

Hola buenas, antes de nada gracias por todo el codigo que la gente comparte.
Estoy usando un php para realizar el envio, y cuando introducco los certificados PEM siempre me responde con nada, si no los pongo al menos me dice que no introduje los certificado, pero almenos responde, alguien sabe donde puede estar el problema??

Los certificados PEM los he sacado con OPENSSL
openssl pkcs12 -in C:\Users\IndaG\Desktop\TBAI_PRUEBAS\PFX.pfx -out C:\Users\IndaG\Desktop\TBAI_PRUEBAS\ca.pem -cacerts -nokeys
openssl pkcs12 -in C:\Users\IndaG\Desktop\TBAI_PRUEBAS\PFX.pfx -out C:\Users\IndaG\Desktop\TBAI_PRUEBAS\client.pem -clcerts -nokeys
openssl pkcs12 -in C:\Users\IndaG\Desktop\TBAI_PRUEBAS\PFX.pfx -out C:\Users\IndaG\Desktop\TBAI_PRUEBAS\key.pem -nocerts

Código PHP:
 <?php

       $xmlStr 
file_get_contents('.\firmado.xml');
               
        
$ch curl_init('URL');
        
curl_setopt($chCURLOPT_POST1);
        
curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
curl_setopt($chCURLOPT_SSLCERT,'/client.pem');
        
curl_setopt($chCURLOPT_SSLKEY,'/key.pem');
        
curl_setopt($chCURLOPT_CAINFO,'/ca.pem');
        
curl_setopt($chCURLOPT_SSLKEYPASSWD"INDAVE");
        
curl_setopt($chCURLOPT_SSL_VERIFYPEER1);
        
curl_setopt($chCURLOPT_POSTFIELDS$xmlStr);
        
curl_setopt($chCURLOPT_HTTPHEADER, array('Content-Type: application/xml; charset=utf-8')); 


        
$resp curl_exec($ch); 
        
$size_response curl_getinfo($chCURLINFO_HEADER_SIZE);
        echo
$size_response;
         
$header_response substr($resp0$size_response);
         
$body_response substr($resp$size_response);
        echo 
$body_response;
       
//echo $resp;

       
curl_close($ch);

Última edición por Neftali [Germán.Estévez] fecha: 19-01-2022 a las 13:25:37. Razón: Añadir TAGs al código
Responder Con Cita
  #4  
Antiguo 24-01-2022
Avatar de HerensugeBeltz
HerensugeBeltz HerensugeBeltz is offline
Miembro
 
Registrado: may 2021
Ubicación: Hondarribia
Posts: 90
Poder: 6
HerensugeBeltz Va por buen camino
Nuevo BOG con información relativa a Zuzenduz

La presente orden foral regula los requisitos del servicio de recepción, el procedimiento y las especificaciones técnicas y funcionales de los ficheros que pretenden corregir los ficheros TicketBAI que han sido rechazados.

https://egoitza.gipuzkoa.eus/gao-bog...4/c2200304.pdf
Responder Con Cita
  #5  
Antiguo 24-01-2022
misteradrian misteradrian is offline
Miembro
 
Registrado: sep 2021
Posts: 33
Poder: 0
misteradrian Va por buen camino
Hola buenas a todos,
Tenía una duda acerca de qué valor de la firma del xml debería de poner en el envío de facturas. Si el de la factura anulada o la de la anteriormente enviada.
Os dejo las respuestas que me han dejado de las diputaciones.
Espero que os sirva a quienes se os haya planteado el mismo dilema.
Un saludo.
  • Primero envías la factura F1
  • Luego anulas la factura F1
  • Posteriormente envías la factura F2
  • Esta factura tiene que estar encadenada con la última factura enviada, aunque esté anulada.
  • Es decir, no hay que encadenar con la petición de la anulación, si no que la tienes que encadenar con la F1. En el encadenamiento debes poner los 100 caracteres de la firma de la factura F1 y NO los 100 caracteres de la anulación de la F1.
Responder Con Cita
  #6  
Antiguo 24-01-2022
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.238
Poder: 25
keys Va por buen camino
Cita:
Empezado por misteradrian Ver Mensaje
Hola buenas a todos,
Tenía una duda acerca de qué valor de la firma del xml debería de poner en el envío de facturas. Si el de la factura anulada o la de la anteriormente enviada.
Os dejo las respuestas que me han dejado de las diputaciones.
Espero que os sirva a quienes se os haya planteado el mismo dilema.
Un saludo.
  • Primero envías la factura F1
  • Luego anulas la factura F1
  • Posteriormente envías la factura F2
  • Esta factura tiene que estar encadenada con la última factura enviada, aunque esté anulada.
  • Es decir, no hay que encadenar con la petición de la anulación, si no que la tienes que encadenar con la F1. En el encadenamiento debes poner los 100 caracteres de la firma de la factura F1 y NO los 100 caracteres de la anulación de la F1.
Las anulaciones no cuentan para el encadenamiento de las facturas. Tu factura F2 tiene que apuntar a la F1 siempre.
Responder Con Cita
  #7  
Antiguo 24-01-2022
elguille elguille is offline
Miembro
 
Registrado: ene 2005
Posts: 130
Poder: 22
elguille Va por buen camino
El interesado no está identificado

Hola, siguiendo vuestros ejemplos, estoy intentando enviar un 240 a Vizcaya y recibo

response status code: 200
RESP.BODY:

RESP.HEADER:
Date: Mon, 24 Jan 2022 16:51:58 GMT
Server: JBoss-EAP/7
eus-bizkaia-n3-identificativo: 5506744
X-Powered-By: Undertow/1
eus-bizkaia-n3-mensaje-respuesta: El interesado no está identificado.
eus-bizkaia-n3-codigo-respuesta: N3_0000002
eus-bizkaia-n3-numero-registro:
eus-bizkaia-n3-tipo-respuesta: Incorrecto
Content-Type: text/html; charset=UTF-8
Content-Length: 0

Y no hay manera de avanzar, entiendo que es algun problema de firma pero lo he intentado con dos firmas diferentes de la FNMT (de representante) y que segun he leido no tienen ningun problema para entrar en los expedientes de https://www.ebizkaia.eus/es/mis-expedientes

El codigo delphi , lo he hecho con las chilkat, pero recibo el mismo error con NetHTTPClient

Código Delphi [-]
procedure TForm1.enviovizcaya(Sender: TObject);
var
  glob: HCkGlobal;
  success: Boolean;
  xmlToSign: HCkXml;
  gen: HCkXmlDSigGen;
  object1: HCkXml;
  Cert: HCkCert;
  sbXml: HCkStringBuilder;
  verifier: HCkXmlDSig;
  numSigs: integer;
  verifyIdx: integer;
  verified: Boolean;
  Http: HCkHttp;
  json: HCkJsonObject;
  url: PWideChar;
  bGzip: Boolean;
  resp: HCkHttpResponse;
  status, ik1: integer;
  nombre_archivo: string;
  mid, mser, mnum, mim, mcrc: string;
  RequestBody: TFileStream;
  AResponse: IHTTPResponse;
  sb1: HCkStringBuilder;
  sb2: HCkStringBuilder;
  Xml: HCkXml;
  tspen: TStringlist;
  mcon: integer;
  Comprimido: TFileStream;
  s: TStringlist;
  m: tmemorystream;
begin
begin
  Memo1.clear;
  glob := CkGlobal_Create();
  success := CkGlobal_UnlockBundle(glob, 'xxxxxxxxxxxxxxxxxx');
  if (success <> True) then
  begin
    Memo1.Lines.Add(CkGlobal__lastErrorText(glob));
    Exit;
  end;
  status := CkGlobal_getUnlockStatus(glob);
  if (status = 2) then
  begin
    Memo1.Lines.Add('Unlocked using purchased unlock code.');
  end
  else
  begin
    Memo1.Lines.Add('Unlocked in trial mode.');
  end;

  Memo1.Lines.Add('');
  success := True;

  Xml := CkXml_Create();

  if mmodelo = '140' then
  begin
    CkXml_putTag(Xml, 'lrpficfcsgap:LROEPF140IngresosConFacturaConSGAltaPeticion');
    CkXml_AddAttribute(Xml, 'xmlns:lrpficfcsgap',
      'https://www.batuz.eus/fitxategiak/batuz/LROE/esquemas/LROE_PF_140_1_1_Ingresos_ConfacturaConSG_AltaPeticion_V1_0_2.xsd');
  end
  else
  begin
    CkXml_putTag(Xml, 'lrpficfcsgap:LROEPJ240FacturasEmitidasConSGAltaPeticion');
    CkXml_AddAttribute(Xml, 'xmlns:lrpficfcsgap',
      'https://www.batuz.eus/fitxategiak/batuz/LROE/esquemas/LROE_PJ_240_1_1_FacturasEmitidas_ConSG_AltaPeticion_V1_0_2.xsd');
  end;
  CkXml_UpdateChildContent(Xml, 'Cabecera|Modelo', pchar(mmodelo));
  CkXml_UpdateChildContent(Xml, 'Cabecera|Capitulo', '1');
  CkXml_UpdateChildContent(Xml, 'Cabecera|Subcapitulo', '1.1');
  CkXml_UpdateChildContent(Xml, 'Cabecera|Operacion', 'A00');
  CkXml_UpdateChildContent(Xml, 'Cabecera|Version', '1.0');
  CkXml_UpdateChildContent(Xml, 'Cabecera|Ejercicio', pchar(mperi));
  CkXml_UpdateChildContent(Xml, 'Cabecera|ObligadoTributario|NIF', pchar(TRIM(ts[1])));
  CkXml_UpdateChildContent(Xml, 'Cabecera|ObligadoTributario|ApellidosNombreRazonSocial', pchar(TRIM(ts[2])));
  if mmodelo = '140' then
  begin
    CkXml_UpdateChildContent(Xml, 'Ingresos|Ingreso|TicketBai', CkStringBuilder__getEncoded(sb1, 'base64', 'utf-8'));
    CkXml_UpdateChildContent(Xml, 'Ingresos|Ingreso|Renta|DetalleRenta|Epigrafe', '197330');
    CkXml_UpdateChildContent(Xml, 'Ingresos|Ingreso[1]|TicketBai', CkStringBuilder__getEncoded(sb2, 'base64', 'utf-8'));
    CkXml_UpdateChildContent(Xml, 'Ingresos|Ingreso[1]|Renta|DetalleRenta|Epigrafe', '197330');
    CkXml_UpdateChildContent(Xml, 'Ingresos|Ingreso[1]|Renta|DetalleRenta|IngresoAComputarIRPFDiferenteBaseImpoIVA', 'S');
    CkXml_UpdateChildContent(Xml, 'Ingresos|Ingreso[1]|Renta|DetalleRenta|ImporteIngresoIRPF', '400.00');
  end
  else
  begin
    // CkXml_UpdateChildContent(Xml, 'FacturasEmitidas|FacturaEmitida|TicketBai', CkStringBuilder__getEncoded(sb1, 'base64', 'utf-8'));
    // CkXml_UpdateChildContent(Xml, 'FacturasEmitidas|FacturaEmitida|Renta|DetalleRenta|Epigrafe', '197330');
    sb1 := CkStringBuilder_Create();
    tspen := TStringlist.Create;
    tspen.loadfromfile(ExtractFilepath(paramstr(0)) + 'pendiente.TXT');
    for mcon := 1 TO tspen.Count DO
    BEGIN
      success := CkStringBuilder_LoadFile(sb1, pchar(tspen[mcon - 1]), 'utf-8');
      CkXml_UpdateChildContent(Xml, pchar('FacturasEmitidas|FacturaEmitida[' + IntToStr(mcon) + ']|TicketBai'),
        CkStringBuilder__getEncoded(sb1, 'base64', 'utf-8'));
      // CkXml_UpdateChildContent(Xml, 'FacturasEmitidas|FacturaEmitida['+inttostr(mcon)+']|Renta|DetalleRenta|Epigrafe', '197330');
      // CkXml_UpdateChildContent(Xml, 'FacturasEmitidas|FacturaEmitida['+inttostr(mcon)+']|Renta|DetalleRenta|IngresoAComputarIRPFDiferenteBaseImpoIVA', 'S');
      // CkXml_UpdateChildContent(Xml, 'FacturasEmitidas|FacturaEmitida['+inttostr(mcon)+']|Renta|DetalleRenta|ImporteIngresoIRPF', '400.00');
    END;
  end;

  // Memo1.Lines.Add(CkXml__getXml(xml));

  success := CkXml_SaveXml(Xml, pchar(ExtractFilepath(paramstr(0)) + 'ticketBAI_invoice.xml'));

  CkStringBuilder_Dispose(sb1);
  CkStringBuilder_Dispose(sb2);
  CkXml_Dispose(Xml);

  Http := CkHttp_Create();

  success := CkHttp_SetSslClientCertPfx(Http, pchar(ExtractFilepath(paramstr(0)) + tsconf[0]), pchar(tsconf[1]));
  if (success = FALSE) then
  begin
    Memo1.Lines.Add(CkHttp__lastErrorText(Http));
    Memo1.Lines.SaveToFile(ExtractFilepath(paramstr(0)) + 'LOG.TXT');
    Exit;
  end;

  sbXml := CkStringBuilder_Create();
  success := CkStringBuilder_LoadFile(sbXml, pchar(ExtractFilepath(paramstr(0)) + 'ticketBAI_invoice.xml'), 'utf-8');

  if (success = FALSE) then
  begin
    Memo1.Lines.Add('Failed to load XML that is to be the HTTP request body');
    Memo1.Lines.SaveToFile(ExtractFilepath(paramstr(0)) + 'LOG.TXT');
    Exit;
  end;

  json := CkJsonObject_Create();

  // Add required headers...
  CkJsonObject_UpdateString(json, 'con', 'LROE');
  CkJsonObject_UpdateString(json, 'apa', '1.1');
  CkJsonObject_UpdateString(json, 'inte.nif', pchar(TRIM(ts[1])));
  CkJsonObject_UpdateString(json, 'inte.nrs', pchar(TRIM(ts[2])));
  CkJsonObject_UpdateString(json, 'drs.mode', pchar(mmodelo));
  CkJsonObject_UpdateString(json, 'drs.ejer', pchar(mperi));

  CkHttp_SetRequestHeader(Http, 'eus-bizkaia-n3-version', '1.0');
  CkHttp_SetRequestHeader(Http, 'eus-bizkaia-n3-content-type', 'application/xml');
  CkHttp_SetRequestHeader(Http, 'eus-bizkaia-n3-data', CkJsonObject__emit(json));
  // url := 'https://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena';
  bGzip := True;
  resp := CkHttp_PTextSb(Http, 'POST', pchar(mURLAlta), sbXml, 'utf-8', 'application/octet-stream', FALSE, bGzip);
  if (CkHttp_getLastMethodSuccess(Http) = FALSE) then
  begin
    Memo1.Lines.Add(CkHttp__lastErrorText(Http));
    Memo1.Lines.SaveToFile(ExtractFilepath(paramstr(0)) + 'LOG.TXT');
    Exit;
  end;
  CkHttp_ClearHeaders(Http);

  Memo1.Lines.Add('response status code: ' + IntToStr(CkHttpResponse_getStatusCode(resp)));

  // Examine the response (it is already decompressed)
  Memo1.Lines.Add('RESP.BODY:' + CHR(13) + CHR(10) + CkHttpResponse__bodyStr(resp));
  Memo1.Lines.Add('RESP.HEADER:' + CHR(13) + CHR(10) + CkHttpResponse__header(resp));

  Memo1.Lines.SaveToFile(ExtractFilepath(paramstr(0)) + 'LOG.TXT');
//lo siguente funciona pero obtenemos el mismo error
{  comprimir(ExtractFilepath(paramstr(0)) + 'ticketBAI_invoice.xml', 'archivo.gz');
  // RequestBody := TFileStream.Create('archivo.gz', fmOpenRead);
  NetHTTPClient1.SecureProtocols := [THTTPSecureProtocol.TLS12];
  NetHTTPClient1.CustomHeaders['Accept-Encoding'] := 'gzip';
  NetHTTPClient1.CustomHeaders['Content-Encoding'] := 'gzip';
  NetHTTPClient1.CustomHeaders['Content-Type'] := 'application/octet-stream';
  NetHTTPClient1.CustomHeaders['eus-bizkaia-n3-version'] := '1.0';
  NetHTTPClient1.CustomHeaders['eus-bizkaia-n3-content-type'] := 'application/xml';
  s := TStringlist.Create;
  m := tmemorystream.Create;
  // Formamos los parametros json de entrada
  NetHTTPClient1.CustomHeaders['eus-bizkaia-n3-data'] := CkJsonObject__emit(json);
  // AResponse := NetHTTPClient1.post( mURLAlta, RequestBody);
  AResponse := NetHTTPClient1.post(mURLAlta, 'archivo.gz', m);
  m.Position := 0;
  s.LoadFromStream(m);
  Memo1.Lines.AddStrings(s);
  Comprimido := TFileStream.Create('respuesta.gz', fmCreate);
  Comprimido.CopyFrom(AResponse.ContentStream, AResponse.ContentStream.Size);
  Comprimido.Destroy;
  descomprimir('respuesta.gz', 'respuesta2.gz');
  descomprimir('respuesta2.gz', 'respuesta.xml');}
  CkHttpResponse_Dispose(resp);
  CkHttp_Dispose(Http);
  CkStringBuilder_Dispose(sbXml);
  CkJsonObject_Dispose(json);

end;
Responder Con Cita
  #8  
Antiguo 24-01-2022
sEngine sEngine is offline
Miembro
 
Registrado: jul 2021
Posts: 79
Poder: 6
sEngine Va por buen camino
Estas en modo pruebas o real? Si es el modo pruebas, estas usando el certificado que nos proporcionan y te has registrado?
Responder Con Cita
  #9  
Antiguo 24-01-2022
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: 19.459
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 HerensugeBeltz Ver Mensaje
La presente orden foral regula los requisitos del servicio de recepción, el procedimiento y las especificaciones técnicas y funcionales de los ficheros que pretenden corregir los ficheros TicketBAI que han sido rechazados.

https://egoitza.gipuzkoa.eus/gao-bog...4/c2200304.pdf
Gracias por la info.
__________________
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.

Última edición por Neftali [Germán.Estévez] fecha: 24-01-2022 a las 14:05:08.
Responder Con Cita
  #10  
Antiguo 25-01-2022
unomasmas unomasmas is offline
Miembro
 
Registrado: dic 2019
Posts: 194
Poder: 7
unomasmas Va por buen camino
Cita:
Empezado por HerensugeBeltz Ver Mensaje
La presente orden foral regula los requisitos del servicio de recepción, el procedimiento y las especificaciones técnicas y funcionales de los ficheros que pretenden corregir los ficheros TicketBAI que han sido rechazados.

https://egoitza.gipuzkoa.eus/gao-bog...4/c2200304.pdf
¡Gracias por la info!

¡El servicio Zuzendu que anunciaron antes del verano!

Pero no veo dirección del servicio para pruebas :-(. ¿Lo publicarán en la web? https://www.gipuzkoa.eus/es/web/ogasuna/ticketbai/documentacion-y-normativa
Responder Con Cita
  #11  
Antiguo 26-01-2022
Avatar de HerensugeBeltz
HerensugeBeltz HerensugeBeltz is offline
Miembro
 
Registrado: may 2021
Ubicación: Hondarribia
Posts: 90
Poder: 6
HerensugeBeltz Va por buen camino
Cita:
Empezado por unomasmas Ver Mensaje
¡Gracias por la info!

¡El servicio Zuzendu que anunciaron antes del verano!

Pero no veo dirección del servicio para pruebas :-(. ¿Lo publicarán en la web? https://www.gipuzkoa.eus/es/web/ogasuna/ticketbai/documentacion-y-normativa
De nada.

Las URL las indican en el Boletín adjunto:
https://tbai-z.egoitza.gipuzkoa.eus/...k/zuzendu-alta
https://tbai-z.egoitza.gipuzkoa.eus/...k/zuzendu-baja

La segunda es para bajas de modificaciones o anulaciones enviadas previamente a Zuzendu.
Responder Con Cita
  #12  
Antiguo 26-01-2022
unomasmas unomasmas is offline
Miembro
 
Registrado: dic 2019
Posts: 194
Poder: 7
unomasmas Va por buen camino
Cita:
Empezado por HerensugeBeltz Ver Mensaje
De nada.

Las URL las indican en el Boletín adjunto:
https://tbai-z.egoitza.gipuzkoa.eus/...k/zuzendu-alta
https://tbai-z.egoitza.gipuzkoa.eus/...k/zuzendu-baja

La segunda es para bajas de modificaciones o anulaciones enviadas previamente a Zuzendu.
Gracias. Sí, vi estas direcciones en el boletín que enlazaste, pero ¿No son las direcciones del servicio en producción? Me imagino que para pruebas pondrán otras...
Responder Con Cita
  #13  
Antiguo 19-01-2022
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 671
Poder: 18
espinete Va camino a la fama
Cómo proceder tras error en los envíos

Tengo dudas sobre cómo proceder cuando se produzca un error en los envíos o en la firma (ya sea por fallo del servidor, no tener internet en ese momento o incluso fallos en el certificado en el momento de firmar).
Sé que se ha hablado varias veces en el foro pero no consigo encontrar una respuesta clara.

Me queda claro que, antes de hacer nada, lo ideal es comprobar manualmente que se cumplen todos los requisitos para que la factura pueda firmarse y enviarse:
- campos obligatorios (por ejemplo, "código postal" y "dirección" para Gipuzkoa/Araba y otros más)
- que el certificado esté seleccionado y sea válido
- resto de campos obligatorios, etc.

Una vez eso esté comprobado, procederíamos a generar Y firmar la factura.
Este paso es necesario para poder obtener el identificativo TicketBAI y el QR, que debemos incluir en la factura o tícket impreso que se le entrega al cliente. Por lo tanto, lo importante es poder llegar al menos a este paso: generar y firmar la factura.

Ahora es cuando tengo la duda... ¿cómo gestionáis vosotros un error en el envío?

La factura ya está generada, con su código tbai, su QR, el XML firmado, etc.
Si el envío falla, siempre podremos reenviarla más tarde, pero para ello necesitaremos el XML firmado original.
Es decir, no podemos volver a generar y firmar el XML porque será distinto (la firma no coincidirá).

Por lo tanto, mi pregunta es... ¿qué dato(s) guardáis en la base de datos del software para poder enviar las facturas más adelante sin tener que volver a firmarlas? ¿Guardáis TODO el XML firmado en un campo Blob? ¿Guardáis todos los archivos en alguna carpeta? ¿marcáis las facturas como "generada", "firmada", "enviada" para saber en qué paso se quedó cada una?

Para Gipuzkoa y Araba los envíos los hago sobre la marcha (en el momento de hacer la venta).
¿Lo hacéis en segundo plano o mostráis alguna ventana de "progreso de envío" avisando de los posibles errores al usuario?

¿O ninguna de estas opciones es necesaria y realmente es más sencillo y me estoy liando?

Gracias y perdón por el tostón.
Responder Con Cita
  #14  
Antiguo 19-01-2022
JM_1 JM_1 is offline
Miembro
 
Registrado: ago 2021
Posts: 41
Poder: 0
JM_1 Va por buen camino
Cita:
Empezado por espinete Ver Mensaje
Tengo dudas sobre cómo proceder cuando se produzca un error en los envíos o en la firma (ya sea por fallo del servidor, no tener internet en ese momento o incluso fallos en el certificado en el momento de firmar).
Sé que se ha hablado varias veces en el foro pero no consigo encontrar una respuesta clara.

Me queda claro que, antes de hacer nada, lo ideal es comprobar manualmente que se cumplen todos los requisitos para que la factura pueda firmarse y enviarse:
- campos obligatorios (por ejemplo, "código postal" y "dirección" para Gipuzkoa/Araba y otros más)
- que el certificado esté seleccionado y sea válido
- resto de campos obligatorios, etc.

Una vez eso esté comprobado, procederíamos a generar Y firmar la factura.
Este paso es necesario para poder obtener el identificativo TicketBAI y el QR, que debemos incluir en la factura o tícket impreso que se le entrega al cliente. Por lo tanto, lo importante es poder llegar al menos a este paso: generar y firmar la factura.

Ahora es cuando tengo la duda... ¿cómo gestionáis vosotros un error en el envío?

La factura ya está generada, con su código tbai, su QR, el XML firmado, etc.
Si el envío falla, siempre podremos reenviarla más tarde, pero para ello necesitaremos el XML firmado original.
Es decir, no podemos volver a generar y firmar el XML porque será distinto (la firma no coincidirá).

Por lo tanto, mi pregunta es... ¿qué dato(s) guardáis en la base de datos del software para poder enviar las facturas más adelante sin tener que volver a firmarlas? ¿Guardáis TODO el XML firmado en un campo Blob? ¿Guardáis todos los archivos en alguna carpeta? ¿marcáis las facturas como "generada", "firmada", "enviada" para saber en qué paso se quedó cada una?

Para Gipuzkoa y Araba los envíos los hago sobre la marcha (en el momento de hacer la venta).
¿Lo hacéis en segundo plano o mostráis alguna ventana de "progreso de envío" avisando de los posibles errores al usuario?

¿O ninguna de estas opciones es necesaria y realmente es más sencillo y me estoy liando?

Gracias y perdón por el tostón.
Una vez creado el TBAI y firmado, tenlo guardado firmado y bloquéalo que no se pueda hacer nada sobre él ni volver a generar. Se reenvía hasta que tengas el "Recibido". Si por lo que sea vuelves a generar otro tan solo un segundo después, pero hacienda ya registró el primero aunque el server no te diera respuesta, tienes el problema. El TBAI es diferente ya por la firma.

Un saludo
Responder Con Cita
  #15  
Antiguo 19-01-2022
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: 19.459
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
Por lo tanto, mi pregunta es...

1) ¿qué dato(s) guardáis en la base de datos del software para poder enviar las facturas más adelante sin tener que volver a firmarlas?
2) ¿Guardáis TODO el XML firmado en un campo Blob?
3) ¿Guardáis todos los archivos en alguna carpeta?
4) ¿marcáis las facturas como "generada", "firmada", "enviada" para saber en qué paso se quedó cada una?
5) ¿Lo hacéis en segundo plano o mostráis alguna ventana de "progreso de envío" avisando de los posibles errores al usuario?
1) Guardamos TODO el XML firmado (lo que se envía). Es la única manera, como dices. No se puede generar 2 veces, porque no coincidiría la firma.
2) Si.
3) Sólo para temas de LOG, en nuestro caso es opcional. Lo que realmente sirve a efectos de posibles inspecciones es lo guardado en Base de Datos.
4) En BD tenemos toda la información de cada "intento" de enviar que hacemos.
5) Nosotros lo hacemos al guardar la factura. Si no hay errores no mostramos nada en pantalla.
__________________
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
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
SII -Nuevo sistema de la Agencia Tributaria española de envío de datos vía Webservice newtron Internet 3716 19-01-2026 20:01:34
Como utilizar la ayuda del nuevo Sistema Operativo gluglu Humor 3 24-09-2007 09:39:05
Aplicacion Agencia De Viajes ArdiIIa Varios 9 20-01-2007 16:49:53
El Vasco Aguirre Al González La Taberna 5 26-05-2006 09:22:28
Microsoft ha lanzado su nuevo sistema operativo DarkByte Humor 0 25-01-2004 09:21:14


La franja horaria es GMT +2. Ahora son las 01:23:52.


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