Ir para conteúdo
  • Cadastre-se

Evento desacordo CTe sem ler o XML


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

Recommended Posts

Postado

Boa tarde,

 

Estamos desenvolvendo uma rotina para registrar o evento de desacordo na CTe. 

Temos 2 versões desse método, um que é feito a leitura do XML, esse está 100%.

E outra que seria apenas informado a chave da CTe, justificativa e UF.

Porem percebemos que ele retorna a mensagem de "UF não pode ser vazia.". Debugando o código, percebi que a chCTe esta sumindo no meio do caminho.

Em dado momento ele tenta obter a UF, com essa função 

function ExtrairUFChaveAcesso(const AChave: string): Integer;
begin
  Result := StrToIntDef(Copy(OnlyNumber(AChave),1,2), 0);
end;

Como a chave chegou ali em branco ele acaba não conseguindo obter a UF.

Código da minha função:

procedure PrestacaoServicoDesacordoCTe(xObs, UFTomador, CNPJTomador, Chave : string);
var
  iLote: Integer;
  obCteSefaz : TCteSefaz;
begin
  obCteSefaz := TCteSefaz.Create;
  with obCTeSefaz do
  begin
    ACBrCTe.Conhecimentos.Clear;

    ACBrCTe.EventoCTe.Evento.Clear;

    with ACBrCTe.EventoCTe.Evento.Add do
    begin
      infEvento.nSeqEvento := 1;
      // Devemos informar a UF do Emitente do CT-e
      InfEvento.cOrgao     := UFtoCUF(UFTomador);
      infEvento.chCTe      := Chave;
      infEvento.CNPJ       := RemoverCaracteresEspeciais(CNPJTomador);
      infEvento.dhEvento   := now;
      infEvento.tpEvento   := tePrestDesacordo;
      infEvento.detEvento.xOBS  := xObs;
    end;

    iLote := 1; // Numero do Lote do Evento

    ACBrCTe.EnviarEvento(iLote);
    ACBrCTe.Free;
  end;
  obCTeSefaz.Free;
end;

 Tem mais um print em anexo, nele podemos ver que o xml gerado não tem a chave, e podemos ver que na lista de watchList, a variável com chave está devidamente preenchida. Que no caso seria essa: 43250634046620000183570000000000241025021119-cte.xml apenas com os números. 

 

Em outros tópicos (já fechados) sobre esse assunto, é dito que não há necessidade de carregar o XML para emitir esse tipo de evento. 

erroCTEsemXML.png

  • Consultores
Postado

Sim não precisaria usar o xml

tu teria que só informar. 

tu está usando já o TACBrXMLDocument? senão diria pra mudar pra ele e re testar

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Solution
Postado

A principio não estou usado o TACBrXMLDocument.

 

consegui resolver criando em separado e evento e adicionado ele posteriormente.

procedure PrestacaoServicoDesacordoCTe(xObs, UFTomador, CNPJTomador, Chave : string);
var
  iLote: Integer;
  obCteSefaz : TCteSefaz;
  novoEvento : TInfEvento ;
begin

  novoEvento := TInfEvento.Create;
  novoEvento.cOrgao     := UFtoCUF(UFTomador);
  novoEvento.chCTe      := Chave;
  novoEvento.CNPJ       := RemoverCaracteresEspeciais(CNPJTomador);
  novoEvento.dhEvento   := now;
  novoEvento.tpEvento   := tePrestDesacordo;
  novoEvento.detEvento.xOBS  := xObs;


  obCteSefaz := TCteSefaz.Create;
  with obCTeSefaz do
  begin
    ACBrCTe.Conhecimentos.Clear;
    ACBrCTe.EventoCTe.Evento.Clear;
    ACBrCTe.EventoCTe.Evento.New.InfEvento := novoEvento;
    iLote := 1; // Numero do Lote do Evento
    ACBrCTe.EnviarEvento(iLote);
    ACBrCTe.Free;
  end;
  obCTeSefaz.Free;

end;

Parece que o ADD faz algum tipo de validação e acabava por "eliminar" o conteúdo. Ou não esta sendo passado ao adicionar... Não achei isso no código, apenas especulação. 

 

De qualquer forma, fica essa solução temporária, parece gambiarra mas funcionou. 

  • Consultores
Postado

há eu sei o que é 

remove o WITH do seu primeiro código e vai funcionar

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

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