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