Ir para conteúdo
  • Cadastre-se

dev botao

LerRetorno - Sugestão


  • Este tópico foi criado há 3075 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Vi que o ACBR lê apenas arquivos diretamente do HD, acho que poderia colocar uma forma generica e ler direto de uma stream.

No meu caso eu gravei os arquivos no Banco de dados e quando for para realizar a leitura eu ter que gravar no HD para o ACBR Ler o Retorno não é interessante.

Já que o TStringList tem o LoadFromStream ficaria generico tanto para Leitura via Banco de Dados como arquivo em Diretório em HD.

Abaixo segue minha sugestão para Leitura de Retorno com Stream:

 * Passando a stream Válida ele monta de acordo com a stream, passando a stream = nil ele monta de acordo com os parametros de diretorio e arquivo do acbr.

procedure TACBrBoleto.LerRetorno(stream : TMemoryStream) ;
var
  SlRetorno: TStringList;
  NomeArq  : String;
begin
   SlRetorno:= TStringList.Create;
   try
     Self.ListadeBoletos.Clear;

     if not Assigned(stream) then begin

       if NomeArqRetorno = '' then
          raise Exception.Create(ACBrStr('NomeArqRetorno deve ser informado.'));

       NomeArq := IncludeTrailingPathDelimiter(fDirArqRetorno) + NomeArqRetorno;

       if not FilesExists( NomeArq ) then
         raise Exception.Create(ACBrStr('Arquivo não encontrado:'+sLineBreak+NomeArq));

       SlRetorno.LoadFromFile( NomeArq );
     end
     else begin
       SlRetorno.LoadFromStream(stream);
     end;

     if SlRetorno.Count < 1 then
        raise exception.Create(ACBrStr('O Arquivo de Retorno:'+sLineBreak+
                                       NomeArq + sLineBreak+
                                       'está vazio.'+sLineBreak+
                                       ' Não há dados para processar'));

     case Length(SlRetorno.Strings[0]) of
        240 :
          begin
            if Copy(SlRetorno.Strings[0],143,1) <> '2' then
               Raise Exception.Create( ACBrStr( NomeArq + sLineBreak +
                  'Não é um arquivo de Retorno de cobrança com layout CNAB240') );
            LayoutRemessa := c240 ;
          end;

        400 :
          begin
             if (Copy(SlRetorno.Strings[0],1,9) <> '02RETORNO')   then
               Raise Exception.Create( ACBrStr( NomeArq + sLineBreak +
                  'Não é um arquivo de Retorno de cobrança com layout CNAB400'));
            LayoutRemessa := c400 ;
          end;
        else
            raise Exception.Create( ACBrStr( NomeArq + sLineBreak+
               'Não é um arquivo de  Retorno de cobrança CNAB240 ou CNAB400'));
     end;

     if LayoutRemessa = c240 then
        Banco.LerRetorno240(SlRetorno)
     else
        Banco.LerRetorno400(SlRetorno);
   finally
     SlRetorno.Free;
   end;
end;

Link para o comentário
Compartilhar em outros sites

  • Administradores

Boa tarde.

Alteração no svn com um pequeno ajuste.

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Este tópico foi criado há 3075 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.