Jump to content

Assista tectoy.png

Como ler xml's de evento?


datilas
Go to solution Solved by Italo Giurizzato Junior,
  • Este tópico foi criado há 403 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Eu tenho que ler todos os arquivos xml's
do meu cliente para salvar em um DB
na NFe/NFCe eu faço assim:

ACBrNFe1.NotasFiscais.LoadFromFile(sFileName);
ACBrNFe1.NotasFiscais.Items.XML;
ACBrNFe1.NotasFiscais.Items.NomeArq;

Como faço para ler os xml's de eventos?
ACBrNFe1.EventoNFe.LerXML(sFileName);

Essas Property's não existem
ACBrNFe1.EventoNFe.Evento.Items[0].XML;
ACBrNFe1.EventoNFe.Evento.Items[0].NomeArq;

Link to comment
Share on other sites

  • Consultores

Bom dia Datilas,

Realmente não tem, vou colocar na minha lista de tarefas, pois achei pertinente.

Assim que ficar pronto informo aqui mesmo nesse tópico.

  • Like 3
Consultor SAC ACBr Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

  • Consultores
  • Solution

Bom dia Datilas,

Desculpe a demora, favor atualizar os fontes e faça um novo teste.

ACBrNFe1.EventoNFe.LerXML(sFileName); 
xXML := ACBrNFe1.EventoNFe.Evento.Items[0].XML;

 

  • Like 1
Consultor SAC ACBr Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

2 minutos atrás, Italo Jurisato Junior disse:

Bom dia,

Mas o nome do arquivo você não informa no método em sFileName?

ACBrNFe1.EventoNFe.LerXML(sFileName);

 

quando eu leio o xml eu tenho o nome, mas quando eu envio o xml, eu preciso fazer o processo de enviar ele para o db, ai eu preciso do nome

Link to comment
Share on other sites

  • Consultores

Porque ao invés de salvar em disco pra depois no banco você somente lê a propriedade XMLAssinado  e grava no banco?

Consultor SAC ACBr Juliomar Marchetti
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

Link to comment
Share on other sites

3 minutos atrás, Juliomar Marchetti disse:

Porque ao invés de salvar em disco pra depois no banco você somente lê a propriedade XMLAssinado  e grava no banco?

eu salvo em disco e salvo no banco no evento não existe a propriedade XMLAssinado

o italo acabou de criar a propriedade XML.

mas para eu poder recuperar esse xml caso aconteça alguma coisa eu preciso saber o nome do arquivo

assim como acontece na NFe

 

Link to comment
Share on other sites

  • Consultores
5 minutos atrás, datilas disse:

eu salvo em disco e salvo no banco no evento não existe a propriedade XMLAssinado

o italo acabou de criar a propriedade XML.

mas para eu poder recuperar esse xml caso aconteça alguma coisa eu preciso saber o nome do arquivo

assim como acontece na NFe

 

Sim. desculpe é somente XML.

creio que esteja falando para enviar a contabilidade.

é dai precisaria. mas o nome do evento geralmente é o ID dele

Consultor SAC ACBr Juliomar Marchetti
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

Link to comment
Share on other sites

a questão é o caminho completo

por exemplo:

meupath\NFE\NFe\202005\00000000000000000000000000000000000000000000-nfe.xml;
meupath\Eventos\NFe\202005\0000000000000000000000000000000000000000000000000000-procEventoNFe.xml;

eu guardo assim no meu db:

\NFE\NFe\202005\00000000000000000000000000000000000000000000-nfe.xml;
\Eventos\NFe\202005\0000000000000000000000000000000000000000000000000000-procEventoNFe.xml;

pois pode ser que existe separação por modelo por data por CNPJ etc..

Link to comment
Share on other sites

  • Consultores

Claro tu pode fazer o seguinte

gravar o xml tanto da nf-e quanto eventos somente e quando precisar gerar o arquivo

carregar da mesma forma para o componente a nf-e e seus e eventos e dizer para salvar que o mesmo vai colocar em cada pasta separada seguindo exatamente o que faz acima

Consultor SAC ACBr Juliomar Marchetti
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

Link to comment
Share on other sites

4 horas atrás, Juliomar Marchetti disse:

Claro tu pode fazer o seguinte

gravar o xml tanto da nf-e quanto eventos somente e quando precisar gerar o arquivo

carregar da mesma forma para o componente a nf-e e seus e eventos e dizer para salvar que o mesmo vai colocar em cada pasta separada seguindo exatamente o que faz acima

