Campo do formulário com decimais variável de acordo com outra tabela no b.d.

Oi,

Eu estou fazendo um sistema de estoque onde informo para cada material (produtos, insumos, etc.),
a unidade de medida deste e com isto o número de decimais.

Por exemplo: um produto tem 0 decimais (unitário) e um insumo pode ter 3 decimais (kg/gramas).

Como fazer com os formulários, façam a pesquisa da unidade no banco de dados e alterem os campos para o numero de decimais desejada ?
Isto é importante, para permitir entradas fracionadas somente se a unidade do material permitir fracionar.

Se possível fazer isto nas grids também.

Grato

João

Somente com tratamento manual para visualizar as casas decimais conforme a situação.
No banco de dados usar float.

Olá Haroldo,
O tratamento manual que você comentou seria feito onde e como?
Exemplo: Evento Ajax -> onFocus + sc_trunc_num() + sc_format_num()
Funciona?
[]'s

Sendo formulários tem que fazer na onload no caso de edição de registro.
No caso de novo registro se for desejar apresentar a máscara logo após a saída da janela teria que trabalhar com dois campos alternados que custaria conhecimento avançado. Isso para fazer em todos os formulários do sistema que devam apresentar quantidade de produtos,não sei se eh viável.

Vou testar.
Obrigado pelas dicas.
[]'s

Haroldo, grato pela sua resposta.

Eu havia pensado numa solução semelhante, onde em cada formulário,
teremos 3 campos, o da tabela escondido, e um com decimais e outro sem. E alternando-os via código.

Mas não existe algo mais prático ?
Poderíamos ter um macro para alterar as decimais de um campo durante a execução.

Abs

João

eu tenho um biblioteca que trata as casas decimais mas só uso em consultas.

1.0001 mostra 1.0001
1.0000 mostra 1
na função eu passo o número de casas que desejo.

essa é uma.

<?php
FUNCTION TrataDecimais ($_valor,$_Dec=0,$_separ='.') {
	If (empty($_valor) or $_valor==0) Return "";
	$_dec=CasasDecimais($_valor,$_Dec,$_separ);
	$_arr=explode($_separ,$_valor);
  	If ($_dec>0) { 
		$_return=$_arr[0];
  		$_return.=$_separ.substr($_arr[1],0,$_dec);
	}Else{
		$_return=$_arr[0];
	} 
	sc_format_num($_return,'.', ',',$_dec,'N','1','');
  	Return $_return;
}
?>

essa é outra:

<?php
Function CasasDecimais($CAMPO,$MINDEC='0',$SEPAR='.') {
  $VALDEC=STRPOS($CAMPO,$SEPAR)!==FALSE?END(EXPLODE($SEPAR,$CAMPO)):"";
  $TAMDEC=STRLEN($VALDEC);
  $RETURN=$MINDEC;
  for ($i=$MINDEC;$i<$TAMDEC;$i++) {
    IF (substr($VALDEC,$i,1)>0) $RETURN=$i+1;
  }
  RETURN $RETURN;
}
?>

elas trabalham juntas.
mas legal seria é trabalhar no javascript pára atuar no campo diretamente automaticamente, mas ai pode entrar em conflito com a atuação do javascript que o SC já aplica.