Página 1 de 1
fração ou nao fração no campo quantidade
Enviado: 07 Dez 2006 14:22
por matrix
buenas,
pessoal, preciso fazer o seguinte: tenho no cadastro de produtos o campo UNIDADE que pode conter (UN, PC, MT, KG), na venda quero fazer o seguinte, uma analise se for um produto com UN ou PC nao vender fração e se for MT ou KG , poderá ser vendido com 2 casas decimais.
uma ideia de como fazer isso??
valeu.
Enviado: 07 Dez 2006 14:43
por gvc
Vc pode:
- mudar a picture do objeto get.
- mudar a picture dinamicamente.
- Fazer a validação pelo tipo de entrada, não aceitando a entrada e informando ao usuário a regra.
- Fazer dois get´s, permitindo a entrada em um ou outro, conforme a regra.
* Tente o objeto get primeiro.
Enviado: 07 Dez 2006 16:25
por vagucs
A forma mais simples é validar usando o ROUND.
Exemplo
Código: Selecionar todos
clear
sUn=[ ]
nQtd=0
@ 9,10 get sUn picture "!!"
@ 10,10 get nQtd picture "@E 99,999.999" valid if(sUn$[UN/PC/MT/KG],if(nQtd==round(nQtd,0),.t.,(alert("Quantidade invalida!"),.f.)),.t.)
read
Para mudar a mascara e mais complicadinho e acho a ideia anterior mais fácil, mas vamos lá.
Código: Selecionar todos
clear
sUn=[ ]
nQtd=0
@ 9,10 get sUn picture "!!"
@ 10,10 get nQtd when {|oget|mudamascara(oget,sUn)}
read
function mudamascara(oget,sUn)
if sUn$[UN/PC/MT/KG]
oget:picture("@E 99,999,999")
else
oget:picture("@E 99,999.999")
end if
return .t.
Enviado: 07 Dez 2006 21:51
por Poka
Olá Matrix
Tenho cliente que nao só nao quer que mostre unidade pecas com 3 casas decimais, como tambem nao quer que seja impresso na nota.
Peças tem que ser inteiro, KG com 3 decimais, Mt com 2 decimais, e assim por diante.
Eu resolvi da seguinte maneira;
Tenho um cadastro de unidade com os seguintes campos. Esse cadastro já é fixo do sistema, o cliente nao altera.
unidade.dbf
indexado por codigo
codigo nome masqtd
PC Pecas @E 999,999
KG Kilos @E 999.999
MT Metros @E 999.99
Deixe o campo unidade com tamanho de 15 +- para voce colocar o tamanho maximo da mascara utilizada.
Essa mascara eu uso tambem para impressao de relatorios.
produto.dbf
indexado por codprod
codprod
nome
unidade
o conteudo do campo unidade no arquivo de produto é KG,MT,PC...
use produto new
produto->(dbsetorder(1)) // ordem de codprod
use unidade new
unidade->(dbsetorder(1)) // ordem de codigo
cls
vcodprod:=0
vqtd:=0
@ 10,10 say "Codigo produto: " get vcodprod pict"999"
read
produto->(dbseek(vcodprod))
unidade->(dbseek(produto->un))
mascara:=alltrim(unidade->masqtd)
@ 12,10 say "Quantidade....; " get vqtd pict"&mascara"
read
retu nil
Um abraço
Poka
Enviado: 07 Dez 2006 22:43
por vagucs
Você nao precisa macro substituir a mascara, pois ela é string, só passar a variave na picture
Código: Selecionar todos
@ 12,10 say "Quantidade....; " get vqtd picture mascara
read