Ir para conteúdo
  • Cadastre-se

dev botao

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


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

Recommended Posts

Postado

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

  • Consultores
Postado

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

Postado

Ítalo, bom dia, deu certo.

 

Só estou com um problema com os XML da versão 1.04, onde os dados da nota estão em outra TAG.

 

Existe algum modo de diferenciar e acessar as informações?

 

Um bom natal para você, familia e todos do fórum.

  • Consultores
Postado

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

Postado

Ítalo, baseado na sua resposta veio mais uma dúvida.

 

Se eu carregar e mandar imprimir um XML 1.04, vai funcionar ou não com esta última versão do componente?

 

Caso não, qual seria a sua sugestão?

  • Consultores
  • Solution
Postado

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

Postado

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.

Postado (editado)

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