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 29-01-2021
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 667
Poder: 18
espinete Va camino a la fama
Hola, sí, eso ya estaba resuelto. El problema que tengo ahora es el del mensaje posterior:

El XML no cumple el esquema.[Linea:1 Columna:180] Error:cvc-complex-type.2.4.a: Invalid content was found starting with element '{"https://www.batuz.eus/fitxategiak/batuz/LROE/esquemas/LROE_PJ_240_1_1_FacturasEmitidas_ConSG_AltaPeticion_V1_0_1.xsd":Cabecera}'. One of '{Cabecera}' is expected.

No entiendo por qué dice que no tiene Cabecera si el XML es idéntico, salvo que el XML "original" incluye el prefijo "lrpjfecsgap"
Responder Con Cita
  #2  
Antiguo 29-01-2021
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.234
Poder: 24
keys Va por buen camino
Es por que delphi no genera las cabeceras como tiene que ser o no he encontrado la forma de hacerlo.

Antes de enviar hay que rehacer el fichero.

Código:
 Para el 140

FicheroCorregir := TStringList.Create;
      FicheroCorregir.LoadFromFile(FicheroDestino);

      FicheroCorregir.Text := AnsiReplaceStr(FicheroCorregir.Text, '<LROEPF140IngresosConFacturaConSGAltaPeticion xmlns="https://www.batuz.eus/fitxategiak/batuz/LROE/esquemas/LROE_PF_140_1_1_Ingresos_ConfacturaConSG_AltaPeticion_V1_0_1.xsd">', '<lrpficfcsgap:LROEPF140IngresosConFacturaConSGAltaPeticion xmlns:lrpficfcsgap="https://www.batuz.eus/fitxategiak/batuz/LROE/esquemas/LROE_PF_140_1_1_Ingresos_ConfacturaConSG_AltaPeticion_V1_0_1.xsd">');
      FicheroCorregir.Text := AnsiReplaceStr(FicheroCorregir.Text, '</LROEPF140IngresosConFacturaConSGAltaPeticion>', '</lrpficfcsgap:LROEPF140IngresosConFacturaConSGAltaPeticion>');
     
      System.SysUtils.DeleteFile(FicheroDestino);
     
      FicheroCorregir.SaveToFile(FicheroDestino);
Código:
Para el 240 
FicheroCorregir := TStringList.Create;
      FicheroCorregir.LoadFromFile(FicheroDestino);
      FicheroCorregir.Text := AnsiReplaceStr(FicheroCorregir.Text, '<LROEPJ240FacturasEmitidasConSGAltaPeticion xmlns="https://www.batuz.eus/fitxategiak/batuz/LROE/esquemas/LROE_PJ_240_1_1_FacturasEmitidas_ConSG_AltaPeticion_V1_0_1.xsd">','<lrpjfecsgap:LROEPJ240FacturasEmitidasConSGAltaPeticion xmlns:lrpjfecsgap="https://www.batuz.eus/fitxategiak/batuz/LROE/esquemas/LROE_PJ_240_1_1_FacturasEmitidas_ConSG_AltaPeticion_V1_0_1.xsd">');
      FicheroCorregir.Text := AnsiReplaceStr(FicheroCorregir.Text, '</LROEPJ240FacturasEmitidasConSGAltaPeticion>','</lrpjfecsgap:LROEPJ240FacturasEmitidasConSGAltaPeticion>');
      
      System.SysUtils.DeleteFile(FicheroDestino);
      
      FicheroCorregir.SaveToFile(FicheroDestino);
Esto antes de comprimir y enviarlo.
Responder Con Cita
  #3  
Antiguo 29-01-2021
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 667
Poder: 18
espinete Va camino a la fama
Gracias,. keys.

Estuve revisando el XML Data Binding a ver si había forma de que fuera automático, pero no. Haciendo el cambio manualmente ya no me da ese error.

Me dio otro error relacionado con el orden en el que van los campos en el XML. Al parecer si no están en el orden esperado (Modelo, Capítulo, Subcapitulo, Operacion...) dice que se ha encontrado un campo pero esperaba otro. Se pone tiquismiquis el señorito, pero bueno.

Después de colocarlo todo en el orden correcto, ahora obtengo un error que me hace mucha menos gracia que todos los anteriores:

