Ir para conteúdo
  • Cadastre-se

dev botao

Retorno NULL em emissão Sat - SAT_CriarEnviarCFe


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

Recommended Posts

  • Membros Pro
Postado

Existe um erro que ocorre esporadicamente em meus PDVs no momento da emissão SAT. 

Log em anexo, e falha ocorre na emissão  no momento 03/08/24 09:36:04:931. Foi emitido com sucesso o xml pelo SAT, creio que deva ocorrer alguma falha/execption, pois não tenho o retorno da Lib com o retorno do Sat, logo após é possível observar o carregamento novamente da Lib, que no caso pode ter ocorrido uma reabertura do sistema.ACBrLibSAT-20240803.zip

  • Consultores
Postado
11 minutos atrás, Sistemas Drogal disse:

Existe um erro que ocorre esporadicamente em meus PDVs no momento da emissão SAT. 

Log em anexo, e falha ocorre na emissão  no momento 03/08/24 09:36:04:931. Foi emitido com sucesso o xml pelo SAT, creio que deva ocorrer alguma falha/execption, pois não tenho o retorno da Lib com o retorno do Sat, logo após é possível observar o carregamento novamente da Lib, que no caso pode ter ocorrido uma reabertura do sistema.ACBrLibSAT-20240803.zip

Criada uma #TK-5859 para analise do caso, logo daremos um retorno !
Você esta com as classes atualizadas ?
Qual tamanho do buffer, você utilizou ?
Utilizando a ultima versão disponível para download do ACBrLibSAT ?
Qual versão esta utilizando ? x86/x64.. cdecl/stdcall.. SingleThread/MultiThread ?
Realizou teste com o programa exemplo, nele ocorre o mesmo comportamento ?
Qual modelo Marca e Modelo SAT esta utilizando ?

  • Curtir 1
  • Membros Pro
Postado

As classes estão atualizadas.

O buffer utilizada é o que está setado no constante da lib (256).

A lib utilizada nessa versão não foi a ultima versão de hoje no caso.

Utilizo a versão x86 cdecl MultiThread.

Não consegui reproduzir o caso, como eu havia dito esse erro acontece esporadicamente em nossas filiais, e as mesmas tem alto nível de emissão SAT durante o dia todo.

O modelo do SAT é o Dimep D-Sat 2.0.

  • Consultores
Postado
11 minutos atrás, Sistemas Drogal disse:

Não consegui reproduzir o caso, como eu havia dito esse erro acontece esporadicamente em nossas filiais, e as mesmas tem alto nível de emissão SAT durante o dia todo.

Em média de quantas emissões ? tem uma ideia mais ou menos ??
Eu não tenho Dimep aqui, tenho somente SMART ELGIN, mas vou tentar simular.. e ver se aparece NULL em algum momento..  

  • Consultores
  • Solution
Postado
6 horas atrás, Sistemas Drogal disse:

Uma média de 500 a 600 cupons por dia. No dia em específico desse erro foram emitidos 577 cupons.

Como citei anteriormente, não tenho SAT DIMEP de homologação para testes.

Mas realizando testes com SMART SAT ELGIN, não obtive problemas.
Usei mesmas configurações que você citou, ACBrLibSAT x86 MultiThread em Cdecl..  usando as classes de alto nível e mantendo o buffer em 256.

Os testes realizados foram com o programa exemplo.. 
image.png

A pasta onde esta salvo os xml, temos 1.175 xmls emitidos durante os testes.. tentei forçar ao máximo que ocorra algum exception ou falha.

Quanto ao log, também não apareceu nenhuma mensagem nula.
ACBrLibSAT-20240814.zip

Uma observação, em seu log, você esta com uma versão desatualizada do ACBrLibSAT.. 
Os testes que realizei foram com a ultima versão disponibilizada no fórum 0.2.4.290

Outra observação, eu não sei se você já tem isso em seu código.. Mas para o SAT, sempre bom validar se o código de retorno igual a 6000.. e ai sim, faz a impressão do Cupom CFe.
Caso ocorra um retorno diferente de 6000, quer dizer que houve algum problema na emissão do CFe-SAT.

  • Curtir 1
  • Fundadores
Postado

@antonio.carlos,

Partindo da premissa, que o problema ocorre, quando o Buffer fica com os Nullos no final, pois foi alocado um Buffer maior que a resposta retornada...

Experimente deixar o Buffer com um valor bastante alto.. como 64K, por exemplo...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

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

  • Consultores
Postado
10 minutos atrás, Daniel Simoes disse:

@antonio.carlos,

Partindo da premissa, que o problema ocorre, quando o Buffer fica com os Nullos no final, pois foi alocado um Buffer maior que a resposta retornada...

Experimente deixar o Buffer com um valor bastante alto.. como 64K, por exemplo...

Realizando o teste, logo dou um retorno.

  • Consultores
Postado
52 minutos atrás, Daniel Simoes disse:

@antonio.carlos,

Partindo da premissa, que o problema ocorre, quando o Buffer fica com os Nullos no final, pois foi alocado um Buffer maior que a resposta retornada...

Experimente deixar o Buffer com um valor bastante alto.. como 64K, por exemplo...

Testes com buffer maior que 256:
ACBrLibSAT-20240814.zip

