Ir para conteúdo
  • Cadastre-se

dev botao

MDFe Erro UF VeicTracao(Reabrindo topico)


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

Recommended Posts

No tópico abaixo foi discutido o erro sobre a UF do veiculo de tração, a meu ver independente de existir ou nao  o proprietário do veiculo deve existir a UF do veiculo pois é onde o veiculo foi registrado....

O ACBr faz esta verificação desnecessária na unit "pmdfeMDFeR" linha 240

if pos('<prop>', Leitor.Grupo) = 0 then
  MDFe.rodo.veicTracao.UF := Leitor.rCampo(tcStr, 'UF')
else
  MDFe.rodo.veicTracao.UF := copy(Leitor.Grupo, (Pos('</tpCar>', Leitor.Grupo)+12), 2);

 o topico e este abaixo

 

Segue abaixo uma alteração......

 

 

 

pmdfeMDFeR.pas

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa noite Helio,

Descordo da sua alteração, pois como você disse a UF do veículo é obrigatório, caso exista o grupo <prop> ao ler a UF do veículo, será lido a UF do proprietário, pois esta vem antes da UF do veículo.

Se a UF do veículo é a mesma do proprietário não há problemas, mas e se for diferente?

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Discordo pois veicTracao e prop são entidades diferentes, um nao depende do outro para ter o atributo UF e o manual nao faz nenhuma restrição a única restrição é Proprietários do veículo só preenchido quando o veículo não pertencer à empresa emitente do MDF-e....  lógico estou falando da versao 3.00....

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Heio,

Você esta enganado, o grupo <prop> é de nível 2 e <veicTracao> é de nível 1, ou seja, o grupo <veicTracao> contem o grupo <prop>.

Faça o seguinte teste:

Gere um XML que contenha o proprietário para o veículo tração, mas faça com que a UF do veículo Tração seja diferente da UF do proprietário.

Depois leia esse XML com o loadFromFile(xNomeXML, False) com a unit sem a sua alteração e depois leia com a sua alteração.

O parâmetro False é para evitar que o XML seja gerado novamente após a leitura.

Depois me diga qual é a UF do veículo e do proprietário após a leitura do XML em ambas as units.

 

 

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Boa tarde, Mesmo <veicTracao> sendo de nível 1 e <prop>  sendo de nível 2 mesmo assim elas são entidades diferente.... veja o contexto, imagine um carro(veicTracao) que foi registrado em SP, e o proprietário(prop) tem seu rg de MG.... por que o carro tem q ter a mesma UF de registro do proprietário? na minha humilde opinião cada um tem e deve ter sua UF de registro nacional ou de licenciamento.... agora se o acbr faz alguma restrição ele esta fazendo de modo errado....

Link para o comentário
Compartilhar em outros sites

  • Consultores

Helio,

Em nenhum momento disse que tinha que a UF do proprietário e a UF do veículo tem que ser iguais, pelo contrario.

O teste que eu pedi para você fazer é exatamente o contrário, a UF do veículo não ser a mesma do proprietário.

Uma coisa é gerar, outra coisa é ler o XML.

Faça o teste com a unit sem a sua alteração e depois com a alteração.

Exemplo, gerar o XML com as seguintes UFs:

UF do veicTracao = SP

UF do Proprietário = MG

Usando a Unit sem a sua alteração, leia o XML gerado com as UFs acima, através do LoadFromFile(xNomeXML, False).

Quais são os valores das variáveis abaixo:

     xUFVeic := ACBrMDFe.Manifestos.Items[ 0 ].MDFe.rodo.veicTracao.UF;
     xUFProp := ACBrMDFe.Manifestos.Items[ 0 ].MDFe.rodo.veicTracao.prop.UF;

Depois quais são os valores das mesmas variáveis usando o mesmo XML, mas com a sua proposta? 
 

 

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Veja...   

if pos('<prop>', Leitor.Grupo) = 0 then
  MDFe.rodo.veicTracao.UF := Leitor.rCampo(tcStr, 'UF')
 

 

esse trecho diz q seu nao tenho a tag <prop> eu posso pega a uf, e se tiver d onde vem a uf do veiculo? Independente do modo q opera o acbr?

Link para o comentário
Compartilhar em outros sites

  • Consultores

Helio,

A rotina que você esta propondo alterar se refere a leitura do XML e não a sua geração.

Vamos ao IF:

if pos('<prop>', Leitor.Grupo) = 0 then
  MDFe.rodo.veicTracao.UF := Leitor.rCampo(tcStr, 'UF')
else
  MDFe.rodo.veicTracao.UF := copy(Leitor.Grupo, (Pos('</tpCar>', Leitor.Grupo)+12), 2);

No Manual do MDF-e versão 3.00 páginas 114, 115 e 116.

Temos:

campo #18 <veicTracao> Nível 1

campo#25 <prop> Nível 2   - Elemento do grupo <veicTracao>, ou seja, proprietário do veículo

campo #31 <UF> Nível 3     - Elemento do grupo <prop>, ou seja UF do proprietário

campo #38 <UF> Nível 2    - Elemento do grupo <veicTracao>, ou seja UF do veículo

Se remover o IF, como você esta propondo e deixar somente a linha em negrito, se existe no XML o grupo <prop> ao ler o campo UF (Leitor.rCampo(tcStr, 'UF')) qual UF você acha que será lida?

A UF (campo #31 - UF do proprietário) ou a UF (campo #38 - UF do veículo)?

Vou lhe dar uma dica, o Leitor.rCampo segue a sequencia dos campos.

 

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Chegamos ao ponto.... Primeiro concordo com vc q o código q eu propus não funcionaria com o codigo atual do ACBr.. Mais não posso corrigir um erro com outro erro? A lógica do código q enviei esta certa, Leitor.rCampo deveria ser capaz de procurar primeiro elementos do nó atual para depois procura em nós filhos... o código atual continua errado ou melhor sujeito a falhas, primeiro o xml pode chegar ao TLeitor sem esta na sequencia(imagino q o SEFAZ procura por tag e não por sequencias), digamos q código esteja na sequencia, e se ele não foi gerado pelo ACBr, foi carregado de uma arquivo externo, e se o mesmo estiver com quebras de linhas ou espaçamentos entre tags? isso nao funcinaria MDFe.rodo.veicTracao.UF := copy(Leitor.Grupo, (Pos('</tpCar>', Leitor.Grupo)+12), 2)?

É simples destacar um erro sem apresentar uma possível solução, pra mim neste caso não é necessário querer reinventar a roda, o TLeitor do ACBr deveria internamente usar algum lib para leitura XML! seria até mais rapido pois com uma lib para esse fim tudo estaria em nó elemento e atributo?    

 

Por hora pra mim q carrega o xml(xml valido) gerado em outro lugar, é remover toda quebra de linha e espaçamentos e manter a sequencia do manual!!!:-(

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Helio,

Concordo com você que a "solução" adotada esta longe de ser uma solução, também concordo que o Leitor.rCampo deveria ser capaz de encontrar corretamente a tag desejada.

Mas você há de concordar que um XML com quebras de linhas e identação esta fora do padrão estipulado pela SEFAZ.

Você há de concordar também que a sua proposta também não resolve o problema.

Sendo assim lhe convido a estudar a função rCampo e propor um solução definitiva para esse problema

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

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