Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Delphi para la web (https://www.clubdelphi.com/foros/forumdisplay.php?f=51)
-   -   Empaquetar XMLs en un GZIP (https://www.clubdelphi.com/foros/showthread.php?t=96575)

mandilium 26-01-2024 15:51:44

Empaquetar XMLs en un GZIP
 
Buen día,
tengo problemas con el envió de facturas masivas para la facturación electrónica, según lo que indican se debe seguir con un código en java, pero estoy usando delphi, aparte de ello es solo para un archivo, el código que uso para la compresión y envió individual:
Código:

procedure compressGzip(factura, agzip : string);
var LInput, LOutput: TFileStream;
    LZip: TZCompressionStream;
begin
  LInput := TFileStream.Create(factura, fmOpenRead);
  LOutput := TFileStream.Create(agzip, fmCreate);
  LZip := TZCompressionStream.Create(LOutput, zcDefault, 15 + 16);
  LZip.CopyFrom(LInput, LInput.Size);
  LZip.Free;
  LInput.Free;
  LOutput.Free;
end;

no tengo ningún problema al usarlo y hacer el envió, mi pregunta va como puedo generarlo para que sean varios archivos xml no solo uno.
Agradezco sus comentarios

Delphi01 29-01-2024 00:29:44

Cita:

Empezado por mandilium (Mensaje 554179)
Buen día,
tengo problemas con el envió de facturas masivas para la facturación electrónica, según lo que indican se debe seguir con un código en java, pero estoy usando delphi, aparte de ello es solo para un archivo, el código que uso para la compresión y envió individual:
Código:

procedure compressGzip(factura, agzip : string);
var LInput, LOutput: TFileStream;
    LZip: TZCompressionStream;
begin
  LInput := TFileStream.Create(factura, fmOpenRead);
  LOutput := TFileStream.Create(agzip, fmCreate);
  LZip := TZCompressionStream.Create(LOutput, zcDefault, 15 + 16);
  LZip.CopyFrom(LInput, LInput.Size);
  LZip.Free;
  LInput.Free;
  LOutput.Free;
end;

no tengo ningún problema al usarlo y hacer el envió, mi pregunta va como puedo generarlo para que sean varios archivos xml no solo uno.
Agradezco sus comentarios

Para poder enviar múltiples archivos XML en lugar de solo uno, puedes modificar la función 'compressGzip' en tu código Delphi para recibir una lista de nombres de archivo en lugar de solo uno. Luego, puedes recorrer esa lista y comprimir cada archivo XML por separado. Aquí tienes un ejemplo de cómo podrías hacerlo:
Código:


uses
  System.IOUtils, System.Classes, System.Zip;

procedure CompressGzip(facturas: TArray<string>);
var
  i: Integer;
  LZip: TZipFile;
  LInput, LOutput: TFileStream;
begin
  LZip := TZipFile.Create;
  try
    LOutput := TFileStream.Create('facturas.zip', fmCreate);
    try
      LZip.Open(LOutput, zmWrite);
     
      for i := 0 to Length(facturas) - 1 do
      begin
        LInput := TFileStream.Create(facturas[i], fmOpenRead);
        try
          LZip.Add(LInput, ExtractFileName(facturas[i]));
        finally
          LInput.Free;
        end;
      end;
     
      LZip.Close;
    finally
      LOutput.Free;
    end;
  finally
    LZip.Free;
  end;
end;

//Aquí está cómo puedes llamar a esta función con tus archivos XML:

var
  facturas: TArray<string>;
begin
  SetLength(facturas, 3); // Establece la longitud del array según la cantidad de archivos XML que tengas
 
  facturas[0] := 'ruta_factura1.xml';
  facturas[1] := 'ruta_factura2.xml';
  facturas[2] := 'ruta_factura3.xml';
 
  CompressGzip(facturas);
end;


mandilium 29-01-2024 14:09:54

Muchísimas gracias, realizare las pruebas para el envió.

mandilium 29-01-2024 15:19:52

Favorablemente el código me ayudo bastante, pero al realizar el envió mediante el servicio soap al servicio de impuestos nacionales me genera el siguiente error:
Código:

<mensajesList>
<codigo>920</codigo>
<descripcion>EL PARAMETRO ARCHIVO ES INVALIDO No se desempaqueto XMLs</descripcion>
</mensajesList>

pero los archivos se comprimen de forma correcta, si alguien tuviera la información para realizar el correcto empaquetado y compresión le agradecería mucho

pgranados 29-01-2024 19:40:53

Que versión de Delphi estas usando? Porque no usas System.Zip ?

Delphi01 29-01-2024 19:47:20

Cita:

Empezado por mandilium (Mensaje 554213)
Favorablemente el código me ayudo bastante, pero al realizar el envió mediante el servicio soap al servicio de impuestos nacionales me genera el siguiente error:
Código:

<mensajesList>
<codigo>920</codigo>
<descripcion>EL PARAMETRO ARCHIVO ES INVALIDO No se desempaqueto XMLs</descripcion>
</mensajesList>

pero los archivos se comprimen de forma correcta, si alguien tuviera la información para realizar el correcto empaquetado y compresión le agradecería mucho

Es importante verificar que el paquete y los parámetros enviados cumplan con las especificaciones proporcionadas por el Servicio de Impuestos Nacionales para la recepción masiva de facturas electrónicas. suena algo así ...

mandilium 09-02-2024 15:28:37

Ya resolví el problema con el empaquetado, el detalle era que lo primero que se debía realizar es el empaquetado tipo tar y después en un gzip.
Muchas gracias por las respuestas proporcionadas por todos


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

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