Ir para conteúdo
  • Cadastre-se

EMBarbosa

Consultores
  • Total de ítens

    9.381
  • Registro em

  • Última visita

  • Days Won

    117

Tudo que EMBarbosa postou

  1. Na verdade, a princípio, você não deveria fazer esse tipo de comparação. É para isso que existem as funções como SameValue, CompareValue, IsZero na unit Math do Delphi (e Lazarus). Daniel, provavelmente o que você quer é algo mais parecido com o What Every Computer Scientist Should Know About Floating- Point Arithmetic. De forma resumida, o que acontece é que, como existem números infinitos e memória limitada, alguns números não são possíveis ser representados. Então para esses números os valores são armazenados internamente com uma aproximação. Então, dependendo do valor, temos que lidar com uma aproximação. Tem outro tópico no fórum onde teremos que lidar com um problema semelhante devido as peculiaridades dos pontos flutuantes. Inclusive com código para teste. Finalmente, essas diferenças são o motivo de muitas pessoas aconselharem a trabalhar com o tipo Currency para valores monetários ou onde não se pode perder a precisão. O tipo Currency não é armazenado como um float, mas como de ponto fixo (mais precisamente como um int64). O problema é que nesse caso, ele possui um número de dígitos significativos limitado, não sendo possível expressar nenhuma diferença entre valores fora de sua precisão (que é 4). Assim, para os valores Currency, não há diferença entre 1,12345678 ou 1,12348765.
  2. Olá Poliany, você tentou ler o log? Tem alguma informação a mais? Poderia anexar o log?
  3. Parece que o comando que pega o NumLoja não foi pego no log. Poderia verificar se faltou chamar esse refazendo os passos?
  4. Esse é um erro fatal originado por um outro erro. Você precisa postar a mensagem completa de erro especialmente com os erros imediatamente anteriores a esse, para sabermos o que aconteceu.
  5. Isso não deveria fazer diferença. Pelo contrário, evitar o uso do ProcessMessages pode até corrigir alguns problemas relacionados com comandos paralelos mesmo. Você consegue fazer um teste usando o demo em Delphi disponibilizado pela Bematech?
  6. Acho que você esqueceu o Log.
  7. Tenta o fazer ACBrECF.Device.ProcessMessages := False;
  8. Você consegue verificar se a porta está marcada como serial no código? Veja que no código do TACBrDevice.LeByte, ele acessa a propriedade IsSerialPort. Em caso negativo, pode ser algum problema no código da HookLeString. Mas se essa propriedade IsSerialPort for verdadeira, ele chama o RecvByte. Essa parte do código daí pra frente já é de responsabilidade do projeto Synapse. De qualquer forma, eu fui tentar dar uma olhada e o callstack após o LeByte que considera o TimeOut é mais ou menos esse: function TACBrDevice.LeByte(ATimeOut: Integer): Byte; function TBlockSerial.RecvByte(timeout: integer): byte; function TBlockSerial.RecvPacket(Timeout: Integer): AnsiString; //É aqui que é chamado a Exception ESynaSerError Communication error 9997 function TBlockSerial.CanRead(Timeout: integer): boolean; // Quando essa função não retorna, gera o erro 9997 function TBlockSerial.CanEvent(Event: dword; Timeout: integer): boolean; //Usa o TimeOut para chamar a função abaixo: WaitForSingleObject(Overlapped.hEvent, Timeout); //API do Windows; Bom, exceto se eu tiver despercebido algo, no final das contas, a responsabilidade para verificar se o timeout foi alcançado é do WaitForSingleObject que é uma API do Windows em geral muito confiável. Seria bom verificar se essa parte do código está sendo chamada e o TimeOut está correto nela. É importante lembrar que se estiver debugando, o tempo que Delphi para pra que você possa responder a esse tipo de exception é contado no TimeOut. Logo, se estiver debugando e essa exception for levantada e você não a responder rapidamente, isso vai gerar erro como se o ECF não tivesse respondido.
  9. Subi suas alterações para o SVN na Revisão 6974. Pelo que vi está tudo certo. Favor testar e reportar qualquer problema. Obrigado.
  10. Claro. Se não pudesse, pra que serviria a outra tabela?
  11. é que eles estão usando Git agora e não o SVN.
  12. Ou seja, no Delphi XE vai fazer uso da interface IWebBrowser2 disponível na SHDOCVW.DLL. Se esta dll estiver incorreta, pode ser esse o problema ou talvez a versão do seu Delphi seja antiga. Qual a versão do seu Delphi e sistema operacional?
  13. O TWebBrowser é na verdade o IE instalado na máquina. Então basta atualizar o IE da máquina.
  14. É necessário que você diga as mensagens de erro completas. 'Ancestor for TfqrDanfeQR' não diz nada. Tem também a possibilidade de seu código estar alterado. Seria bom você verificar.
  15. A mensagem anterior foi removida. Estou removendo esta parte do seu post para ficar mais claro qual é a sua dúvida.
  16. Legal. Não sabia deste detalhe. Bom pelo menos o próximo que for mexer já sabe onde terá que fazê-lo. E se alguém precisar desses campos já sabe que por enquanto terá que implementar também...
  17. Então é provável que o erro de instalação está sendo causado pelo antivírus. Você pode verificar as alterações no código fonte e ver se foi introduzido algum vírus. Mas como eu disse acima, é um falso positivo.
  18. Tanto o layout 1 como o layout 2.0 estão no Manual como tendo 9 campos. Ou o Manual, ou o PVA estão errados. Você pode averiguar no site do SPED se há alguma informação adicional sobre o assunto?
  19. Mas o que tem então a ver as duas threads que você citou? Anexe o log do ACBrECF para que possamos analisar.
  20. São Paulo não tem exigência do PAF-ECF. Apenas outros estados.
  21. TEM que fazer? Não. PODEM fazer? Sim. Você pode ter uma área de utilidades para os ECFs que faça o cadastro. Veja o Manual do ECF.
  22. Me parece que você tem 3 erros diferentes. Então vamos lá: ACBrDiversos.bpl é acusado de ser vírus. - A menos que esteja com vírus em sua máquina, não há muito o que fazer. Isso é um problema comum em aplicações Delphi que fazem acesso a porta serial e internet ou fazem uso de APIs do Windows, digamos, consideradas menos seguras. Veja Compilation Failure - Talvez tenha que fazer uma limpeza para ter certeza que não é nenhuma influencia de outra instalação. Veja: Não foi possível localizar o ponto de entrada - Veja:
  23. Não há muito o que fazer no código para melhorar isso. O alerta do vírus é um falso positivo. Você pode perceber isso pois todas as detecções são do tipo Generic, ou seja, genéricas. Quer dizer que foi detectado como por um algorítimo heurístico, que funciona muitas vezes, mas nem sempre está certo. Tem muita informação sobre isso na web. Nessa pergunta do StackOverflow você vai encontrar vários links explicando o motivo e algumas das coisas que você pode fazer. Esse tópico também já é recorrente aqui no fórum, como se pode ver abaixo:
  24. Beleza. Menos mal. Estou separando nossa conversa em um tópico separado para facilitar a pesquisa e não ficar tão fora do assunto.
×
×
  • 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.