Ir para conteúdo
  • Cadastre-se

dev botao

ACBrNFSeX: Importação de XML com lista de NFSe não carrega as notas


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

Recommended Posts

Bom dia, equipe ACBR!

Uso seus componentes há muitos anos, faço emissão de NFSe e NFCe em 10 municípios diferentes graças a vocês, parabéns pelo trabalho!

Em Campinas, usando provedor ISSDsf, apos ConsultarLoteRps nao consigo ler a integra das notas retornadas, o provedor retorna somente os Resumos, neles consigo ler os numeroNF, serie, numeroRPS e CodVerificacao das notas, mas nao os detalhes do tomador e outros, para que consiga, na sequencia, envia-las por emails aos respectivos tomadores. Uso o XML retornado para isso, enviar emails, mas tambem salvo-os no meu DB para restauro e reimpressao ou reenvio da DANFE, se preciso, e funciona lindamente nos demais provedores. Detalhe é que com o ACBrNFSe antigo, funcionava, apos o retorno do lote, o NotasFiscais restava populado direitinho, testei ontem mesmo num projeto velho.

Aí resolvi tentar carregar o XML da lista de notas apos consultar o lote, mas nao funcionou.

O XML anexo, obtido na ConsultarNFSeporPeriodo, com 5 NFSe, é um exemplo que nao carrega corretamente. No ACBrNFSeX, apos o NotasFiscais.Clean e o NotasFiscais.LoadFromFile, o NotasFiscais.Count mostra somente uma nota carregada, mas com os campos todos nulos. Tentei mudar as tags, retirar o CABECALHO, mas nada funcionou...

Como ultima tentativa, tentei então obte-las uma-a-uma, via ConsultarNFSeporRps, elas carregam corretamente em NotasFiscais.Items[0], o XML obtido esta anexo, nomeei como "NFSeObtidaporRps.XML". Ótimo, teria que ler o lote todo por RPS e reunir as notas obtidas no ACBrNFSeX, e continuar meu processamento do lote retornado normalmente, um certo trabalho, mas nao deu lá muito certo, pois nao consegui carregar todas as notas no ACBrNFSeX. Até "clonei" o ACBrNFSeX para le-las em um "ACBrNFSeX Temp" e depois adicionar a nota obtida no ACBrNFSeX principal, mas o TNotaFiscal.Assign parece nao estar implementado, teria que copiar todos os campos do ACBrNFSeX acessorio para o principal, maior trabalheira.

Bom, atirei pra tudo que é lado, mas o que eu queria, obter o lote de NFSe apos consulta de retorno de lote em Campinas, nao consegui. 

Poderiam me ajudar, por gentileza?

Abraços e obrigado!

2023072020230728-lista-nfse-con.xml NFSeObtidaporRps.xml

Editado por marmarinho
erro no texto
Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde,

Confirmando, consultando uma NFSe apenas funciona corretamente, certo?

Debugue a procedure do tratamento do retorno para tentar identificar onde está a falha na leitura do lote em relação à leitura individual.

TACBrNFSeProviderISSDSF.TratarRetornoConsultaNFSe

../trunk2/Fontes/ACBrDFe/ACBrNFSeX/Provedores/ISSDSF.Provider.pas

Link para o comentário
Compartilhar em outros sites

Debuguei para o ISSDSf (Campinas) e para o de Brasilia, e o XML do retorno  do ISSDSF vem sem as informaçoes do TOMADOR mesmo, tem os dados basicos da NFSe só.

Conforme se ve no XML acima enviado, quando retornado pelo RetornoConsultaNotas o XML vem completo, mas o "NotasFiscais.LoadFromFile()" dele nao carrega as notas corretamente, vou tentar debugar

Qual sugestao?

Obrigado, bom dia!

Link para o comentário
Compartilhar em outros sites

  • Consultores

Debugue por aqui.

../trunk2/Fontes/ACBrDFe/ACBrNFSeX/Provedores/ISSDSF.Provider.pas

procedure TACBrNFSeProviderISSDSF.TratarRetornoConsultaNFSe(
  Response: TNFSeConsultaNFSeResponse);
var
  Document: TACBrXmlDocument;
  AErro: TNFSeEventoCollectionItem;
  ANode: TACBrXmlNode;
  ANodeArray: TACBrXmlNodeArray;
  i: Integer;
  ANota: TNotaFiscal;
  NumRps, NumNFSe: String;

../trunk2/Fontes/ACBrDFe/ACBrNFSeX/Provedores/ISSDSF.LerXml.pas

function TNFSeR_ISSDSF.LerXml: Boolean;
var
  XmlNode: TACBrXmlNode;
begin
  if EstaVazio(Arquivo) then
    raise Exception.Create('Arquivo xml n�o carregado.');
  Arquivo := NormatizarXml(Arquivo);
  if FDocument = nil then
    FDocument := TACBrXmlDocument.Create();
  Document.Clear();
  Document.LoadFromXml(Arquivo);
  if (Pos('NumeroNota', Arquivo) > 0) or (Pos('NumeroNFe', Arquivo) > 0) then
    tpXML := txmlNFSe
  else
    tpXML := txmlRPS;
  XmlNode := Document.Root;
  if XmlNode = nil then
    raise Exception.Create('Arquivo xml vazio.');
  if tpXML = txmlNFSe then
    Result := LerXmlNfse(XmlNode)
  else
    Result := LerXmlRps(XmlNode);
  FreeAndNil(FDocument);
end;

 

Link para o comentário
Compartilhar em outros sites

Olá Renato!

Debugei as units acima, o codigo do LerXML do Provedor está obsoleto, parece... e isso parece ser porque eles nao retornam mesmo o XML completo, tem que consultar as notas uma-a-uma para obte-lo. Sendo assim, fiz isso e desencanei de ter o retorno completo na consulta do lote.

Obrigado pelo apoio!

Link para o comentário
Compartilhar em outros sites

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

The popup will be closed in 10 segundos...