Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco (https://www.clubdelphi.com/foros/showthread.php?t=94264)

ermendalenda 23-11-2021 19:50:42

Con este Master que estamos haciendo nos va a salir mejor currar de asesor de ticketbai

Ramon88 23-11-2021 21:23:45

Sigo con el error 400 y no se por donde tirar.
Estoy revisando el Json, y aunque veo algunas diferencias con el que te ponen de ejemplo, probando el suyo de ejemplo tal cual, todo seguido sin "" me da el mismo error. Nose si será eso o que, os pongo mi Json a ver si veis algo raro.
Código SQL [-]
"{""con"":""LROE"",""apa"":""1.1"",""inte"":[{""nif"":""A99110237"",""nrs"":""GLe7V235qZ"",""ap1"":""Pu125yvAaQ"",""ap2"":""BjvfghGZq5""}],""drs"":[{""mode"":""140"",""ejer"":""2021""}]}"

Sistel 23-11-2021 22:01:40

Cita:

Empezado por Ramon88 (Mensaje 544134)
Sigo con el error 400 y no se por donde tirar.
Estoy revisando el Json, y aunque veo algunas diferencias con el que te ponen de ejemplo, probando el suyo de ejemplo tal cual, todo seguido sin "" me da el mismo error. Nose si será eso o que, os pongo mi Json a ver si veis algo raro.
Código SQL [-]
"{""con"":""LROE"",""apa"":""1.1"",""inte"":[{""nif"":""A99110237"",""nrs"":""GLe7V235qZ"",""ap1"":""Pu125yvAaQ"",""ap2"":""BjvfghGZq5""}],""drs"":[{""mode"":""140"",""ejer"":""2021""}]}"

Hola Ramon88,

Yo para comprobar si una estructura JSON está correcta, utilizo Insomnia (al igual que para hacer pruebas de envío).
Al pasar tu JSON por Insomnia (quitando la " inicial y la " final) veo que da error.
Parece que no le gusta lo de repetir " dos veces en cada sitio donde debería haber una sola "

Mira a ver si es eso.

Saludos

keys 24-11-2021 08:27:58

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 544128)
Yo estoy usandolo de esta forma y tampoco me da problemas.

Código Delphi [-]
WinStorage.SystemStores.BeginUpdate;
  try
    WinStorage.SystemStores.Clear;
    WinStorage.SystemStores.Add('MY');
    WinStorage.AccessType := aAccessType;
  finally
    WinStorage.SystemStores.EndUpdate;
  end;

SecureBlackbox 16.0.326

SecureBlackbox 16.0.326


Lo primero gracias a todos. Lo de ejecutar como administrador ya lo había probado, aunque estoy con el usuario administrador.

Para neftali. si accedes asi ¿como le dices luego al componente de firma cual es el certificado? yo lo hago asi.
Código Delphi [-]
if CertificateStorage.Opened then
     CertificateStorage.Close(True);

  //Este es el punto donde el programa se cierra
  CertificateStorage.Open('system://currentuser@localhost/?store=MY');

  encontrado := False;

 //Aqui busco el certificado con el que firmar
  for i := 0 to CertificateStorage.Certificates.Count - 1 do
  begin
    cert := CertificateStorage.Certificates[i];
    if bintostr(cert.SerialNumber) = el_firmante.r_Nombre_firma then
     begin
       sbxXAdESSigner1.SigningCertificate := cert;
       encontrado := True;
       Break;
     end;
  end;


  if not Encontrado then
   begin //mostrar error
      Mensaje(nil, 'No se encuentra la firma');
      exit;
   end;

  sbxXAdESSigner1.SigningCertificate := cert;

 //Continuo con el resto de la firma

Solo me queda probar el programa que indica juramisa, aunque el autofirmacommanline funciona bien y probar como solo lectura como dice HerensugeBeltz. Esto lo haré a lo largo de la mañana cuando pueda conectarme con el cliente.

Esta claro que es un problema de su ordenador ya que el programa esta corriendo en mas de 100 usuarios y esta funcionando correctamente.

Pasar un buen día TicketBAI. :cool:

Ramon88 24-11-2021 10:03:46

Cita:

Empezado por Sistel (Mensaje 544137)
Hola Ramon88,

Yo para comprobar si una estructura JSON está correcta, utilizo Insomnia (al igual que para hacer pruebas de envío).
Al pasar tu JSON por Insomnia (quitando la " inicial y la " final) veo que da error.
Parece que no le gusta lo de repetir " dos veces en cada sitio donde debería haber una sola "

Mira a ver si es eso.

Saludos


Gracias por probarlo, yo lo que veo no es que lo repita, es que para cada parte le pone las " "
Realmente ese es el contenido de la variable que mando.


Pero no entiendo por que no sirve, por que lo tengo funcionando así en varios sitios y funciona.


Voy a ver que me invento para cambiarlo.

Neftali [Germán.Estévez] 24-11-2021 10:06:05

Cita:

Empezado por keys (Mensaje 544142)
Para neftali. si accedes asi ¿como le dices luego al componente de firma cual es el certificado? yo lo hago asi.


Nosotros guardamos el HASH del certificado.
Con ese procedimiento cargas los certificados disponibles usando la clase TElWinCertStorage.
Aquí hay un ejemplo de cómo acceder a esa clase. Está en VB, pero verás que es muy parecido al código que he puesto yo.

Desde esa clase puedes acceder a los certificados y obtener elementos de la clase TElX509Certificate.

rci 24-11-2021 15:46:00

nuevo entorno de pruebas Batuz
 
Buenas tardes, a ver si lo he entendido bien, para utilizar el entorno de pruebas de batuz que se puso en marcha recientemente, a parte ser necesaria una inscripción previa de la empresa desarrolladora, también debemos utilizar los certificados de pruebas y especificar unos datos del obligado tributario ficticios que nos proporcionará batuz.