@Sistemas Drogal me confirma uma coisa, você inicializa o sat a cada venda ? porque olhando os seus logs novamente, deu a entender que você esta Inicializando o SAT, realizando a emissão CFe-SAT e DesInicializando...
Ideal é que faça a Inicialização do SAT.. emite todos os CFes e no final ao fechar a aplicação, faz o uso do DesInicializar.. fazer o uso do Inicializar e DesInicializar toda hora, pode ocasionar problemas de comunicação com o SAT.. 

  • Membros Pro
Postado

@antonio.carlos O retorno do SAT valido sim o tipo 6000, mais nesses caso não chego a ter esse retorno, como eu havia dito o sistema aparentemente congela devido a alguma possível exception. 

A Lib instancio no inicio da minha aplicação e só a destruo na finalização da minha aplicação. O Sat realmente inicializo e desinicializo a cada venda emitida. Adotei essa mecânica, pois vi que no Pdv Demo está dessa forma.

image.png.2b809741b9d831b964c30c83bf4c9e76.png

  • Consultores
Postado
1 minuto atrás, Sistemas Drogal disse:

@antonio.carlos O retorno do SAT valido sim o tipo 6000, mais nesses caso não chego a ter esse retorno, como eu havia dito o sistema aparentemente congela devido a alguma possível exception. 

A Lib instancio no inicio da minha aplicação e só a destruo na finalização da minha aplicação. O Sat realmente inicializo e desinicializo a cada venda emitida. Adotei essa mecânica, pois vi que no Pdv Demo está dessa forma.

image.png.2b809741b9d831b964c30c83bf4c9e76.png

Entendi.
Bom, usando buffer maior também não ocorreu problemas..
O seu cliente que esta utilizando o DIMEP, é um notebook ? ou desktop ?, Não tenho certeza, mas pode ser alguma relação com alimentação de energia com o SAT.. hoje o DIMEP esta ligado apenas via USB na máquina ? experimente colocar uma fonte de alimentação. 

  • Membros Pro
Postado

O modelo Dimep que utilizamos em nossas filiais só é alimentado via Usb, não tem entrada pra fonte. Nossos PDVs são todos desktop.

Em relação à mecânica de inicialização e desinicialização do SAT realmente tem um impacto ?

  • Consultores
Postado
2 minutos atrás, Sistemas Drogal disse:

Em relação à mecânica de inicialização e desinicialização do SAT realmente tem um impacto ?

Pode ter.. 
Eu não costumo inicializar e desinicializar o SAT a emissão CFe-SAT.. 
Até mesmo o programa exemplo ACBrLibSAT, não faz isso.

  • Membros Pro
Postado

Entendi, vou fazer essa alteração e acompanhar por alguns dias.

Como eu havia dito esse erro ocorre esporadicamente, e todos os casos são exatamente iguais; no momento da emissão envio a venda e não tenho o retorno. Nos logs da minha aplicação é possível ver que o sistema foi reaberto por algum motivo, seja ele congelamento ou fechamento por alguma exceção ocasionada.

  • Consultores
Postado
2 minutos atrás, Sistemas Drogal disse:

todos os casos são exatamente iguais; no momento da emissão envio a venda e não tenho o retorno. Nos logs da minha aplicação é possível ver que o sistema foi reaberto por algum motivo, seja ele congelamento ou fechamento por alguma exceção ocasionada.

Tente criar logs detalhados em sua aplicação.. para identificar o motivo de ocorrer o exception.. se realmente é no momento da emissão CFe-SAT.
E por qual motivo o sistema foi aberto novamente.

Veja esta orientação sobre o EnviarDadosVenda, sobre o envio com números de itens alto..
image.png

Veja também como esta alimentação USB no computador, se não esta sinalizado com economia de energia ativa.

Fiz mais alguns testes, mantendo o buffer maior que 256, e tentando simular alguma queda de comunicação com o SAT... para ver se ocorre algum exception.
O que ocorre é apenas um timeout de comunicação e logo após isso, retorna SAT Desconectado.. ao resolver a comunicação com o SAT, as emissões voltam ao normal.
ACBrLibSAT-20240815.log

  • Fundadores
Postado

No teste do @antonio.carlos, notei que a resposta não vem com os Nulos...

porem no Log do  @Sistemas Drogal, os nulos estão lá...

Portanto eu presumo que seja a DLL do SAT, que esteja retornando os Nulos...

Poderiamos aplicar um Workaround, nos fontes do ACBr, inserindo um 'Trim' na String retornada pelo SAT.. Exemplo:

function TACBrSATDinamico_stdcall.EnviarDadosVenda(dadosVenda : AnsiString) : String ;
Var
  Resp : PAnsiChar;
begin
  Resp := xSAT_EnviarDadosVenda( numeroSessao, PAnsiChar(codigoDeAtivacao),
                                   PAnsiChar(dadosVenda) ) ;
  Result := Trim(String( Resp ));
end ;

Mas não me agrada muito, interferir no conteúdo retornado pela DLL do SAT...

@Sistemas Drogal, você está com a última versão da DLL do fabricante ?

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

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

  • Membros Pro
Postado

@Daniel Simoes Sim, estou com as ultimas dlls do fabricante.

@antonio.carlos Obrigado pela diga do log, mais nosso log já é bem detalhado e nessas situações é possível enxergar a reabertura do sistema, só não temos a certeza se essa reabertura foi necessária devido à algum travamento da minha aplicação ou fechamento inesperado da aplicação.

×
×
  • 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...