Ir para conteúdo
  • Cadastre-se

Jacson

Membros
  • Total de ítens

    2
  • Registro em

  • Última visita

Jacson's Achievements

  1. 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.
  2. 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.
×
×
  • 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.

The popup will be closed in 10 segundos...