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;
Descubra mais sobre Régys Borges da Silveira
Assine para receber nossas notícias mais recentes por e-mail.