Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 3012 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Olá, amigos

 

Qual a rotina que utilizam para verificar se tem conexão com internet?

Antes de emitir uma nfce, preciso desta informação para setar o modo de transmissão(online,offline).

As rotinas encontradas via google são muito antigas, fiquei na dúvida.

Seria legal se acbrutil tivesse esta function.

 

Como é o fluxo da emissão da nfce adotada pelos colegas? Acho que seria uma boa discussão

Por que agora temos uma nova variável no componente acbrnfe: o cliente esperando o ticket.

Na nfe, poderia emitir depois e entregar, mas agora todo o processo tem que ser na presença do cliente.

 

Agora quando fechamos o cupom, temos que testar a conexão, para setar o modo de transmissão, como falei acima.

E na hora do envio a mesma coisa, e se a demora da resposta do sefaz for muito grande, ou pior enviar e não retornar o protocolo

no fim, como vamos proceder. A opinião dos colegas seria muito importante. 

 

Vocês monitoram como a presença ou não da conexão de internet?

Postado

Também estamos desenvolvendo a NFCE, e seguimos o seguinte fluxo: Tenta enviar, caso não consiga (problema de comunicação) ou retorne algum erro da receita, já gera em contingência e imprime o cupom. O importante é o cliente não ficar esperando no caixa, este processo tem que ser muito rápido, o cliente não pode ficar aguardando no caixa, imagine em um supermercado

  • 2 semanas depois ...
Postado

Juliomar,

 

Eu tentei assim:

 if acbrnfe1.enviarlote(1,true,true) then

     imprimi normal

else

   altera para modo off-line

   gerar novamente

   imprimir

mas no primeiro if, ela dá erro e interrompe o processo.

Não querendo ser chato, mas pode me dar uma luz neste processo, se possível com um pedaço de código?

Marcio

 

Não 

  • 1 ano depois...
Postado (editado)
Em 14/01/2015 at 08:58, Juliomar Marchetti disse:

try except

pega  o retorno e trata para trabalhar offline!

assim que tiver um tempo eu pesquiso aqui e posto os links dos tópicos que tem código de exemplos aqui mesmo!

Juliomar, eu pego o erro e trato ele, porem, hj ocorreu um caso em um cliente ref um erro que eu ainda não tratava.

Não posso simplesmente emitir ofline caso ocorra um except, devo emitir offline somente em caso de falta de internet. Se for outro problema, acredito que dev resolver internamente, pois depois, ao enviar a NFCe para o sefaz, devo usar o mesmo XML(por isso que guardo o XML no banco de dados).

Eu trato da seguinte forma:

try

          ACBrNFe1.Configuracoes.Geral.FormaEmissao := teNormal;
          ACBrNFe1.Enviar(vNumLote, False, True);
          ACBrNFeDANFCeCupom.ViaConsumidor := True;

          // em caso de erro, emitir em OffLine
          // NFCe ficará em posição para enviar ao SEFAZ mais tarde
        except
          on E: Exception do
          begin

            if (Copy(E.Message, Pos('Erro HTTP:', E.Message), 10)
              = 'Erro HTTP:') or
              (Copy(E.Message,
              Pos('O nome ou o endereço do servidor não pôde ser resolvido',
              E.Message), 55)
              = 'O nome ou o endereço do servidor não pôde ser resolvido') then
            begin
				imprimo offline
			end
			else
            // se o erro não for falta de internet
            begin

              frmAlertasUsuarios.ExibirAlerta('FORM | MONITOR NFE', 'ERRO',
                'Ocorreu o seguinte Erro: ' + #13, E.Message);
              frmAlertasUsuarios.ShowModal;

Existe uma forma de o próprio componente ACBRNFe testar a conexão? ou outro meio eficaz?

Editado por CertaSolucoes
Postado

CertaSolucoes, a muito tempo desenvolvi essa thread,

ve sê serve pro seu proposito.

 

Exemplo de Uso: 

{Procedure para receber o evento da thread}
procedure OnInternetChange(LANStatus:TLANStatus;InternetStatus:TInternetStatus;xMsg:String='');
BEGIN
  if InternetStatus = tiOnline then
  begin
    {Configura Acbr Modo online}
    {etc}
  end
  else
  begin
    {Configura Acbr Modo offline}
    {etc}
  end;
END;

procedure ...
var CheckConnect : TThreadCheckConnection; 
begin
...
  CheckConnect  :=  TThreadCheckConnection.GetInstance;
  
  with CheckConnect do
  begin
    OnStatusChange  :=  OnInternetChange;
    Start;
  end;
  
...
end;

Acredito que ainda funcione.

Thread.CheckConnection.pas

  • Curtir 1
  • 1 mês depois ...
Postado
Em 02/06/2016 at 11:51, William Mattos disse:

CertaSolucoes, a muito tempo desenvolvi essa thread,

ve sê serve pro seu proposito.

 

Exemplo de Uso: 


{Procedure para receber o evento da thread}
procedure OnInternetChange(LANStatus:TLANStatus;InternetStatus:TInternetStatus;xMsg:String='');
BEGIN
  if InternetStatus = tiOnline then
  begin
    {Configura Acbr Modo online}
    {etc}
  end
  else
  begin
    {Configura Acbr Modo offline}
    {etc}
  end;
END;

procedure ...
var CheckConnect : TThreadCheckConnection; 
begin
...
  CheckConnect  :=  TThreadCheckConnection.GetInstance;
  
  with CheckConnect do
  begin
    OnStatusChange  :=  OnInternetChange;
    Start;
  end;
  
...
end;

Acredito que ainda funcione.

Thread.CheckConnection.pas

William, vou testar e posto aqui os resultados.

Obrigado.

Postado

Certa pah, só tem um problema com esse raciocinio de resolver o problema e não enviar offline por qualquer erro não tratado, tambem penso assim, que deve ser corrigido, contudo isso não é viavel para nfce pois o cliente não espera que ele seja corrigido para depois fazer a compra (são muito impacientes).

O que faço é enviar offline, reportar o erro e tratar para que não volte a suceder.

  • 1 mês depois ...
  • Este tópico foi criado há 3012 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

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