Ir para conteúdo
  • Cadastre-se

dev botao

Cancelamento de NFe não concretiza


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

Recommended Posts

  • Membros Pro
Postado

boa tarde senhores, pesquisei no forúm antes de postar minha dúvida.

  • é o seguinte, eu cancelo uma nfe e a mesma dentro do sistema consta cancelada, já no sefaz continua constando autorizada, estou passando os campos corretamente e não estou entendo o porque o cancelamento não está acontecendo.
  • Membros Pro
Postado

    if not(InputQuery('WebServices Eventos: Cancelamento', 'Justificativa', vAux)) then
       exit;
    if vAux <> '' then
    begin
      ACBrNFe1.EventoNFe.Evento.Clear;
      ACBrNFe1.EventoNFe.idLote := StrToInt(idLote) ;
      with ACBrNFe1.EventoNFe.Evento.Add do
      begin
       infEvento.dhEvento := now;
       infEvento.tpEvento := teCancelamento;
       infEvento.detEvento.xJust := vAux;
      end;

      try
        ACBrNFe1.EnviarEvento(StrToInt(idLote));
      except on E:Exception do
      begin
        aviso('Erro ao cancelar NFe '+E.Message);
        abort;
      end;
      end;

        ACBrNFe1.DANFE.Logo := NFELOGO;
        ACBrNFe1.DANFE.NFeCancelada := True;
        ACBrNFe1.DANFE.ProtocoloNFe :=  ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.nProt+DateTimeToStr(Now);//{Informe aqui o protocolo de cancelamento + data + hora};

        QrLocaNfe.edit;
        QrLocaNfePROTOCOLO_CANCELAMENTO.AsString := ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.nProt+DateTimeToStr(Now);
        QrLocaNfeDATA_CANCELAMENTO.AsDateTime    := now;
        QrLocaNfeCAMINHONFE.AsString             := ACBrNFe1.NotasFiscais.Items[0].NomeArq;

 

Postado

Bom dia, analisando o código e comparando com o exemplo e até mesmo o código da minha aplicação, acredito estar faltando alimentar as propriedades: infEvento.chNFe, infEvento.CNPJ, infEvento.detEvento.nProt, de forma que o WS não consegue ler o XML enviado e consequentemente retorna uma resposta negativa em relação ao seu pedido de cancelamento, aí entra também o problema que você citou, de que no seu sistema cancela a nota normalmente, isso se deve ao fato de que você envia o evento e não verifica o protocolo do retorno, apenas se der exception, mas a nota não está gerando erro na criação e envio, apenas não retorna a resposta esperada, então o exception se faz inútil nessa situação, sugiro um tratamento similar:

ACBrNFe1.EnviarEvento(StrToInt(nNota));
<- aqui entra com o DataSet já em edição pra receber as informações do retorno(se estiver vazio não tem problema, pois ele cancelará caso não tiver protocolo) ->            
ProtCancelamento := ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.nProt;
CodStatusCancelamento := IntToStr(ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.cStat);
DHCancelamento := ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.dhRegEvento;
MotivoCancelamento := ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.xMotivo;
if ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.nProt = '' then <- se está vazio joga a rejeição e cancela as alterações feitas acima ->
begin
	Application.MessageBox(pchar(ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.xMotivo), '', MB_ICONINFORMATION);
	DataM.ADQUsado.Cancel;
	abort;
end;
if ProtCancelamento <> '' then
begin
  <- caso tenha dado certo o cancelamento, você joga aqui o bloco que faz estorno financeiro e o que mais desejar ->
	..
	..
end;

Favor nos informar dos resultados.

Postado

bem tenta mais ou menos assim:   

 