Por lo tanto no podemos poner nuestro programa a un cliente final nuestro y dejarlo en entorno de pruebas batuz para que envie con su certificado y sus datos de obligado tributario, para ir probando antes de pasar al entorno real a partir del 1 de enero del 2022 (período voluntario)


pues si es así pierde toda la gracia ese entorno de pruebas...



Es así o me equivoco?


Muchas gracias

sEngine 24-11-2021 18:57:24

Como haceis para coger la respuesta de Bizkaia desde delphi?

La respuesta me da esto

Código Delphi [-]
#$1F'�'#8#8#0#0#0#0#0'�5251550_peticion_Resp.xml'#0'�T]��0'#$14'}�W0�k��+:Ȏâ�;�k�j��'#4'��.'#$10'�����'#5'E���)�p�9����'#6'�a'#$1F'��_�'#5'e�@�[����g'#1'�7'#3'u�'#$18'5'#$D'U'#$11#$12'�'#1#$E'YL'#6'�;'#$11'��0c��'#$7F'��:ӗvG'#$1B'a_�'#$1C#$B'''  ��'#6'X�,�����3"��@�'#2'2��C�@�J��>B�ݮ�a�~�H*К�=�dC�'#$1B'ʳ(k�����'#8'�#2'��'#$17'�j5'#$14'xL'#$1B'{�'''#$1C#$1F'�<��'#5'$d'#$16'46��'#4'm�P�BJ7�黄��'#$18'-�T'#$13'%�5'#1'I'#$1F',��'#$1A'��aIY'#$1D'�'#0'�'#0'�'#8'J��M�O��jkm�)㊊'#$17'�'#$D#$E#$0602'S/��W��0y'#$1E'Y�^��4�wo�,�'#$13'�'#9#9'C'#$1A'01a���'#$C#$7F'��̧8��_����r�]'#$1A'��'#$1F#$11'��N��x''�;'#$7F'm���r���'#$12'3s�'#7'c>b�Ĕ'#$13'AbynՈ�[\�ڝ��73g'#$14'��w��;��֨:Q '#1'�ּk|�'#$05F5'�SnJ'#$15'9���r�'#$19#$C'����J�"w��s'#0'�tM��o'#$1D#$7F'<��%v'#$18'5�))(��'#$14'�r�  �&iT'#$10'�'#$1E'�V%�^����'#$13#$12'd�'#$15#$17'��⣳���=�'#$1B'�'#2'�'#$1B'�'#$1C'�On�u''s�#��9'#$11'  l�9�%��Q'#7'�d?im�z���pM�?<��'#$F'�)|'#$10'['#5#0#0
y no se como guardarlo en un archivo, ya que siempre me esta diciendo que es un archivo erroneo.
He probado con estas opciones


Código Delphi [-]
   Respuesta := idhttp_fac.Post('https://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena',RequestBody);
    AResponse := TStringStream.Create(Respuesta);
    Comprimido := TFileStream.Create(ExtractFilePath(Application.ExeName)+'\LROE_respuesta.gz', fmCreate);
    Comprimido.CopyFrom(AResponse, AResponse.Size);


Código Delphi [-]
    MyText := TStringList.Create;
    MyText.Add(Respuesta);
    MyText.SaveToFile(ExtractFilePath(Application.ExeName)+'\LROE_respuesta2.gz',TEncoding.UTF8);
    MyText.Free;

unomasmas 24-11-2021 20:34:07

Cita:

Empezado por rci (Mensaje 544150)
Buenas tardes, a ver si lo he entendido bien, para utilizar el entorno de pruebas de batuz que se puso en marcha recientemente, a parte ser necesaria una inscripción previa de la empresa desarrolladora, también debemos utilizar los certificados de pruebas y especificar unos datos del obligado tributario ficticios que nos proporcionará batuz.

Por lo tanto no podemos poner nuestro programa a un cliente final nuestro y dejarlo en entorno de pruebas batuz para que envie con su certificado y sus datos de obligado tributario, para ir probando antes de pasar al entorno real a partir del 1 de enero del 2022 (período voluntario)

pues si es así pierde toda la gracia ese entorno de pruebas...

Es así o me equivoco?

Muchas gracias

Yo también estoy sorprendido, aunque no entiendo para qué es necesaria la inscripción previa de la empresa desarrolladora si en el XML TicketBAI hay que indicar estos datos:
▪ Licencia TBAI: TBAIBI00000000PRUEBA
▪ NIF entidad desarrolladora: A99800005
▪ Nombre: SOFTWARE GARANTE TICKETBAI PRUEBA
▪ Versión: 1.0

O sea, te dan estos datos, te dan los certificados que puedes usar y tras la inscripción te indicarán los datos de clientes con los que hacer las pruebas. Todo predefinido ¿No? Si estos datos de clientes se hacen públicos ¿Para qué es necesaria la inscripción?

tejano 25-11-2021 08:35:54

La WSDL es https://sarrerak.bizkaia.eus/N3B4000M/aurkezpena, ya no es https://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena

Cita:

Empezado por sEngine (Mensaje 544156)
Como haceis para coger la respuesta de Bizkaia desde delphi?

La respuesta me da esto