B4_1000002 - Todos los registros incluidos en la petición son incorrectos.

Pues menuda gracia.

Me ocurre con el 240 y con el 140. Este es el código que utilizo para generar y firmar el XML:

Código Delphi [-]
    f := NewLROEPJ240FacturasEmitidasConSGAltaPeticion;

    f.Cabecera.Modelo:='240';
    f.Cabecera.Capitulo:='1';
    f.Cabecera.SubCapitulo:='1.1';
    f.Cabecera.Operacion:='A00';  //A00 = Alta / M00 = Modificación
    f.Cabecera.Version:='1.0';
    f.Cabecera.Ejercicio:=2021;

    f.Cabecera.ObligadoTributario.NIF:='XXXXXXXX';
    f.Cabecera.ObligadoTributario.ApellidosNombreRazonSocial:='XXXXXXXXXXXXXXXX';

    with f.FacturasEmitidas.Add do
    begin
        TicketBai := EncodeFileToBase64('firmado.xml');
    end;

    XMLDocument2.XML.Text:=f.XML;
    xmldocument2.Active:=True;
    xmldocument2.SaveToFile('lroe.xml');

    FicheroCorregir := TStringList.Create;
    FicheroCorregir.LoadFromFile('lroe.xml');
    FicheroCorregir.Text := AnsiReplaceStr(FicheroCorregir.Text, '','');
    FicheroCorregir.Text := AnsiReplaceStr(FicheroCorregir.Text, '','');
    FicheroCorregir.SaveToFile('lroe.xml');

    comprimir('lroe.xml','archivo.gz');

Y este el del envío:

Código Delphi [-]
    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';

    //Formamos los parametros json de entrada
        json :=  f_cabecera_LROE('LROE', //concepto
                                 '1.1',  //apartado (1.1 = Ingreso con Facturas con Software Garante / 2 = Facturas Recibidas
                                 'XXXXXXXX',  //NIF
                                 'XXXXXXXXXXXXXXXXXX',   //Nombre o Razón Social
                                 '',   //Primer Apellido
                                 '',   //Segundo Apellido
                                 '240',   //140 o 240
                                 '2021'); //Ejercicio

    NetHTTPClient1.CustomHeaders['eus-bizkaia-n3-data'] := json;
    AResponse := NetHTTPClient1.Post('https://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena',RequestBody);


¿En serio? TODOS los registros incluidos en la petición son incorrectos???!?!?

Obviamente en el xml y en el envío no he puesto XXXXXXXX sino los datos correctos, que coinciden con el del certificado digital que estoy usando.

¿Alguien más ha tenido este problema? ¿A qué campos se refiere exactamente?
Responder Con Cita
  #4  
Antiguo 01-02-2021
juramisa juramisa is offline
Miembro
 
Registrado: abr 2007
Posts: 54
Poder: 20
juramisa Va por buen camino
Consultas

Buenos días

El viernes se publicó nuevas posibilidades de Batuz. Entre ellas las consultas, LROE_PF_140_1_1_Ingresos_ConfacturaConSG_Consulta.
Al generar los esquemas os encontraréis que faltan dos valores:
En batuz_enumerados.xsd

Código:
	<simpleType name="EstadoRegistroConsultaEnum">
		<restriction base="string">
			<enumeration value="Correcto">
				<annotation>
					<documentation>Correcto</documentation>
				</annotation>
			</enumeration>
			<enumeration value="AceptadoConErrores">
				<annotation>
					<documentation>Aceptado con Errores</documentation>
				</annotation>
			</enumeration>
			<enumeration value="Anulado">
				<annotation>
					<documentation>Anulado</documentation>
				</annotation>
			</enumeration>
			<enumeration value="Incorrecto">
				<annotation>
					<documentation>Incorrecto</documentation>
				</annotation>
			</enumeration>
		</restriction>
	</simpleType>
en este caso yo lo he sesuento copiando directamente los de "EstadoRegistroEnum" sobre "EstadoRegistroConsultaEnum";

y en Batuz_tiposbasicos.xsd

Código:
	<!-- Cadena de 8 caracteres -->
	<simpleType name="TextMax8Type">
		<restriction base="string">
			<maxLength value="8"/>
		</restriction>
	</simpleType>
