fração ou nao fração no campo quantidade

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
matrix
Usuário Nível 3
Usuário Nível 3
Mensagens: 131
Registrado em: 06 Jul 2004 08:41
Localização: Paraná
Contato:

fração ou nao fração no campo quantidade

Mensagem 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.
"Ter Problemas é Inevitável, ser derrotado por eles é opcional.!!"
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem 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.
Sem mais
Wagner Nunes
www.vagucs.com.br
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Mensagem 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
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Mensagem 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
Sem mais
Wagner Nunes
www.vagucs.com.br
Responder