Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Membros Pro
Postado

Bom dia estou com problemas para consultar um lote no provedor IPM.

 

Primeiramente, ao consultar o codigo de verificação está sendo preenchido no protocolo.

Mesmo fazendo ajustes acaba que o objeto NotasFiscais.Items[0].NFSe, fica todo "bagunçado" com caracteres inválidos.

Irei enviar os arquivos por email para análise de vocês.

 

image.thumb.png.bb90ca996f7ba67a17a6fe939f56f52e.png

 

Obs: conforme instrução estou com a versão atualizada até a revisao 28810

  • Consultores
Postado

Tópico movido para a área do SAC, para que o SLA de respostas seja considerado

Arquivos recebidos.
Foi criada a #TK-3739 para análise do caso.

Consultor SAC ACBr

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

  • Consultores
Postado

Bom dia!

Citar

ao consultar o codigo de verificação está sendo preenchido no protocolo.

Quanto a esta questão, revi as funções TratarResposta e igualei o CodigoVerificacao ao Protocolo nas que faltavam para padronizar.
Foi disponibilizado no SVN na Rev-28817.
Quando possível, por favor, atualize seus fontes e reinstale o ACBr para fazer novo teste.
 

Citar

Mesmo fazendo ajustes acaba que o objeto NotasFiscais.Items[0].NFSe, fica todo "bagunçado" com caracteres inválidos.

Quanto a essa aqui, por favor, pode fornecer mais detalhes?
NotasFiscais.Items[0].NFSe é uma propriedade do tipo TNFSe que é uma classe.
O que fica bagunçado são os valores das propriedades dela?


Ou você quis dizer a propriedade NotasFiscais.Items[0].XmlNFse ?
Se foi esse o caso, se conferirmos nos fontes da procedure TratarRetornoConsultaLoteRPS.
 

if NotaCompleta then
begin
  AuxNode := ANode.Childrens.FindAnyNs('rps');
  NumRps := '';

  if AuxNode <>  nil then
    NumRps := ObterConteudoTag(AuxNode.Childrens.FindAnyNs('nro_recibo_provisorio'), tcStr);

  with Response do
  begin
    AuxNode := ANode.Childrens.FindAnyNs('nf');

    NumeroNota := ObterConteudoTag(AuxNode.Childrens.FindAnyNs('numero_nfse'), tcStr);
    SerieNota := ObterConteudoTag(AuxNode.Childrens.FindAnyNs('serie_nfse'), tcStr);
    Data := ObterConteudoTag(AuxNode.Childrens.FindAnyNs('data_nfse'), tcDatVcto);
    Data := Data + ObterConteudoTag(AuxNode.Childrens.FindAnyNs('hora_nfse'), tcHor);
    Link := ObterConteudoTag(AuxNode.Childrens.FindAnyNs('link_nfse'), tcStr);
    Link := StringReplace(Link, '&amp;', '&', [rfReplaceAll]);
    Protocolo := ObterConteudoTag(AuxNode.Childrens.FindAnyNs('cod_verificador_autenticidade'), tcStr);
    CodigoVerificacao := Protocolo;
    Situacao := ObterConteudoTag(AuxNode.Childrens.FindAnyNs('situacao_codigo_nfse'), tcStr);
    DescSituacao := ObterConteudoTag(AuxNode.Childrens.FindAnyNs('situacao_descricao_nfse'), tcStr);
  end;

  AResumo := Response.Resumos.New;
  AResumo.NumeroNota := Response.NumeroNota;
  AResumo.SerieNota := Response.SerieNota;
  AResumo.Data := Response.Data;
  AResumo.Link := Response.Link;
  AResumo.Protocolo := Response.Protocolo;
  AResumo.CodigoVerificacao := Response.CodigoVerificacao;
  AResumo.Situacao := Response.Situacao;
  AResumo.DescSituacao := Response.DescSituacao;

  if NumRps <> '' then
    ANota := TACBrNFSeX(FAOwner).NotasFiscais.FindByRps(NumRps)
  else
    ANota := TACBrNFSeX(FAOwner).NotasFiscais.FindByNFSe(Response.NumeroNota);

  ANota := CarregarXmlNfse(ANota, ANode.OuterXml);
  SalvarXmlNfse(ANota);
