Ir para conteúdo
  • Cadastre-se

dev botao

Como ler xml's de evento?


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

Recommended Posts

Postado

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;

Postado

só não consegui pegar o nome do arquivo,

ACBrNFe1.EventoNFe.Evento.Items[0].NomeArq;

mas testei e  o retorno no xml esta perfeito.

muito obrigado pela atenção.

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

Postado
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

 

  • Moderadores
Postado
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_Transparent-02.png
 

 

Postado

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..

  • Moderadores
Postado

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_Transparent-02.png
 

 

Postado
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

  • Administradores
Postado

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 !!

  • Consultores
Postado

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 / Araraquara-SP

Araraquara - A era dos Trólebus

Postado
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.

  • Consultores
Postado

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 / Araraquara-SP

Araraquara - A era dos Trólebus

Postado
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.

Postado (editado)

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
  • Consultores
Postado

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 / Araraquara-SP

Araraquara - A era dos Trólebus

  • 1 ano depois...
Postado

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;

  • Consultores
Postado

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