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.