Ir para conteúdo
  • Cadastre-se

dev botao

Como Ler ("importar") Um Xml De Cte ?


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

Recommended Posts

Pessoal, começei a desenvolver uma rotina para ler um arquivo XML de CTe, e importar o seu conteúdo para campos adequados no banco de dados.

 

Dei uma olhada no demo do Acbr (Cte) e no evento onclick do botão "Importar XML" vi que praticamente todo o código está comentado.

Pois bem, descomentei o código e ao tentar compilar recebo várias mensagens que mostram que algumas propriedades não existem.

 

Pergunto aos colegas se esse código existente é viavel de ser corrigido, ou se ele é "furado" e devo partir para outro código ?

 

Obs: estou lendo todos os posts sobre CTe mas ainda não encontrei nenhum a esse respeito.

 

 

J.Humberto Munhoz

BomSoft Sistemas

Mococa - SP

 

BomSoft.JPG.feafd9ad3bb7c05eb372c8d833e71ec5.JPG

 

Link para o comentário
Compartilhar em outros sites

Boa tarde J. Humberto Munhoz,

 

A partir do momento em que você carrega o XML no componente através do comando: ACBrCTe1.Conhecimentos.LoadFromFile(OpenDialog1.FileName); , você tem acesso a todos campos do mesmo.

 

Para pear o CNPJ do remetente por exemplo, você consegue acessar este valor da seguinte forma:

 

cnpj := ACBrCTe1.Conhecimentos.Items[n].CTe.Emit.CNPJCPF;

 

ou

 

wiht ACBrCTe1.Conhecimentos.Items[n].CTe do

begin

  cnpj := Emit.CNPJCPF;

end;

 

Espero ter ajudado

 

Atenciosamente.

  • Curtir 1

Saudações,

Wislei de Brito Fernandes

Link para o comentário
Compartilhar em outros sites

Beto eu fiz para importar dados da NF-e XML mas a idéia é a mesma é só mudar os nomes do campo...

 

Obs.: Sempre pego informações diretamente do componente não sendo necessário ler o XML... mas caso queira segue o meu exemplo abaixo...

 

var
    vXMLDoc: TXMLDocument;
    NodePrim, NodePai, NodePriEmi, NodePaiEmi, NodeCabecalho, NodePrim2,
    NodePai2, NodePai3, Nocab2, NodePrim3, NodePai4, NodePai5, Nocab3,
    NodePrim4, NodePai6, NodePai7, NodePai8, NodePai9, Nocab4 : IXMLNode;
    AuxChave, AuxData, AuxPesoB, AuxVNF : String;