Código Delphi [-]
#$1F'�'#8#8#0#0#0#0#0'�5251550_peticion_Resp.xml'#0'�T]��0'#$14'}�W0�k��+:Ȏâ�;�k�j��'#4'��.'#$10'�����'#5'E���)�p�9����'#6'�a'#$1F'��_�'#5'e�@�[����g'#1'�7'#3'u�'#$18'5'#$D'U'#$11#$12'�'#1#$E'YL'#6'�;'#$11'��0c��'#$7F'��:ӗvG'#$1B'a_�'#$1C#$B'''  ��'#6'X�,�����3"��@�'#2'2��C�@�J��>B�ݮ�a�~�H*К�=�dC�'#$1B'ʳ(k�����'#8'�#2'��'#$17'�j5'#$14'xL'#$1B'{�'''#$1C#$1F'�<��'#5'$d'#$16'46��'#4'm�P�BJ7�黄��'#$18'-�T'#$13'%�5'#1'I'#$1F',��'#$1A'��aIY'#$1D'�'#0'�'#0'�'#8'J��M�O��jkm�)㊊'#$17'�'#$D#$E#$0602'S/��W��0y'#$1E'Y�^��4�wo�,�'#$13'�'#9#9'C'#$1A'01a���'#$C#$7F'��̧8��_����r�]'#$1A'��'#$1F#$11'��N��x''�;'#$7F'm���r���'#$12'3s�'#7'c>b�Ĕ'#$13'AbynՈ�[\�ڝ��73g'#$14'��w��;��֨:Q '#1'�ּk|�'#$05F5'�SnJ'#$15'9���r�'#$19#$C'����J�"w��s'#0'�tM��o'#$1D#$7F'<��%v'#$18'5�))(��'#$14'�r�  �&iT'#$10'�'#$1E'�V%�^����'#$13#$12'd�'#$15#$17'��⣳���=�'#$1B'�'#2'�'#$1B'�'#$1C'�On�u''s�#��9'#$11'  l�9�%��Q'#7'�d?im�z���pM�?<��'#$F'�)|'#$10'['#5#0#0
y no se como guardarlo en un archivo, ya que siempre me esta diciendo que es un archivo erroneo.
He probado con estas opciones


Código Delphi [-]
   Respuesta := idhttp_fac.Post('https://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena',RequestBody);
    AResponse := TStringStream.Create(Respuesta);
    Comprimido := TFileStream.Create(ExtractFilePath(Application.ExeName)+'\LROE_respuesta.gz', fmCreate);
    Comprimido.CopyFrom(AResponse, AResponse.Size);


Código Delphi [-]
    MyText := TStringList.Create;
    MyText.Add(Respuesta);
    MyText.SaveToFile(ExtractFilePath(Application.ExeName)+'\LROE_respuesta2.gz',TEncoding.UTF8);
    MyText.Free;


Neftali [Germán.Estévez] 25-11-2021 08:39:57

Cita:

Empezado por unomasmas (Mensaje 544158)
Yo también estoy sorprendido, aunque no entiendo para qué es necesaria la inscripción previa de la empresa desarrolladora si en el XML TicketBAI hay que indicar estos datos:
▪ Licencia TBAI: TBAIBI00000000PRUEBA
▪ NIF entidad desarrolladora: A99800005
▪ Nombre: SOFTWARE GARANTE TICKETBAI PRUEBA
▪ Versión: 1.0
▪ Solicitar datos de los interesados para 140/240 (NIF y NombreApellidos / NIF y RazonSocial)


Se que han tenido problemas con envíos de prueba a PRODUCCION, imagino que de esta manera pueden filtrar esos errores, aunque hubiera bastado con la Licencia (un único datos), no hacía falta cambiarlos todos y solicitar un segundo registro.

Como en muchas otras cosas, me da la impresión de que sólo están pensando en su beneficio y no están pensando en las empresas desarrolladoras.

Cita:

Empezado por rci (Mensaje 544150)
Por lo tanto no podemos poner nuestro programa a un cliente final nuestro y dejarlo en entorno de pruebas batuz para que envie con su certificado y sus datos de obligado tributario


Como ya dijeron en su día, el entorno de PREPRODUCCION lo tienen pensado sólo para utilizar en las empresas desarrolladoras. No debería haber ningun cliente real en PRE (al menos es lo que pretenden).

Neftali [Germán.Estévez] 25-11-2021 08:44:13

Cita:

Empezado por tejano (Mensaje 544160)


Funcionan las 2.
Desde hace unos días ya está de nuevo en marcha el servidor de PREPRODUCCION:
https://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena
NOTA: Para poder utilizarlo hay que hacer esto.

Y el de PRODUCCION (que por ahora es "a modo de pruebas") es este:
https://sarrerak.bizkaia.eus/N3B4000M/aurkezpena
NOTA: Este se cerrará el 10 de Diciembre :(:(:o

un lío vamos...

keys 25-11-2021 09:22:15

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 544146)
Nosotros guardamos el HASH del certificado.
Con ese procedimiento cargas los certificados disponibles usando la clase TElWinCertStorage.
Aquí hay un ejemplo de cómo acceder a esa clase. Está en VB, pero verás que es muy parecido al código que he puesto yo.

Desde esa clase puedes acceder a los certificados y obtener elementos de la clase TElX509Certificate.

Hola a todos.

Al final hablando con SecureBlackBox me han dado la siguiente solución.
Cita:

Your version of SecureBlackbox used a “DRU” approach to incorporate the SecureBlackbox product DLL into your application and load it manually in run time. That was an efficient and handy approach, but it proved to have one drawback. Certain variants of the operation system and antimalware apps take that approach suspiciously, and stop the applications from loading the DLL in that way right in the middle of the process (effectively, by making the application crash). The behaviour you are observing looks very similar to that.
That’s why we eventually stopped offering that option and suggested to always ship the SecureBlackbox DLL in the “normal” way, by deploying it alongside the application. This eliminates any side effects caused by DEP and anti-malware software.
To fix the issue on your side, please do the following two things:
1) Define USESECUREBLACKBOXDLL globally in your project settings.
2) When deploying your application, please put the SecureBlackbox20.dll file (you will find it in the \lib directory in the SBB folder) alongside your application’s executable
Lo he probado y funciona correctamente.

Ahora el problema lo tengo a la hora de firmar el fichero con sbxXAdESSigner1.Sign(); que despues de cargarle todos los parametros me sale el siguiente error.

Cita:

1048581 The certificate does not have a associated private key
El certificado le he puesto uno nuestro y le pasa lo mismo. Por algún motivo no puede acceder a la clave privada de los certificados.

Un Saludo.

rci 25-11-2021 09:25:10

nuevo entorno de pruebas Batuz
 
Gracias por las respuestas unomasmas y Neftali

Neftali [Germán.Estévez] 25-11-2021 09:43:49

Cita:

