Página 1 de 1
problemas com pict.....
Enviado: 13 Jan 2007 10:18
por clebermano
Ola pessoal,
Venho mais uma vez recorrer aos amigos do forum, acontece o segunite.]
Na tela de sub-total do meu programa, quando o valor eh mais de 1000(mil), o sistema entende que eh 1,
Tipo
Se a compra deu 1350,00, na digitacao da 13,50 e no banco de dados fica gravado 13,50 ja tentei mudar a mascara com varios picts e nao resolveu, alguem ja passou por isso?
Enviado: 13 Jan 2007 12:53
por Toledo
Clebermano, as pictures utilizadas para valores geralmente são:
"@E 99,999.99"
ou
"99999.99"
Verifique se antes de gravar o valor no campo do DBF, se o programa não está dividindo o valor por 100, pois é muito estranho isto estar acontecendo.
Abraços,
Enviado: 13 Jan 2007 20:23
por clebermano
oooohhh, eh um prazer ter um topico respondido por vc toledo, vc anda sumido do forum, mas vira e mexe aparece, muito obrigado pela dica, vou testar.
Ve se aparece mais no forum.
Enviado: 16 Jan 2007 11:21
por clebermano
nao consigo entender o q acontece
Olha so.
FAco assim os calculos
mTOTPAGO:=mTOTPAGO+mPGTO1
@ 22,10 say Mtotal
@ 23,10 say Mtotpago
inkey(0)
Mtotpago:=val(transform(Mtotpago, "999,999.99"))
Mtotal:=val(transform(Mtotal, "999,999.99"))
@ 20,10 say Mtotal
@ 21,10 say Mtotpago
inkey(0)
calcula(Mtotpago)
----> quando me volta da funcao calcula(), os valores voltam assim
Se for 5.000,00 (cinco mil)
Volta assim 5.00 e da certo ele da que o valor pago eh maior ou igual ao do valor da compra, so que no banco de dados nao fica gravado 5000,00 fica gravado 5,00. como valor pago
Agora se eu ponho o transform(Mtotal,"9999999.99"), a funcao retorna
que o resultado eh menor que o total da compra e nao deixa eu fechar o cupom.
Ja tentei de tudo mas nao vai nao entendo.
Se algum puder ajudar agradeco.
//esta aki eh a funcao de calculo.
***************************************************************************
func calcula(Ptotpago)
***************************************************************************
Mcalcpgto:=Ptotpago-Mtotal
if Mcalcpgto = 0
return
endif
@ 25,10 say Ptotpago
inkey(0)
if Mtotpago < Mtotal
erromens("FALTA " + STR(ABS(mCALCPGTO),10,2),,.f.)
* GFRAME(20,400,622,436,15,15,8,3,3,3,3,LLG_MODE_SET) //tela de mensagens
* GWRITEAT(25,410,"Falta" + str(ABS(Mcalcpgto)),0,LLG_MODE_SET,mFONT)
* inkey(2)
Mvar:=" ";Mvar1:="";Mcalcpgto:=0;Ptotpago:=0
return
elseif Ptotpago >= Mtotal
ERROMENS("TROCO " + STR(mCALCPGTO,10,2),,.F.)
if P_ask=="0"
inkey(3)
endif
GFRAME(25,40,160,76,15,15,8,3,3,3,3,LLG_MODE_SET) //valor unitario
FRAME(190,40,265,76,15,15,8,3,3,3,3,LLG_MODE_SET) //qtde
GFRAME(300,40,435,76,15,15,8,3,3,3,3,LLG_MODE_SET) // total do produto
GFRAME(480,40,615,76,15,15,8,3,3,3,3,LLG_MODE_SET) // total da compra
GFRAME(260,90,620,390,15,15,8,3,3,3,3,LLG_MODE_SET) //tela dos cupons
endif
Mtotpago:=Ptotpago
return (Ptotpago)
Enviado: 16 Jan 2007 11:40
por rochinha
Amiguinho
@ 22,10 say Mtotal
@ 23,10 say Mtotpago
inkey(0)
Mtotpago:=val(transform(Mtotpago, "999,999.99"))
Mtotal:=val(transform(Mtotal, "999,999.99"))
@ 20,10 say Mtotal
@ 21,10 say Mtotpago
inkey(0)
O Toledo postou que voce deve colocar @E dentro da picture e voce não colocou, vai continuar dando erro na apresentação dos valores. Para a nossa realidade ou seja Brasil é primordial colocar o @E.
Enviado: 16 Jan 2007 15:45
por Toledo
Clebermano, só para complementar, observe o seguinte:
O código abaixo não tem lógica... note que você está transformando o valor da variável Mtotpago, que é numérica, em caracter e depois usa a função VAL() para retornar ao valor numérico novamente.
Código: Selecionar todos
Mtotpago:=val(transform(Mtotpago, "999,999.99"))
Mtotal:=val(transform(Mtotal, "999,999.99"))
Então já que estas duas linhas não servem pra nada, é melhor excluir elas.
Agora uma pequena observação sobre a função CALCULA()...
Pela lógica a variável Mtotpago só pode ser menor, igual ou maior que Mtotal, então a linha de comando
elseif Ptotpago >= Mtotal que está no código abaixo, poderia ser alterada por um simples
else
Código: Selecionar todos
if Mtotpago < Mtotal
...
...
elseif Ptotpago >= Mtotal
...
...
endif
Note também que na primeira validação você está utilizando a variável Mtotpago e já na segunda validação você está utilizando Ptotpago. Apesar das duas variáveis terem o mesmo valor, não é bom fazer isto, pois acaba dificultando o entendimento lógico da função.
Abraços,
Enviado: 16 Jan 2007 18:25
por diogenes_varela
Caro Amigo,
Pelo que entendi, você está querendo armazenar um valor juntamente com a formatação, e isso, o clipper não faz.
Isso só seria possível usando o STUFF no valor depois da cláusula VAL que converteria o valor numérico para texto. Só que dessa forma você ficaria impossibilitado de usá-lo para outros cálculos.
O que você tem que fazer é usar o PICT "@E 999,999.99" toda vez que for exibir / imprimir o referido valor.
Se quiser pode criar uma formatação padrão e depois usá-la qdo. necessário. Ex.:
nFormat = "@E 999,999.99"
----
@ 10,10 SAY nValor PICT "&nFormat"
Espero ter ajudado.