begin
 vXMLDoc             := TXMLDocument.Create(self);
 AbrirXML.Title      := 'Selecione o XML';
 AbrirXML.DefaultExt := '*.xml';
 AbrirXML.Filter     := 'Arquivos XML (*.xml)|*.xml|Arquivos XML (*.xml)|*.xml|Todos os Arquivos (*.*)|*.*';
 if AbrirXML.Execute then begin
   vXMLDoc.LoadFromFile(AbrirXML.FileName); //Le Arquivo Recibo XML');
   vXMLDoc.Active     := True;
   NodePrim           := vXMLDoc.DocumentElement.ChildNodes.FindNode('protNFe');
   NodePai            := NodePrim.ChildNodes.FindNode('infProt');
   NodePriEmi         := vXMLDoc.DocumentElement.ChildNodes.FindNode('NFe');
   NodePaiEmi         := NodePriEmi.ChildNodes.FindNode('infNFe');
   NodeCabecalho      := NodePaiEmi.ChildNodes['ide'];
   NodePrim2          := vXMLDoc.DocumentElement.ChildNodes.FindNode('NFe');
   NodePai2           := NodePrim2.ChildNodes.FindNode('infNFe');
   NodePai3           := NodePai2.ChildNodes.FindNode('transp');
   Nocab2             := NodePai3.ChildNodes['vol'];
   NodePrim3          := vXMLDoc.DocumentElement.ChildNodes.FindNode('NFe');
   NodePai4           := NodePrim3.ChildNodes.FindNode('infNFe');
   NodePai5           := NodePai4.ChildNodes.FindNode('total');
   Nocab3             := NodePai5.ChildNodes['ICMSTot'];
   NodePrim4          := vXMLDoc.DocumentElement.ChildNodes.FindNode('NFe');
   NodePai6           := NodePrim4.ChildNodes.FindNode('infNFe');
   NodePai7           := NodePai6.ChildNodes.FindNode('transp');
   Nocab4             := NodePai7.ChildNodes.FindNode('vol');
 
   AuxChave           := NodePai.ChildNodes['chNFe'].text;
   AuxChave           := FormataChave(AuxChave);
   txtChave.Text      := Trim(AuxChave);
   txtChaveExit(Self);
   AuxData            := NodeCabecalho.ChildNodes['dEmi'].text;
   txtEmissao.Text    := Copy(AuxData,9,2)+'/'+Copy(AuxData,6,2)+'/'+Copy(AuxData,1,4);
   AuxPesoB           := Nocab2.ChildNodes['pesoB'].text;
   AuxPesoB           := StringReplace(AuxPesoB, '.', ',', [rfReplaceAll]);
   txtPBruto.Text     := FormatFloat('###,##0.000', StringFloat(AuxPesoB));
   txtPCalc.Text      := Trim(txtPBruto.Text);
   AuxVNF             := Nocab3.ChildNodes['vNF'].text;
   AuxVNF             := StringReplace(AuxVNF, '.', ',', [rfReplaceAll]);
   txtVlNota.Text     := FormatFloat('###,##0.00', StringFloat(AuxVNF));
   txtVolume.Text     := FormatFloat('###,##0.000', StringFloat(Nocab4.ChildNodes['qVol'].text));
   txtVlNota.SetFocus;
 end;
 
Espero que tenha te ajudado...
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Ok, localizei o ACBR.INC na pasta "C:\ACBR\Fontes\ACBrComum".

Localizei a seção correspondente a CTe.

Ela está assim:

 

//{$DEFINE PL_103}
//{$DEFINE PL_104}
{$DEFINE PL_200}

 

eu não sei qual a linha que devo descomentar.

Existe alguma relação entre a versão do componente e o "define" a ser utilizado ?

Ou é a versão do XML do CTe ?

 

Quando eu alterar algo no acbr.inc , é preciso recompilar os pacotes ?

 

Obrigado e desculpa pelo monte de perguntas, mas vou passar esse final de semana trabalhando nisso.

 

Opâ, depois que eu postei essa resposta é que eu li algumas respostas que os colegas postaram. Obrigado pelas respostas mas as dúvidas acima continuam...

Editado por betomunhoz

J.Humberto Munhoz

BomSoft Sistemas

Mococa - SP

 

BomSoft.JPG.feafd9ad3bb7c05eb372c8d833e71ec5.JPG

 

Link para o comentário
Compartilhar em outros sites

  • 5 meses depois ...
  • 5 semanas depois ...
  • Moderadores

3.1 - Não faça flooding - Inundar o fórum com posts repetidos, com a mesma dúvida ou as mesmas palavras é chamado de flooding. Isso é proibido. Apenas um post feito no lugar certo é suficiente. Pesquise antes de postar, talvez sua dúvida já está respondida em outro post.

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

Eu publiquei uma dúvida anterior a este POST, tópico diferente.  Me deparei com o problema da diferença dos lay-outs. 

 

Depois vi esta publicação feita pelo betomunhoz  após a minha e o assunto é similar.

Quis posicionar a minha dúvida que será útil também para este tópico. 

 

Assim, entendo que estou fazendo flooding.

Link para o comentário
Compartilhar em outros sites

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