Empezado por sEngine (Mensaje 544156)
Como haceis para coger la respuesta de Bizkaia desde delphi?


Ten en cuenta que la respuesta en el caso de Bizkaiano puedes tratarla como texto para recuperarla o guardarla en disco.
He visto que usas TStringStream o TStringList. Inténtalo con TStream, porque al utilizar etructuras para strings se producen conversiones no deseadas.


Crea un TFileStream y utiliza el Post recogiendo la respuesta en ese objeto, para guardarlo en disco.



Neftali [Germán.Estévez] 25-11-2021 09:46:18

Cita:

Empezado por keys (Mensaje 544163)
El certificado le he puesto uno nuestro y le pasa lo mismo. Por algún motivo no puede acceder a la clave privada de los certificados.


No se si es lo mismo (no creo, pero por si acaso), pero si son certificados que están instalados en la máquina (no como usuario local), hay problemas al acceder a ellos.
Necesitas elevación de permisos.

Ramon88 25-11-2021 10:13:29

Sigo con el error y ellos sin contestar, creo que no soy el único que está con el error 400.
Subo las cabeceras por si veis algo raro, no se por donde tirar la verdad.


He visto que el Json esta bien formado, lo armo con una funcion de .Net que lo hace solo.

Código SQL [-]
{
Accept-Encoding: gzip
Content-Encoding: gzip
eus-bizkaia-n3-version: 1.0
eus-bizkaia-n3-content-type: application/xml
Encoding: gzip
Content-Type: application/octet-stream; charset=utf-8
eus-bizkaia-n3-data: {"con":"LROE","apa":"1.1","inte":[{"nif":"A99800237","nrs":"GLe7VAi7qZ","ap1":"PuWn2yvAaQ","ap2":"BjvRzNGZq5"}],"drs":[{"mode":"140","ejer":"2021"}]}
}

Neftali [Germán.Estévez] 25-11-2021 11:08:32

Modifico los parámetros que has enviado para iguarlarlos con los mios:

Código PHP:

Accept-Encoding:gzip
Content
-Encoding:gzip
eus
-bizkaia-n3-version1.0
eus
-bizkaia-n3-content-typeapplication/xml
eus
-bizkaia-n3-data: {"con":"LROE","apa":"1.1","inte":[{"nif":"A99800237","nrs":"GLe7VAi7qZ","ap1":"PuWn2yvAaQ","ap2":"BjvRzNGZq5"}],"drs":[{"mode":"140","ejer":"2021"}]}
Accepttext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Content-Type: application/octet-stream 

Las llaves no se porque aparecen en tus parámetros, porque el conjunto no es un único parámetro, sino que son diferentes parámetros como HEADERS. Uno de ellos sí es un JSON.
¿No lo estarás enviando todo como un único JSON?

Ramon88 25-11-2021 11:11:53

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 544168)
Modifico los parámetros que has enviado para iguarlarlos con los mios:

Código PHP:

Accept-Encoding:gzip
Content
-Encoding:gzip
eus
-bizkaia-n3-version1.0
eus
-bizkaia-n3-content-typeapplication/xml
eus
-bizkaia-n3-data: {"con":"LROE","apa":"1.1","inte":[{"nif":"A99800237","nrs":"GLe7VAi7qZ","ap1":"PuWn2yvAaQ","ap2":"BjvRzNGZq5"}],"drs":[{"mode":"140","ejer":"2021"}]}
Accepttext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Content-Type: application/octet-stream 

Las llaves no se porque aparecen en tus parámetros, porque el conjunto no es un único parámetro, sino que son diferentes parámetros como HEADERS. Uno de ellos sí es un JSON.
¿No lo estarás enviando todo como un único JSON?


No, lo que pasa que lo he cogido desde el debug y sale así, pero eso esta bien.
Lo que veo distinto es el orden y lo de Accept... voy a ver si me tomo un cafe y sigo probando! :(

sEngine 25-11-2021 11:32:57

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 544165)
Ten en cuenta que la respuesta en el caso de Bizkaiano puedes tratarla como texto para recuperarla o guardarla en disco.
He visto que usas TStringStream o TStringList. Inténtalo con TStream, porque al utilizar etructuras para strings se producen conversiones no deseadas.


Crea un TFileStream y utiliza el Post recogiendo la respuesta en ese objeto, para guardarlo en disco.




Muchas gracias, ya lo he conseguido guardar con esto


Código Delphi [-]
Comprimido := TFileStream.Create(ExtractFilePath(Application.ExeName)+'\LROE_respuesta.gz', fmCreate);
    idhttp_fac.Post('https://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena',RequestBody,Comprimido);

Ramon88 25-11-2021 12:41:10

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 544168)
Modifico los parámetros que has enviado para iguarlarlos con los mios:

Código PHP:

Accept-Encoding:gzip
Content
-Encoding:gzip
eus
-bizkaia-n3-version1.0
eus
-bizkaia-n3-content-typeapplication/xml
eus
-bizkaia-n3-data: {"con":"LROE","apa":"1.1","inte":[{"nif":"A99800237","nrs":"GLe7VAi7qZ","ap1":"PuWn2yvAaQ","ap2":"BjvRzNGZq5"}],"drs":[{"mode":"140","ejer":"2021"}]}
Accepttext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Content-Type: application/octet-stream 

Las llaves no se porque aparecen en tus parámetros, porque el conjunto no es un único parámetro, sino que son diferentes parámetros como HEADERS. Uno de ellos sí es un JSON.
¿No lo estarás enviando todo como un único JSON?


Si pongo la cabacera Accept me da error:
El encabezado 'Accept' se debe modificar con la propiedad o metodo adecuados.

Neftali [Germán.Estévez] 25-11-2021 13:28:09