if not(InputQuery('WebServices Eventos: Cancelamento', 'Justificativa', vAux)) then
       exit;
    if vAux <> '' then
    begin
      ACBrNFe1.EventoNFe.Evento.Clear;
      ACBrNFe1.EventoNFe.idLote := StrToInt(idLote) ;
      with ACBrNFe1.EventoNFe.Evento.Add do
      begin
       infEvento.dhEvento := now;
       infEvento.tpEvento := teCancelamento;
       infEvento.detEvento.xJust := vAux;
       infEvento.detEvento.chNFE:= ChaveDaTuaNotaNoTeuBD;
       infEvento.detEvento.CNPJ:= CNPJ_Emissor;
       infEvento.detEvento.nProt:= NumeroProtocoloAUtorizacaoDoTeuBD;;

      end;

      try
        if ACBrNFe1.EnviarEvento(StrToInt(idLote)) then  //----Se enviou o evento
             begin

                ...
                Aqui você atualiza seu banco de dados...  
                ...
               

               ACBrNFe1.DANFE.Logo := NFELOGO; //-----Isso tu pode fazer ao abrir o sistema, no create, para nao ficar toda vez carregando

              QrLocaNfe.edit;
              QrLocaNfePROTOCOLO_CANCELAMENTO.AsString :=                      ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.nProt+DateTimeToStr(Now);
              QrLocaNfeDATA_CANCELAMENTO.AsDateTime    := now;
             QrLocaNfeCAMINHONFE.AsString      
      := ACBrNFe1.NotasFiscais.Items[0].NomeArq;

             end;    

  
      except on E:Exception do
      begin
        aviso('Erro ao cancelar NFe '+E.Message);
        abort;
      end;
      end;
       

 

Postado

Estou com o mesmo problema do amigo.

Ontem um cliente me ligou com o mesmo problema.

Hoje apesar da função retornar "True", quando consultamos no SEFAZ ela retorna com status 100 - Autorizado Uso.

Já debuguei a função EnviarEvento e todos os dados que ele precisa como chave, protocolo, CNPJ e etc estão setados no componente do ACBr antes dele chamar o WebService.

Alguém mais com esse problema?

Jakson, conseguiu resolver?

Meu cliente é do estado de SP.

Complementando a "estranheza", o retorno do envio do evento do WebServices (WebServices.EnvEvents.FxMotivo) está como "Lote de Evento Processado", e o FcStat (WebServices.EnvEvents.FcStat) está como 128, o que ao meu entender significa que teria sido cancelado no Sefaz.

Porém, fazendo uma consulta posteriormente ao envio do cancelamento, está retornando o Status 100.

Consultando no site do Sefaz, na consulta de NFe completa, também reporta que está autorizado o uso e não consta o cancelamento.

Postado

@rafiwks Só por perguntar mesmo, mas está setando o ambiente do evento corretamente? 

Por exemplo, no meu sistema verifico em que ambiente a nota foi enviada e faço:

                  ACBrNFe1.Configuracoes.WebServices.Ambiente := taProducao;
                  infEvento.tpAmb := taProducao;
         ou

                  ACBrNFe1.Configuracoes.WebServices.Ambiente := taHomologacao;
                  infEvento.tpAmb := taHomologacao;

Isso na hora de alimentar a chave da NF-e e todas as outras propriedades usadas pra enviar o evento.

Postado
Citar

Só por perguntar mesmo, mas está setando o ambiente do evento corretamente?

Oi Wess, boa tarde!

Sim, estou setando. E o pior é que o problema está ocorrendo num cliente, que está em ambiente de Produção assim como aqui no meu computador, em ambiente de homologação.

Abraço

  • Membros Pro
  • Solution
Postado

Boa noite, o problema no meu caso era a atualização automática do horário e do fuso, estavam desabilitados e com isso o evento era rejeitado porque a hora que eu estava passando estava adiantado em 5 minutos, solução: ative definir horário automaticamente e definir fuso automaticamente, no meu caso era isso.  Obrigado Juliomar.

  • 6 meses depois ...
Postado

eu estou com  problemas no cancelamento,  falha no schema xml  o código náo aparentemente nao foi alterado e se encontra da seguinte forma:

   DtmNFiscais.ACBrNFe1.EventoNFe.Evento.Clear;
    DtmNFiscais.ACBrNFe1.EventoNFe.idLote := StrToInt(idLote) ;

    with DtmNFiscais.ACBrNFe1.EventoNFe.Evento.Add do
    begin
       infEvento.dhEvento := Now;
       infevento.nSeqEvento:=1;

       infEvento.tpEvento := teCancelamento;
       infEvento.detEvento.xJust := vAux;
       infEvento.chNFe := Chave;
       infEvento.CNPJ   := CNPJ;

       infEvento.detEvento.nProt := dtmNFiscais.ACBrNFe1.NotasFiscais.Items[0].NFe.procNFe.nProt;
    end; será q alguem consegue me ajudar? percebi q no final do xml está aparecendo a carta de correção com os dados em branco será este o problema?

 

  • Este tópico foi criado há 2654 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.