Saludos
Responder Con Cita
  #5  
Antiguo 01-02-2021
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 667
Poder: 18
espinete Va camino a la fama
Buenas...

¿Alguien sabe cómo descomprimir la respuesta a la petición (Bizkaia) usando NetHTTPClient y no los componentes de SecureBlackBox?

Con NetHTTPClient consigo hacer el envío de la petición y obtengo los headers, pero no sé cómo acceder a la respuesta en formato gzip y descomprimirla sin usar los componentes de SecureBlackBox.

Con el otro método que usa dichos componentes sí consigo obtener la respuesta y descomprimir el xml que contiene (con el mensaje de error detallado), pero con NetHTTPClient no sé cómo guardar AResponse.ContentStream en un gzip y luego descomprimir su contenido. Lo he intentado de varias maneras y aunque consigo guardar ContentStream como archivo, me falla al descomprimirlo. Ni siquiera puedo abrir el .gz con WinRAR.

Si alguien pudo hacerlo usando NetHTTPClient y las librerías ZLib se lo agradecería.

PD: El error que me devuelve (usando SecureBlackBox) es el siguiente:

El XML del fichero TicketBAI no cumple el esquema.[Linea:1 Columna:52] Error:cvc-complex-type.2.4.a: Invalid content was found starting with element '{"urn:ticketbai:emision":Cabecera}'. One of '{Cabecera}' is expected.

Pero el XML del TicketBAI obviamente sí tiene cabecera, y no hay diferencias con respecto a los ejemplos oficiales de TicketBAI
Responder Con Cita
  #6  
Antiguo 02-02-2021
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.234
Poder: 24
keys Va por buen camino
Hola.

Para sacar el fichero de respuesta de hacienda yo hago lo siguiente.

Código:
    Comprimido : TFileStream;

    AResponse := EnvioBizkaia.Post('https://pruesarrerak.bizkaia.eus/N3B4000M/aurkezpena',RequestBody);
    Comprimido := TFileStream.Create(NombreFicheroSalida, fmCreate);
    Comprimido.CopyFrom(AResponse.ContentStream, AResponse.ContentStream.Size);
    Comprimido.Destroy;
El fichero luego hay que descomprimirlo dos veces.

Para la generación del fichero de TBAI, en delphi no genera bien las cabeceras. Yo tengo que hacer lo siguiente despues de haber generado el fichero.
Código:
    Fichero := TStringList.Create;
         Fichero.LoadFromFile(ficheroTemporal);        
         Fichero.Text := AnsiReplaceStr(Fichero.Text, '<TicketBai xmlns="urn:ticketbai:emision">','<T:TicketBai xmlns:T="urn:ticketbai:emision" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ticketbai:emision ticketBaiV12.xsd ">');
         Fichero.Text := AnsiReplaceStr(Fichero.Text,'</TicketBai>', '</T:TicketBai>');

         System.SysUtils.DeleteFile(ficheroTemporal);
         Fichero.SaveToFile(ficheroTemporal);
         Fichero.Destroy;
Un Saludo
Responder Con Cita
  #7  
Antiguo 03-02-2021
espinete espinete is offline
Miembro
 
Registrado: mar 2009
Posts: 667
Poder: 18
espinete Va camino a la fama
Gracias, keys. Iba por buen camino, pero solo estaba añadiendo la T: antes de TicketBAI y no en el "xmlns:T=" de después. Ni lo había visto

Qué curioso que haya que descomprimir el gzip dos veces. Por cierto, para descomprimirlo usando las librerías de Delphi yo uso este código:

Código Delphi [-]
procedure descomprimir(origen,destino:string);
var LInput, LOutput: TFileStream;
    DecompressionStream: TDecompressionStream;
begin
    LInput := TFileStream.Create(origen, fmOpenRead);
    LOutput := TFileStream.Create(destino, fmCreate);

    //Primera descompresión
    DecompressionStream := TDecompressionStream.Create(LInput, 15 + 16);  // 31 bit wide window = gzip only mode
    LOutput.CopyFrom(DecompressionStream, DecompressionStream.size);

    LOutput.Free;
    LInput.Free;
end;

Como hay que descomprimir dos veces, lo hago así:

