Jump to content

dev botao

Mensagem NFC-e não enviada para sefaz.


Go to solution Solved by rubensff,
  • Este tópico foi criado há 1273 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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.

Edited by rubensff
Correção ortografica
  • Like 1
Link to comment
Share on other 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 to comment
Share on other sites

  • Este tópico foi criado há 1273 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.