Ir para conteúdo
  • Cadastre-se

dev botao

Recommended Posts

Postado

Bom Dia!

Um de nossos clientes reclamou do seguinte erro ao ler o Retorno gerado pelo Banco Bradesco:

"Could not convert variant of type (UnicodeString) into type (Double)"

Analisando o erro, percebemos que no arquivo de retorno, na posição 321, referente ao segundo motivo, continha uma letra (P4)

"00P4000000"

Se a letra estiver na primeira posição do Motivo (coluna 319) o erro não ocorre, mas da segunda para frente temos esse problema.

Olhando o código fonte, o sistema tenta verificar se o Motivo é diferente de 0, mas como contém uma letra, o erro ocorre nesse momento:

---------------------------------------------------------------------------------------------------------------------------------------------

unit ACBrBoleto;

   //Apos o 1º motivo os 00 significam que não existe mais motivo
                  if(CodMotivo <> 0)then
                   begin
                      MotivoRejeicaoComando.Add(IfThen(copy(Linha,MotivoLinha,2) = '  ','00',copy(Linha,MotivoLinha,2)));
                      if VarIsNumeric(CodMotivo) then
                        DescricaoMotivoRejeicaoComando.Add(CodMotivoRejeicaoToDescricao(OcorrenciaOriginal.Tipo,Integer(CodMotivo)))
                      else
                        DescricaoMotivoRejeicaoComando.Add(CodMotivoRejeicaoToDescricao(OcorrenciaOriginal.Tipo,VarToStr(CodMotivo)));
                   end;

---------------------------------------------------------------------------------------------------------------------------------------------

Erro_Retorno.png

Motivo_P4.png

codMotivo.png

Postado

 

O Manual de Procedimentos Operacionais para Troca de Arquivos (Bradesco) trata dessa informação na Página 41

svn: ..\tools\Bancos\237-Bradesco\CNAB400_Cobranca_2022_VER003.pdf

Para nossa aplicação, se verificar se o código do motivo é um número já resolve o problema.

      if (not(VarIsNumeric(CodMotivo)) or (CodMotivo <> 0)) then

 

manual_motivos.png

codigo_fonte.png

ACBrBoleto.pas

Postado

  Não pode ser "AND".

  Como o motivo é "P4", verifico primeiro se não é número, se não é número, como usei  "OR", ele já entra no if e nem verifica a segunda instrução (codmotivo <> 0)

  Se ele verificar a segunda instrução o erro ocorre.

  Ele precisa entrar no if se o código do motivo não for número ou se for diferente de 0 (caso seja numérico), por isso usei desta forma:

  Se "Não for número" ou se for "diferente de 0".

 if (not(VarIsNumeric(CodMotivo)) or (CodMotivo <> 0)) then

  • Moderadores
Postado
Em 07/11/2024 at 07:40, Andréa Ascont Sistemas disse:

  Não pode ser "AND".

  Como o motivo é "P4", verifico primeiro se não é número, se não é número, como usei  "OR", ele já entra no if e nem verifica a segunda instrução (codmotivo <> 0)

  Se ele verificar a segunda instrução o erro ocorre.

  Ele precisa entrar no if se o código do motivo não for número ou se for diferente de 0 (caso seja numérico), por isso usei desta forma:

  Se "Não for número" ou se for "diferente de 0".

 if (not(VarIsNumeric(CodMotivo)) or (CodMotivo <> 0)) then

Hum no svn

ciente que pode ser mudado

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.