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á 830 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

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

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Elisângela,

Você esta gerando os XMLs dos Rps e depois carregando para ser enviado?

Se sim, porque não gerar no momento do envio?

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

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

  • Consultores
  • Solution

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

Link para o comentário
Compartilhar em outros sites

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

The popup will be closed in 10 segundos...