Ir para conteúdo
  • Cadastre-se

dev botao

Como Acessar Infnf, Infnfe, Infoutros Após Carregar Xml.


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

Recommended Posts

Bom dia

 

estou importando os XML´s de uma transportadora e após carregar o XML,

 

não estou conseguindo acessar os dados dos documentos, demais campos sem problema.s

 

      infNF, infNFe, infOutros

 

   Pode me ajudar?

 

    with  ACBrCTe1.Conhecimentos.Items[0].CTe do
      begin

      end;

 

Muito obrigado

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Sergio,

 

with  ACBrCTe1.Conhecimentos.Items[0].CTe do
begin

   for x := 0 to infCTeNorm.infDoc.infNF.count -1 do
    svalor := infCTeNorm.infDoc.infNF.items[x].propriedade
end;

 

propriedade é a propriedade que contem o valor a ser lido (vite estrutura do XML no Manual e Notas Técnicas)

 

Algo semelhante pode ser feito para infNFe e infOutros.

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

Link para o comentário
Compartilhar em outros sites

  • Consultores

Sérgio,

 

Se você testar com um XML da versão 1.04 que contenha NF-e como documento originário é para funcionar com a mesma rotina da versão 2.00

 

Por outro lado para os XML da versão 1.04 que contenham NF ou Outros não vai funcionar, pois não foi implementado.

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

Link para o comentário
Compartilhar em outros sites

  • Consultores
  • Solution

Boa tarde Sérgio,

 

Como dito anteriormente, o componente consegue carregar e imprimir sem nenhum problema o DACTE de um XML versão 1.04 desde que o documento originário seja uma NF-e.

 

Se for NF ou Outros o documento não será impresso.

 

Para corrigir esse problema falta incluir esses dois tipos de documentos na unit que faz a leitura do XML, mais precisamente onde existe um IF que identifica os documentos originários da versão 1.04

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

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Sergio,

 

O nome da Unit que faz a leitura das TAGs do XML é: pcteCTeR.pas

Ela encontra-se dentro da pasta: ...\Fontes\ACBrCTe

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

Link para o comentário
Compartilhar em outros sites

Fiz esta inclusão

 

    // Incluído por Thiago Pedro em 02/06/2014 -- Compatibilidade com CTe 1
    i01 := 0;
    if (Copy(CTe.infCTe.versao, 1, 1) = '1') then
    begin
      while Leitor.rExtrai(2, 'infNFe', '', i01 + 1) <> '' do
        begin
          CTe.infCTeNorm.infDoc.InfNFE.Add;
          CTe.infCTeNorm.infDoc.InfNFE[i01].chave := Leitor.rCampo(tcStr, 'chave');
          CTe.infCTeNorm.infDoc.InfNFE[i01].PIN   := Leitor.rCampo(tcStr, 'PIN');
