formatacao campo numerico

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

formatacao campo numerico

Mensagem por filizola »

galera, seguinte:


descp:=unidp:=" "
prodp:=space(04)
valorp=0.00

@ 10,10 get prodp pict "´9999" valid(tem_prod(prodp,@descp,@unidp)
@ 11,10 get valorp pict if(unidp="KG","@e 99.999","@e 99")
@ 12,10 say descp
@ 13,10 get qtdep pict "99"
read

function tem_prod(prodf,descf,unidf)

sele produtos
dbseek(prodf,.f.)
unidf="KG"
return(.t.)


o programa nao interpreta que a variavel unidp foi preenchida com "KG" enquando eu nao executar o READ

alguem tem uma solução.

desde já agradeço.
"Um passo a frente, e já não estará mais no mesmo lugar..."
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

o programa nao interpreta que a variavel unidp foi preenchida com "KG" enquando eu nao executar o READ
coloque um:

SET CONFIRM OFF

Acho que resolve....

Abraços
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Marcio,

Você ja viu os tópicos referentes ao GETSYS. Eu acho que você poderá resolver isso tratando lá no GETSYS.PRG. Existe um exemplo do DANIEL muito bom e completo e outro que eu postei, que talvez ajude a entender a sua questão específica.

Dê uma olhada em:

https://pctoledo.org/forum/viewto ... ght=getsys (exemplo do Daniel)
https://pctoledo.org/forum/viewto ... 5&start=15 (meu exemplo)

Um clip-abraço :)Pos
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Espera aí Marcio, antes de começar com o GETSYS. A variável unidp é editar em outro GET anteriormente ?. Ou recebe esse valor como parâmetro na entra da função ?.

Seja como for, eu acostumo colocar dois GETs mas condicinada antes pelo WHEN.
Por exemplo:


@ 11,10 get valorp pict "@E 99.999" WHEN unidp="KG"
@ 11,10 get valorp pict "99" WHEN !(unidp="KG")
READ


Será que resolve ?.

Um clip-abraço :)Pos
spereira
Usuário Nível 2
Usuário Nível 2
Mensagens: 85
Registrado em: 19 Jul 2004 11:42
Localização: Porto - Portugal

Mensagem por spereira »

filizola

na função tem_prod() você seta a variável unidf="KG" e não a variável unidp.
Bastaria setar a variável unidp com o conteúdo da variável unidf.

Espero ter ajudado de alguma forma.

Sérgio Pereira
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 »

Filizola, dê uma olhada neste tópico também:

https://pctoledo.org/forum/viewto ... ght=#21090

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
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 »

Prezado colega,

Acredito que esse não seja só prblema seu não, acho que de todos nós
, não sei como os outros fazem, aqui vai somente + uma ideia.


é bom lembrar tambem tambem que alem de pecas e kilos tem tambem metros, que sao duas casas decimais

no meu cadastro entre outros campos tenho tambem os sequintes campos.

produto.dbf

- codigo
- nome
- unidade

o campo unidade de produtos tem que constar no cadastro de unidade

unidade.dbf
- codigo , c , 2
exemplos de codigo
pc/kg/mt/jg,milheiro, etc
-nome , c , 15
pecas, metros, jogos ,milheiro

- masqtd , c, 15

@e 999,999,999 p/ pecas
@e 999,999.999 p/ kilos
@e 999,999.99 p/ metros

- qtdec // quant de decimais usada na mascara desse item
0 p/ pecas
2 p/ metros
3 p/ kilos
etc

Obs : meu cadastro de unidade é fixo, eu nao deixo o usuario alterar.


//////////////////////////////////////////////////////////

use produto new

produto->(dbsetorder(1)) // ordem de codigo

use unidade new

unidade->(dbsetorder(1)) // ordem de codigo

do while .t.
cls
vcodigo:=spac(len(produto->codigo))
// o codigo de arquivos eu só uso tipo "C"
vqtd:=spac(10)
@ 10,10 say "produto :" get vcodigo pict"@k9" valid fun_prod()
@ 12,10 say "Quantidade:" get vqtd valid fun_un(@vqtd,row(),col()-11)
read
if lastkey()=27
exit
endif
enddo
retu nil
/////////////
func fun_prod
if ! tempo->(dbseek(vcodigo))
alert("Produto nao encontrado;tecle enter")
retu .f.
endif
retu .t.
//////////////
funct fun_un(vqtd,linha,coluna)
produto->(dbseek(vcodigo))
unidade->(dbseek(produto->un))
if unidade->qtdec=0
vqtd:=val(vqtd)
elseif unidade->qtdec=2
vqtd:= val(vqtd)/100
elseif unidade->qtdec=3
vqtd:= val(vqtd)/1000
endif
vmasqtd:=unidade->masqtd
@ linha,coluna say transf( vqtd,vmasqtd)
retu .t.

// o problema nesse exemplo é que voce deve digitar o numero inteiro, inclusive as decimais

um abraço

Poka
Dr_Spock
Usuário Nível 1
Usuário Nível 1
Mensagens: 17
Registrado em: 05 Jan 2007 13:40
Localização: Brasilia - DF

Mensagem por Dr_Spock »

- Filizola

- Para voce ter o retorno desta variavel ela deve ser inicializada antes ou declarada como publica.

- Basta voce inicializar ela antes de chamar a rotina, como abaixo :

unidp=" " && <<<<<<
descp:=unidp:=" "
prodp:=space(04)
valorp=0.00

@ 10,10 get prodp pict "´9999" valid(tem_prod(prodp,@descp,@unidp)
@ 11,10 get valorp pict if(unidp="KG" ......

Um abracao

:)Pos
spereira
Usuário Nível 2
Usuário Nível 2
Mensagens: 85
Registrado em: 19 Jul 2004 11:42
Localização: Porto - Portugal

Mensagem por spereira »

spereira escreveu:filizola

na função tem_prod() você seta a variável unidf="KG" e não a variável unidp.
Bastaria setar a variável unidp com o conteúdo da variável unidf.

Espero ter ajudado de alguma forma.
Vou tentar melhorar:

public unidp := " "

descp:=unidp:=" "
prodp:=space(04)
valorp=0.00

@ 10,10 get prodp pict "9999" valid(tem_prod(prodp))
@ 11,10 get valorp pict if(unidp="KG","@e 99.999","@e 99")
@ 12,10 say descp
@ 13,10 get qtdep pict "99"
read

function tem_prod(prodf)

sele produtos
dbseek(prodf,.f.)
unidp="KG"
return(.t.)

Sérgio Pereira
Responder