fiz a alteração no componente, não sei se usei o padrão que vcs usam no acbr, mas se puder verificar e adicionar aos fontes seria muito bom,

caso tenha erro por favor me informe para que eu possa corrigir.

pois testei aki e esta funcionando.

desde agradeço. acbr.zip

Link to comment
Share on other sites

  • Consultores

Bom dia

favor atualizar o svn o sr. @Italo Jurisato Junior promoveu alterações que será extendida aos demais componentes

Consultor SAC ACBr Juliomar Marchetti
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

Link to comment
Share on other sites

  • Administradores

Bom dia.

Verifique se não há conflitos em seus fontes. (Icone vermelho)

Att.

Consultora SAC ACBr

Juliana Tamizou
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link to comment
Share on other sites

  • Consultores

Bom dia a todos,

A alteração que fiz foi somente no que diz respeito ao conteúdo do XML e não o nome do mesmo no que se refere ao Evento.

Não sei se lhe ajuda, mas o XML do evento quando é salvo em disco segue a configuração do componente, sendo assim você pode utilizar a seguinte função do ACBrNFe para montar o caminho do mesmo.

Veja esse fragmento da minha aplicação:

case DM_VEN.EventosEvento.AsInteger of
  110110: // Carta de Correção
    PathEvento := DMDFe.NFe.Configuracoes.Arquivos.GetPathEvento(teCCe, '', '', DM_VEN.EventosDataEvento.AsDateTime);
  110111: // Cancelamento
    PathEvento := DMDFe.NFe.Configuracoes.Arquivos.GetPathEvento(teCancelamento, '', '', DM_VEN.EventosDataEvento.AsDateTime);
end;

NomeEvento := PathEvento + '\' + DM_VEN.EventosEvento.AsString + DM_VEN.EventosChaveNFe.AsString +
              FormatFloat('00', DM_VEN.EventosSequencia.AsInteger) + '-procEventoNFe.xml';

// Carrega no Componente o Evento salvo em Arquivo XML
ACBrNFe.EventoNFe.Evento.Clear;
ACBrNFe.EventoNFe.LerXML(NomeEvento);

Tenho uma tabela chamada Eventos que contem os seguintes campos: Evento tipo Integer; DataEvento tipo TDateTime; ChaveNFe tipo Char(44) e Sequencia tipo Integer;

Esses campos são armazenados na tabela quando ocorre o envio do evento.

No "case" através dos campos Evento e DataEvento e da função GetPathEvento consigo gerar o caminho onde o XML do evento foi salvo.

Na linha seguinte após o "case " consigo através dos campos Evento, ChaveNFe e Sequencia montar o nome do XML e concatenar com o caminho.

Essa mesma rotina pode ser utilizada, mudando o código dos eventos para os demais DFe.

Por exemplo no caso do MDF-e temos os eventos de Cancelamento e de Encerramento.

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

4 minutos atrás, Italo Jurisato Junior disse:

Bom dia a todos,

A alteração que fiz foi somente no que diz respeito ao conteúdo do XML e não o nome do mesmo no que se refere ao Evento.

Não sei se lhe ajuda, mas o XML do evento quando é salvo em disco segue a configuração do componente, sendo assim você pode utilizar a seguinte função do ACBrNFe para montar o caminho do mesmo.

Veja esse fragmento da minha aplicação:

case DM_VEN.EventosEvento.AsInteger of
  110110: // Carta de Correção
    PathEvento := DMDFe.NFe.Configuracoes.Arquivos.GetPathEvento(teCCe, '', '', DM_VEN.EventosDataEvento.AsDateTime);
  110111: // Cancelamento
    PathEvento := DMDFe.NFe.Configuracoes.Arquivos.GetPathEvento(teCancelamento, '', '', DM_VEN.EventosDataEvento.AsDateTime);
end;

NomeEvento := PathEvento + '\' + DM_VEN.EventosEvento.AsString + DM_VEN.EventosChaveNFe.AsString +
              FormatFloat('00', DM_VEN.EventosSequencia.AsInteger) + '-procEventoNFe.xml';

// Carrega no Componente o Evento salvo em Arquivo XML
ACBrNFe.EventoNFe.Evento.Clear;
ACBrNFe.EventoNFe.LerXML(NomeEvento);

Tenho uma tabela chamada Eventos que contem os seguintes campos: Evento tipo Integer; DataEvento tipo TDateTime; ChaveNFe tipo Char(44) e Sequencia tipo Integer;

Esses campos são armazenados na tabela quando ocorre o envio do evento.

