Ver Mensaje Individual
  #2  
Antiguo 28-01-2024
Delphi01 Delphi01 is offline
Miembro
 
Registrado: nov 2015
Ubicación: Barcelona,España
Posts: 68
Reputación: 9
Delphi01 Va por buen camino
Cita:
Empezado por mandilium Ver Mensaje
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;
Responder Con Cita