Ir para conteúdo
  • Cadastre-se

dev botao

Obter retorno da carta de correçao eletronica


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

Recommended Posts

Ola pessoal Boa tarde, como faço para obter o retorno da carta de correção apos o comando:

ACBrNFe.EnviarCartaCorrecao(CodigoLote);

Andei dado uma olhada mas não consegui obter o retorno, se foi OK ou não, alguém sabe como fazer ?

desde já gradeço.

Thiago Balbino

Analista de Sistemas Programador

email: [email protected]

Muriaé - MG

 

Link para o comentário
Compartilhar em outros sites

Boa tarde Walter,

não sei se vc já conseguiu, mas aqui mesmo no fórum vi esta dica, ainda não testei, mas segue a mesma:

altere a linha - decrescendo de 5 minutos a hora atual -

infEvento.dhEvento := IncMinute(now,-5);

Aproveitando a deixa, algum amigo sabe me informar como obter pelo ACBR o nº do protocolo da CCe?

Att.

"Não me envergonho de mudar de opinião, porque não me envergonho de pensar" (Blaise Pascal)

Link para o comentário
Compartilhar em outros sites

Galera desculpa ae, acho que encontrei.

ACBrNFe.webServices.CartaCorrecao.cStat

onde cStat = 100 - Autorizado

Confirma ?

Esse seria o retorno do lote.

Para o retorno do evento (CCe):

AcbrNFe.WebServices.CartaCorrecao.CCeRetorno.retEvento.Items.RetInfEvento.cStat

cStat = 135 que eh autorizado

Jeanny Paiva Lopes

Analista de Sistemas / Desenvolvedora 

[email protected]

[email protected]
Tel.: +55 (32) 3539-5700

 

 

Link para o comentário
Compartilhar em outros sites

Encontrei, a forma de obter o nº do Protocolo, aproveitando a informação prestada pelo amigo Nellien, testei e encontrei:

AcbrNFe1.WebServices.CartaCorrecao.CCeRetorno.retEvento.Items.RetInfEvento.nProt

"Não me envergonho de mudar de opinião, porque não me envergonho de pensar" (Blaise Pascal)

Link para o comentário
Compartilhar em outros sites

  • 5 semanas depois ...
  • 2 meses depois ...

Olá,

Estou tendo um problema.

O sistema estava trasmitindo as CCes normalmente e recebendo o retorno sem problemas,

mas agora o protocolo no retorno da carta de correção está vindo vazio.

Se eu consultar a carta de correção no site da fazenda eu encontro ela normal.

O código que estou usando para pegar o número de protocolo é

protocolo := AcbrNFe1.WebServices.CartaCorrecao.CCeRetorno.retEvento.Items[0].RetInfEvento.nProt;

Mudou alguma coisa?

Thiago Fonseca Lima

Programador Delphi e Java

Link para o comentário
Compartilhar em outros sites

O código que estou utilizando para o envio e recebimento é o seguinte:

ACBrNFe1.Evento.Eventos.Evento.Clear;

ACBrNFe1.Evento.Eventos.idLote := 1 ; //Não faz diferença pro webservice

with ACBrNFe1.Evento.Eventos.Evento.Add do

