Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

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? 

Postado

Bom dia Amarildo, as propriedades ACBRNFe.WebServices.Consulta.protNFe.XML_NFe e ACBRNFe.WebServices.Consulta.protNFe.XML_prot estão vindo vazias.

Teria alguma sugestão?
 

  • Moderadores
Postado
1 hora atrás, rubensff disse:

Teria alguma sugestão?

Você verificou o XML como orientou o Amarildo?

A impressão do DANFE é feita pelo XML.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Postado

 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;
 

Postado

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.

 

  • Solution
Postado (editado)

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
  • Administradores
Postado

Obrigado por reportar.

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

Consultora ACBr Pro

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 !!

  • Este tópico foi criado há 1674 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...
The popup will be closed in 10 segundos...