Ir para conteúdo
  • Cadastre-se

dev botao

Nó Infunidcarga Replicado


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

Recommended Posts

Postado (editado)
Boa tarde amigos,
Estou utilizando o ACBrCTe, com fontes atualizados hoje pela manhã.
Gerei um XML, informei em infNFe o nó infUnidTransp, e dentro dele dois nós infUnidCarga. Assinei o arquivo, validei, abri e conferi visualmente a estrutura, tudo certo. No entanto, ao utilizar a rotina de enviar o arquivo, retornou um erro na validação, dizendo que encontrou a tag infUnidCarga onde não deveria. Abri novamente o mesmo arquivo e notei que os dois nós infUnidCarga que estavam dentro do infUnidTransp foram replicados para fora dele, como se fossem filhos do infNFe.
Executando a aplicação em modo Debug, notei que isso ocorre toda vez que o componente chama a rotina Assinar; onde salva o arquivo novamente, replicando as tags mencionadas toda vez que executo a rotina.
Fiz este teste várias vezes e a situação ocorreu em todas.
Em anexo, o XML que foi assinado, depois validado, depois usei a função Enviar, que causou o erro acima citado.
 
Desde já, grato pela atenção.
 
P.S.: Debugando mais a fundo, descobri que o bug está já na leitura do XML, devido ao fato de existirem dois nós com o mesmo nome, mesmo em níveis diferentes.
Mais precisamente, na unit pcteCTeR.pas, na função TCTeR.LerXML (no arquivo que tenho atualmente, a partir da linha 750), está lendo conteúdo das tags já lidas anteriormente, que são de outro nível.
Vou fazer um ajuste temporário no código, mas aguardo atualização da função.
Abraços.

42141209358661000168570010000000051000000059-cte.xml

Editado por LeandroHermes

Leandro Hermes Neto

Desenvolvedor

[email protected]

Postado

Caso alguém enfrente a mesma situação, o que eu fiz foi o seguinte:

Levei em consideração o fato de que, no grupo infNFe (assim como nos outros documentos), deve-se informar o grupo infUnidTransp com infUnidCarga como filho dele, OU então, informar apenas o grupo infUnidCarga sozinho. Não deve ser informados infUnidTransp e infUnidCarga como filhos diretos do grupo infNFe, apenas um ou outro. Assim, verifico se não foi gerado o grupo infUnidTransp, para poder gerar o infUnidCarga.

No arquivo pcteCTeT, função TCTeR.LerXML, linha 751 (ao menos no meu arquivo), coloque o while dentro de uma condição, ficou assim:

        //i02 := 0;
        if i02 = 0 then
        begin
            while Leitor.rExtrai(4, 'infUnidCarga', '', i02 + 1) <> '' do
            begin
              CTe.infCTeNorm.infDoc.infNFE[i01].infUnidCarga.Add;
              CTe.infCTeNorm.infDoc.infNFE[i01].infUnidCarga[i02].tpUnidCarga := StrToUnidCarga(ok, Leitor.rCampo(tcStr, 'tpUnidCarga'));
              CTe.infCTeNorm.infDoc.infNFE[i01].infUnidCarga[i02].idUnidCarga := Leitor.rCampo(tcStr, 'idUnidCarga');
              CTe.infCTeNorm.infDoc.infNFE[i01].infUnidCarga[i02].qtdRat      := Leitor.rCampo(tcDe2, 'qtdRat');

              i03 := 0;
              while Leitor.rExtrai(5, 'lacUnidCarga', '', i03 + 1) <> '' do
              begin
                CTe.infCTeNorm.infDoc.infNFE[i01].infUnidCarga[i02].lacUnidCarga.Add;
                CTe.infCTeNorm.infDoc.infNFE[i01].infUnidCarga[i02].lacUnidCarga[i03].nLacre := Leitor.rCampo(tcStr, 'nLacre');
                inc(i03);
              end;

              inc(i02);
            end;
        end; 

Leandro Hermes Neto

Desenvolvedor

[email protected]

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