Régys Borges da Silveira

  • Início
  • Assinatura Fontes
  • Cursos
  • Fontes de Aplicativos
  • Downloads
  • Contato
  • Sitemap
  • Sobre
20 novembro 2012

Como enviar uma carta de correção utilizando o ACBrNFe

Escrito por Régys Borges da Silveira
20/11/2012 ACBr ACBr, Carta de Correção, Delphi, NF-e 21 comentários

Segue um exemplo de utilização da carta de correção eletrônica utilizando o ACBrNFe, a carta de correção é disciplinada pela Nota Técnica 2011.003 e alguns pontos devem ser observados, segue texto:

A Carta de Correção é disciplinada pelo § 1º-A do art. 7º do Convênio S/N, de 15 de dezembro de 1970 e pode ser utilizada para regularização de erro ocorrido na emissão de documento fiscal, desde que o erro não esteja relacionado com:
I – as variáveis que determinam o valor do imposto tais como: base de cálculo, alíquota, diferença de preço, quantidade, valor da operação ou da prestação;
II – a correção de dados cadastrais que implique mudança do remetente ou do destinatário; III – a data de emissão ou de saída.

É importante saber que a última carta de correção enviada substitui as anteriores, portanto a última deve sempre conter todas as correções, mesmo as já enviadas.

O número sequencial da Carta de Correção (nSeqEvento) deve ser controlado pelo aplicativo e deve sempre incrementar a cada envio.


  // Adicione a unit pcnConversao ao uses.

  // numero do lote de envio
  NumeroLote := StrToInt(FormatDateTime('yymmddhhmm', NOW));

  // preenchimento dos dados da carta de correção
  ACBrNFe.EventoNFe.Evento.Clear;
  ACBrNFe.EventoNFe.idLote := NumeroLote;

  with ACBrNFe.EventoNFe.Evento.Add do
  begin
    infEvento.chNFe      := ChaveNFe;
    infEvento.CNPJ       := CnpjEmitente;
    infEvento.dhEvento   := Now;
    infEvento.tpEvento   := teCCe;
    infEvento.nSeqEvento := <Numero Sequencial>; 
    infEvento.detEvento.xCorrecao := <Texto da Carta de Correção>;
  end;

  // envio da carta de correção
  if ACBrNFe.EnviarEventoNFe(NumeroLote) then
  begin
    with ACBrNFe.WebServices.EnvEvento do
    begin
      if not(EventoRetorno.retEvento.Items[0].RetInfEvento.cStat in [135, 136]) then
      begin
        raise EDatabaseError.CreateFmt(
          'Ocorreu o seguinte erro ao enviar a carta de correção:'  + 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;
      XMLCCe          := 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 ACBrNFe.WebServices.EnvEvento do
    begin
      raise Exception.Create(
        'Ocorreram erros ao enviar a Carta de Correção:' + 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;

Compartilhar este post

  • Clique para compartilhar no WhatsApp(abre em nova janela) WhatsApp
  • Clique para compartilhar no Telegram(abre em nova janela) Telegram
  • Clique para compartilhar no Facebook(abre em nova janela) Facebook
  • Clique para compartilhar no LinkedIn(abre em nova janela) LinkedIn
  • Clique para imprimir(abre em nova janela) Imprimir
  • Clique para enviar um link por e-mail para um amigo(abre em nova janela) E-mail

Curtir isso:

Curtir Carregando...

Descubra mais sobre Régys Borges da Silveira

Assine para receber nossas notícias mais recentes por e-mail.

© Copyright 2014. Todos os direitos reservados.