Ir para conteúdo
  • Cadastre-se

dev botao

Utilização de Typed Constants nos componentes


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

Recommended Posts

Boa tarde,

Ao efetuar alguns testes com os componentes do ACBr para transmitir notas fiscais de importação e exportação, percebi que algumas vezes gerava um alerta na unit pcnNFeW quando caia no método GerarDestEnderDest e validava a UF, e outras vezes não. Abaixo segue um dos testes que gerava alerta.

if not ValidarUF(xUF) then
    Gerador.wAlerta('E12', 'UF', DSC_UF, ERR_MSG_INVALIDO);


Alertas:
TAG:<dest><enderDest> ID:E11/xMun(Nome do Município) - Nenhum valor informado.

TAG:<dest><enderDest> ID:E12/UF(Sigla da UF) - Nenhum valor informado.

TAG:<dest><enderDest> ID:E12/UF(Sigla da UF) - Conteúdo inválido.

Debuguei o código até entender que a causa desse comportamento seriam as typed constants definidas na pcnNFe

const
  CMUN_EXTERIOR: Integer = 9999999;
  XMUN_EXTERIOR: String = 'EXTERIOR';
  UF_EXTERIOR: String = 'EX';

Para simular, tive que seguir os passos a seguir: abro o sistema; em seguida abro um form no qual cadastro a NFe (este form está em outra bpl). Faço uma nota de importação ou exportação e salvo ela. No momento que salva, é gerado o XML da NFe através da pcnNFeW.GerarXML. Nesse primeiro momento, tudo funciona corretamente. Mas se eu fechar a tela da nota fiscal, entrar novamente e cadastrar outra NF-e de importação ou exportação, no momento que gerar o XML, as constantes acima do tipo String estarão em branco (''). Logo, o método AjustarMunicipioUF não vai atualizar as variáveis corretamente, ocasionando o alerta. Busquei na internet soluções para isso e descobri que essas typed constants são diferentes das true constants e que algumas pessoas não recomendam usar elas para tipos simples como Integer e String. Somente para arrays, ponteiros,...

Enfim, retirei os tipos das constantes e funcionou corretamente.

const
  CMUN_EXTERIOR = 9999999;
  XMUN_EXTERIOR = 'EXTERIOR';
  UF_EXTERIOR   = 'EX';

Não sei porquê os valores ficavam em branco na segunda vez que eu entrava na tela, mas pesquisando entendi que o uso das typed constants não é amplamente recomendado. Sugiro tirar os tipos dessas constantes (e outras de tipos simples, caso houver) no ACBr para evitar problemas assim, ou se alguém conseguir me explicar porquê isso acontece, seria útil.

Obs: Eu informo o nome real da cidade, mesmo que ela seja do exterior e deixo que o ACBr trate para quando for operação com exterior, colocar os valores das constantes.

Um link que aborda o problema:

https://stackoverflow.com/questions/2714365/delphi-all-constants-are-constant-but-some-are-more-constant-than-others

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

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