No "case" através dos campos Evento e DataEvento e da função GetPathEvento consigo gerar o caminho onde o XML do evento foi salvo.

Na linha seguinte após o "case " consigo através dos campos Evento, ChaveNFe e Sequencia montar o nome do XML e concatenar com o caminho.

Essa mesma rotina pode ser utilizada, mudando o código dos eventos para os demais DFe.

Por exemplo no caso do MDF-e temos os eventos de Cancelamento e de Encerramento.

muito obrigado pela explicação, vou começar a usar assim.

muito obrigado.

mas vc tem que concordar comigo que se houvesse o campo nomearq (que eu postei a alteração acima)

esse processo seria muito mais simples.

mas essa solução que vc deu ja resolve meu problemas.

no mais por mim pode fechar o topico.

Link to comment
Share on other sites

  • Consultores

Boa tarde Datilas,

Logo após o envio do evento se você ler as propriedades abaixo vai ter o nome completo (caminho + nome) e o conteúdo do XML (*-procEventoNFe.xml)

xNome := (...).Evento.Evento.Items[ x ].RetInfEvento.NomeArquivo;
xXML :=   (...).Evento.Evento.Items[ x ].RetInfEvento.XML;

Acredito que com isso você já tem o XML para armazenar no banco de dados, mais o nome completo para que se necessário for ler do disco novamente o XML.
 

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

13 minutos atrás, Italo Jurisato Junior disse:

xXML :=   (...).Evento.Evento.Items[ x ].RetInfEvento.XML

essa propriedade quando faz um loadfromfile mostra apenas o conteudo ta tag InfEvento e não o xml todo.

mas com a ajuda acima que vc passou consegui resolver.

Link to comment
Share on other sites

a questão é a seguinte, nos temos um db online, com a estrutura dos xml's, evento, nfe, inutilização e para cada tabela existe o campo xml,

tambem temos um servido storage para guardar os xml´s em disco,

quando nossa aplicação envia qualquer uma das opções ela também envia para essa estrutura online ,

caso aja algum erro de conexão ou indisponibilidade do servidor,

temos uma classe que tenta enviar para o servidor,

é ai que começa o problema.

pois eu tenho que fazer o load do arquivo no acbr,

e depois tentar enviar para esse servidor,

eu prciso do campo xml para enviar para o campo xml do db online e tambem salvar no storage

na mesma estrutura que o acbr faz (modelo,cnpj,data etc).

com a nfe funciona perfeitamente, ja com os eventos,

eu estou tendo os problemas acima.

falta do xml (faltava foi adicionado)e do nomearq.

esse texto foi só para explicar a minha situação.

muito obrigado pela pronta atenção de todos em ajudar.

Edited by datilas
  • Like 1
Link to comment
Share on other sites

  • Consultores

Datilas,

Acredito que não ficou claro a minha ultima postagem.

As linhas que coloquei para pegar o XML e o nome do arquivo é para serem utilizadas logo após o envio do evento e não ao carregar o XML do disco através do método:

ACBrNFe.EventoNFe.LerXML(xNomeXMLEvento);

 

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to comment
Share on other sites

  • 1 year later...

Bom dia , pegando o gancho do amigo, ficaria legal se tivesse algo, voce manda consultar a nfe, e no retorno dela voce pegar os eventos e ja conseguir visualizar os eventos atrelados a esse XML, apenas com um comando ,a inves de sair verificando no banco , nas pastas, enfim uma ideia  e me desculpe se ja tem essa possibilidade hoje, mais eu n consegui implementar;

Link to comment
Share on other sites

  • Moderadores

Bom dia Decio,

Precisei disso recentemente.

Segue exemplo, caso seja útil:

 

  DFe.NFe.WebServices.Consulta.ExtrairEventos := True;
  str := DFe.consultaChaveAcesso(ChaveNFe);

  for j:=0 to DFe.NFe.WebServices.Consulta.procEventoNFe.Count-1 do
    with DFe.NFe.WebServices.Consulta.procEventoNFe.Items[j].RetEventoNFe.retEvento do
      for i:=0 to Count-1 do
        if ( Items[i].RetInfEvento.cStat in [135, 136] ) then
          ProcessaStatus( Items[i].RetInfEvento.cStat,
                          Items[i].RetInfEvento.xMotivo,
                          Items[i].RetInfEvento.tpEvento,
                          Items[i].RetInfEvento.nProt,
                          Items[i].RetInfEvento.nSeqEvento,
                          Items[i].RetInfEvento.dhRegEvento );

 

 

  • Thanks 1
Link to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.