Cita:
Empezado por mandilium
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;