Ir para conteúdo
  • Cadastre-se

dev botao

Mensagem NFC-e não enviada para sefaz.


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

Recommended Posts

Boa tarde a todos.

Sei que já tem um tópico com esse titulo, mas a questão acredito que seja outra.

Tenho o processo de emissão, na emissão, quando dá algum  problema de comunicação com a SEFAZ,  acontece de ela ter recebido e processado a NFC-e, ai para não dar duplicidade, eu consulto pela chave, com outro objeto, pela chave, se me retorna "oACBRNFe.WebServices.Consulta.cStat = 100" então eu atualizo o objeto de emissão : ACBR_NFe.NotasFiscais.Items[0].NFe.procNFe.Assign(oACBRNFe.WebServices.Consulta.protNFe);

Mas nesse processo, sei que deve estar faltando alguma coisa para que a impressão saia de forma correta.

Será que podem me ajudar? 

Link para o comentário
Compartilhar em outros sites

 De qual xml que está falando? 

Temos vários xmls, por via das dúvidas segue o código: 

function TNFe.EnviarNFCe(
                  NumeroNota,
                  Codigo_Operacao,
                  Destinatario,
                  Usuario: integer;
                  TipoOperacao: integer;
                  var StatusNFCe : integer;
                  var s_Contingencia : String;
                  var ChaveNFCe : String): Boolean;
var
   TextoNFCe      : TStrings;
   s_FormaEmissao : string;
//   ReciboEnvio    : string;
//   Retorno_Sefaz  : String;
//   ProtocoloNFCe  : string;
   QtdeConsulta      : integer;
   xmlNota           : string;
   ErrosRegraNegocio : string;
   NumeroLote        : string;
   Chave_Except      : String;
   oACBRNFE : TACbrNfe;


   procedure Aprova_ou_DenegaNfce;
   begin

//      ReciboEnvio   := ACBR_NFe.WebServices.Enviar.Recibo;
//      ProtocoloNFCe := ACBR_NFe.NotasFiscais.Items[0].Nfe.procNFe.nProt;
//      Retorno_Sefaz := IntToStr(ACBR_NFe.NotasFiscais.Items[0].Nfe.procNFe.cStat) + ' ' +
//                       RetornaStatusNFCe(ACBR_NFe.NotasFiscais.Items[0].Nfe.procNFe.cStat);

//      AtualizaXML_NFCe(ChaveNFCe,
//                       ACBR_NFe.NotasFiscais.Items[0].XML,
//                       IntToStr(StatusNFCe),
//                       ProtocoloNFCe,
//                       Retorno_Sefaz,
//                       Usuario,
//                       s_Contingencia);

   end;


begin
//   ProtocoloNFCe  := '';
//   Retorno_Sefaz  := '';
//   ReciboEnvio    := '';
   s_FormaEmissao := '';

   Result         := False;
   QtdeConsulta   := 0;
   xmlNota        := '';
   ErrosRegraNegocio := '';
   Chave_Except  := '';
   // Contingencia:
   // S = S/Não Enviada
   // N = Nao
   // E = S/Aprovada

   try
      try
         TCtrlNfe.GetInstance.CarregaDanfe(FACBR_NFe);
         acbr_nfe.Configuracoes.WebServices.Visualizar := False;
         ChaveNFCe := StringReplace(ACBR_NFe.NotasFiscais.Items[0].Nfe.infNFe.ID, 'NFe', '', [rfIgnoreCase]);
         NumeroLote := FormatDateTime('yyyymmddhhmmss', NOW);
         begin
            WaitShowMessage('Enviando NFC-e...');
            if ACBR_NFe.Enviar(NumeroLote, False, True) then
            begin
               try
                  //showmessage(ACBR_NFe.NotasFiscais.Items[0].Nfe.procNFe.cStat.ToString);

                 StatusNFCe := ACBR_NFe.NotasFiscais.Items[0].Nfe.procNFe.cStat;
                 AnalisaTipoRetorno(StatusNFCe);//Cuidado Rubens, o retorno é alterado na porra da função
               except
                 StatusNFCe := 4;
               end;

               //Se não retornar nada faço consulta no sefaz enviando o xml
               if StatusNFCe = 4 then
               begin
                  xmlNota := ACBR_NFe.NotasFiscais.Items[0].XML;

                  while ((StatusNFCe = 4) and (QtdeConsulta < 5)) do
                  begin
                    StatusNFCe   := ConsultaNFCeSefaz(xmlNota);
                    QtdeConsulta := QtdeConsulta + 1;
                  end;
               end;

               // Aprovada ou Denegada
               if ((StatusNFCe = 1) or (StatusNFCe = 5))  then
               begin
                  Aprova_ou_DenegaNfce;

                  // se for denegada grava a NFCe, mas nao libera para gravar a venda
                  if StatusNFCe = 5 then
                  begin
                    TFalconFuncoes.GetInstance.MostraMensagem('Rejeição: NF-e está denegada na base de dados da SEFAZ.'+sLineBreak+
                                                              'A venda será cancelada.',4);
                    Result := False;
                  end
                  else
                     Result:= True;

               end;
            end;
         end

      except
          on e: exception do
          begin
             showmessage(E.Message);

             WaitCloseMessage;
             Chave_Except := ChaveNFCe;
             showmessage(ACBR_NFe.NotasFiscais.Items[0].Nfe.procNFe.cStat.ToString);

             showmessage(ChaveNFCe);

             TFalconFuncoes.GetInstance.GravaLogerro('Erro ao enviar NFCe '+ ChaveNFCe+' - '+ 'cStat : '+ACBR_NFe.NotasFiscais.Items[0].Nfe.procNFe.cStat.ToString);

             oACBRNFe := TAcbrNfe.Create(nil);

             TCtrlNfe.GetInstance.ConfiguraACBrNFe(oACBRNFe, moNFCe);

             oACBRNFe.WebServices.Consulta.NFeChave := Chave_Except;
             oACBRNFe.WebServices.Consulta.Executar;

             oACBRNFe.WebServices.Consulta.

            if oACBRNFe.WebServices.Consulta.cStat = 100 then
            begin
               ACBR_NFe.NotasFiscais.Items[0].NFe.procNFe.Assign(oACBRNFe.WebServices.Consulta.protNFe);
               Result := True;
            end
            else
            begin


             //if (pos('Lote recebido com sucesso', UpperCase(e.Message)) > 0) then
             if ACBR_NFe.NotasFiscais.Items[0].Nfe.procNFe.cStat in [103,0] then
             begin
               for var Contador: integer := 0 to 15 do
               begin
                  WaitShowMessage('Consultando lote processado...');
                  Sleep(2000);
                  try
                     StatusNFCe := ConsultaNFCeSefaz(ACBR_NFe.NotasFiscais.Items[0].XML); //Cuidado Rubens, o retorno é alterado na porra da função
                  except end;

                  if not (StatusNFCe in [0,6]) then break;
               end;

               showmessage(StatusNFCe.ToString);

               WaitCloseMessage;

               if StatusNFCe = 1 then
               begin
                  Aprova_ou_DenegaNfce;
                  Result := True;
               end;
             end;


             if TBancoDados.execSqlBD(
                                       ' update TAB_NFC_E '+
                                       ' SET STATUS_RETORNOSEFAZ='+QuotedStr(Copy(e.Message,1,200))+
                                       ' where CHV_NF = '+
                                       QuotedStr(ChaveNFCe)) then
             begin
                TFalconFuncoes.GetInstance.GravaLogerro('Erro ao enviar NFCe '+ ChaveNFCe+' - '+ e.Message);

                //Apagando o xml da nota que não deu certo
                LimpaTemp(0,ChaveNFCe,'0');
             end;

             //mais explicito, tipo pau entrando no cú
             //Permite gerar NFC-e em contigência quando ocorrer alguns tipos de exceção
             if  pos(Uppercase('Nenhum arquivo de Schema encontrado na pasta'),UpperCase(e.Message)) > 0 then
               exit;


