Ir para conteúdo
  • Cadastre-se

dev botao

Problema Com Cancelamento De Nfe Por Evento


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

Recommended Posts

Amigos,

 

Ajustei a rotina de cancelamento anterior, para a de cancelamento por evento,

seguindo orientação de colegas, inclusive daqui do forúm. Atualizei os fontes da

ACBR pelo SVN. Entretanto ao tentar enviar cancelamento de NFe, aparece a

seguinte mensagem

 

Não foi possível cancelar a NFe selecionada

Erro:Ocorreu o seguinte erro ao cancelar a nota fiscal eletronica:

Código:494

Motivo: Rejeição: Chave de Acesso Inexistente [chNfe:

26130203619029000144550550000620401000620401]

 

Só que a chave que passei foi essa abaixo

26130303619029000144550550000620401000620405 

 

Alguém pode me ajudar ?

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

É verifique o ambiente, pois alguma coisa vc está confundindo ai:

 

esta nota 26130203619029000144550550000620401000620401  foi emitida em ambiente produção veja que é do mês 02/2013.

esta outra  26130303619029000144550550000620401000620405 foi emitida em ambiente homologação no mês 03/2013.


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

Link para o comentário
Compartilhar em outros sites

Ok, segue abaixo a rotina, só para constar,
estou testando no ambiente de homologação,
SEFAZ-PE
 
         // Cria lote de cancelamento
         NumeroLote := StrToInt(FormatDateTime('yymmddhhmm', NOW));
         Dm1.Nfe.EventoNFe.Evento.Clear;
         Dm1.Nfe.EventoNFe.idLote := NumeroLote;
         // Seta atributos
         with Dm1.Nfe.EventoNFe.Evento.Add do
         begin
            infEvento.chNFe           := CDSGeradaChaveNFE.AsString;
            infEvento.CNPJ            := Dm1.sCNPJ;
            infEvento.dhEvento        := NOW;
            infEvento.tpEvento        := teCancelamento;
            infEvento.detEvento.nProt := CDSGeradaProtocoloNFE.AsString;
            infEvento.detEvento.xJust := EdJustifica.Text;
         end;
         // Envia evento de cancelamento
         if Dm1.Nfe.EnviarEventoNFe(NumeroLote) then
         begin
            with Dm1.Nfe.WebServices.EnvEvento do
            begin
               if EventoRetorno.retEvento.Items[0].RetInfEvento.cStat <> 135 then
               begin
                  raise Exception.CreateFmt(
                   'Ocorreu o seguinte erro ao cancelar a nota fiscal eletrônica:'  + sLineBreak +
                   'Código:%d' + sLineBreak +
                   'Motivo: %s', [
                    EventoRetorno.retEvento.Items[0].RetInfEvento.cStat,
                    EventoRetorno.retEvento.Items[0].RetInfEvento.xMotivo]);
               end;
               // retornos
               DataHoraEvento  := EventoRetorno.retEvento.Items[0].RetInfEvento.dhRegEvento;
               NumeroProtocolo := EventoRetorno.retEvento.Items[0].RetInfEvento.nProt;
               XMLCancelamento := EventoRetorno.retEvento.Items[0].RetInfEvento.XML;
               CodigoStatus    := EventoRetorno.retEvento.Items[0].RetInfEvento.cStat;
               MotivoStatus    := EventoRetorno.retEvento.Items[0].RetInfEvento.xMotivo;
               // atualiza tabela de entrada/saida fiscal
               with Dm1.QyGeral do
               begin
                  Close;
                  if CBoxTpMov.ItemIndex = 0 then
                  begin
                     Sql.Text := ' UPDATE TBENTRADAFISCAL SET SITUACAONFISCAL = ' + QuotedStr('C') + ', ProtocoloCancelou =  ' +
                                   QuotedStr(NumeroProtocolo) + '                                                            ' +
                                 ' WHERE NUMERONFISCAL = ' + QuotedStr(CDSGerada.FieldByName('NumeroNFiscal').AsString) + '  ' +
                                 ' AND   SERIENFISCAL  = ' + QuotedStr(CDSGerada.FieldByName('SerieNFiscal').AsString) + '   ' ;
                     sTabela := 'TBENTRADAFISCAL';
                  end
                  else
                  begin
                     Sql.Text := ' UPDATE TBSAIDAFISCAL SET SITUACAONFISCAL = ' + QuotedStr('C') + ', ProtocoloCancelou =    ' +
                                   QuotedStr(NumeroProtocolo) + '                                                            ' +
                                 ' WHERE NUMERONFISCAL = ' + QuotedStr(CDSGerada.FieldByName('NumeroNFiscal').AsString) + '  ' +
                                 ' AND   SERIENFISCAL  = ' + QuotedStr(CDSGerada.FieldByName('SerieNFiscal').AsString) + '   ' ;
                    sTabela := 'TBSAIDAFISCAL';
                  end;
                  ExecSQL;
                  Close;
               end;
               // Salva em auditoria
               Dm1.salvaAuditoria('FATURAMENTO', sTabela, 'FATURAMENTO', 'NOTA FISCAL: ' + CDSGerada.FieldByName('NumeroNFiscal').AsString + ' SERIE ' + CDSGerada.FieldByName('SerieNFiscal').AsString, '5');
               ShowMessage('A NF-e ' + CDSGerada.FieldByName('NumeroNFiscal').AsString + ' Foi cancelada...' +
               'Retornou : ' + MotivoStatus + #13 + 'Protocolo : ' + NumeroProtocolo);
            end;
         end
         else
         begin
            with Dm1.Nfe.WebServices.EnvEvento do
            begin
              raise Exception.Create(
                'Ocorreram erros ao tentar efetuar o cancelamento:' + sLineBreak +
                'Lote: '     + IntToStr(EventoRetorno.idLote) + sLineBreak +
                'Ambiente: ' + TpAmbToStr(EventoRetorno.tpAmb) + sLineBreak +
                'Orgao: '    + IntToStr(EventoRetorno.cOrgao) + sLineBreak +
                sLineBreak +
                'Status: '   + IntToStr(EventoRetorno.cStat) + sLineBreak +
                'Motivo: '   + EventoRetorno.xMotivo);
            end;
            Exit;
         end;
Link para o comentário
Compartilhar em outros sites

Estão faltando informações no envio dos dados do evento.

Tente desta maneira:

        ACBrNFe1.NotasFiscais.Clear;
        ACBrNFe1.NotasFiscais.LoadFromFile(sArquivo);

        ACBrNFe1.EventoNFe.Evento.Clear;
        ACBrNFe1.EventoNFe.idLote := ;

        with ACBrNFe1.EventoNFe.Evento.Add do
          begin
            InfEvento.tpAmb := ACBrNFe1.NotasFiscais.Items[0].NFe.Ide.tpAmb;
            infEvento.CNPJ := ACBrNFe1.NotasFiscais.Items[0].NFe.Emit.CNPJCPF;
            InfEvento.cOrgao := ACBrNFe1.NotasFiscais.Items[0].NFe.Ide.cUF;
            InfEvento.nSeqEvento := 1;
            InfEvento.chNFe := Copy(ACBrNFe1.NotasFiscais.Items[0].NFe.infNFe.ID, 4, 44);
            InfEvento.dhEvento := Now;
            InfEvento.tpEvento := teCancelamento;
            infEvento.detEvento.xJust := // Justificativa;
            InfEvento.detEvento.nProt := ACBrNFe1.NotasFiscais.Items[0].NFe.procNFe.nProt;

            ACBrNFe1.WebServices.EnvEvento.Executar;
          end;


// Retornos
              iUltimoIndice := ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Count - 1;

FInfoProtocolo := ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[iUltimoIndice].RetInfEvento.nProt;

FInfoMotivo := ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[iUltimoIndice].RetInfEvento.xMotivo;

FInfoStat := IntToStr(ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[iUltimoIndice].RetInfEvento.cStat);
        
FInfoDataHora := DateTimeToStr(ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[iUltimoIndice].RetInfEvento.dhRegEvento);

Peterson de Cerqueira Matos
[email protected]
Vivo: (11) 97197-1474 / Oi: (11) 98059-4055

Link para o comentário
Compartilhar em outros sites

Boa Tarde!

Meu nome é Amaury, sou iniciante aqui no forum e estou desenvolvendo a rotina de Cancelamento utilizando

Evento e estou com com essa mensagem, alguém sabe me dizer o que pode ser?

Segue a mensagem e o codigo da rotina

 

// Mensagem de Erro

Não foi possivel cancelar a NF-e
Erro Original:envEventoCancNFe_v1.00.xsd#schema/element[1][@name = 'envEvento']
Undeclared XSD type : "{http://www.portafiscal.inf.br/nfe}-TEnvEvento"
Processament interrompido

 

// Codigo da Rotina

      ACBrNFe1.NotasFiscais.LoadFromFile(PathWithDelim(ACBrNFe1.Configuracoes.Geral.PathSalvar)+'XML_Load\Nota_'+DadosNFe.TNotaFiscalNOTA.AsString+'.xml');

      if not(InputQuery('WebServices Cancelamento', 'Justificativa', MJustificativa)) then exit;

 

      idLote := Trim(IntToStr(MProximo_Lote));

 

      nSeqEvento := IntToStr(DadosNFe.TNotaFiscalSEQUENCIA_EVENTO.AsInteger + 1);
 

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

      with ACBrNFe1.EventoNFe.Evento.Add do
      begin
          InfEvento.tpAmb           := ACBrNFe1.NotasFiscais.Items[0].NFe.Ide.tpAmb;
          infEvento.CNPJ            := ACBrNFe1.NotasFiscais.Items[0].NFe.Emit.CNPJCPF;
          InfEvento.cOrgao          := ACBrNFe1.NotasFiscais.Items[0].NFe.Ide.cUF;
          InfEvento.nSeqEvento      := StrToInt(nSeqEvento); //1;
          InfEvento.chNFe           := Copy(ACBrNFe1.NotasFiscais.Items[0].NFe.infNFe.ID, 4, 44);
          InfEvento.dhEvento        := Now;
          InfEvento.tpEvento        := teCancelamento;
          infEvento.detEvento.xJust := MJustificativa;
          InfEvento.detEvento.nProt := ACBrNFe1.NotasFiscais.Items[0].NFe.procNFe.nProt;
      end;

      Try
         //ACBrNFe1.Cancelamento(vAux);
         // ACBrNFe1.EnviarEventoNFe(StrToInt(idLote));

         ACBrNFe1.WebServices.EnvEvento.Executar;
         Sleep(3000);

      Except on
         E:Exception do
         Begin
            Abilita_Botoes;
            raise Exception.Create('Não foi possível cancelar a NF-e'+#13+
                                   'Erro Original:'+E.Message+#13+
                                   'Processamento interrompido.');

            if ACBrNFe1.NotasFiscais.Items[0].Alertas <> '' then
               MemoDados.Lines.Add('Alertas: '+ACBrNFe1.NotasFiscais.Items[0].Alertas);

            Exit;
         end;
      end;

Link para o comentário
Compartilhar em outros sites

Fala galera estou tentando fazer conforme exeplo do peterson porem quando executa esta me dando uma mensagem de access violation at address 00A7AE72

Algem tem uma ideia do que seja

 

 

Estão faltando informações no envio dos dados do evento.

Tente desta maneira:

        ACBrNFe1.NotasFiscais.Clear;
        ACBrNFe1.NotasFiscais.LoadFromFile(sArquivo);

        ACBrNFe1.EventoNFe.Evento.Clear;
        ACBrNFe1.EventoNFe.idLote := ;

        with ACBrNFe1.EventoNFe.Evento.Add do
          begin
            InfEvento.tpAmb := ACBrNFe1.NotasFiscais.Items[0].NFe.Ide.tpAmb;
            infEvento.CNPJ := ACBrNFe1.NotasFiscais.Items[0].NFe.Emit.CNPJCPF;
            InfEvento.cOrgao := ACBrNFe1.NotasFiscais.Items[0].NFe.Ide.cUF;
            InfEvento.nSeqEvento := 1;
            InfEvento.chNFe := Copy(ACBrNFe1.NotasFiscais.Items[0].NFe.infNFe.ID, 4, 44);
            InfEvento.dhEvento := Now;
            InfEvento.tpEvento := teCancelamento;
            infEvento.detEvento.xJust := // Justificativa;
            InfEvento.detEvento.nProt := ACBrNFe1.NotasFiscais.Items[0].NFe.procNFe.nProt;

            ACBrNFe1.WebServices.EnvEvento.Executar;
          end;


// Retornos
              iUltimoIndice := ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Count - 1;

FInfoProtocolo := ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[iUltimoIndice].RetInfEvento.nProt;

FInfoMotivo := ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[iUltimoIndice].RetInfEvento.xMotivo;

FInfoStat := IntToStr(ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[iUltimoIndice].RetInfEvento.cStat);
        
FInfoDataHora := DateTimeToStr(ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[iUltimoIndice].RetInfEvento.dhRegEvento);
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Tente fazer assim:

http://www.regys.com.br/como-enviar-um-evento-de-cancelamento-utilizando-o-acbrnfe/

 

certifique-se primeiro que os schemas estão atualizados, para pegar os schemas atuais vá até a pasta <acbr>\exemplos\acbrnfe2\delphi

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

Eu atualizei eles e ainda persiste

 

Segue o codigo sera que estou fazendo algo de errado neles?

 

vAux:= InputBox('Cancelamento de NF', 'Motivo:', vAux );
    xIDNFe:= tabNF.FieldByName('IDNFE').AsString;
    if xIDNFe > '' then begin
      NotaFiscal.NotasFiscais.Clear;
      NotaFiscal.Configuracoes.WebServices.UF         := FrmGer.pl_EstadoEmp;
      if FrmGer.pl_AMBIENTENFE = 0 then begin
        NotaFiscal.Configuracoes.WebServices.Ambiente   := taHomologacao;
      end else if FrmGer.pl_AMBIENTENFE = 1 then begin
        NotaFiscal.Configuracoes.WebServices.Ambiente   := taProducao;
      end else if FrmGer.pl_AMBIENTENFE = 2 then begin
      end else begin
        ShowMessage('Ambiente da NFE Inválido. verifique o cadastro da empresa.');
        exit;
      end;

      NotaFiscal.Configuracoes.Certificados.NumeroSerie:= FrmGer.pl_NumeroCertificado;
      NotaFiscal.Configuracoes.Geral.Salvar       := True;
      NotaFiscal.Configuracoes.Geral.PathSalvar   := DataPathNfe;
      PathNFe:= NotaFiscal.Configuracoes.Geral.PathSalvar;
      PathNFe:= PathNFe + '\' + xIDNFe + '-nfe.xml';

 

      
      NumeroLote := tabNF.FieldByName('CONTROLE').AsInteger;
      if not NotaFiscal.NotasFiscais.LoadFromFile(PathNFe) then
        raise Exception.Create('Não foi possível carregar o XML da Nota Fiscal Eletrônica correspondente!');


      NotaFiscal.EventoNFe.Evento.Clear;
      NotaFiscal.EventoNFe.idLote := NumeroLote;

      with NotaFiscal.EventoNFe.Evento.Add do  begin
        infEvento.chNFe      := xIDNFe;
        infEvento.CNPJ       := FrmGer.pl_CnpjEmp;
        infEvento.dhEvento   := NOW;
        infEvento.tpEvento   := teCancelamento;
        infEvento.detEvento.nProt := NotaFiscal.NotasFiscais.Items[0].NFe.procNFe.nProt;
        infEvento.detEvento.xJust := vAux;
      end;
      // Enviar o evento de cancelamento
      if NotaFiscal.EnviarEventoNFe(NumeroLote) then  //AQUI ACONTECE O ERRO
      begin
        with NotaFiscal.WebServices.EnvEvento do
        begin
          if EventoRetorno.retEvento.Items[0].RetInfEvento.cStat <> 135 then
          begin
            raise Exception.CreateFmt(          'Ocorreu o seguinte erro ao cancelar a nota fiscal eletrônica:'  + sLineBreak +
                                              'Código:%d' + sLineBreak +
                                              'Motivo: %s', [            EventoRetorno.retEvento.Items[0].RetInfEvento.cStat,
                                                                         EventoRetorno.retEvento.Items[0].RetInfEvento.xMotivo        ]);
          end;
          // retornos
          DataHoraEvento  := EventoRetorno.retEvento.Items[0].RetInfEvento.dhRegEvento;
          NumeroProtocolo := EventoRetorno.retEvento.Items[0].RetInfEvento.nProt;
          XMLCancelamento := EventoRetorno.retEvento.Items[0].RetInfEvento.XML;
          CodigoStatus    := EventoRetorno.retEvento.Items[0].RetInfEvento.cStat;
          MotivoStatus    := EventoRetorno.retEvento.Items[0].RetInfEvento.xMotivo;
        end;
      end  else  begin
        with NotaFiscal.WebServices.EnvEvento do
          raise Exception.Create(        'Ocorreram erros ao tentar efetuar o cancelamento:' + sLineBreak +
                                       'Lote: '     + IntToStr(EventoRetorno.idLote) + sLineBreak +
                                       'Ambiente: ' + TpAmbToStr(EventoRetorno.tpAmb) + sLineBreak +
                                       'Orgao: '    + IntToStr(EventoRetorno.cOrgao) + sLineBreak +        sLineBreak +
                                       'Status: '   + IntToStr(EventoRetorno.cStat) + sLineBreak +
                                       'Motivo: '   + EventoRetorno.xMotivo      );
      end;

   end;

 

 

 

Então os seus schemas estão desatualizados.

Editado por marcioaugustoprog
Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...

Oi segui as orientações do fórum e o cliente não pode realizar cancelamento de nfe..

 

Baixei do site da receita:

Esquemas XML NF-e - Evento Cancelamento( Atualizado em 05/04/2012) (ZIP)

 

Atualizei no PC desenvolvimento e no PC cliente e deu erro

 

Falha na validação dos dados do Envio de Evento

'' violates pattern constraint of '[!-ÿ]{1}[ -ÿ]{0,}[!-ÿ]{1}|[!-ÿ]{1}'.

The element '{http://www.portalfiscal.inf.br/nfe}xJust' with value '' failed to parse.

 

Agradeço a ajuda.

 

gilsonlongo

Link para o comentário
Compartilhar em outros sites

  • Moderadores

A mensagem de erro já conta o que está acontecendo:

 

The element '{http://www.portalfis...nf.br/nfe}xJust' with value '' failed to parse

 

Você não preencheu o campo "xJust", ela deve ter pelo menos 15 caracteres alfanuméricos.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Link para o comentário
Compartilhar em outros sites

estou usando versão 8.1a no PR, o cancelamento usando comando NFE.CancelarNFe estava funcionando perfeitamente, agora passou a dar problema, conforme resposta abaixo:

 

OK: Servico desativado, usar o evento de cancelamento.

[CANCELAMENTO]

Versao=PR-v2_7_5

TpAmb=1

VerAplic=PR-v2_7_5

CStat=999

XMotivo=Servico desativado, usar o evento de cancelamento.

CUF=41

ChNFe=41130610812342000160550010000045671000045673

DhRecbto=30/12/1899

NProt=

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...

Boa tarde a todos.

 

Só para ajudar quem passar por essa situação:

 

Eu tive um problema com cancelamento quando enviei a nota em ambiente de produção, dando o famoso erro 494.

Isso se dá porque no evento de cancelamento não foi informado o tipo de ambiente.

 

InfEvento.tpAmb := taProducao

 

Caso não informe, quando cancelar ele vai procurar no ambiente de homologação informando o erro.

 

Espero ter contribuido.

Editado por clodocris
Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...

Olá Regys, me desculpa c estou fugindo um pouco do assunto mas estou com problemas no cancelamento eu não entendi a parte de seu codigo de cancelamento desta parte 

  // retornos
        DataHoraEvento := EventoRetorno.retEvento.Items[0].RetInfEvento.dhRegEvento;
        NumeroProtocolo := EventoRetorno.retEvento.Items[0].RetInfEvento.nProt;
        XMLCancelamento := EventoRetorno.retEvento.Items[0].RetInfEvento.XML;
        CodigoStatus := EventoRetorno.retEvento.Items[0].RetInfEvento.cStat;
        MotivoStatus := EventoRetorno.retEvento.Items[0].RetInfEvento.xMotivo;
 
o que é DataHoraEvento, NumeroProtocolo, XMLCancelamento, CodigoStatus, MotivoStatus, e como faço para alimenta-los, obrigado c puder me ajudar, um abraço
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

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