Usuários SAC rubensff 2 Posted September 7, 2020 Usuários SAC Report Share Posted September 7, 2020 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 post Share on other sites
Amarildo de Matos 1,021 Posted September 8, 2020 Report Share Posted September 8, 2020 bom dia.. verifique se o xml que voce esta recebendo nessa consulta esta completa com todas as informacoes. Link to post Share on other sites
Usuários SAC rubensff 2 Posted September 8, 2020 Author Usuários SAC Report Share Posted September 8, 2020 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? Link to post Share on other sites
BigWings 3,981 Posted September 8, 2020 Report Share Posted September 8, 2020 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. BigWingsAjude o Projeto ACBr crescer - Assine o SAC Link to post Share on other sites
Usuários SAC rubensff 2 Posted September 8, 2020 Author Usuários SAC Report Share Posted September 8, 2020 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 post Share on other sites
Usuários SAC rubensff 2 Posted September 8, 2020 Author Usuários SAC Report Share Posted September 8, 2020 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 post Share on other sites
Usuários SAC Solution rubensff 2 Posted September 9, 2020 Author Usuários SAC Solution Report Share Posted September 9, 2020 (edited) 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 September 9, 2020 by rubensff Correção ortografica 1 Link to post Share on other sites
Juliana Tamizou 4,230 Posted September 9, 2020 Report Share Posted September 9, 2020 Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico. Juliana Tamizou Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil Link to post Share on other sites
Recommended Posts