Bom dia!
O retorno esta vindo certo, acho que o erro esta no fonte do acbr, o correto seria ter a validação para que a variável pegue o CPF com os 11 digitos. Teria que ter este case para verificar se é pessoa fisica ou juridica.
Eu tento alterar o fonte do AcbrBancoSantander.pas, porém o compilador não considera a alteração. E também caso eu consiga alterar, todas as vezes que eu for atualizar o acbr, vou ter que fazer esta alteração no fonte.
Procedure TACBrBancoSantander.LerRetorno400 ( ARetorno: TStringList );
var
Titulo : TACBrTitulo;
ContLinha, CodOcorrencia, CodMotivo : Integer;
Linha, rCedente, rAgencia, rConta, rDigitoConta, rCNPJCPF : String;
wCodBanco: Integer;
begin
wCodBanco := StrToIntDef(copy(ARetorno.Strings[0],77,3),-1);
if (wCodBanco <> Numero) and (wCodBanco <> 353) then
raise Exception.Create(ACBrStr(ACBrBanco.ACBrBoleto.NomeArqRetorno +
'não é um arquivo de retorno do '+ Nome));
rCedente := trim(Copy(ARetorno[0],47,30));
rAgencia := trim(Copy(ARetorno[1],18,4));
rConta := trim(Copy(ARetorno[1],22,8))+ Copy(ARetorno[1],384,1);
rConta := PadLeft( OnlyNumber(rConta),fpTamanhoConta,'0');
rDigitoConta := Copy(ARetorno[1],385,1);
case StrToIntDef(Copy(ARetorno[1],2,2),0) of
01: rCNPJCPF := Copy(ARetorno[1],7,11);
02: rCNPJCPF := Copy(ARetorno[1],4,14);
end;
ACBrBanco.ACBrBoleto.DataCreditoLanc :=
StringToDateTimeDef(Copy(ARetorno[0], 95, 2) + '/' +
Copy(ARetorno[0], 97, 2) + '/' +
Copy(ARetorno[0], 99, 2), 0, 'dd/mm/yy');
with ACBrBanco.ACBrBoleto do
begin
if (not LeCedenteRetorno) and (rCNPJCPF <> OnlyNumber(Cedente.CNPJCPF)) then
raise Exception.Create(ACBrStr('CNPJ\CPF do arquivo inválido'));
if (not LeCedenteRetorno) and ((rAgencia <> OnlyNumber(Cedente.Agencia)) or
(rConta <> OnlyNumber(Cedente.Conta))) then
raise Exception.Create(ACBrStr('Agencia\Conta do arquivo inválido'));
Cedente.Nome := rCedente;
Cedente.CNPJCPF := rCNPJCPF;
Cedente.Agencia := rAgencia;
Cedente.AgenciaDigito:= '0';
Cedente.Conta := rConta;
Cedente.ContaDigito:= rDigitoConta;