Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Caros amigos, eu encontrei um grande problema com a geração do XML do CT-e. Percebi que a cada função que executo, seja ele: CTe.Conhecimentos.GerarCTe; (que realmente gera o código), o CTe.Conhecimentos.Assinar; e depois CTe.Conhecimentos.Valida; está trocando a chave (CTe.Conhecimentos.Items[0].CTe.infCTe.ID) do CTe, mais pra frente dá uma grande dor de cabeça, pois o arquivo XML é salvo no disco no "Assinar" perde a chave que tinha na procedure "Validar" (setando então outra em seu lugar)...

O código que fiz para gerar, assinar e validar é o seguinte:

// cria o XML no componente

try

CTe.Conhecimentos.GerarCTe;

except

on Exc: Exception do

begin

Application.MessageBox(

'Falha ao Gerar o XML. Verifique mensagens de retorno',

'Atenção', MB_ICONERROR);

rtfMsgRetorno.Clear;

rtfMsgRetorno.Lines.Add(Exc.Message);

lblEtapa1.Visible := True;

Img1Nao.Visible := True; // Img XML gerado

Exit;

end;

end;

try

CTe.Conhecimentos.Assinar;

except

on Exc: Exception do

begin

Application.MessageBox(

'Falha na Assinatura do XML. Verifique mensagens de retorno'

, 'Atenção', MB_ICONERROR);

rtfMsgRetorno.Clear;

rtfMsgRetorno.Lines.Add(Exc.Message);

Img3Nao.Visible := True;

Exit;

end;

end;

ChaveDV := CTe.Conhecimentos.Items[0].CTe.infCTe.ID;

rtfMsgRetorno.Lines.Add('Chave de Acesso do CT-e: ' + ChaveDV);

// caso der erro no procedimento validar, retorna excecao

try

CTe.Conhecimentos.Valida;

except

on Exc: Exception do

begin

Application.MessageBox(

'Falha de Validação do XML. Verifique mensagens de retorno'

, 'Atenção', MB_ICONERROR);

rtfMsgRetorno.Clear;

rtfMsgRetorno.Lines.Add(Exc.Message);

Img4Nao.Visible := True;

Exit;

end;

end;

**************************************************************************************************************

Em que lugar eu errei?

Obrigado pela atenção!

Alexandre De Carli,
Gerente de Projetos na empresa Econtabil Software.


email: [email protected]
site: http://www.extremeprogramming.wordpress.com
Pato Branco - PR

  • Consultores
Postado

Boa Noite Alexandre,

Não existe problema algum com a geração do XML do CTe, mais precisamente com a chave do mesmo.

O que esta acontecendo é que, ao alimentar o componente com os dados pertinentes ao transporte da carga, você esta informando ZERO ao campo cCT (código aleatório que compõe a chave do CT-e):

Ide.cCT := 0;

Desta forma ao executar os procedimentos GerarXml ou Assinar ou Validar é gerado a chave do CT-e, a rotina que a gera utiliza o valor do campo cCT se este for igual a ZERO é gerado um código aleatório.

O que eu faço é gerar esse código aleatório e depois atribuir esse valor ao campo cCT, veja este exemplo:


Randomize;

CodigoAleatorio := Random(999999999);


With ACBrCTe.Conhecimentos.Add.CTe do 

  begin

    Ide.cCT := CodigoAleatorio;

    (....)

  end;

Fazendo desse jeito a rotina que gera a chave vai utilizar sempre o mesmo código aleatório, pois é diferente de ZERO, portanto a chave gerada sempre vai ser igual.

Outro detalhe muito importante eu salvo o valor do código Aleatório em um campo na tabela do banco de dados, juntamente com os demais dados.

Espero ter ajudado.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

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