Ir para conteúdo
  • Cadastre-se

dev botao

relatando problema na função ACBrNFe1.EventoNFe.LerXML ao ler um XML que não é evento está retornando true


Recommended Posts

Bom dia 

 

   eu utilizo a função ACBrNFe1.EventoNFe.LerXML para chegar se um XML para verificar qual tipo de XML ele é, porém após atualização do ACBR, essa função parou retornar false ao ler um XML de CT-e. 

 

Analisando o código do acbrnfe.retenvevento, vemos que o "result := true" está fora de um IF de verificação, o correto o "result := true" estar atrelado a cada clausulas de IF.

function TRetEventoNFe.LerXml: Boolean;
var
  Document: TACBrXmlDocument;
  ANode: TACBrXmlNode;
begin
  Document := TACBrXmlDocument.Create;

  try
    try
      Result := False;
      if XmlRetorno = '' then Exit;

      Document.LoadFromXml(XmlRetorno);

      ANode := Document.Root;

      if ANode <> nil then
      begin
        if (ANode.LocalName = 'procEventoNFe') or (ANode.LocalName = 'envEvento') then
        begin
          versao := ObterConteudoTag(ANode.Attributes.Items['versao']);

          Ler_InfEvento(ANode.Childrens.FindAnyNs('evento').Childrens.FindAnyNs('infEvento'));
          Ler_RetEvento(ANode);
        end;

        if ANode.LocalName = 'retEnvEvento' then
          Ler_RetEvento(ANode);

        if ANode.LocalName = 'evento' then
          Ler_InfEvento(ANode.Childrens.FindAnyNs('infEvento'));

        LerSignature(ANode.Childrens.Find('Signature'), signature);
      end;

      Result := True;
    except
      Result := False;
    end;
  finally
    FreeAndNil(Document);
  end;
end;

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

mas isso resolveu seu problema?

pois note que ele muda pra true a partir do momento que consegue ler algo

se está correto ou não o xml e os dados dele seria outro caso

mas se retorna false ou ele não entra na primeira parte ou tá dando exceção

anexe um xml para validar

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
 

 

Link para o comentário
Compartilhar em outros sites

Boa tarde @Juliomar Marchetti

 

Citar

mas isso resolveu seu problema?

Sim alterando o para passar o Result := True; para dentros dos IF sim

 

Citar

pois note que ele muda pra true a partir do momento que consegue ler algo

Até a versão anterior que eu tinha do ACBR, ele retornava True somente quando era um XML de evento, agora ele retorna True quando lê um XML, que pelo meu ponto

de vista não seria o correto, pois é um componente de evento. 

 

 

em anexo um xml de CT-e, mas como o "Result := True" está somente dentro de try ele só vai virar false se houver algum erro 

41240887548038000424570010000469321349349112.xml

Link para o comentário
Compartilhar em outros sites

  • Moderadores
Em 23/08/2024 at 15:50, chico_lopes disse:

Boa tarde @Juliomar Marchetti

 

Sim alterando o para passar o Result := True; para dentros dos IF sim

 

Até a versão anterior que eu tinha do ACBR, ele retornava True somente quando era um XML de evento, agora ele retorna True quando lê um XML, que pelo meu ponto

de vista não seria o correto, pois é um componente de evento. 

 

 

em anexo um xml de CT-e, mas como o "Result := True" está somente dentro de try ele só vai virar false se houver algum erro 

41240887548038000424570010000469321349349112.xml 7.99 kB · 1 download

Que louco não. ou estavamos falando de NFe ali no começo e também o subforum é de NFe ou mandou um CTe errado?

em todo o caso

anexe as units da NFe que deseja submeter a validação para ver se será subida ao svn

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
 

 

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...
  • Consultores

Boa tarde @chico_lopes,

Pelo que eu entendi, você pega um XML qualquer e na base da tentativa erro tenta descobrir se o XML é de uma NF-e, ou CT-e, ou evento de NF-e ou evento de CT-e, é isso?

Se a ideia é essa não seria o caso de, você carregar o XML como uma string checar a presença de um elemento que você sabe que só existe em um determinado tipo de documento?

Por exemplo:

procedure TfrmEmissorDFE.CarregaArquivo;
var
 ArquivoXML: TStringList;
 Tamanho: Integer;
 PathEvento: String;
begin
 ArquivoXML := TStringList.Create;
 ArquivoXML.LoadFromFile(edtArquivo.Text);

 TipoDFE := 0;
 if pos('<infNFe', ArquivoXML.Text) > 0
  then TipoDFE := 1;
 if pos('<infCte', ArquivoXML.Text) > 0
  then TipoDFE := 2;
 if pos('InfNfse', ArquivoXML.Text) > 0
  then TipoDFE := 3;
 if pos('infMDFe', ArquivoXML.Text) > 0
  then TipoDFE := 4;
 if pos('procEventoNFe', ArquivoXML.Text) > 0
  then TipoDFE := 5;
 if pos('procEventoCTe', ArquivoXML.Text) > 0
  then TipoDFE := 6;
 if pos('procEventoMDFe', ArquivoXML.Text) > 0
  then TipoDFE := 7;

 ArquivoXML.Free;
 (...)
end;

 

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

Boa noite @Italo Giurizzato Junior

 

   sim faço um teste de tentativa e erro, pois cai em um local especifico todos xml, o sistema lê e verificar o tipo se algum é de interesse para empresa e se é valido; 

 

   até a versão anterior do ACBr que tínhamos funcionava, como houve atualizações perdeu-se essas verificações, porém como falei segue uma sugestão. Alteramos de uma outra forma nossa leitura dos XML, não igual a sua ideia mas que atendeu nossas necessidades. Agradeço esse ideia vamos avalia-la aqui internamente. 

 

somente um ponto sobre essa ideia, caso algum outro leitor pegue somente uma "fração" desse código do Italo, tomar cuidado como o exemplo abaixo, essa verificação abaixo dá positiva para XML de NF-e e CT-e pois o CT-e tem uma TAG assim tbm.

if pos('<infNFe', ArquivoXML.Text) > 0
  then TipoDFE := 1;

 

Link para o comentário
Compartilhar em outros sites

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.