Ir para conteúdo
  • Cadastre-se

dev botao

NFSeX - Erro validação - SimplISS


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

Recommended Posts

Postado

Estou tentando enviar um lote rps assíncrono, porém recebo o seguinte erro:
ERRO: X800-Erro de Validação: 1871 - Element '{http://www.sistema.com.br/Nfse/arquivos/nfse_3.xsd}Servico': Missing child element(s). Expected is ( {http://www.sistema.com.br/Nfse/arquivos/nfse_3.xsd}ItensServico )

Em anexo segue o xml do rps, que carrego no componente através do comando:
ACBrNFseX1.NotasFiscais.LoadFromFile(lFile);

O provedor é o SimplISS.

Alguém já passou por isso e poderia me dizer onde estou errando?

RPS-teste.xml

  • Consultores
Postado

Boa noite,

Está com os fontes atualizados e configurou o município no componente antes de ler o arquivo?

Se você gerar o RPS pelo componente ele fica com a mesma estrutura deste que está tentando informar?

Postado (editado)

Bom dia Renato,

Sim, os fontes estão atualizados e configurei o município no componente antes de ler o arquivo.

Sim, o rps gerado pelo componente tem a mesma estrutura, inclusive fiz teste alimentando o componente e depois extraindo o XmlRps do componente e salvando em arquivo para então fazer o LoadFromFile.

Grata pela atenção.

P.S.: me desculpe pelo flooding, me organizarei melhor nas próximas postagens.

Editado por Elisângela Borato
Postado

Complementando...
pelo que percebi o comando ACBrNFSeX.NotasFiscais.LoadFromString() não esta carregando os itens do serviço por isso do erro quando envio o lote (após o load o ACBrNFSeX.NotasFiscais.Items[0].NFSe.Servico.ItemServico.Count retorna zero).
eu faço isso de carregar o xml e enviar o lote de rps com o componente ACBrNFSe... estou migrando para o ACBrNFSeX e emperrei nesse ponto.
qualquer ajuda é bem vinda, esgotei minhas possibilidades aqui...
grata

  • Consultores
Postado

Boa noite,

Coloque um ponto de parada no arquivo a seguir e tente identificar o motivo de não conseguir ler o XML.

../Fontes/ACBrDFe/ACBrNFSeX/Base/Provedores/ACBrNFSeXLerXml_ABRASFv2.pas#l1055 

Screenshot_20220629-191736_Chrome.jpg

Postado

Bom dia Renato, 

Coloquei o ponto de parada e caí no arquivo ACBrNFSeXLerXml_ABRASFv1.pas .
Percebi que a procedure LerServico não estava carregando os ItensServico.
Adicionei o código, conforme abaixo, que solucionou o problema, carregou o ItensServico e por conseguinte sanou o erro que estava dando no envio do lote.

procedure TNFSeR_ABRASFv1.LerServico(const ANode: TACBrXmlNode);
var
  AuxNode: TACBrXmlNode;
  CodigoItemServico: string;
  ANodes: TACBrXmlNodeArray;
  i: integer;
begin
  if not Assigned(ANode) or (ANode = nil) then Exit;

  AuxNode := ANode.Childrens.FindAnyNs('Servico');

  if AuxNode <> nil then
  begin
    LerValores(AuxNode);

    CodigoItemServico := ObterConteudo(AuxNode.Childrens.FindAnyNs('ItemListaServico'), tcStr);

    with NFSe.Servico do
    begin
      ItemListaServico          := NormatizarItemListaServico(CodigoItemServico);
      xItemListaServico         := ItemListaServicoDescricao(ItemListaServico);
      CodigoCnae                := ObterConteudo(AuxNode.Childrens.FindAnyNs('CodigoCnae'), tcStr);
      CodigoTributacaoMunicipio := ObterConteudo(AuxNode.Childrens.FindAnyNs('CodigoTributacaoMunicipio'), tcStr);
      Discriminacao             := ObterConteudo(AuxNode.Childrens.FindAnyNs('Discriminacao'), tcStr);
      CodigoMunicipio           := ObterConteudo(AuxNode.Childrens.FindAnyNs('CodigoMunicipio'), tcStr);

      if CodigoMunicipio = '' then
        CodigoMunicipio := ObterConteudo(AuxNode.Childrens.FindAnyNs('MunicipioPrestacaoServico'), tcStr);
    end;
  end;

  /// adicionado /////////////
  ANodes := AuxNode.Childrens.FindAllAnyNs('ItensServico');
  for i := 0 to Length(ANodes) - 1 do
  begin
    NFSe.Servico.ItemServico.New;

    with NFSe.Servico.ItemServico[i] do
    begin
      Descricao := ObterConteudo(ANodes[i].Childrens.FindAnyNs('Descricao'), tcStr);
      Quantidade := ObterConteudo(AuxNode.Childrens.FindAnyNs('Quantidade'), tcDe2);
      ValorUnitario := ObterConteudo(AuxNode.Childrens.FindAnyNs('ValorUnitario'), tcDe4);
    end;
  end;
  ///////////////////////////
end;

Peço que por gentileza adicionem o código aos fontes svn.
Grata.

ACBrNFSeXLerXml_ABRASFv1.pas

  • Curtir 1
Postado

Corrigindo: 

   De   
      Quantidade := ObterConteudo(AuxNode.Childrens.FindAnyNs('Quantidade'), tcDe2);
      ValorUnitario := ObterConteudo(AuxNode.Childrens.FindAnyNs('ValorUnitario'), tcDe4);
   Para 
      Quantidade := ObterConteudo(ANodes[i].Childrens.FindAnyNs('Quantidade'), tcDe2); 
      ValorUnitario := ObterConteudo(ANodes[i].Childrens.FindAnyNs('ValorUnitario'), tcDe4);

Portanto o trecho inserido fica assim:

 

  /// adicionado /////////////
  ANodes := AuxNode.Childrens.FindAllAnyNs('ItensServico');
  for i := 0 to Length(ANodes) - 1 do
  begin
    NFSe.Servico.ItemServico.New;

    with NFSe.Servico.ItemServico[i] do
    begin
      Descricao := ObterConteudo(ANodes[i].Childrens.FindAnyNs('Descricao'), tcStr);
      Quantidade := ObterConteudo(ANodes[i].Childrens.FindAnyNs('Quantidade'), tcDe2);
      ValorUnitario := ObterConteudo(ANodes[i].Childrens.FindAnyNs('ValorUnitario'), tcDe4);
    end;
  end;
  ///////////////////////////

 

ACBrNFSeXLerXml_ABRASFv1.pas

  • Consultores
  • Solution
Postado

Elisângela,

Notei o erro.

Aproveitei e fiz uma melhoria, criei uma procedure para ler o grupo ItensServico.

Já esta no SVN, favor atualizar os fontes, reinstalar o ACBr e faça novos testes.

  • Obrigado 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

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