end
else
begin
  with Response do
  begin
    NumeroNota := ObterConteudoTag(ANode.Childrens.FindAnyNs('numero_nfse'), tcStr);
    SerieNota := ObterConteudoTag(ANode.Childrens.FindAnyNs('serie_nfse'), tcStr);
    Data := ObterConteudoTag(ANode.Childrens.FindAnyNs('data_nfse'), tcDatVcto);
    Data := Data + ObterConteudoTag(ANode.Childrens.FindAnyNs('hora_nfse'), tcHor);
    Situacao := ObterConteudoTag(ANode.Childrens.FindAnyNs('situacao_codigo_nfse'), tcStr);
    DescSituacao := ObterConteudoTag(ANode.Childrens.FindAnyNs('situacao_descricao_nfse'), tcStr);
    Link := ObterConteudoTag(ANode.Childrens.FindAnyNs('link_nfse'), tcStr);
    Link := StringReplace(Link, '&amp;', '&', [rfReplaceAll]);
    Protocolo := ObterConteudoTag(ANode.Childrens.FindAnyNs('cod_verificador_autenticidade'), tcStr);
    CodigoVerificacao := Protocolo;
  end;
end;

Como não tem a tag <nfse> no seu retorno, NotaCompleta assume o valor false e não entra no bloco de código que atribui o valor a propriedade xmlNfse, mais especificamente, não chama a CarregarXmlNfse. 

function TACBrNFSeXProvider.CarregarXmlNfse(aNota: TNotaFiscal; aXml: string): TNotaFiscal;
begin
  if Assigned(ANota) then
    ANota.XmlNfse := aXml
  else
  begin
    TACBrNFSeX(FAOwner).NotasFiscais.LoadFromString(aXml, False);
    ANota := TACBrNFSeX(FAOwner).NotasFiscais.Items[TACBrNFSeX(FAOwner).NotasFiscais.Count-1];
  end;

  Result := aNota;
end;

 

Consultor SAC ACBr

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

  • Membros Pro
Postado

Fiz o teste com relação ao código de verificação, está ok agora.

Não entendi sua colocação sobre o carregarxmlnfse, após receber o codigo de verificacao, eu normalmente carrego pro banco de dados o xml e para isso ele precisa estar na pasta ou eu poder gerar ele pelo gravarxml, mas neste caso gera apenas a linha:

<?xml version="1.0" encoding="UTF-8"?>

 

O que podemos fazer, no  componente antigo isso funcionava, preciso fazer algo diferente neste provdedor/versão?

 

 

  • Moderadores
Postado
27 minutos atrás, Helius_ERP disse:

Fiz o teste com relação ao código de verificação, está ok agora.

Não entendi sua colocação sobre o carregarxmlnfse, após receber o codigo de verificacao, eu normalmente carrego pro banco de dados o xml e para isso ele precisa estar na pasta ou eu poder gerar ele pelo gravarxml, mas neste caso gera apenas a linha:

<?xml version="1.0" encoding="UTF-8"?>

 

O que podemos fazer, no  componente antigo isso funcionava, preciso fazer algo diferente neste provdedor/versão?

 

 

na verdade não precisa gravarxml

basta tu pegar diretamente a string com o xml pra gravar no seu banco

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
 

 

  • Membros Pro
Postado
32 minutos atrás, Juliomar Marchetti disse:

basta tu pegar diretamente a string com o xml pra gravar no seu banco

Mas eu não tenho mais essa propriedade xml, apenas xmlrps ou xmlnfse, e nenhum delas tem conteúdo.

 

  • Consultores
Postado
Citar

 

Não entendi sua colocação sobre o carregarxmlnfse, após receber o codigo de verificacao, eu normalmente carrego pro banco de dados o xml e para isso ele precisa estar na pasta ou eu poder gerar ele pelo gravarxml, mas neste caso gera apenas a linha:

<?xml version="1.0" encoding="UTF-8"?>

 

Citar

Mas eu não tenho mais essa propriedade xml, apenas xmlrps ou xmlnfse, e nenhum delas tem conteúdo.

 

Foi isso o que quis dizer com o CarregarXMLNFSe.
Vamos conferir como é a procedure TratarRetornoConsultaLoteRPS

NotaCompleta := (Pos('<nfse>', Response.ArquivoRetorno) > 0); //No seu arquivo, não tem essa tag, então essa variável tem o valor False.

//...
  
