Temos vários casos de lentidão nos SATs da Bematech.
Os Sats Bematech são lentos, e ficam mais lentos com o passar do tempo. Porém no Windows 10, pelo que testamos aqui, piora bastante, principalmente com o Windows Defender como antivírus.
O que melhora bastante na nossa aplicação, é incluir nas exclusões do Windows Defender: Pasta, Executável e Nome do Processo da aplicação.
Tente configurar o Windows Defender e me fale se para o seu caso melhorou.
Apenas para comparação, se puder enviar a versão do driver instalado e a versão da DLL. Te falo se estamos usando a mesma.
Encontrei o problema. A configuração estava certa, mas o arquivo simcomu-s.exe que eles mandam substituir deve ser feito depois da instalação do módulo CardSE. Eu havia substituido antes. Substitui novamente e aprovou normalmente.
Temos essa situação aqui com os SATs da Bematech também.
A equipe de engenharia que desenvolveu esse SAT da Bematech (Todos até o BemaSAT Go) está de parabéns! Falo porque tivemos que colocar em produção lá no inicio da obrigatoriedade (Postos de Combustível), e passei por todos os problemas que possam imaginar com essa Obra Prima. 😜
Nos casos que observamos ocorre o seguinte:
- Aplicação envia a venda para o SAT.
- SAT demora tempo demais para processar a venda (talvez processador ruim, ou esteja fazendo outra tarefa internamente).
- Aplicação recebe Timeout (normalmente a mensagem "falha na abertura da porta", retornada pela DLL).
- Aplicação (ou operador) manda a venda novamente, e recebe o sucesso.
Problema é que o mesmo a DLL respondendo falha, o sat efetua a venda com atraso, e transmite para a SEFAZ.
Resultado é uma venda duplicada, triplicada, etc.
Uma coisa que fazemos aqui que melhora esse processo, é configurar o timeout do SAT.
Caso não tenha na pasta da aplicação o arquivo bemasat.xml, talvez a dll crie o mesmo automaticamente na primeira comunicação. Nos downloads da Bematech vem o xml junto com a DLL.
Nesse arquivo tem o timeout padrão de todos os comandos. O de venda se me lembro bem era muito baixo.
Segue o trecho do XML:
<Timeouts>
<ativacao>1800000</ativacao>
<icp_brasil>600000</icp_brasil>
<consultar_sat>30000</consultar_sat>
<associar_assinatura>40000</associar_assinatura>
<consultar_sessao>40000</consultar_sessao>
<trocar_codigo_ativacao>40000</trocar_codigo_ativacao>
<bloquear_sat>1200000</bloquear_sat>
<desbloquear_sat>80000</desbloquear_sat>
<extrair_logs>180000</extrair_logs>
<atualizar_sat>3600000</atualizar_sat>
<configurar_rede>120000</configurar_rede>
<enviar_venda>60000</enviar_venda>
<cancelar_venda>60000</cancelar_venda>
<teste_fim_a_fim>40000</teste_fim_a_fim>
<consultar_status>60000</consultar_status>
</Timeouts>
No exemplo acima esta com 60 segundos de timeout. Com isso a DLL não apresenta erro antes desse tempo. Como colateral, se o SAT estiver desligado, vai levar 1 minuto para apresentar o erro.
Tente mudar esses timeouts e veja se vai diminuir esses problemas, temos casos que precisamos de timeouts maiores, principalmente em enviar_venda e consultar_status.
No ACBrSAT não existem configurações de timeout, pois a responsabilidade é da DLL do fabricante.
André, para verificar se a operação foi executada ou não no equipamento, utilize Resposta.codigoDeRetorno.
Caso não tenha sido executado, irá retormar 0, ou o código de erro.
Acredito que não tenha como usar algum tipo de timeout de acordo com os comandos da DLL usados no ACBrSAT.
Exemplo:
ACBrSAT1.ConsultarSAT;
if iACBrSAT1.Resposta.codigoDeRetorno = 8000 then
begin
//8000 é a resposta enviada pela dll quando o SAT está em operação.
end
;
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.