problemas com pict.....

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

clebermano
Usuário Nível 3
Usuário Nível 3
Mensagens: 187
Registrado em: 03 Out 2004 12:39
Contato:

problemas com pict.....

Mensagem 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?
Vastec - Automacao Comercial Ltda - Ribeirao Preto - SP. (16)3968-2299-(16)8154-7828 (16)8121-4139
msn: suporte@clebermano.com.br - email: clebermanorp@yahoo.com.br
Quem nao vive pra servir nao serve pra viver !
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
clebermano
Usuário Nível 3
Usuário Nível 3
Mensagens: 187
Registrado em: 03 Out 2004 12:39
Contato:

Mensagem 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.
Vastec - Automacao Comercial Ltda - Ribeirao Preto - SP. (16)3968-2299-(16)8154-7828 (16)8121-4139
msn: suporte@clebermano.com.br - email: clebermanorp@yahoo.com.br
Quem nao vive pra servir nao serve pra viver !
clebermano
Usuário Nível 3
Usuário Nível 3
Mensagens: 187
Registrado em: 03 Out 2004 12:39
Contato:

Mensagem 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)
Vastec - Automacao Comercial Ltda - Ribeirao Preto - SP. (16)3968-2299-(16)8154-7828 (16)8121-4139
msn: suporte@clebermano.com.br - email: clebermanorp@yahoo.com.br
Quem nao vive pra servir nao serve pra viver !
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem 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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
diogenes_varela
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 04 Nov 2006 19:33
Localização: Brasília - DF

Mensagem 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.
Os computadores não sabem o que fazem. Nós, na maioria das vezes, também não...

E disse ao Programador: "Todos os teus programas terão erros e irás corrigi-los até ao fim dos teus dias". Gen. 1:9
Responder