Nosotros los añadimos así:
Código Delphi [-]
// Estas dos son como propiedades del componente
CompEnvioRESTClient.Accept := 'application/json, text/plain; q=0.9, text/html;q=0.8,';
CompEnvioRESTClient.AcceptCharset := 'utf-8, *;q=0.8';
// El resto como headers
CompEnvioRESTClient.AddParameter('Accept-Encoding', 'gzip', pkHTTPHEADER);
CompEnvioRESTClient.AddParameter('Content-Encoding', 'gzip', pkHTTPHEADER);
CompEnvioRESTClient.AddParameter('Content-Type', 'application/octet-stream', pkHTTPHEADER, [poDoNotEncode]);
CompEnvioRESTClient.AddParameter('eus-bizkaia-n3-version', '1.0', pkHTTPHEADER);
CompEnvioRESTClient.AddParameter('eus-bizkaia-n3-content-type', 'application/xml', pkHTTPHEADER, [poDoNotEncode] );
CompEnvioRESTClient.AddParameter('eus-bizkaia-n3-data', JSON, TRESTRequestParameterKind.pkHTTPHEADER, [poDoNotEncode]);


Y es resultado es este:
Código Delphi [-]
Accept-Encoding=gzip
Content-Encoding=gzip
Content-Type=application/octet-stream
eus-bizkaia-n3-version=1.0
eus-bizkaia-n3-content-type=application/xml
eus-bizkaia-n3-data={"con": "LROE","apa": "1.1","inte": {"nif": "_CIF_","nrs": "_RAZON_SOCIAL_"},"drs":{"mode": "240","ejer": "2021"}}

tejano 25-11-2021 15:03:37

Validación de la licencia del software garante
 
Os informamos que a partir del 30 de noviembre se va a habilitar la validación de la licencia en el Entorno real en modo de pruebas (el cual estará disponible hasta el 10 de diciembre de 2021) con el objetivo de que se pueda verificar el correcto funcionamiento de los sistemas de cara a la apertura del Entorno real a partir del 1 de enero de 2022.

Es imprescindible, que de cara al 1 de enero de 2022, tengáis verificados los datos de la licencia a utilizar. Si los datos de la licencia no son correctos, provocará el rechazo de las anotaciones, tanto del alta como de la anulación, del subcapítulo 1.1 del LROE.

Cuando hablamos de los datos de la licencia, nos referimos a los datos del Software de facturación incluido en la Huella TicketBAI:



Todos los campos deben coincidir EXACTAMENTE con los datos proporcionados en el alta realizada en el Registro de Software Garante. Para identificar el Nombre del software con el que fue dado de alta, basta con revisar el documento de notificación enviado, donde aparece junto con la Licencia TicketBAI otorgada y el NIF de la empresa desarrolladora:

skatologiko 25-11-2021 20:26:23

Buenas, me estoy volviendo loco para añadir todas las líneas de detalle con la librería Chilkat, ya que en Guipuzcoa hay que detallar la factura.
Si utilizo el método UpdatechildContent siempre se me actualiza el mismo IDDetalleFactura ¿Cómo puedo crear diferentes elementos de IDDetalleFactura? He probado con NewChild y NewChild2, pero no cierra el elemento anterior
¿Qué método utilizáis?

Ramon88 26-11-2021 10:28:05

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 544174)
Nosotros los añadimos así:
Código Delphi [-]// Estas dos son como propiedades del componente CompEnvioRESTClient.Accept := 'application/json, text/plain; q=0.9, text/html;q=0.8,'; CompEnvioRESTClient.AcceptCharset := 'utf-8, *;q=0.8'; // El resto como headers CompEnvioRESTClient.AddParameter('Accept-Encoding', 'gzip', pkHTTPHEADER); CompEnvioRESTClient.AddParameter('Content-Encoding', 'gzip', pkHTTPHEADER); CompEnvioRESTClient.AddParameter('Content-Type', 'application/octet-stream', pkHTTPHEADER, [poDoNotEncode]); CompEnvioRESTClient.AddParameter('eus-bizkaia-n3-version', '1.0', pkHTTPHEADER); CompEnvioRESTClient.AddParameter('eus-bizkaia-n3-content-type', 'application/xml', pkHTTPHEADER, [poDoNotEncode] ); CompEnvioRESTClient.AddParameter('eus-bizkaia-n3-data', JSON, TRESTRequestParameterKind.pkHTTPHEADER, [poDoNotEncode]);



Y es resultado es este:
Código Delphi [-]Accept-Encoding=gzip Content-Encoding=gzip Content-Type=application/octet-stream eus-bizkaia-n3-version=1.0 eus-bizkaia-n3-content-type=application/xml eus-bizkaia-n3-data={"con": "LROE","apa": "1.1","inte": {"nif": "_CIF_","nrs": "_RAZON_SOCIAL_"},"drs":{"mode": "240","ejer": "2021"}}


Según me han contestado, el problema lo tengo en los [] en el Json. Voy a ver si puedo quitarlos y lo pruebo.


Una duda que tengo, cuando subo una anulación, esta no lleva consecutivo, entonces la siguiente factura que subes, tiene que hacer referencia a alguna factura? a la anterior de la anulación?

keys 26-11-2021 11:02:56

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 544166)
No se si es lo mismo (no creo, pero por si acaso), pero si son certificados que están instalados en la máquina (no como usuario local), hay problemas al acceder a ellos.
Necesitas elevación de permisos.

Hola a todos.

Ejecutando como administrador pasa lo mismo.

Haciendo pruebas tontas he visto que si lo ejecuto desde un programa de pruebas (.exe) funciona correctamente, pero desde una dll que es donde lo tenemos todo metido no. He copiado todo a una carpeta nueva y FUNCIONA, es decir copio y pego toda la carpeta del programa y funciona bien desde una dll.

Magia:cool:

ermendalenda 26-11-2021 11:45:21

Cita:

Empezado por keys (Mensaje 544186)
Hola a todos.

Ejecutando como administrador pasa lo mismo.

Haciendo pruebas tontas he visto que si lo ejecuto desde un programa de pruebas (.exe) funciona correctamente, pero desde una dll que es donde lo tenemos todo metido no. He copiado todo a una carpeta nueva y FUNCIONA, es decir copio y pego toda la carpeta del programa y funciona bien desde una dll.