begin

  strId := 'ID'+Trim(Querys.Query.FieldByName('CODEVENTO').AsString)+Trim(Querys.Query.FieldByName('CHAVE_NFE').AsString)+StrZero(Querys.Query.FieldByName('SEQUENCIAL').AsInteger,2);

  seq := Querys.Query.FieldByName('SEQUENCIAL').AsInteger;

  infEvento.chNFe := Querys.Query.FieldByName('CHAVE_NFE').AsString;

  infEvento.CNPJ   := Querys.Query.FieldByName('CNPJ').AsString;

  infEvento.dhEvento := now;

  infEvento.tpEvento := teCCe;

  infEvento.nSeqEvento := Querys.Query.FieldByName('SEQUENCIAL').AsInteger;

  infEvento.detEvento.xCorrecao := Troca_String(Querys.Query.FieldByName('CORRECAO').AsString,[#13#10],[' ']); //Texto da correção

end;

Querys.Query.Active := False;

if ACBrNFe1.EnviarEvento(1)

then begin

  if Pos('REJEICAO:',AnsiUpperCase(String(AcbrNFe1.WebServices.Eventos.EventoRetorno.retEvento.Items[0].RetInfEvento.xMotivo))) <> 0

  then begin

    Querys.Query.Active := False;

    Querys.Query.RequestLive := false;

    Querys.Query.SQL.Clear;

    Querys.Query.SQL.Add('UPDATE CARTAS_CORRECAO SET ID = :ID, DATA = :DATA, HORA = :HORA, MOTIVO_REJEITADA = :MOTIVO_REJEITADA, STATUS = ''R''');

    Querys.Query.SQL.Add('WHERE EMPRESA = :EMPRESA AND NUMERO = :NUMERO AND SERIE = :SERIE AND SEQUENCIAL = :SEQUENCIAL');

    with AcbrNFe1.WebServices.Eventos.EventoRetorno.retEvento.Items[0]

    do begin

      Querys.Query.ParamByName('ID').AsString := strId;

      Querys.Query.ParamByName('DATA').AsDate := StrToDate(FormatDateTime('dd/mm/yyyy', RetInfEvento.dhRegEvento));

      Querys.Query.ParamByName('HORA').AsTime := StrToTime(FormatDateTime('hh:nn:ss', RetInfEvento.dhRegEvento));

      Querys.Query.ParamByName('MOTIVO_REJEITADA').AsString := RetInfEvento.xMotivo;

      strMotivo := RetInfEvento.xMotivo;

      nomeArquivo := caminho_xml+'\CCe-'+RetInfEvento.chNFe+'-Rejeitada-'+FormatDateTime('dd_mm_yyyy__hh_nn_ss', RetInfEvento.dhRegEvento)+'.xml'

    end;

    Querys.Query.ParamByName('EMPRESA').AsString := vEmpresa;

    Querys.Query.ParamByName('NUMERO').AsString := vNumero;

    Querys.Query.ParamByName('SERIE').AsString := vSerie;

    Querys.Query.ParamByName('SEQUENCIAL').AsInteger := seq;

    Querys.Query.ExecSQL;


    ShowMessage('CCe Rejeitada.'+#13#10+strMotivo);


    Result := False;

  end else begin

    Querys.Query.Active := False;

    Querys.Query.RequestLive := false;

    Querys.Query.SQL.Clear;

    Querys.Query.SQL.Add('UPDATE CARTAS_CORRECAO SET ID = :ID, DATA = :DATA, HORA = :HORA, PROTOCOLO = :PROTOCOLO, STATUS = ''T''');

    Querys.Query.SQL.Add('WHERE EMPRESA = :EMPRESA AND NUMERO = :NUMERO AND SERIE = :SERIE AND SEQUENCIAL = :SEQUENCIAL');

    with AcbrNFe1.WebServices.Eventos.EventoRetorno.retEvento.Items[0]

    do begin

      Querys.Query.ParamByName('ID').AsString := strId;

      Querys.Query.ParamByName('DATA').AsDate := StrToDate(FormatDateTime('dd/mm/yyyy', RetInfEvento.dhRegEvento));

      Querys.Query.ParamByName('HORA').AsTime := StrToTime(FormatDateTime('hh:nn:sss', RetInfEvento.dhRegEvento));

      Querys.Query.ParamByName('PROTOCOLO').AsString := RetInfEvento.nProt;


      nomeArquivo := caminho_xml+'\CCe-'+RetInfEvento.chNFe+'-'+RetInfEvento.nProt+'.xml'

    end;

    Querys.Query.ParamByName('EMPRESA').AsString := vEmpresa;

    Querys.Query.ParamByName('NUMERO').AsString := vNumero;

    Querys.Query.ParamByName('SERIE').AsString := vSerie;

    Querys.Query.ParamByName('SEQUENCIAL').AsInteger := seq;

    Querys.Query.ExecSQL;


    Querys.Query.Active := False;

    Querys.Query.RequestLive := false;

    Querys.Query.SQL.Clear;

    Querys.Query.SQL.Add('UPDATE CARTAS_CORRECAO SET STATUS = ''S''');

    Querys.Query.SQL.Add('WHERE EMPRESA = :EMPRESA AND NUMERO = :NUMERO AND SERIE = :SERIE AND SEQUENCIAL <> :SEQUENCIAL AND STATUS = ''T''');

    Querys.Query.ParamByName('EMPRESA').AsString := vEmpresa;

    Querys.Query.ParamByName('NUMERO').AsString := vNumero;

    Querys.Query.ParamByName('SERIE').AsString := vSerie;

    Querys.Query.ParamByName('SEQUENCIAL').AsInteger := seq;

    Querys.Query.ExecSQL;

    Result := True;

  end;

end;

Thiago Fonseca Lima

Programador Delphi e Java

Link para o comentário
Compartilhar em outros sites

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