Página 1 de 1

formatacao campo numerico

Enviado: 05 Abr 2007 17:18
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.

Enviado: 05 Abr 2007 17:26
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

Enviado: 05 Abr 2007 19:23
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

Enviado: 05 Abr 2007 19:30
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

Enviado: 06 Abr 2007 09:29
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.

Enviado: 07 Abr 2007 08:59
por Toledo
Filizola, dê uma olhada neste tópico também:

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

Abraços,

Enviado: 07 Abr 2007 11:05
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

Enviado: 08 Abr 2007 10:05
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

Enviado: 09 Abr 2007 20:23
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.)