Magia:cool:

Comprueba Sí la dll es win32 o win64, si es win32 y el sistema es de 64 seguramente tengas que meter la dll en windows\syswow64 en vez de system32 y registra lo allí como administrador con regsvr32.exe

keys 26-11-2021 11:53:37

Cita:

Empezado por ermendalenda (Mensaje 544188)
Comprueba Sí la dll es win32 o win64, si es win32 y el sistema es de 64 seguramente tengas que meter la dll en windows\syswow64 en vez de system32 y registra lo allí como administrador con regsvr32.exe

La dll es la misma tanto en una carpeta como en otra, lo único que hago es copiar todo el programa de una carpeta a otra y funciona. Algo ha pasado con los permisos en la carpeta original.

Además no las puedo registrar por que no son registrables. Al final me vale con moverle el programa a otra carpeta.

Sistel 26-11-2021 12:08:34

Cita:

Empezado por Ramon88 (Mensaje 544185)
Según me han contestado, el problema lo tengo en los [] en el Json. Voy a ver si puedo quitarlos y lo pruebo.
Una duda que tengo, cuando subo una anulación, esta no lleva consecutivo, entonces la siguiente factura que subes, tiene que hacer referencia a alguna factura? a la anterior de la anulación?

Hola Ramon88,

Mi opinión:
La referencia de una nueva factura debe ser a la factura anterior, esté o no anulada.
La anulación sólo es un estado fiscal para que Hacienda no considere sus importes a efectos IVA, IRPF, IS, etc.
Pero una factura anulada es una factura válida para TicketBAI con su serie, número, fecha y firma como las demás.
Aparte de que una factura puede anularse en cualquier momento, aunque haya otras posteriores.

Se admiten opiniones alternativas.

Saludos

keys 26-11-2021 12:46:24

Cita:

Empezado por Sistel (Mensaje 544192)
Hola Ramon88,

Mi opinión:
La referencia de una nueva factura debe ser a la factura anterior, esté o no anulada.
La anulación sólo es un estado fiscal para que Hacienda no considere sus importes a efectos IVA, IRPF, IS, etc.
Pero una factura anulada es una factura válida para TicketBAI con su serie, número, fecha y firma como las demás.
Aparte de que una factura puede anularse en cualquier momento, aunque haya otras posteriores.

Se admiten opiniones alternativas.

Saludos

Totalmente de acuerdo. De hecho la anulación puedes subirla en cualquier momento, por ejemplo después de subir la factura siguiente que apunta a la que anularás en un futuro.

Ramon88 26-11-2021 12:47:54

Bueno mi error 400 era debido a los '[' ']' del Json... los he quitado y ya no da el error 400.


También puede dar error 400 por el certificado / CIF utilizado, lo digo por si alguien tiene este error 400 sepa por donde pueden ir los tiros.

ermendalenda 26-11-2021 13:43:39

Cita:

Empezado por keys (Mensaje 544190)
La dll es la misma tanto en una carpeta como en otra, lo único que hago es copiar todo el programa de una carpeta a otra y funciona. Algo ha pasado con los permisos en la carpeta original.

Además no las puedo registrar por que no son registrables. Al final me vale con moverle el programa a otra carpeta.

Hola eso me ocurrió tb con Windows 10 con una dll y después de varios días tuve que cambiarle el nombre. Empezó a no gustarle a Windows 10 sin motivo aparente.

espinete 26-11-2021 14:46:29

Importante: sobre rectificativas en cambios y devoluciones TPV
 
Sigo pensando que un cambio o devolución en un punto de venta no debería requerir una rectificativa, sino una simple factura ordinaria (en negativo o positivo según sea cambio, devolución, etc.).

Y para intentar aclararlo al 100%, le he enviado a las tres haciendas forales varios supuestos que creo que no han tenido en cuenta, pero que se dan a diario en miles de comercios minoristas.
Me refiero a las cadenas de tiendas o franquicias con varias tiendas en distintas localidades e inlcuso en distintas provincias.

Se trata de casos en los que considero que emitir una rectificativa es inviable. Resumiendo:

* Persona que compra en ZARA Gipuzkoa (Tienda A) una camisa y la devuelve o la cambia en OTRO ZARA de Gipuzkoa
* Persona que compra en ZARA MADRID y devuelve o cambia en ZARA Gipuzkoa

¿Cómo sabe la Tienda que hace la devolución, qué factura tiene que rectificar, su encadenamiento, etc. si ellos NO tienen esa factura en el programa?

(No me digan que ZARA lo sabe porque lo tienen todo centralizado porque no es verdad. Además es solo un ejemplo, muchas otras tiendas no lo tienen centralizado ni de coña, ni les puedes obligar a tenerlo).

Cada tienda tiene su propia facturación, con su enumeración correlativa e independiente, etc. pero muchas cadenas permiten devolver/cambiar productos en toda España, por lo que no sé cómo podrían emitir una rectificativa si no la tienen en su base de datos. ¿Obligas al usuario a escribir los datos a mano a partir del tícket? Suerte con eso.

Publicaré las respuesta que me den las tres haciendas forales (suerte con esto también).

Un saludo

ermendalenda 26-11-2021 15:00:10

Cita:

Empezado por espinete (Mensaje 544200)
Sigo pensando que un cambio o devolución en un punto de venta no debería requerir una rectificativa, sino una simple factura ordinaria (en negativo o positivo según sea cambio, devolución, etc.).

Y para intentar aclararlo al 100%, le he enviado a las tres haciendas forales varios supuestos que creo que no han tenido en cuenta, pero que se dan a diario en miles de comercios minoristas.
Me refiero a las cadenas de tiendas o franquicias con varias tiendas en distintas localidades e inlcuso en distintas provincias.

Se trata de casos en los que considero que emitir una rectificativa es inviable. Resumiendo:

