Jump to content

dev botao

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


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