Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Casas decimais Prezados bom dia, Estou implementando uma tela no qual tenho campos numéricos (valor monetário). Para isso, utilizei um campo TEntry com setNumericMask(2,',','.'). Visualmente funcionou corretamente, porém ao gravar ou recuperar o valor informado pelo usuário no banco de dados, o framework considera a casa de milhar como separador decimal. Diante disso, como que faço para tratar o v...
CG
Casas decimais  
Fechado
Prezados bom dia,

Estou implementando uma tela no qual tenho campos numéricos (valor monetário).
Para isso, utilizei um campo TEntry com setNumericMask(2,',','.').

Visualmente funcionou corretamente, porém ao gravar ou recuperar o valor informado pelo usuário no banco de dados, o framework considera a casa de milhar como separador decimal.

Diante disso, como que faço para tratar o valor informado pelo usuário para que seja gravado corretamente? Não encontrei nos exemplos do site, que trata disso.
Além disso, encontrei outro Bug.

Quando o sistema recupera o dado do banco e exibe na tela para o usuário, o valor que é exibido está no formato americano (999999.99), e somente depois que o usuário edita o campo, o valor é exibido corretamente.

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (5)


JN

Boa tarde Carlos,

No banco está correto gravar a informação desta forma. É preciso tratar a informação antes de apresentar para o usuário, na datagrid ou no formulário. No mesmo exemplo se encaixa o uso das datas no padrão americano, onde para gravar e retornar a mensagem é preciso tratar a informação antes de gravar no banco e apresentar para o usuário.

Abraço.
WG

Você tem que tratar isso antes nas 2 vias...

1- Quando for gravar, tem que pegar o formato brasileiro e converter para o americano (padrão do banco de dados0

2- E quando for recuperar dados do banco para mostrar em tela, tem que fazer o contrário...

Veja mais: leocaseiro.com.br/moedas-decimais-funcao-number_format-php/
CG

Bom dia amigos,

Deu certo!!!

Obrigado.
JF

Olá!
Não consegui!!!
No link que o Wemerson postou NÃO ENTENDI GRANDES COISAS, só me foi útil uma dica do Leo Caseiro, que normalmente trata as conversões no set() e get(), MAS COMO?
Tentei fazer a operação REVERSA no método onSave mas dá a mensagem: Call to a member function setNumericMask() on a non-object in como mostro.
  1. <?php
  2.    public function onSave$param )
  3.     {
  4.         try
  5.         {
  6.             TTransaction::open('cia'); // open a transaction
  7.             $this->form->validate(); // validate form data
  8.             
  9.             $object = new Produto;  // create an empty object
  10.             $data $this->form->getData(); // get form data as array
  11.             $object->fromArray( (array) $data); // load the object with data
  12.             
  13.             $valor $object->custo;
  14.             $valor->setNumericMask(2'.'',');
  15.             $object->custo $valor;
  16.             
  17.             $object->store(); // save the object
  18. {...}
  19. ?>


Alguém já resolveu e não colocou no fórum?
Já revirei este e achei tudo muito prolixo, extenso. Nada que resolva um problema pequeno com uma solução pequena!!!!


PD

João,

Tome cuidado ao usar o fórum. Você está comentando um POST de 2014.
Prefira abrir novos POSTS. Não seja grosseiro com outros membros, senão teremos de banir vocês.
Todo o suporte aqui é voluntário. Não escreva em maiúsculo ou use exclamações.

O método setNumericMask() é um método da classe TEntry. Você está executando ele sobre um valor escalar.
Veja a assinatura do método setNumericMask:
  1. <?php
  2. public function setNumericMask($decimals$decimalsSeparator$thousandSeparator$replaceOnPost FALSE)
  3. ?>


Caso passe TRUE no último parâmetro, o dado numérico será automaticamente ajustado no POST para o formato americano.
Mas você deve executar o método setNumericMask() sobre um componente TEntry.

Sugestão: Estude a função number_format().

Att,