Ir para conteúdo
  • Cadastre-se

dev botao

Importar XML do CT-e / Buscar CST do ICMS


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

Recommended Posts

Bom dia pessoal...

Tenho uma funcionalidade muito util em meu sistema, onde o meu usuario pode importar o arquivo XML de uma NF-e ou CT-e... Sei que muitos outros sistemas possuem esta mesma funcionalidade e por isso peço uma ajuda, ja que nao encontrei nada a respeito no forum...

Estou com dificuldades para buscar na classe do CT-e, qual o CST do ICMS definido no arquivo XML e claro, os respectivos valores...

Procedimento padrao: "ACBrCTe.Conhecimentos.LoadFromFile(OpenDialog.FileName);"

Para cada CST, os arquivos XML (NF-e/CT-e) possuem TAG diferentes, mas para importar a NF-e, eu consigo verificar qual o CST apenas dando o comando "OrigToStr(ACBrNFe.NotasFiscais.Items[n].NFe.Det.Imposto.ICMS.orig) + CSTICMSToStr(ACBrNFe.NotasFiscais.Items[n].NFe.Det.Imposto.ICMS.CST)", ou qualquer campo, sem se preocupar em acessar especificamente a classe do CST que esta no arquivo XML. Mas no CT-e nao consigo, pois consigo apenas acessar diretamente a classe do CST especifico, como por exemplo: "ACBrCTe.Conhecimentos.Items[n].CTe.Imp.ICMS.CST00.CST" para o CST "00" ou "ACBrCTe.Conhecimentos.Items[n].CTe.Imp.ICMS.CST20.CST" para o CST "20".

Na classe da NF-e, logo apos a propriedade "imposto" tem "ICMS" (apenas "ICMS") e a partir daí, consigo acessar qualquer campo dos impostos de ICMS, mesmo que o CST é o 60 e o unico campo informado no XML é o proprio CST e a origem. No CT-e, apos a propriedade "Imp" tem "ICMS", igual a NF-e, mas nesse momento nao tenho a propriedade "CST" mas preciso saber qual CST para acessar a classe e pegar as informaçoes dos campos referidos a cada CST...

Se eu acesso "ACBrCTe.Conhecimentos.Items[n].CTe.Imp.ICMS.ICMS00.CST" o valor retornado é "cst00" e se eu acesso "ACBrCTe.Conhecimentos.Items[n].CTe.Imp.ICMS.ICMS20.CST" o valor retornado é "cst20", mas no arquivo da CT-e tem a tag "CST20"... o mesmo acontece se no XML tem a tag "CST00".

P.S.: além de tudo isso, não consigo pegar os valores da BC, Aliq e valor do ICMS, pois esta sempre zerado...

Agradeço se alguém puder me ajudar.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Rosemir,

no caso do CTe leia o conteudo deste campo:

ACBrCTe.Conhecimentos.Items[n].CTe.Imp.ICMS.SituTrib

ele vai retornar cst00, cst20, ...

ai suando a estrutura case ... of você monta a rotina para pegar os valores dependendo do cst retornado.

Espero ter ajudado.

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

Ótimo,

Muito obrigado Italo...

Eu utilizo "CSTICMSToStr(ACBrCTe.Conhecimentos.Items[n].CTe.Imp.ICMS.SituTrib)" para pegar o CST...

e utiligo para pegar os valores:

"ACBrCTe.Conhecimentos.Items[n].CTe.Imp.ICMS.ICMS00.vBC"

"ACBrCTe.Conhecimentos.Items[n].CTe.Imp.ICMS.ICMS00.pICMS"

"ACBrCTe.Conhecimentos.Items[n].CTe.Imp.ICMS.ICMS00.vICMS"

ou

"ACBrCTe.Conhecimentos.Items[n].CTe.Imp.ICMS.ICMS90.vBC"

"ACBrCTe.Conhecimentos.Items[n].CTe.Imp.ICMS.ICMS90.pICMS"

"ACBrCTe.Conhecimentos.Items[n].CTe.Imp.ICMS.ICMS90.vICMS"

depende do CST é claro...

Mas retorna sempre o "CST00" e os valores todos zerados...

Eu descobri que na unit "pcteCTeR" no método "function TCTeR.LerXml: boolean;" a partir da linha 520 foi implementada uma diretiva de compilacao "PL_103" e "PL_104".

Na "PL_103", procura pela tag "CST00" e na "PL_104" pela tag "ICMS00"...

Como nao tenho programa para emissao de CT-e, nao sei se alterou alguma coisa no leiaute do CT-e ou é problema no fonte mesmo, mas nos XML que tenho aqui nao existe a TAG "ICMS00" ou "ICMS20" ou "ICMS90", etc... mas sim "CST00" ou "CST20" ou "CST90", etc... por isso nao busca os valores nem o CST.

Grato...

Link para o comentário
Compartilhar em outros sites

  • Consultores

Rosemir,

Se você esta recebendo o XML com as tags CST00 é porque a versão do CTe é 1.03, sendo que apartir de 02/05/2012 passa a valer a versão 1.04 ai vao mudar para ICMS00.

Dentro da pasta ...\Fontes\ACBrComum temos o arquivo ACBr.INC

Abra-o e vai até o final dele, comente a definição da diretiva de compilação PL_104 e descomente a PL_103.

Compile a sua aplicação usando a opção Build e teste novamente, mas lembre-se de alterar as linhas:

"ACBrCTe.Conhecimentos.Items[n].CTe.Imp.ICMS.ICMS00.vBC"

(...)

por

"ACBrCTe.Conhecimentos.Items[n].CTe.Imp.ICMS.CST00.vBC"

(...)

Espero ter ajudado.

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

  • 10 meses depois ...

Bom dia,

 

O amigo acima disse que utiliza a linha "OrigToStr(ACBrNFe.NotasFiscais.Items[n].NFe.Det.Imposto.ICMS.orig) + CSTICMSToStr(ACBrNFe.NotasFiscais.Items[n].NFe.Det.Imposto.ICMS.CST)" para pegar o valor do CST. Porém ele utiliza o "OrigToStr" e "CSTICMSToStr". No meu projeto não consigo acessar essas funções, podem me dizer se devo fazer o import de alguma classe ou algo a mais para poder acessa-las?

 

Att: Vinicius Sanchez

Link para o comentário
Compartilhar em outros sites

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