//             if ((pos('ERRO NAO CATALOGADO', UpperCase(e.Message)) > 0)
//                //or (pos('TIMEOUT', UpperCase(e.Message)) > 0)
//                or (pos('ERRO HTTP: 404', UpperCase(e.Message)) > 0)
//                or (pos('ERRO HTTP: 500', UpperCase(e.Message)) > 0)
//                or (pos(UpperCase('Falha no processamento do WebService'), UpperCase(e.Message)) > 0)
//                //or (pos(UpperCase('Falha em obter Provedor de Criptografia do Certificado. Erro: 8009000B , erro: $8009000B'), UpperCase(e.Message)) > 0)
//                or (pos(UpperCase('Erro HTTP: 403'), UpperCase(e.Message)) > 0)
//                or (pos(UpperCase('Erro HTTP: 403'), UpperCase(e.Message)) > 0)
//                or (pos(UpperCase('Erro HTTP: 0'), UpperCase(e.Message)) > 0)
//                or (pos(UpperCase('ERRO INTERNO'), UpperCase(e.Message)) > 0)
//                or (pos(UpperCase('Servico Paralisado Momentaneamente'), UpperCase(e.Message)) > 0)
//                or (pos(UpperCase('Falha no reconhecimento da autoria ou integridade do arquivo digital'), UpperCase(e.Message)) > 0)
//                //or (ACBR_NFe.NotasFiscais.Items[0].Nfe.procNFe.cStat = 0))
//                )
//                then
//                  GeraContingencia
//             else
             begin
                TFalconFuncoes.GetInstance.MostraMensagem('Erro ao enviar NFC-e para aprovação. Erro: ' + e.Message);
                Result:= False;
             end;


            end;
          end;

      end;
   finally
      LimpaTemp(0,ChaveNFCe,'0');
      if Assigned(oACBRNFE) then FreeAndNil(oACBRNFE);
      WaitCloseMessage;
   end;
 

Link para o comentário
Compartilhar em outros sites

A intenção é que na emissão, quando houver um erro no envio, e o sistema não tenha retorno do sefaz, por variação na internet da loja, ele consulte e veja se foi processado pela sefaz, fazer a contingencia se não tiver retorno, e depois fazer o cancelamento por substuição está criando mais problemas, porque acaba gerando muita nota em contingência. E os usuários não fazem o devido envio.

 

Link para o comentário
Compartilhar em outros sites

  • Solution

Amigos, bom dia.

Consegui descobrir o que estava fazendo de errado, na verdade como estava alterando a data de emissão, o digestvalue acabava ficando diferente do retorno da SEFAZ, e por isso não conseguia validar o xml.

Caso resolvido. Obrigado a todos.

Editado por rubensff
Correção ortografica
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Administradores

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

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

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1317 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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...