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?
problemas com pict.....
Moderador: Moderadores
-
clebermano
- Usuário Nível 3

- Mensagens: 187
- Registrado em: 03 Out 2004 12:39
- Contato:
problemas com pict.....
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 !
msn: suporte@clebermano.com.br - email: clebermanorp@yahoo.com.br
Quem nao vive pra servir nao serve pra viver !
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
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,
"@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
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

- Mensagens: 187
- Registrado em: 03 Out 2004 12:39
- Contato:
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.
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 !
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

- Mensagens: 187
- Registrado em: 03 Out 2004 12:39
- Contato:
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)
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 !
msn: suporte@clebermano.com.br - email: clebermanorp@yahoo.com.br
Quem nao vive pra servir nao serve pra viver !
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Amiguinho
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.@ 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)
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
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.
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
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,
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"))
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
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
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

- Mensagens: 206
- Registrado em: 04 Nov 2006 19:33
- Localização: Brasília - DF
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.
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
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