Ir para conteúdo
  • Cadastre-se

dev botao

NFSe sem dados preenchidos - Erro função SeparaDados


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

Recommended Posts

Postado

Pessoal, 

Alguns XML de NFS-e do provedor NotaBlu estão sendo transmitidos e exibido corretamente no site, porem o XML é salvo na pasta é incompleto 

EX:

<?xml version="1.0" encoding="UTF-8"?><CompNfse xmlns="http://www.blumenau.sc.gov.br/nfse"><Assinatura>svY/9lLmb+Ayd9lulIrJVgFBGPkMwqww+uipMNwD6IDPvRhb48GsauLxFN93kQJaAsNnWdFUFdmyR4/ReyyJcbGsL8B0+1okOzrB5nU9DRbQuctWVWXxeZtneZ//QajjxCdbpm3cpW7TF7gribtNHN5dXZ3MkWaRMehatD1Mji0HWS0wg1l</CompNfse>

Apos depurar localizei o problema,  na Tag <Assinatura>  contem o texto /nfE, isso mesmo, por coincidencia o texto /nfE está lá... 

o XML Completo é: (algumas tags com dados da nota foram alteradas) 

<?xml version="1.0" encoding="UTF-8"?><CompNfse xmlns="http://www.blumenau.sc.gov.br/nfse"><Assinatura>QckcgbXdY0ywBXVkvem3NH7+TyStNWuFnpSZ/6Wz/G+gc/639IiEn7niy7npa2BGFcC7l+JroAJtfG1E/xl+fM+Vm6y82PDk5e+eGNEFTx4zYHjwPOzGrlZdomNdUUTInVTGjVN+DP1/QiIF1B5xyJ15L1eHS9N4CTBAz4cYlDbvhSoZGk04JMurmtHTvB/GwA1eUefSl7apfM1BMIfbC9aof3kcrKRn1WK9z2k9RtF97V+ee/nfENxbI55JJIzYnCUiI4Tq+YWfodG3UrPszG/U15m72F4RmGNZE6/pbFWaMx0BqvlJYqdwdtqb4MzPAH4Hh/ix6UD37ob344ItaA==</Assinatura><ChaveNFe><InscricaoPrestador>99999</InscricaoPrestador><NumeroNFe>9999</NumeroNFe><CodigoVerificacao>BQRVFXZB</CodigoVerificacao></ChaveNFe><DataEmissaoNFe>2019-04-01T16:05:14</DataEmissaoNFe><NumeroLote>14756924</NumeroLote><ChaveRPS><InscricaoPrestador>99999</InscricaoPrestador><SerieRPS>1</SerieRPS><NumeroRPS>3612</NumeroRPS></ChaveRPS><TipoRPS>RPS</TipoRPS><DataEmissaoRPS>2019-04-01</DataEmissaoRPS><CPFCNPJPrestador><CNPJ>999999999999999</CNPJ></CPFCNPJPrestador><RazaoSocialPrestador>ZZZZ LTDA EPP</RazaoSocialPrestador><EnderecoPrestador><TipoLogradouro>RUA</TipoLogradouro><Logradouro>XXXXX</Logradouro><NumeroEndereco>111</NumeroEndereco><ComplementoEndereco>SALA A</ComplementoEndereco><Bairro>ZZZZZZ</Bairro><Cidade>4202404</Cidade><UF>SC</UF><CEP>89052000</CEP></EnderecoPrestador><StatusNFe>N</StatusNFe><TributacaoNFe>T</TributacaoNFe><OpcaoSimples>4</OpcaoSimples><ValorServicos>1.1</ValorServicos><CodigoServico>105</CodigoServico><AliquotaServicos>0.02</AliquotaServicos><ValorISS>0.01</ValorISS><ValorCredito>0</ValorCredito><ISSRetido>false</ISSRetido><CPFCNPJTomador><CNPJ>99999999999999</CNPJ></CPFCNPJTomador><InscricaoEstadualTomador>99999999</InscricaoEstadualTomador><RazaoSocialTomador>AAAAA LTDA</RazaoSocialTomador><EnderecoTomador><Logradouro>RUA </Logradouro><NumeroEndereco>9</NumeroEndereco><Bairro>AAA</Bairro><Cidade>4218202</Cidade><UF>SC</UF><CEP>89120000</CEP></EnderecoTomador><Discriminacao>NOME SERVICO</Discriminacao></CompNfse>


com este XML no arquivo ACBr\Fontes\ACBrDFe\ACBrNFSe\PCNNFSe\pnfsLerListaNFSe.pas no método   function TRetornoNFSe.LerXml: Boolean;  linha 494 temos

              if NFSe.XML = '' then
                FNFSe.XML := SeparaDados(Leitor.Grupo, 'NFe');

Para corrigir foi preciso refatorar a função SeparaDados  na unit  ACBrUtil

function SeparaDados(const AString: String; const Chave: String;
  const MantemChave: Boolean): String;
var
  PosIni, PosFim : Integer;
  UTexto, UChave :String;
begin
  UTexto := AnsiUpperCase(AString);
  UChave := AnsiUpperCase(Chave);
  PosFim := 0;

  if MantemChave then
   begin
     PosIni := Pos('<' + UChave, UTexto);
     if PosIni > 0 then
       PosFim := Pos('/' + UChave, UTexto) + length(UChave) + 3;

     if (PosFim = 0) then
      begin
        PosIni := Pos('NS2:' + UChave, UTexto) - 1;
        if PosIni > 0 then
          PosFim := Pos('/NS2:' + UChave, UTexto) + length(UChave) + 3;
      end;
   end
  else
   begin
     PosIni := Pos('<' + UChave, UTexto) ;
     if PosIni > 0 then
     begin
       PosIni := PosIni + Pos('>', copy(UTexto, PosIni, length(UTexto)));
//     PosFim := Pos('/' + UChave, UTexto);  ////////////////// com erro  //////////////////////////////////
       PosFim := Pos('/' + UChave + '>', UTexto);  // sem erro
     end;

     if (PosFim = 0) then
      begin
        PosIni := Pos('NS2:' + UChave, UTexto) ;
        if PosIni > 0 then
        begin
          PosIni := PosIni + Pos('>', copy(UTexto, PosIni, length(UTexto)));
          PosFim := Pos('/NS2:' + UChave, UTexto);
        end ;
      end;
   end;

  Result := copy(AString, PosIni, PosFim - (PosIni + 1));
end;

 

 

 

 

 

 

 

  • Moderadores
Postado
10 horas atrás, Franklin disse:

Para corrigir foi preciso refatorar a função SeparaDados  na unit  ACBrUtil

Seus fontes não estão atualizados, a implementação da função SeparaDados no repositório está diferente.

Favor atualize os fontes, reaplique a correção e anexe o arquivo modificado.

  • Curtir 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

  • Consultores
  • Solution
Postado
Em 03/04/2019 at 13:42, Franklin disse:

Verdade bigwings , fontes atualizados.

Segue anexo patch.

Obrigado

ACBrUtil.pas.patch 411 B · 1 download

Muito obrigado pela correção. Foi enviada ao SVN na revisão 16849. Também aproveitei para criar um teste unitário para esse erro.

  • Curtir 3
  • Obrigado 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado
8 minutos atrás, EMBarbosa disse:

Muito obrigado pela correção. Foi enviada ao SVN na revisão 16849. Também aproveitei para criar um teste unitário para esse erro.

Obrigado EMBarbosa, favor marcar o tópido como resolvido/encerrado.

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