Código Delphi [-]
        
    descomprimir('respuesta.gz','respuesta2.gz');
    descomprimir('respuesta2.gz','respuesta.xml');

Y ya luego borro los archivos temporales sobrantes.

Estoy intentando cargar la respuesta XML en el "IXMLLROEPJ240FacturasEmitidasConSGAltaRespuesta" importado, para trabajar "mejor" con las respuestas, pero no lo consigo:

Código Delphi [-]
var Alta240Respuesta : IXMLLROEPJ240FacturasEmitidasConSGAltaRespuesta;
    i : integer;
begin
        Alta240Respuesta := LROE_PJ_240_1_1_FacturasEmitidas_ConSG_AltaRespuesta_V1_0_1.LoadLROEPJ240FacturasEmitidasConSGAltaRe  spuesta('respuesta.xml');
        for i:=0 to Alta240Respuesta.Registros.Count-1 do
        begin
            with Alta240Respuesta.Registros.Registro[i] do
            begin
                memo2.Lines.Append(SituacionRegistro.EstadoRegistro);
                memo2.Lines.Append(SituacionRegistro.CodigoErrorRegistro);
                memo2.Lines.Append(SituacionRegistro.DescripcionErrorRegistro);
                memo2.Lines.Append('');
            end;
        end;
end;

El XML se carga en Alta240Respuesta, porque Alta240Respuesta.XML devuelve el contenido del XML, pero luego no puedo acceder a los valores. No encuentra nada.

No me preocupa mucho porque puedo simplemente cargar el XML en un XMLDocument y trabajar con eso, pero creo que sería más cómodo aprovechar el XML Data Binding, no?

Un saludo y gracias nuevamente. Ahora ya puedo obtener los errores detallados en las respuestas, así que a partir de ahora todo debería ser más sencillo.
Responder Con Cita
  #8  
Antiguo 21-05-2021
kino_ct kino_ct is offline
Registrado
 
Registrado: may 2019
Posts: 3
Poder: 0
kino_ct Va por buen camino
Cita:
Empezado por espinete Ver Mensaje
Gracias,. keys.


Después de colocarlo todo en el orden correcto, ahora obtengo un error que me hace mucha menos gracia que todos los anteriores:

B4_1000002 - Todos los registros incluidos en la petición son incorrectos.

Pues menuda gracia.
Me ocurre con el 240 y con el 140. Este es el código que utilizo para generar y firmar el XML:
¿En serio? TODOS los registros incluidos en la petición son incorrectos???!?!?

Obviamente en el xml y en el envío no he puesto XXXXXXXX sino los datos correctos, que coinciden con el del certificado digital que estoy usando.

¿Alguien más ha tenido este problema? ¿A qué campos se refiere exactamente?



Buenas

Tengo el mismo problema y me ha parecido super bizarro el mensaje y sobre todo la ayuda que da la documentación sobre él.


{StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
eus-bizkaia-n3-mensaje-respuesta: Todos los registros incluidos en la petición son incorrectos.
eus-bizkaia-n3-codigo-respuesta: B4_1000002
eus-bizkaia-n3-numero-registro:
eus-bizkaia-n3-tipo-respuesta: Incorrecto


Alguién sabe como solucionarlo o por donde tirar?


un saludo y gracias
Responder Con Cita
  #9  
Antiguo 21-05-2021
Galaxian Galaxian is offline
Miembro
 
Registrado: mar 2021
Posts: 52
Poder: 6
Galaxian Va por buen camino
Cita:
Empezado por kino_ct Ver Mensaje
Buenas

Tengo el mismo problema y me ha parecido super bizarro el mensaje y sobre todo la ayuda que da la documentación sobre él.


{StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
eus-bizkaia-n3-mensaje-respuesta: Todos los registros incluidos en la petición son incorrectos.
eus-bizkaia-n3-codigo-respuesta: B4_1000002
eus-bizkaia-n3-numero-registro:
eus-bizkaia-n3-tipo-respuesta: Incorrecto


Alguién sabe como solucionarlo o por donde tirar?


un saludo y gracias
En el XML comprimido que devuelve la petición tienes toda la información sobre el error (dependiendo del lenguaje y/o librerías que uses es posible que tengas que descomprimirlo dos veces).
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 08:16:27.


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