Jump to content

dev botao

Função para conversão de STRING para Tipos


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

Recommended Posts

Olá Colegas

Já existem funções no componente do ACBR para PIS e COFINS que faz a conversão de string´s para os tipos. Por exemplo o campo CST_PIS, eu armazeno no banco de dados 01, 02, 03, etc. Porém ao colocar no componente preciso informar stpisValorAliquotaNormal onde a CST for 01. Procurei nos fontes do componente mais não consegui encontrar uma função que faça a conversão. Gostaria de saber se ela já existe? E caso não exista eu irei criá-las para usar no meu sistema e se for de vosso interesse disponibilizo elas para o componente.

_________________

Ronaldo Lazarin

RSis Gestão Empresarial©

RSis Software

Link to comment
Share on other sites

  • Consultores

Olá,

Desde que o Delphi incluiu RTTI, dá pra fazer isso usando os métodos GetEnumName e GetEnumValue. Não sei se funciona no Lazarus...

Mas é algo como:

uses TypeInfo

//......
var
aTACBrSituacaoTribPIS : TACBrSituacaoTribPIS;
campodoBD: string;
begin
//imagine que campodoBD é o campo do BD... então salvar seria como
campodoBD := GetEnumName(TypeInfo(TACBrSituacaoTribPIS), integer(stpisValorAliquotaNormal)) ;

//imagine que aTACBrSituacaoTribPIS é o campo do componte que você está lendo do BD. Pra simplificar vou usar a mesma variável campodoBD
aTACBrSituacaoTribPIS := TACBrSituacaoTribPIS(GetEnumValue(TypeInfo(TACBrSituacaoTribPIS), campodoBD);
// Mas poderia ser o abaixo
// aTACBrSituacaoTribPIS := TACBrSituacaoTribPIS(GetEnumValue(TypeInfo(TACBrSituacaoTribPIS), 'stpisValorAliquotaNormal');

[/code]

Como não sei se o Lazarus faz isso, talvez seja uma boa ideia implementar outros métodos.

  • Like 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

Funcionou no Lazarus também porém há problema que não consegui resolver. A função GetTypeValue me retorna a posição do Nome dentro do conjunto. Por exemplo para um conjunto (tipo1, tipo2, tipo3...) ela retorna 1 para tipo1, 2 para tipo2, 3 para tipo3, etc. Só que eu armazeno no banco de dados os códigos das CSTs 01, 02, 03, 04, 05, 06, 07, 08, 09, 49, 50... Aí é que encontrei o problema, quando trago 49 do banco de dados a GetTypeValue busca o valor que está na posição 49 do conjunto e na verdade ele está na posição 10.

A menos que eu tenha entendido errado a forma de usar esse recurso.

_________________

Ronaldo Lazarin

RSis Gestão Empresarial©

RSis Software

Link to comment
Share on other sites

  • Consultores

Não sei o porquê, mas não tinha visto essa mensagem... :?:

Bem, você não entendeu o método errado não. É isso mesmo. Achei que você queria retornar o valor do tipo e não o valor do campo SPED.

Na verdade, no momento penso que a melhor opção pra armazenar esse tipo de campo é armazenando a string do tipo (ex. stpisValorAliquotaNormal). Isso impede o problema de quando o SPED muda os valores por ventura de uma nova versão, como já aconteceu com alguns campos.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

Olá Elton

Eu entendi o funcionamento das funções, GetTypeValue te retorna a posição do tipo e GetTypeName te retorna o nome do tipo. Acho interessante essa idéia de armazenar a string do tipo no banco de dados, mais no meu caso acho que inviável eu fazer agora pois já tenho muitos clientes usuários do sistema e o trabalho seria maior e considerando os prós e contras e o tempo curto preferi criar as funções. Já estou criando elas e caso queira posso disponibilizá-las para você analisar a incorporar no componente para que outros colegas também possam aproveitar.

_________________

Ronaldo Lazarin

RSis Gestão Empresarial©

RSis Software

Link to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...