Ir para conteúdo
  • Cadastre-se

dev botao

Como ler xml's de evento?


datilas
Ver Solução Respondido por Italo Giurizzato Junior,
  • Este tópico foi criado há 1001 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 para o comentário
Compartilhar em outros 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.

  • Curtir 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

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros 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;

 

  • Curtir 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

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia,

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

ACBrNFe1.EventoNFe.LerXML(sFileName);

 

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

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

  • Moderadores
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
 

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

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 para o comentário
Compartilhar em outros sites

  • Moderadores

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
 

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

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 para o comentário
Compartilhar em outros sites

  • Administradores

Bom dia.

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

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

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 para o comentário
Compartilhar em outros 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

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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.

Editado por datilas
  • Curtir 1
Link para o comentário
Compartilhar em outros 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

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

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 para o comentário
Compartilhar em outros sites

  • Consultores

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 );

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

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

The popup will be closed in 10 segundos...