Ir para conteúdo
  • Cadastre-se

Wagner Freitas

Membros
  • Total de ítens

    14
  • Registro em

  • Última visita

Tudo que Wagner Freitas postou

  1. Vou fazer a alteração necessária e posto aqui meu código fonte para análise. Obrigado pelo retorno.
  2. Bom dia! Estou implementando o boleto da CEF e percebi que no arquivo ACBrBoleto, o método LeRetorno contém um teste que lança uma exceção se o código remessa/retorno for diferente de '2'. procedure TACBrBoleto.LerRetorno(AStream: TStream); ... 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') ); ... Porém existem outros casos que podem ser tratados e por conta desse teste eu não consigo tratá-los na unit ACBrBancoCaixa. Não seria melhor transferir esse teste para dentro das units de cada banco? Pois dessa forma cada banco poderia implementar o tratamento para estes outros casos. Att.
  3. Ao ler retorno CNAB_240, o método "CodigoLiquidacao_Descricao" não está tratando os codLiquidacao (09, 10,11,12,13,14) que são os códigos de baixa. Segue em anexo um print da parte da documentação onde são informados os códigos. Att. Segue também o arquivo ACBrBancoCaixa-15399.pas com as alteração necessária.
  4. Olá sorrilha! De acordo com o Manual_Leiaute_CNAB240_SIGCB temos: G079 - Número Remessa / Retorno Número adotado e controlado pelo responsável pela geração magnética dos dados contidos no arquivo para identificar a sequência de envio ou devolução do arquivo entre o Beneficiário e o Banco Beneficiário. Obs.: o número informado deve ser sequencial crescente (anterior + 1). Ou seja, este número é gerado pela sua aplicação. Se você envia uma remessa com numero N, o banco só aceita que a próxima remessa seja maior do que N.
  5. Bom dia! No arquivo ACBrBoleto.pas, o método fBancoClass.CodOcorrenciaToTipo(CodOcorrencia) deveria se chamar fBancoClass.CodOcorrenciaToTipoRetorno(CodOcorrencia), pois não retorna os tipos de ocorrência de remessa. Como não existe nenhum método que retorne o tipo de remessa criei este outro método fBancoClass.CodOcorrenciaToTipoRemessa(CodOcorrencia) para suprir a necessidade que tenho na minha aplicação de saber o TipoRemessa a partir do CodOcorrencia. Já que eu criei o método fBancoClass.CodOcorrenciaToTipoRemessa(CodOcorrencia) no arquivo ACBRBoleto.pas, o adicionei no lugar do case do arquivo ACBrBancoCaixa.pas, pois o método criado retorna o mesmo resultado do case. Espero ter respondido sua pergunta. Att.
  6. Gostaria de saber se as alterações do herculanojs já foram ou estão sendo analisadas.
  7. Segue abaixo as alterações realizadas nos arquivos ACBrBoleto.pas e ACBrBancoCaixa.pas citadas no primeiro post. Atualizei os arquivos e descrevi abaixo minhas alterações. {Arquivo ACBrBoleto.pas} ========================================================================================== {Metodo Antigo - No arquivo ACBrBancoCaixa.pas o metodo "CodOcorrenciaToTipo" retorna apenas "TipoRetorno" e não "TipoRemessa"} function TACBrBanco.CodOcorrenciaToTipoRemessa(const CodOcorrencia: Integer ) : TACBrTipoOcorrencia; begin Result:= fBancoClass.CodOcorrenciaToTipo(CodOcorrencia); <<<< antigo end; {Metodo Alterado - Criei um metodo que retorna apenas os "TipoRemessa"} function TACBrBanco.CodOcorrenciaToTipoRemessa(const CodOcorrencia: Integer ) : TACBrTipoOcorrencia; begin Result:= fBancoClass.CodOcorrenciaToTipoRemessa(CodOcorrencia); <<<< novo end; {Metodo Adicionado} function TACBrBanco.TipoOcorrenciaToCodRemessa(const TipoOcorrencia: TACBrTipoOcorrencia ) : String; begin Result:= fBancoClass.TipoOcorrenciaToCodRemessa(TipoOcorrencia); end; {Metodo Adicionado} function TACBrBancoClass.TipoOcorrenciaToCodRemessa(const TipoOcorrencia : TACBrTipoOcorrencia ) : String ; begin Result := '01'; end ; {Arquivo ACBrBancoCaixa.pas} ========================================================================================== {Metodo Adicionado} function TACBrCaixaEconomica.CodOcorrenciaToTipoRemessa( const CodOcorrencia: Integer): TACBrTipoOcorrencia; begin case CodOcorrencia of 02: Result := toRemessaBaixar; 04: Result := toRemessaConcederAbatimento; 05: Result := toRemessaCancelarAbatimento; 06: Result := toRemessaAlterarVencimento; 07: Result := toRemessaConcederDesconto; 08: Result := toRemessaCancelarDesconto; 09: Result := toRemessaProtestar; 10: Result := toRemessaCancelarInstrucaoProtestoBaixa; 11: Result := toRemessaCancelarInstrucaoProtesto; 13: Result := toRemessaDispensarJuros; 31: Result := toRemessaAlterarNomeEnderecoSacado; else Result := toRemessaRegistrar; end; end; {Metodo Adicionado} function TACBrCaixaEconomica.TipoOcorrenciaToCodRemessa(const TipoOcorrencia: TACBrTipoOcorrencia): string; begin case TipoOcorrencia of toRemessaBaixar : Result := '02'; toRemessaConcederAbatimento : Result := '04'; toRemessaCancelarAbatimento : Result := '05'; toRemessaAlterarVencimento : Result := '06'; toRemessaConcederDesconto : Result := '07'; toRemessaCancelarDesconto : Result := '08'; toRemessaProtestar : Result := '09'; toRemessaCancelarInstrucaoProtestoBaixa: Result := '10'; toRemessaCancelarInstrucaoProtesto : Result := '11'; toRemessaDispensarJuros : Result := '13'; toRemessaAlterarNomeEnderecoSacado : Result := '31'; else Result := '01'; end; end; {Criei o metodo "TipoOcorrenciaToCodRemessa" com o conteudo do case} {Metodo Antigo} function TACBrCaixaEconomica.GerarRegistroTransacao240(ACBrTitulo : TACBrTitulo): String; begin ... case OcorrenciaOriginal.Tipo of toRemessaBaixar : ATipoOcorrencia := '02'; toRemessaConcederAbatimento : ATipoOcorrencia := '04'; toRemessaCancelarAbatimento : ATipoOcorrencia := '05'; toRemessaAlterarVencimento : ATipoOcorrencia := '06'; toRemessaConcederDesconto : ATipoOcorrencia := '07'; toRemessaCancelarDesconto : ATipoOcorrencia := '08'; toRemessaProtestar : ATipoOcorrencia := '09'; toRemessaCancelarInstrucaoProtestoBaixa: ATipoOcorrencia := '10'; toRemessaCancelarInstrucaoProtesto : ATipoOcorrencia := '11'; toRemessaDispensarJuros : ATipoOcorrencia := '13'; toRemessaAlterarNomeEnderecoSacado : ATipoOcorrencia := '31'; else ATipoOcorrencia := '01'; end; ... end; {Metodo Alterado} function TACBrCaixaEconomica.GerarRegistroTransacao240(ACBrTitulo : TACBrTitulo): String; begin ... ATipoOcorrencia := TipoOcorrenciaToCodRemessa(OcorrenciaOriginal.Tipo); ... end; Tá aí minha contribuição. Espero ter ajudado! Desde já agradeço a oportunidade! ACBrBoleto.pas ACBrBancoCaixa.pas
  8. Faltou alterar a mensagem do boleto. Favou trocar os arquivos anteriores por estes abaixo. ACBrBoleto.pas ACBrBancoCaixa.pas
  9. Bom dia! Verifiquei que ao montar o arquivo remessa da Caixa Econômica federal, estão inserindo a DataMoraJuros no lugar da DataMulta. Isso obriga que a cobrança da Multa seja cobrada sempre a partir da mesma data que o juros de mora ao dia. Se eu não estiver errado, essas datas são independentes, por isso fiz as alterações necessárias para corrigir este problema. Segue em anexo os arquivos alterados. ACBrBancoCaixa.pas ACBrBoleto.pas
  10. Boa Tarde! Realizei a extração de dois métodos que acho importantes para o tratamento do TipoOcorrencia para todos os bancos. Por enquanto implementei estes métodos apenas no "ACBrBoleto.pas" e "ACBrBancoCaixa.pas". Poderiam verificar se estão corretas essas alterações e se poderiam ser incluídas no projeto ACBrBoleto? Segue em anexo as alterações. Att. ACBrBancoCaixa.pas ACBrBoleto.pas
  11. Fiz uma implementação que retorna uma resposta mais específica quando se lê um arquivo PRÉ-CRÍTICA. Talvez ajude.
  12. Estou compartilhando uma alteração que fiz no processamento do retorno PRÉ-CRÍTICA para ser enviado ao SVN. Fiz o seguinte: Quando recebo um arquivo de retorno PRÉ-CRÍTICA da CEF e tento processá-lo, o ACBrBoleto me retorna a seguinte mensagem: "ACBrBanco.ACBrBoleto.NomeArqRetorno +'não é um arquivo de retorno do '+ Nome". O que eu fiz foi analisar o arquivo PRÉ-CRÍTICA e retornar uma mensagem mais específica quanto às informações contidas nesse arquivo. O arquivo PRÉ-CRÍTICA retorna na posição 143 os seguintes status: 3 - Arquivo PRÉ-CRITICA PROCESSADO; 5 - Arquivo PRÉ-CRITICA REJEITADO; 5 - Arquivo PRÉ-CRITICA REJEITADO - W (posição 14) - Mostra qual o motivo da rejeição (no caso mostra o código que contém a descrição do motivo da rejeição que está contido no manual CNAB240 da caixa). Criei também um método para retornar o TACBrTipoOcorrencia passando o codOcorrencia. DÚVIDA: Por enquanto, trabalho apenas com a Caixa Econômica federal e estou na dúvida se alteração que fiz poderia servir para qualquer banco, dessa forma eu poderia transferir o tratamento que fiz no arquivo específico da CEF (ACBrBancoCaixa) para o arquivo Geral (ACBrBoleto). Att. Wagner Freitas ACBrBancoCaixa.pas ACBrBoleto.pas
×
×
  • 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.