Ola pessoal.
Efetuei a pré-homologação do PAF-ECF e o fiscal apontou um problema na geração do arquivo R05, onde o campo CCF estava formatando de forma errada, preenchendo as posições não significativas atras do valor.
EX:
CCF = 4725
O campo com 6 posições no registro R05 estava gerando "472500" ao invés de "004725"
Verifiquei os fontes e vi que o problema estava na unit ACBrPAF_R_Class.pas na linha 519:
LFill( IfThen(NUM_CONT=-1, RegR04.NUM_CONT, NUM_CONT), 6) +
Este trecho de código esta chamando o método IfThen que está na unit ACBrSPEDUtils.pas.
Esta unit somente tem o método IfThen para os tipos Currency e Char, como os valores passados são inteiros ele usa o método IfThen que retorna um Currency, fazendo com que o método LFill para Currency seja invocado ao invés do LFill para Integer, provocando assim um erro na formatação do registro R05.
Existe duas formas de solucionar o problema:
1º Criar um Método IfThen na unit ACBrSPEDUtils.pas que receba dois inteiros como parâmetro, conforme segue:
function IfThen(AValue: Boolean; const ATrue: Integer; AFalse: Integer): Integer;
begin
if AValue then
Result := ATrue
else
Result := AFalse;
end;
2º Adicionar uma referencia para a unit "Math" do delphi em ACBrPAF_R_Class.pas e modificar a linha 519 conforme segue:
LFill( Math.IfThen(NUM_CONT=-1, RegR04.NUM_CONT, NUM_CONT), 6) +
Desta forma ele usará o método IfThen nativo do Dephi.
Esta solução foi testada utilizando o delphi 2010.
Caso lancem a correção nos fontes do SVN me avise para que eu baixe os arquivos atualizados.
Desde já agradeço.