Ir para conteúdo
  • Cadastre-se

dev botao

Gerar Nfce offline automaticamente.


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

Recommended Posts

Boa tarde, pessoal. 

Estou com duvidas sobre como verificar o status do webservece no caso de envio ofline de nfce, achei alguns tópicos que falam sobre o assunto mas não resolveu meu problema. 

Vi um post que o Régys Silveira, indica veriicar o cStat, mas pra mim não funcionou muito bem, exemplo:

quando tento enviar a nfce e não tenho conexão ocorre uma exceção e traz o cStat como 0 , fiz um testa não passando o cso pra gerar um erro e testei o cStat também veio 0

então não posso usar o cStat pra verificar se envio offline. 

Vi que algumas pessoas estão trabalho só offline, mas aqui nos trabalhamos online, caso haja problema geramos offline, alguém tem alguma ideia de como proceder ?

http://www.projetoacbr.com.br/forum/topic/16944-contingência-nfce/

Link para o comentário
Compartilhar em outros sites

Olá Itajahy, eu resolvi meu problema utilizando uma rotina que vem da unit "Wininet" que se chama "InternetCheckConnection". Ela

basicamente verifica se a máquina está conectada na internet. Utilizei desta forma:

if InternetCheckConnection('http://google.com.br',  1, 0) then

begin

  ACBrNFe.Configuracoes.Geral.FormaEmissao := teOffLine;

end;

 

Neste caso, ele verifica apenas a conexão com a internet, e não o status do WebService da Sefaz.

 

Espero ter ajudado, obrigado.

  • Curtir 4
Link para o comentário
Compartilhar em outros sites

 Eu faço assim:

  try

    if InternetCheckConnection('http://google.com.br', 1, 0) then

    begin

      try

        // verificar status do servidor SEFAZ e muda automaticamente

        // (107 em Operação)  (108 Paralisado curto prazo) (109 Paralisado sem Previsão)

        if ACBrNFe1.WebServices.StatusServico.Executar = True then

          if ACBrNFe1.WebServices.StatusServico.cStat <> 107 then

            ACBrNFe1.Configuracoes.Geral.FormaEmissao := teOffLine

          else

            ACBrNFe1.Configuracoes.Geral.FormaEmissao := teNormal;

      except

        ACBrNFe1.Configuracoes.Geral.FormaEmissao := teOffLine;

      end;

    end

    else

      ACBrNFe1.Configuracoes.Geral.FormaEmissao := teOffLine;

  except

    on E: EIdException do

      if Trim(E.Message) = 'Connect timed out.' then

        ACBrNFe1.Configuracoes.Geral.FormaEmissao := teOffLine;

  end;

 

Este procedimento aumenta em mais ou menos uns 3 segundos na venda, mas acredito que vale a pena.

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Vlademir,

Só vejo um problema na sua rotina, a consulta ao status de serviço toda vez que se vai realizar o envio de uma nota.

Peço a todos que leiam o documento: Consumo Indevido do Ambiente de Autorização disponível em:

http://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=Iy/5Qol1YbE=

Segundo esse documento essa consulta é o grande vilão.

Todas as SEFAZ estão pensando seriamente em acabar com a Consulta ao Status de Serviço.

Se isso vir a ocorrer a sua rotina deixará de funcionar.

Outra coisa a consulta ao Status de Serviço não garante que todos os serviços estão funcionando, pois não retorna quem esta ativo e quem não esta.

A minha sugestão é: em vez de consultar o status já tentar enviar a nota, caso ocorra erro ai sim entrar no modo Offline.

  • Curtir 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Vlademir,

A ideia é simples, em vez de consultar o status de serviço antes de enviar, simplesmente envia, se ocorrer erro é preciso saber se foi no envio ou no retorno.

Para saber basta realizar uma consulta se retornar um erro acusando que a nota não existe na SEFAZ significa que o erro foi no envio, caso contrario vai retornar o protocolo de autorização e fica claro que o problema foi no retorno.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Bolei esta rotina testei no ambiente homologação, mas tenho duvida sobre a parte de recursão e a parte da Exceções do ACBr.

procedure TForm1.EnviarNotaExecute(Sender: TObject);

