chico_lopes Postado 23 Agosto Postado 23 Agosto 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;
Moderadores Juliomar Marchetti Postado 23 Agosto Moderadores Postado 23 Agosto 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 Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
chico_lopes Postado 23 Agosto Autor Postado 23 Agosto 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
Moderadores Juliomar Marchetti Postado 27 Agosto Moderadores Postado 27 Agosto 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 Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
chico_lopes Postado 13 Setembro Autor Postado 13 Setembro bom dia @Juliomar Marchetti desculpa a demora, mas fiquei doente e dai enrolou tudo os processos. Mas segue a sugestão de alteração, feitas alterações nas linhas 370, 376, 382 e 388.ACBrNFe.RetEnvEvento.pas
Consultores Italo Giurizzato Junior Postado 17 Setembro Consultores Postado 17 Setembro 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; 1 Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / Araraquara-SP Araraquara - A era dos Trólebus
chico_lopes Postado 18 Setembro Autor Postado 18 Setembro 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;
Recommended Posts
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 contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora