Ir para conteúdo
  • Cadastre-se

dev botao

LoadFromString retornando registro a mais e em branco. (Real + Fantasma)


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

Recommended Posts

Postado

Olá

Outro ponto que gostaria de levantar, ainda no ISS.net (Abrasf V1), ao carregar o XML,  todo arquivo RPS está retornando um registro a mais do que ele efetivamente tem, o ultimo, sempre vazio.

O arquivo basicamente tem o layout assim:

<EnviarLoteRpsEnvio ...>
<LoteRps Id="999">
  ...
  <ListaRps>
    <Rps Id="1">
    </Rps>
    <Rps Id="2">
    </Rps>
  </ListaRps>  
</LoteRps>
</EnviarLoteRpsEnvio>

Este deveria retornar 2 registros(ID 1 e 2), porém retorna 3. Este ultimo, todo vazio.

A meu ver o problema está no LoadFromString. Ele por sua vez tem o PosRPS que identifica se tem mais alguma tag de RPS para ler.

Sendo ele:

  function PosRPS(AProvedor: TnfseProvedor): Integer;
  begin
    TamTAG := 5;
    if (VersaoNFSe < ve200) and (AProvedor <> proAgili) then
    begin
      Result := Pos('</Rps>', AXMLString);
      // Provedor ISSDSF
      if Result = 0 then
        Result := Pos('</RPS>', AXMLString);

      if Result = 0 then  //Equiplano
        Result := Pos('</rps>', AXMLString);

      // Provedor Governa
      if Result = 0 then
      begin
        Result := Pos('</LoteRps>', AXMLString);
        TamTAG := 9;
      end;
    end
    else
    begin
      // Se a versão do XML do RPS for 2.00 ou posterior existem 2 TAGs <Rps>,
      // neste caso devemos buscar a posição da segunda.
      Result := Pos('</Rps>', AXMLString);
      Result := PosEx('</Rps>', AXMLString, Result + 1);
    end;
  end;

 

Peço atenção ao bloco com o comentário "// Provedor Governa".

Este bloco, ao final, vai procurar pelo finalizador do "LoteRPS". Vejam que, ao final, do arquivo exemplo, só restará o "resto" do XML, ou seja:

</ListaRps>  
</LoteRps>
</EnviarLoteRpsEnvio>

 

Assim, ele acha que há mais um RPS gerando um registro em branco no ACBrNFSe.NotasFiscais.

 

O correto, já que é apenas para o provedor Governa, seria mudar de:

      if Result = 0 then
      begin
        Result := Pos('</LoteRps>', AXMLString);
        TamTAG := 9;
      end;

Para:

      // Provedor Governa
      if ((Result = 0) and (AProvedor = proGoverna)) then
      begin
        Result := Pos('</LoteRps>', AXMLString);
        TamTAG := 9;
      end;

 

Aproveitei e anexei o arquivo. Pra mim, que estou mexendo agora ISS.Net resolveu, não sei como serão com os demais provedores.

 

ACBrNFSeNotasFiscais.pas

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

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.