begin

  try

    if ACBrNFe1.Configuracoes.Geral.FormaEmissao = teNormal then

      if ACBrNFe1.Enviar(numLote, False, Sincrono) = True then

      begin

        // cStat=105: Lote em processamento, fazer uma nova consulta

        if ACBrNFe1.WebServices.Retorno.cStat = 105 then

        begin

          while ACBrNFe1.WebServices.Retorno.cStat = 105 do

          begin

            ACBrNFe1.WebServices.Consulta.NFeChave :=

              SomenteNumeros(ACBrNFe1.NotasFiscais.Items[0].NFe.infNFe.ID);

            ACBrNFe1.WebServices.Consulta.Executar;

          end;

        end;

        // cStat=106: Lote não localizado, providenciar o reenvio da mensagem

        if ACBrNFe1.WebServices.Retorno.cStat = 106 then

          EnviarNotaExecute(Self); // Procedure recursive

 

        if ACBrNFe1.NotasFiscais.Items[0].NFe.procNFe.cStat <> 100 then

        begin

          ShowMessage('C U P O M  N Ã O  A U T O R I Z A D O ' + #13

           + 'Codigo: ' + IntToStr(ACBrNFe1.NotasFiscais.Items[0]

            .NFe.procNFe.cStat) + #13 + 'Motivo: ' +

            ACBrNFe1.NotasFiscais.Items[0].NFe.procNFe.xMotivo +

            #13 + 'Foi processado o Numero da NF-e: ' + numCF);

          ACBrNFe1.NotasFiscais.Clear;

          exit;

        end;

      end;

  except

    on E: Exception do // Se gerar a Exception vai para o modo de Contingência

    begin

      if Trim(E.Message) <> '' then

        //  acontecendo as vezes o retorna do E.Message vem branco!

      begin

        ShowMessage('C U P O M  N Ã O  A U T O R I Z A D O '

          + #13 + 'Retorne de Erro da SEFAZ: ' + E.Message);

        ACBrNFe1.NotasFiscais.Clear;

        exit;

      end;

      ACBrNFe1.NotasFiscais.Items[0].NFe.Ide.dhCont := now;

      ACBrNFe1.NotasFiscais.Items[0].NFe.Ide.xJust :=

        'Problema de comunicação com Web Service da SEFAZ';

      ACBrNFe1.NotasFiscais.Items[0].NFe.Ide.tpEmis := teOffLine;

      ACBrNFe1.Configuracoes.Geral.FormaEmissao := teOffLine;

    end;

  end;

end;

Link para o comentário
Compartilhar em outros sites

Na rotina que eu postei acima se houver uma exceção e esta não for em branco presumo que a SEFAZ esta fora do ar, então mudo para teOffLine e continuo um fluxo da aplicação, onde eu grava a nota para posterior envio quando a SEFAZ retornar.

Ítalo lhe pergunto: Estar forma de interpretar que a SEFAZ estar off line estar correta ou tem uma forma melhor de fazer esta interpretação?

Link para o comentário
Compartilhar em outros sites

Dúvida cruel, como proceder no caso do cliente emitir off-line em uma sexta a noite ficar sem net e voltar somente na terça em virtude de uma falha que demoraram para resolver ou simplesmente falta de internet por falta de pagamento de fatura, alguem já passou por isso? Quais as providências nesse caso? Passado 24 hrs vai dar retorno Não Autorizado o Uso e ai, como proceder os clientes já levaram o Danfe e vão consultar, como fica a resolução dessa situação? 

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Ale,

Uma empresa ficar sem a internet por falha na rede é algo que até da para conversar com a SEFAZ, agora ficar sem internet por falta de pagamento da fatura, acho melhor fechar as portas.

  • Curtir 3
  • Haha 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Com o advento de pequenas empresas serem obrigadas  a ter que gerar o nfce isso será comum, entendo o ponto de vista, mas precisamos achar solução pras coisas mais bizarras porque o cliente do interior não tem a cultura fiscal necessária, ja vi o cara ficar sem sistema por que os ratos comeram todos os cabos que chegavam na switch, rsrs

O fato é que qual é a saída que vocês aconselham quando passa das 24 horas?

Link para o comentário
Compartilhar em outros sites

Ale aqui em Manaus já aconteceu da SEFAZ/AM entrar em contingencia sexta-feira e voltar apenas segunda-feira, isso pois o serviços da SEFAZ ficaram fora do ar. Quando voltou meu cliente enviou todos as NFC-e's sem nenhum problema. É como Italo falou depende muito da situação que ocasionou o problema. Por ser relativamente uma nova forma de fornecer informações ao fisco eles tem ciência de que ainda se tem um longo caminho a ser percorrido até todos os problemas serem equacionados e por tanto eles são bem flexíveis em certos quesitos.   

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Para todos os casos existe o 3G, que toda loja emissora de NFC-e tem que ter cmo backup da conexão se cair.

O prazo de envio da nota off-line varia de estado para estado e estão estudando uma forma de contar como horas úteis ao invés de horas corridas, então por enquanto ninguém está bloqueando envio, mas como dito antes o ideal é tem um backup da conexão a internet.

  • Curtir 2

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Ricardo,

Se você já tem alguma aplicação emitindo NF-e, qual é o problema?

A NFC-e se utiliza do mesmo componente ACBrNFe basta configura-lo informando o modelo e versão do documento fiscal desejado, a rotina que alimenta o componente com os dados da venda tem algumas coisas a mais que a NF-e, mas isso é fácil desde que tenha em mãos a Nota Técnica 2013/005 versão 1.22, esta contem a estrutura completa do XML.

Se o componente é o mesmo da NF-e, os comandos de envio, cancelamento, etc são os mesmos.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...

Bom dia Vlademir,

A ideia é simples, em vez de consultar o status de serviço antes de enviar, simplesmente envia, se ocorrer erro é preciso saber se foi no envio ou no retorno.

Para saber basta realizar uma consulta se retornar um erro acusando que a nota não existe na SEFAZ significa que o erro foi no envio, caso contrario vai retornar o protocolo de autorização e fica claro que o problema foi no retorno.

Oi Italo,

No trunk 2, quando dou o nfe.enviar, ele cai na exceção, tanto para quando a nfce foi rejeitada quanto der problema sem internet, neste caso o cstat de retorno, quando for rejeitado, volta correto o código da rejeição, mas se estiver sem internet, o componente esta voltando o estado e o motivo da nfce emitida anteriormente, ou seja, não esta "limpando" o retorno.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Veja o novo evento que foi criado no Trunk2: ACBrNFe.OnTransmitError

Ele permite que a sua aplicação efetue alguma ação quando ocorre algum erro de transmissão.

  • Obrigado 1
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.

Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...

Olá Pessoal, continuar o POST do colega aqui pra não abrir outro.

Então estou aqui querendo finalizar minha NFCe , estou na parte da contingência. Está da seguinte forma:

Gero o xml da NFCe
e depois dentro do
try
            ACBrNFe.NotasFiscais.Assinar;
            ACBrNFe.NotasFiscais.Validar;
            ACBrNFe.Enviar(0, False, True);
// se deu tudo certo no enviar, atualizo as informações da NFCe na minha table

except
     on E: Exception do
begin
// caso enviar retorne  erro
        ACBrNFe.NotasFiscais.Items[0].NFe.Ide.tpEmis := teoffline;
        ACBrNFe.NotasFiscais.Items[0].NFe.Ide.xJust := 'ERRO TESTE';
       ACBrNFe.NotasFiscais.Items[0].NFe.Ide.dhCont := now;
       ACBrNFe.NotasFiscais.GerarNFe; 
      ACBrNFe.NotasFiscais.Assinar;  <<< AQUI ELE GERA OUTRO XML
      ACBrNFe.NotasFiscais.Validar;

end;

 

em ACBrNFe.NotasFiscais.Items[0].NomeArq;

estra trazendo VAZIO. 

 

  • Confuso 1
Link para o comentário
Compartilhar em outros sites

  • Fundadores
  • Solution
  • Obrigado 1
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.

Link para o comentário
Compartilhar em outros sites

Daniel show de bola, então, fiz todo processo blz... estou agora nos testes finais, percebi que após enviar a nota, algumas informações estão ok na minha tabela, mas, o protocolo esta ficando vazio.
estou atribuindo a linha :

Venda.Protocolo := ACBrNFe.WebServices.Retorno.Protocolo;

esta exatamente como no DEMO,  

geraXML;
ACBrNFe.NotasFiscais.Assinar;
ACBrNFe.NotasFiscais.Validar;
ACBrNFe.Enviar(0, False, True);


salvo os dados que preciso na minha tabela.
 

achei. vi que ele pega de

ACBrNFe.NotasFiscais.Items[0].NFe.procNFe.nProt

 

Vlw.

 

Editado por CleitonMaciel
encontrado o problema
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 5 meses depois ...
  • Este tópico foi criado há 2172 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.