* Persona que compra en ZARA Gipuzkoa (Tienda A) una camisa y la devuelve o la cambia en OTRO ZARA de Gipuzkoa
* Persona que compra en ZARA MADRID y devuelve o cambia en ZARA Gipuzkoa

¿Cómo sabe la Tienda que hace la devolución, qué factura tiene que rectificar, su encadenamiento, etc. si ellos NO tienen esa factura en el programa?

(No me digan que ZARA lo sabe porque lo tienen todo centralizado porque no es verdad. Además es solo un ejemplo, muchas otras tiendas no lo tienen centralizado ni de coña, ni les puedes obligar a tenerlo).

Cada tienda tiene su propia facturación, con su enumeración correlativa e independiente, etc. pero muchas cadenas permiten devolver/cambiar productos en toda España, por lo que no sé cómo podrían emitir una rectificativa si no la tienen en su base de datos. ¿Obligas al usuario a escribir los datos a mano a partir del tícket? Suerte con eso.

Publicaré las respuesta que me den las tres haciendas forales (suerte con esto también).

Un saludo

Buen caso. Gracias. Esperamos la respuesta.

Sistel 26-11-2021 15:55:37

Cita:

Empezado por espinete (Mensaje 544200)
Sigo pensando que un cambio o devolución en un punto de venta no debería requerir una rectificativa, sino una simple factura ordinaria (en negativo o positivo según sea cambio, devolución, etc.).

Y para intentar aclararlo al 100%, le he enviado a las tres haciendas forales varios supuestos que creo que no han tenido en cuenta, pero que se dan a diario en miles de comercios minoristas.
Me refiero a las cadenas de tiendas o franquicias con varias tiendas en distintas localidades e inlcuso en distintas provincias.

Se trata de casos en los que considero que emitir una rectificativa es inviable. Resumiendo:

* Persona que compra en ZARA Gipuzkoa (Tienda A) una camisa y la devuelve o la cambia en OTRO ZARA de Gipuzkoa
* Persona que compra en ZARA MADRID y devuelve o cambia en ZARA Gipuzkoa

¿Cómo sabe la Tienda que hace la devolución, qué factura tiene que rectificar, su encadenamiento, etc. si ellos NO tienen esa factura en el programa?

(No me digan que ZARA lo sabe porque lo tienen todo centralizado porque no es verdad. Además es solo un ejemplo, muchas otras tiendas no lo tienen centralizado ni de coña, ni les puedes obligar a tenerlo).

Cada tienda tiene su propia facturación, con su enumeración correlativa e independiente, etc. pero muchas cadenas permiten devolver/cambiar productos en toda España, por lo que no sé cómo podrían emitir una rectificativa si no la tienen en su base de datos. ¿Obligas al usuario a escribir los datos a mano a partir del tícket? Suerte con eso.

Publicaré las respuesta que me den las tres haciendas forales (suerte con esto también).

Un saludo

Hola espinete,

Yo también espero ansioso la respuesta que te den porque es un tema que me interesa (y también a mis clientes) muchísimo.
Gracias.

Saludos

ermendalenda 26-11-2021 17:50:05

Cita:

Empezado por espinete (Mensaje 544200)
Sigo pensando que un cambio o devolución en un punto de venta no debería requerir una rectificativa, sino una simple factura ordinaria (en negativo o positivo según sea cambio, devolución, etc.).

Y para intentar aclararlo al 100%, le he enviado a las tres haciendas forales varios supuestos que creo que no han tenido en cuenta, pero que se dan a diario en miles de comercios minoristas.
Me refiero a las cadenas de tiendas o franquicias con varias tiendas en distintas localidades e inlcuso en distintas provincias.

Se trata de casos en los que considero que emitir una rectificativa es inviable. Resumiendo:

* Persona que compra en ZARA Gipuzkoa (Tienda A) una camisa y la devuelve o la cambia en OTRO ZARA de Gipuzkoa
* Persona que compra en ZARA MADRID y devuelve o cambia en ZARA Gipuzkoa

¿Cómo sabe la Tienda que hace la devolución, qué factura tiene que rectificar, su encadenamiento, etc. si ellos NO tienen esa factura en el programa?

(No me digan que ZARA lo sabe porque lo tienen todo centralizado porque no es verdad. Además es solo un ejemplo, muchas otras tiendas no lo tienen centralizado ni de coña, ni les puedes obligar a tenerlo).

Cada tienda tiene su propia facturación, con su enumeración correlativa e independiente, etc. pero muchas cadenas permiten devolver/cambiar productos en toda España, por lo que no sé cómo podrían emitir una rectificativa si no la tienen en su base de datos. ¿Obligas al usuario a escribir los datos a mano a partir del tícket? Suerte con eso.

Publicaré las respuesta que me den las tres haciendas forales (suerte con esto también).

Un saludo

De todas formas los temas de facturación, no ticketbai, si quieres una Respuesta rápida, tiene que ser consulta telefónic, y pasa a ser una respuesta sin validez oficial.
Si quieres esperar a la escrita te va a tardar varios meses, eso me dijeron en una consulta a la Aeat.

adolphsys 26-11-2021 18:10:37

Cita:

Empezado por espinete (Mensaje 544200)
Sigo pensando que un cambio o devolución en un punto de venta no debería requerir una rectificativa, sino una simple factura ordinaria (en negativo o positivo según sea cambio, devolución, etc.).

Y para intentar aclararlo al 100%, le he enviado a las tres haciendas forales varios supuestos que creo que no han tenido en cuenta, pero que se dan a diario en miles de comercios minoristas.
Me refiero a las cadenas de tiendas o franquicias con varias tiendas en distintas localidades e inlcuso en distintas provincias.

Se trata de casos en los que considero que emitir una rectificativa es inviable. Resumiendo:

* Persona que compra en ZARA Gipuzkoa (Tienda A) una camisa y la devuelve o la cambia en OTRO ZARA de Gipuzkoa
* Persona que compra en ZARA MADRID y devuelve o cambia en ZARA Gipuzkoa