if NotaCompleta then
begin
  AuxNode := ANode.Childrens.FindAnyNs('rps');
  NumRps := '';

  if AuxNode <>  nil then
    NumRps := ObterConteudoTag(AuxNode.Childrens.FindAnyNs('nro_recibo_provisorio'), tcStr);

  with Response do
  begin
    AuxNode := ANode.Childrens.FindAnyNs('nf');

    NumeroNota := ObterConteudoTag(AuxNode.Childrens.FindAnyNs('numero_nfse'), tcStr);
    SerieNota := ObterConteudoTag(AuxNode.Childrens.FindAnyNs('serie_nfse'), tcStr);
    Data := ObterConteudoTag(AuxNode.Childrens.FindAnyNs('data_nfse'), tcDatVcto);
    Data := Data + ObterConteudoTag(AuxNode.Childrens.FindAnyNs('hora_nfse'), tcHor);
    Link := ObterConteudoTag(AuxNode.Childrens.FindAnyNs('link_nfse'), tcStr);
    Link := StringReplace(Link, '&amp;', '&', [rfReplaceAll]);
    Protocolo := ObterConteudoTag(AuxNode.Childrens.FindAnyNs('cod_verificador_autenticidade'), tcStr);
    CodigoVerificacao := Protocolo;
    Situacao := ObterConteudoTag(AuxNode.Childrens.FindAnyNs('situacao_codigo_nfse'), tcStr);
    DescSituacao := ObterConteudoTag(AuxNode.Childrens.FindAnyNs('situacao_descricao_nfse'), tcStr);
  end;

  AResumo := Response.Resumos.New;
  AResumo.NumeroNota := Response.NumeroNota;
  AResumo.SerieNota := Response.SerieNota;
  AResumo.Data := Response.Data;
  AResumo.Link := Response.Link;
  AResumo.Protocolo := Response.Protocolo;
  AResumo.CodigoVerificacao := Response.CodigoVerificacao;
  AResumo.Situacao := Response.Situacao;
  AResumo.DescSituacao := Response.DescSituacao;

  if NumRps <> '' then
    ANota := TACBrNFSeX(FAOwner).NotasFiscais.FindByRps(NumRps)
  else
    ANota := TACBrNFSeX(FAOwner).NotasFiscais.FindByNFSe(Response.NumeroNota);

  ANota := CarregarXmlNfse(ANota, ANode.OuterXml); //Essa é a procedure que atrubui valor a propriedade NotasFiscais[Indice].XmlNfse
  SalvarXmlNfse(ANota);
end
else
begin
  //Como NotaCompleta é False, esse é o trecho de código que é executado.
  with Response do
  begin
    NumeroNota := ObterConteudoTag(ANode.Childrens.FindAnyNs('numero_nfse'), tcStr);
    SerieNota := ObterConteudoTag(ANode.Childrens.FindAnyNs('serie_nfse'), tcStr);
    Data := ObterConteudoTag(ANode.Childrens.FindAnyNs('data_nfse'), tcDatVcto);
    Data := Data + ObterConteudoTag(ANode.Childrens.FindAnyNs('hora_nfse'), tcHor);
    Situacao := ObterConteudoTag(ANode.Childrens.FindAnyNs('situacao_codigo_nfse'), tcStr);
    DescSituacao := ObterConteudoTag(ANode.Childrens.FindAnyNs('situacao_descricao_nfse'), tcStr);
    Link := ObterConteudoTag(ANode.Childrens.FindAnyNs('link_nfse'), tcStr);
    Link := StringReplace(Link, '&amp;', '&', [rfReplaceAll]);
    Protocolo := ObterConteudoTag(ANode.Childrens.FindAnyNs('cod_verificador_autenticidade'), tcStr);
    CodigoVerificacao := Protocolo;
  end;

  AResumo := Response.Resumos.New;
  AResumo.NumeroNota := Response.NumeroNota;
  AResumo.SerieNota := Response.SerieNota;
  AResumo.Data := Response.Data;
  AResumo.Link := Response.Link;
  AResumo.Protocolo := Response.Protocolo;
  AResumo.CodigoVerificacao := Response.CodigoVerificacao;
  AResumo.Situacao := Response.Situacao;
  AResumo.DescSituacao := Response.DescSituacao;
end;

Agora vamos olhar a resposta que você recebeu do WebService da IPM no arquivo 0186250054441760-lista-nfse-con-lot-soap.xml. O conteúdo dela está organizado nesta estrutura.

<retorno>
  <mensagem>
    <codigo></codigo>
  </mensagem>
  <numero_nfse></numero_nfse>
  <serie_nfse></serie_nfse>
  <situacao_codigo_nfse></situacao_codigo_nfse>
  <situacao_descricao_nfse></situacao_descricao_nfse>
  <data_nfse></data_nfse>
  <hora_nfse></hora_nfse>
  <arquivo_gerador_nfse></arquivo_gerador_nfse>
  <nome_arquivo_gerado_eletron></nome_arquivo_gerado_eletron>
  <link_nfse></link_nfse>
  <cod_verificador_autenticidade></cod_verificador_autenticidade>
  <codigo_html></codigo_html>
</retorno>

Veja que ela de fato não é um XML de Nfse.

  • Curtir 1
Consultor SAC ACBr

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

  • 2 semanas depois ...
  • Consultores
Postado

Tópico fechado por falta de retorno do usuário

Consultor SAC ACBr

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

  • Este tópico foi criado há 604 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.