Ir para conteúdo
  • Cadastre-se

dev botao

Cancelamento de NFe não concretiza


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

Recommended Posts

  • Membros Pro

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.
Link para o comentário
Compartilhar em outros sites

  • Membros Pro

    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;

 

Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

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;
       

 

Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

@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.

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Vou fazer uma pergunta:

Alguém de vocês pegou o exemplo do svn rodou, emitiu uma nota em homologação, depois foi lá e cancelou ela?

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
  • Solution

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.

Link para o comentário
Compartilhar em outros sites

  • 6 meses depois ...

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?

 

Link para o comentário
Compartilhar em outros sites

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