Ir para conteúdo
  • Cadastre-se

dev botao

Importação de XML do CT-e


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

Recommended Posts

Postado

Prezados senhores,

Preciso de um código fonte que lê um arquivo XML do Ct-e e recupere as informações ref. a cada campo para importar no banco de dados do nosso sistema. Trabalho com o Delphi 2007. Já procurei na internet e ainda não consegui achar nada.

Postado

Bom dia @andremelim tenho um exemplo aqui que eu uso no meu sistema... 

É só adaptar pelo o que você precisa...  (Nesse meu caso estou pegando campos de uma NF-e, mas para o CT-e a lógica é a mesma só mudar os nomes dos campos)

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;
    AuxPeso : Boolean;
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
   if (Application.MessageBox('Deseja Pegar o Peso Bruto? (Sim = Peso Bruto - Não = Peso Líquido)','Pergunta',MB_YESNO+MB_ICONQUESTION) = IDNO) then
     AuxPeso := False
   else
     AuxPeso := True;
   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['dhEmi'].text;
   txtEmissao.Text    := Copy(AuxData,9,2)+'/'+Copy(AuxData,6,2)+'/'+Copy(AuxData,1,4);
   if (AuxPeso = True) then
     AuxPesoB         := NoCab4.ChildNodes['pesoB'].text
   else
     AuxPesoB         := NoCab4.ChildNodes['pesoL'].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));
   txtDtPrev.SetFocus;

 

  • Moderadores
  • Solution
Postado
1 hora atrás, andremelim disse:

Prezados senhores,

Preciso de um código fonte que lê um arquivo XML do Ct-e e recupere as informações ref. a cada campo para importar no banco de dados do nosso sistema. Trabalho com o Delphi 2007. Já procurei na internet e ainda não consegui achar nada.

ACBrCTe1.Conhecimentos.Clear;
ACBrCTe1.Conhecimentos.LoadFromFile(NomeArqXML);

 

  • Curtir 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

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