¿Cómo sabe la Tienda que hace la devolución, qué factura tiene que rectificar, su encadenamiento, etc. si ellos NO tienen esa factura en el programa?

(No me digan que ZARA lo sabe porque lo tienen todo centralizado porque no es verdad. Además es solo un ejemplo, muchas otras tiendas no lo tienen centralizado ni de coña, ni les puedes obligar a tenerlo).

Cada tienda tiene su propia facturación, con su enumeración correlativa e independiente, etc. pero muchas cadenas permiten devolver/cambiar productos en toda España, por lo que no sé cómo podrían emitir una rectificativa si no la tienen en su base de datos. ¿Obligas al usuario a escribir los datos a mano a partir del tícket? Suerte con eso.

Publicaré las respuesta que me den las tres haciendas forales (suerte con esto también).

Un saludo

Hola espinete, no esperes gran cosa en cuanto a la respuesta de ninguna Hacienda, cuando yo les he planteado algo similar me han contestado lo siguiente:

Kaixo,

En primer lugar, disculpas por el retraso en contestar.
En cuanto a las cuestiones planteadas, responder que Batuz y TicketBai no modifican ni la normativa de IVA ni el reglamento de facturación. Por tanto, los casos en que se puede emitir una factura rectificativa son los mismos que hasta ahora, y serían casos diferentes en los que se permite la anulación de una operación. Recomendamos ver las preguntas frecuentes 19, 20 y 54 en la web https://www.batuz.eus/es/preguntas-frecuentes
Sobre la forma de emitir una factura rectificativa, se dan dos opciones: por diferencias o por sustitución. Recomendamos ver las preguntas frecuentes 45 y 47 a 54.
También quisiéremos explicar el proceso de funcionamiento de TicketBai y de Batuz, para aclarar que la emisión de una factura, rectificativa o no, no está vinculado a la remisión y a la aceptación o no del envío por Hacienda (no está vinculado a que esté subida y aceptada).
...
bla, bla, bla... no pongo más por no aburrir a la audiencia...


Conclusión (en mi modesta opinión): Dado que el reglamento de facturación español es del año 2012, y si hasta ahora se hacían abonos (facturas en negativo) para hacer una devolución y Hacienda no se ha metido para nada con usted, siga haciéndolo.

Saludos,

ermendalenda 27-11-2021 10:07:46

Cita:

Empezado por adolphsys (Mensaje 544205)
Hola espinete, no esperes gran cosa en cuanto a la respuesta de ninguna Hacienda, cuando yo les he planteado algo similar me han contestado lo siguiente:

Kaixo,

En primer lugar, disculpas por el retraso en contestar.
En cuanto a las cuestiones planteadas, responder que Batuz y TicketBai no modifican ni la normativa de IVA ni el reglamento de facturación. Por tanto, los casos en que se puede emitir una factura rectificativa son los mismos que hasta ahora, y serían casos diferentes en los que se permite la anulación de una operación. Recomendamos ver las preguntas frecuentes 19, 20 y 54 en la web https://www.batuz.eus/es/preguntas-frecuentes
Sobre la forma de emitir una factura rectificativa, se dan dos opciones: por diferencias o por sustitución. Recomendamos ver las preguntas frecuentes 45 y 47 a 54.
También quisiéremos explicar el proceso de funcionamiento de TicketBai y de Batuz, para aclarar que la emisión de una factura, rectificativa o no, no está vinculado a la remisión y a la aceptación o no del envío por Hacienda (no está vinculado a que esté subida y aceptada).
...
bla, bla, bla... no pongo más por no aburrir a la audiencia...


Conclusión (en mi modesta opinión): Dado que el reglamento de facturación español es del año 2012, y si hasta ahora se hacían abonos (facturas en negativo) para hacer una devolución y Hacienda no se ha metido para nada con usted, siga haciéndolo.

Saludos,

Yo lo veo un pelin arriesgado.
Antes de ticketbai, para comprobarlo tenían que levantar inspección, ahora lo tienen a huevo, primero comprueban y a raíz de los datos mandan la inspección, van a tener muy fácil automatizar las inspecciones, me imagino por la mañana un correo automatizado(o una aplicación portable en L que les informe de las inspecciones del día y la ruta a seguir) a los inspectores de zonas por el boot de ticketbai que repasa los datos que no están según normativa. Fácil de hacer y muchos ingresos a las arcas.

infoser101 28-11-2021 11:51:11

Error en consulta QR
 
Alguien sabe la diferencia en la url del QR en araba?
Al consultar un QR de facturas admitida devuelve siempre el error "Parámetros incorrectos"

Si embargo, este mismo código efectúa la consulta a Gipuzkoa sin problemas

La generación del CRC se hace con toda la url previa al parámetro "cr".
La url se deja sin la / final, tal y como indica la especificación
Tampoco existen caracteres a codificar en ninguno de los ejemplos probados

Por ejemplo, los parámetros de una url que da error en el entrono de pruebas de Araba es:

id=TBAI-A78648144-210121-qcSwKs6XuYTTq-062&s=01&nf=7684&i=63.26&cr=195

Neftali [Germán.Estévez] 29-11-2021 10:14:22

Cita:

Empezado por infoser101 (Mensaje 544222)
Alguien sabe la diferencia en la url del QR en araba?


Prueba con el mismo código de Guipuzkoa y sin quitar la / a la URL.
Yo estoy usando esto y funciona sin problemas:

Código:

TicketBAIID:TBAI-B05430756-291121-oBvVV+V6VnNb1-158
Serie:A
NumFactura:25000
Importe:3.63
URL:https://pruebas-ticketbai.araba.eus/tbai/qrtbai/

RESULT:  https://pruebas-ticketbai.araba.eus/tbai/qrtbai/?id=TBAI-B05430756-291121-oBvVV%2BV6VnNb1-158&s=A&nf=25000&i=3.63&cr=106



La franja horaria es GMT +2. Ahora son las 17:02:17.

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