//          CTe.infCTeNorm.infDoc.InfNFE[i01].dPrev := Leitor.rCampo(tcDat, 'dPrev');
          inc(i01);
        end;
      while Leitor.rExtrai(2, 'infNF', '', i01 + 1) <> '' do
        begin
          CTe.infCTeNorm.infDoc.infNF.Add;
          CTe.infCTeNorm.infDoc.InfNF[i01].nRoma := Leitor.rCampo(tcStr, 'nRoma');
          CTe.infCTeNorm.infDoc.InfNF[i01].nPed  := Leitor.rCampo(tcStr, 'nPed');
          CTe.infCTeNorm.infDoc.InfNF[i01].Modelo := StrToModeloNF(Ok, Leitor.rCampo(tcStr, 'mod'));
          CTe.infCTeNorm.infDoc.InfNF[i01].serie := Leitor.rCampo(tcStr, 'serie');
          CTe.infCTeNorm.infDoc.InfNF[i01].nDoc  := Leitor.rCampo(tcEsp, 'nDoc');
          CTe.infCTeNorm.infDoc.InfNF[i01].dEmi  := Leitor.rCampo(tcDat, 'dEmi');
          CTe.infCTeNorm.infDoc.InfNF[i01].vBC   := Leitor.rCampo(tcDe2, 'vBC');
          CTe.infCTeNorm.infDoc.InfNF[i01].vICMS := Leitor.rCampo(tcDe2, 'vICMS');
          CTe.infCTeNorm.infDoc.InfNF[i01].vBCST := Leitor.rCampo(tcDe2, 'vBCST');
          CTe.infCTeNorm.infDoc.InfNF[i01].vST   := Leitor.rCampo(tcDe2, 'vST');
          CTe.infCTeNorm.infDoc.InfNF[i01].vProd := Leitor.rCampo(tcDe2, 'vProd');
          CTe.infCTeNorm.infDoc.InfNF[i01].vNF   := Leitor.rCampo(tcDe2, 'vNF');
          CTe.infCTeNorm.infDoc.InfNF[i01].nCFOP := Leitor.rCampo(tcInt, 'nCFOP');
          CTe.infCTeNorm.infDoc.InfNF[i01].nPeso := Leitor.rCampo(tcDe3, 'nPeso');
          CTe.infCTeNorm.infDoc.InfNF[i01].PIN   := Leitor.rCampo(tcStr, 'PIN');
  //        CTe.infCTeNorm.infDoc.InfNF[i01].dPrev := Leitor.rCampo(tcDat, 'dPrev');
          inc(i01);
        end;
      while Leitor.rExtrai(2, 'infOutros', '', i01 + 1) <> '' do
        begin
          CTe.infCTeNorm.infDoc.InfOutros.Add;
          CTe.infCTeNorm.infDoc.InfOutros[i01].tpDoc      := StrToTpDocumento(ok, Leitor.rCampo(tcStr, 'tpDoc'));
          CTe.infCTeNorm.infDoc.InfOutros[i01].descOutros := Leitor.rCampo(tcStr, 'descOutros');
          CTe.infCTeNorm.infDoc.InfOutros[i01].nDoc       := Leitor.rCampo(tcStr, 'nDoc');
          CTe.infCTeNorm.infDoc.InfOutros[i01].dEmi       := Leitor.rCampo(tcDat, 'dEmi');
          CTe.infCTeNorm.infDoc.InfOutros[i01].vDocFisc   := Leitor.rCampo(tcDe2, 'vDocFisc');
  //        CTe.infCTeNorm.infDoc.InfOutros[i01].dPrev      := Leitor.rCampo(tcDat, 'dPrev');
          inc(i01);
        end;
    end;
    //-- Fim da inclusão por Thiago Pedro em 02/06/2014
 

Como a data prevista só tem no rodo

    if Leitor.rExtrai(2, 'rodo') <> '' then
    begin
      CTe.infCTeNorm.rodo.RNTRC := Leitor.rCampo(tcStr,'RNTRC');
      CTe.infCTeNorm.rodo.dPrev := Leitor.rCampo(tcDat,'dPrev');
      CTe.infCTeNorm.rodo.lota  := StrToTpLotacao(ok, Leitor.rCampo(tcStr,'lota'));
      CTe.infCTeNorm.rodo.CIOT  := Leitor.rCampo(tcStr, 'CIOT');
      if (Copy(CTe.infCTe.versao, 1, 1) = '1') then
      begin
        For i01:= 0 to CTe.infCTeNorm.infDoc.InfNFE.count-1 do
          begin
            CTe.infCTeNorm.infDoc.InfNFE[i01].dPrev := CTe.infCTeNorm.rodo.dPrev;
          end;
        For i01:= 0 to CTe.infCTeNorm.infDoc.InfNF.count-1 do
          begin
            CTe.infCTeNorm.infDoc.InfNF[i01].dPrev := CTe.infCTeNorm.rodo.dPrev;
          end;
        For i01:= 0 to CTe.infCTeNorm.infDoc.InfOutros.count-1 do
          begin
            CTe.infCTeNorm.infDoc.InfOutros[i01].dPrev := CTe.infCTeNorm.rodo.dPrev;
          end;
      end;

...........

 

Estou testando e está funcionando.  Mais tarde subo a UNIT aqui e você poderá atualizar o repositório.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Sergio,

 

Desde já muito obrigado pela colaboração.

 

Quando postar a Unit por inteira, por favor, post como anexo.

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

Link para o comentário
Compartilhar em outros sites

Ítalo,

 

segue arquivo arquivo alterado.

 

Incluído dados da NF comum, declaração e também a data prevista, que no XML está na tag RODO.

 

Teste importando arquivos XML´s de versões misturadas e consegui ler a nota fiscal sem problemas.

 

Veja se está OK e libere no repositório.

pcteCTeR.pas

Editado por sergiom
Link para o comentário
Compartilhar em outros sites

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