Ir para conteúdo
  • Cadastre-se

Problema com a função UpdateCrc32 - Range check error


Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 2326 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado

Boa tarde pessoal, 

    Estou recebendo o erro de Range check error, ao executar o método:

ACBrNFe1.DistribuicaoDFePorChaveNFe(0,'65212607000180', '31171110705501000470550010003151641421771140');

    Retornando a seguinte mensagem:

Não foi possivel importar o XML, tente novamente em alguns segundos!
WebService Distribuição de DFe:
- Inativo ou Inoperante tente novamente.
Range check error

    Efetuando o debug da função, cheguei que o problema ocorre na função:

function UpdateCrc32 (function crc32(thecrc: cardinal; S: TStream; len: Cardinal): Cardinal;

    Que está implementada na unit GZIPUtils na linha 395 que contêm o comando:

Result := UpdateCrc32(b, Result);

    Debugando passo-a-passo para um melhor entendimento teremos:

ACBrNFe            -> function TACBrNFe.DistribuicaoDFePorChaveNFe(AcUFAutor: integer; ACNPJCPF, AchNFe: String): Boolean;
ACBrNFe            -> function TACBrNFe.Distribuicao(AcUFAutor: integer; ACNPJCPF, AultNSU, ANSU,  chNFe: String): Boolean; (Linha 909)
ACBrDFeWebService  -> function TDFeWebService.Executar: Boolean; (Linha 187)
ACBrNFeWebServices -> function TNFeEnvEvento.TratarResposta: Boolean; (Linha 2989)
pcnRetDistDFeInt   -> function TRetEventoNFe.LerXml: Boolean; (Linha 435)
ACBrCompress       -> function DeCompress(const ABinaryString: AnsiString): AnsiString; (Linha 141)
ACBrCompress       -> function DeCompress(AStream: TStream): AnsiString; (Linha 154)
ACBrCompress       -> function DeCompress(inStream, outStream: TStream): Boolean; (Linha 169)
GZIPUtils          -> function unzipStream(inStream, outStream: TStream): boolean; (Linha 271) 
GZIPUtils          -> function crc32(thecrc: cardinal; S: TStream; len: Cardinal): Cardinal; (Linha 395) => Erro na função UpdateCrc32(b, Result);

    Retornando:

Valor de "b"      = 60
Valor de "Result" = 4294967295
Msg de erro:      "Range check error"

    Efetuei o teste com outras chaves,  utilizando outros CNPJ, mas o erro persiste.

    Atualizei o source da ACBr pelo SVN hoje, mas o problema persiste.

    Gostaria da opinião de vocês sobre este assunto. Houve alguma alteração de propriedade ou atualização de DLL que impactaria neste erro?

    Desde já agradeço a opinião de vocês.

  • Consultores
Postado

Boa tarde

pode ser que o arquivo não esteja vindo completo e está tentando desligar.

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
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 !!

  • Membros Pro
Postado

Estranho que é uma implementação que não foi alterada.

O componente ACBrNFe teria algum timeout que teríamos que setar para este caso?

Nos clientes funciona normal. Estamos fazendo uma bateria de testes no sistema e fomos validar esta função e recebemos o erro acima em todos os computadores que testamos.

  • Membros Pro
Postado

Fizemos um teste aqui, da seguinte maneira, acrescentamos na unit ACBRNFeWebServices, na function TDistribuicaoDFe.TratarResposta, comando para salvar em arquivo a variável FPRetWS antes de executar FretDistDFeInt.LerXml, foi retornado o arquivo em anexo(teste2.xml).

A princípio o arquivo está completo.

teste2.xml

  • Consultores
Postado

Qual versão do delphi está usando?

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
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 !!

  • Membros Pro
Postado (editado)

Delphi XE2 Update 4

A princípio, efetuando um debug aqui, parece problema do tipo de encoding que está sendo utilizado, ANSI e UTF8.

 

Editado por Intelliware
  • Consultores
Postado
2 minutos atrás, Intelliware disse:

Delphi XE2 Update 4

Estranho. poderia informar um passo a passo com o demo do ACBr que está no svn?

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
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 !!

  • Membros Pro
Postado

Juliomar, boa tarde.

No demo da ACBr, funciona normal. Com as mesmas configurações, no nosso projeto não está funcionando. Estamos tentando verificar o que pode estar de diferente em ambos os projetos. Já validamos os pacotes instalados e aparentemente está tudo normal. Mas no projeto nosso continua não funcionando. Bem estranho.

  • Consultores
Postado
7 minutos atrás, Intelliware disse:

Juliomar, boa tarde.

No demo da ACBr, funciona normal. Com as mesmas configurações, no nosso projeto não está funcionando. Estamos tentando verificar o que pode estar de diferente em ambos os projetos. Já validamos os pacotes instalados e aparentemente está tudo normal. Mas no projeto nosso continua não funcionando. Bem estranho.

Opa agora a noticia foi boa!

então basta ter a mesma situação que irá funcionar. 

Obrigado pelo retorno.

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
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 !!

  • Membros Pro
Postado

Bom dia Juliomar,

Ontem, após vários testes e comparações, descobrimos o seguinte:

Se na propriedade do projeto estiver marcada a opção:

Delphi Compiler -> Compiling -> Runtime errors -> Range checking -> True

configuracao-projeto.thumb.jpg.f00eb63aff80668156698efbbde80e6b.jpg

Na unit GZIPUtils.pas, na função:

function crc32(thecrc: cardinal; S: TStream; len: Cardinal): Cardinal;

Na linha 395:

Result := UpdateCrc32(b, Result);

Começamos a receber o erro de Range check error.

Pelo que verificamos em debug, o escopo do Cardinal é de 0..4294967295, enquanto que a função UpdateCrc32 retorna um tipo Integer que pode ser de -2147483648..2147483647. Logo, ao retornar um valor negativo ou um valor além do escopo do tipo da variável, vai ocasionar a exceção descrita.

O demo da ACBr e o outro projeto nosso que não deu erro estava False na propriedade acima. No projeto que apresentava o problema setamos para False, efetuamos um Clean e um Build e voltou a ter o mesmo comportamento dos outros projetos. 

Com isto, resolvemos o problema. Estamos te passando o que concluímos para uma avaliação.

Desde já agradeço.

 

  • Curtir 2
  • 2 anos depois...
  • Consultores
Postado
Em 07/01/2020 at 17:03, LUCAS CARDOSO DA SILVA disse:

Dessa forma todas as vezes que o ACBR for atualizado tem que refazer esta alteração na unit do gZip?

Acho que você não notou que o tópico é de mais de 2 anos atrás. Não temos ciência dessa situação hoje.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Consultores
Postado
2 horas atrás, LUCAS CARDOSO DA SILVA disse:

Notei, porém o problema continua.

Se tiver alguma sugestão de correção, fique a vontade para anexar o arquivo alterado para análise.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado
Em 13/01/2020 at 10:38, LUCAS CARDOSO DA SILVA disse:

Notei, porém o problema continua.

Lucas, ainda hoje em 2020 deparei com esse erro, isso porque quis enfeitar pavão e carregar xml de nf de compra do cliente...

O que vc fez para resolver?

Detalhe: Tem retorno da chamada do webservice.

Postado

Olá Antonio, tem de promover esta alteração

No nosso projeto optamos por modificar a unit do GZIPUtils com o seguinte trecho de código:

 

    {$R-} // disable range checking
      Result := UpdateCrc32(b, Result);
    {$R+} // enable range checking

 

aqui funcionou, porém sempre que atualiza o acbr tem que refezar

  • Curtir 1
Postado
3 horas atrás, LUCAS CARDOSO DA SILVA disse:

Olá Antonio, tem de promover esta alteração

No nosso projeto optamos por modificar a unit do GZIPUtils com o seguinte trecho de código:

 

    {$R-} // disable range checking
      Result := UpdateCrc32(b, Result);
    {$R+} // enable range checking

 

aqui funcionou, porém sempre que atualiza o acbr tem que refezar

Crendeuspai.. não tem alternativa... bora lá..

 

Postado (editado)
Em 29/01/2020 at 10:03, Daniel Simoes disse:

Commit [r18943]

tem uma coisa ainda nessa unit "synautil": que dá um hint: não sei se é descuido de quem fez, ou a primeira atribuição estava ali antes para algo e não mais precisa. O primeiro x é inutil.

No build all que detecta esse hint...

veja a imagem:

image.thumb.png.0c7dc859aca19f83a86ecb319c73854d.png

Editado por Antonio Gomes
asynautil
Postado
22 horas atrás, Daniel Simoes disse:

A atribuição é necessária...veja o IF logo abaixo...

o if sim, linha 1848 desnecessário mesmo... pois o x vai receber novamente valor na linha 1853... mas ok... não entendi. fecha o topico.

  • Este tópico foi criado há 2326 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...