Problema com Get e comando VALID
Moderador: Moderadores
Problema com Get e comando VALID
Bom dia a todos!!!
Estou fazendo um programa usando um DBU, com opções para fazer INCLUSÃO E ALTERAÇÃO.
Minha rotina é a seguine:
Essa Tela é de INCLUSÃO
6,10 get vdata1 pict "99/99/99"
7,10 get vdata2 pict "99/99/99" VALID FUNPRAZO()
8,10 get vdata3 pict "99/99/99"
9,10 get vdata4 pict "99/99/99"
read
Eu estou querendo usa o VALID para o programa executar essa fotina e retorna ao proximo Get + sempre da erro.
A FUNPRAZO é uma rotina para mostrar no proximo campo o seguinte:
vdata3=vdata2+15
8,10 say vdata3 pict "99/99/99"
E continuar digitando os proximos GEtS.
Estou fazendo um programa usando um DBU, com opções para fazer INCLUSÃO E ALTERAÇÃO.
Minha rotina é a seguine:
Essa Tela é de INCLUSÃO
6,10 get vdata1 pict "99/99/99"
7,10 get vdata2 pict "99/99/99" VALID FUNPRAZO()
8,10 get vdata3 pict "99/99/99"
9,10 get vdata4 pict "99/99/99"
read
Eu estou querendo usa o VALID para o programa executar essa fotina e retorna ao proximo Get + sempre da erro.
A FUNPRAZO é uma rotina para mostrar no proximo campo o seguinte:
vdata3=vdata2+15
8,10 say vdata3 pict "99/99/99"
E continuar digitando os proximos GEtS.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
pjtb, veja assim se resolve pra você:
Um clip-abraço :)Pos
Código: Selecionar todos
CLS
SET CONFIRM ON
SET DATE TO BRITISH
SET CENTURY OFF
vdata1:=DATE()
vdata2:=DATE()
vdata3:=DATE()
vdata4:=DATE()
@ 06,10 get vdata1 pict "@D"
@ 07,10 get vdata2 pict "@D"
@ 08,10 get vdata3 pict "@D" WHEN FUNPRAZO(vdata2)
@ 09,10 get vdata4 pict "@D"
read
FUNCTION FUNPRAZO(VDTA)
IF !EMPTY(VDTA)
KEYBOARD DTOC(VDTA+15)+CHR(1)
ENDIF
RETURN .T.Melhor que usar o comando Keyboard seria manipular a lista Get. Há vários exemplos disso no fórum.
[]'s
Maligno
http://www.buzinello.com/prg
[]'s
Maligno
http://www.buzinello.com/prg
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Sem falar que usando o buffer do teclado pode dar uma encrespada, dependendo do que tiver sido digitado antes.É a minha idéia é como acostumo dizer... KAMIKAZE... hehehe
Sim. E até seria aconselhável montar um comando só pra modificar campos "on-the-fly". Isso às vezes é necessário. Meu getsys também é modificado. Particularmente, eu faria algo do tipo modGet "CPO1" var "texto" color 23, onde o campo chamado "CPO1" teria seu conteúdo modificado para "texto" e sua cor modificada para 23. É só um exemplo. Tem mais coisas.Essa manipulação que você se refere poderia ser no GETSYS ?
Já modifiquei tanto o interior do Clipper que às vezes eu não sei mais reponder nada a respeito de coisas básicas. Por isso nem coloquei um exemplo de código pro colega. Já esqueci um monte de coisa.
Se você me perguntar algo básico sobre TBrowse(), por exemplo, não vou saber te responder. Meu TBrowse é todo modificado e muito mais fácil de usar. Já até usei esse básico um dia. Mas só pra fazer meu sub-sistema. Depois, com o tempo, esqueci quase tudo.
[]'s
Maligno
http://www.buzinello.com/prg
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
sygecom:
O que o Pablo postou não é o que o pjtb fez no seu sistema. :?
pjtb:
Poste a função para poder-mos verificar o funcionamento. Vc falou que estava dando erro nela.
O que o Pablo postou não é o que o pjtb fez no seu sistema. :?
pjtb:
Poste a função para poder-mos verificar o funcionamento. Vc falou que estava dando erro nela.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Bem vou postar outra forma, talvez um pouco menos arriscada que aquele que postei, pelo ponto de vista que o MALIGNO apresentou (ele tem razão) este não era a forma mais apropriada:
E aclaro ainda mais, que esta outra, também não é a forma mais "acadêmica" de se fazer essa atribuição. A melhor idéia seria atribuir´direto do próprio objeto:GET, não é mesmo ?. Mas deixei isso para aqueles que tem maior intimidade com o objeto... (heheh parece até gozação... hehehe).
As duas soluções que apresentei, fucnionam porque eu mesmo testei antes de postar-las. Sintam-se a vontade, se alguém achou outra forma de fazé-lo.
Assim TODOS aprendemos um pouco mais... não acham ?
Eiii pjtb... nos diga se deu certo ou se você esperava esse resultado. O que eu postei agora ultimo, serve para te dar i´deia que você poderá re-atribuir as varáveis em cadéia.
Um clip-abraço. :)Pos
Código: Selecionar todos
CLS
SET CONFIRM ON
SET DATE TO BRITISH
SET CENTURY OFF
vdata1:=DATE()
vdata2:=DATE()
vdata3:=DATE()
vdata4:=DATE()
@ 06,10 get vdata1 pict "@D" WHEN FUNPRAZO(vdata1,2)
@ 07,10 get vdata2 pict "@D" WHEN FUNPRAZO(vdata2,3)
@ 08,10 get vdata3 pict "@D" WHEN FUNPRAZO(vdata3,4)
@ 09,10 get vdata4 pict "@D"
read
FUNCTION FUNPRAZO(VDTA,VQUAL)
IF !EMPTY(VDTA)
// KEYBOARD DTOC(VDTA+15)+CHR(1)
DO CASE
CASE VQUAL=2
VDATA2:=VDTA+15
CASE VQUAL=3
VDATA3:=VDTA+15
CASE VQUAL=4
VDATA4:=VDTA+15
ENDCASE
ENDIF
RETURN .T.As duas soluções que apresentei, fucnionam porque eu mesmo testei antes de postar-las. Sintam-se a vontade, se alguém achou outra forma de fazé-lo.
Assim TODOS aprendemos um pouco mais... não acham ?
Eiii pjtb... nos diga se deu certo ou se você esperava esse resultado. O que eu postei agora ultimo, serve para te dar i´deia que você poderá re-atribuir as varáveis em cadéia.
Um clip-abraço. :)Pos
Pablo!! se eu usar dessa maneira q vc postou, na linha onde esta a interrogação é possivel lê outro dbf e trazer o campo CODIGO e volta para o proximo GET.
Esses DBF são de areas diferentes.
CLS
SET CONFIRM ON
SET DATE TO BRITISH
SET CENTURY OFF
vdata1:=DATE()
vdata2:=DATE()
vdata3:=DATE()
vdata4:=DATE()
@ 06,10 get vdata1 pict "@D" WHEN FUNPRAZO(vdata1,2)
@ 07,10 get vCODIGO pict "99999" WHEN FUNCLIENT(vCODIGO)
@ 08,10 get vdata3 pict "@D" WHEN FUNPRAZO(vdata3,4)
@ 09,10 get vdata4 pict "@D"
read
FUNCTION FUNPRAZO(VDTA,VQUAL)
IF !EMPTY(VDTA)
// KEYBOARD DTOC(VDTA+15)+CHR(1)
DO CASE
CASE VQUAL=2
VDATA2:=VDTA+15
CASE VQUAL=3
VDATA3:=VDTA+15
CASE VQUAL=4
VDATA4:=VDTA+15
ENDCASE
ENDIF
RETURN .T.
Esses DBF são de areas diferentes.
CLS
SET CONFIRM ON
SET DATE TO BRITISH
SET CENTURY OFF
vdata1:=DATE()
vdata2:=DATE()
vdata3:=DATE()
vdata4:=DATE()
@ 06,10 get vdata1 pict "@D" WHEN FUNPRAZO(vdata1,2)
@ 07,10 get vCODIGO pict "99999" WHEN FUNCLIENT(vCODIGO)
@ 08,10 get vdata3 pict "@D" WHEN FUNPRAZO(vdata3,4)
@ 09,10 get vdata4 pict "@D"
read
FUNCTION FUNPRAZO(VDTA,VQUAL)
IF !EMPTY(VDTA)
// KEYBOARD DTOC(VDTA+15)+CHR(1)
DO CASE
CASE VQUAL=2
VDATA2:=VDTA+15
CASE VQUAL=3
VDATA3:=VDTA+15
CASE VQUAL=4
VDATA4:=VDTA+15
ENDCASE
ENDIF
RETURN .T.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Acho que se você quer trazer o código de uma outra tabela, você pode fazer uma outra função (neste caso FUNCLIENT) exibir os nomes e trazer o código selecionado. Acho que é perfeitamente possível. Mas Qual é o resultado que você quer dar nessa edição do vcodigo no GET ?. Você quer primeiro exibir uma janela (tipo achoice, tbrowse ?) ou você pode simplesmente mudar de:
@ 07,10 get vCODIGO pict "99999" WHEN FUNCLIENT(vCODIGO)
para:
@ 07,10 get vCODIGO pict "99999" VALID FUNCLIENT(vCODIGO)
Desta forma, se o usuário digitar um código válido retorna .T. senão exibe uma janela. Eu acho que o normal é isso. Depende como você quer.
Um clip-abraço :)Pos
@ 07,10 get vCODIGO pict "99999" WHEN FUNCLIENT(vCODIGO)
para:
@ 07,10 get vCODIGO pict "99999" VALID FUNCLIENT(vCODIGO)
Desta forma, se o usuário digitar um código válido retorna .T. senão exibe uma janela. Eu acho que o normal é isso. Depende como você quer.
Um clip-abraço :)Pos
É exatamente isso q estou querendo, se o usuário digitar um código válido retorna .T. senão exibe uma janela. Estou usando Valid funclient(vcodigo).
O programa é em REDE e quando faço uma pesquisa dessas sempre da erro e não volta para o proximo GET.
Acho q tem problema com o modo de selecionar a area e sair.
Obs: estou usando um Dbedit, onde ao tecla uma certa tecla faço inclusão, essa opção abro uma janela de dessa janela aberta faço essa pesquisa de codigo de cliente onde digitando um codigo valido retorna .t. senão exibe uma outra janela.
O programa é em REDE e quando faço uma pesquisa dessas sempre da erro e não volta para o proximo GET.
Acho q tem problema com o modo de selecionar a area e sair.
Obs: estou usando um Dbedit, onde ao tecla uma certa tecla faço inclusão, essa opção abro uma janela de dessa janela aberta faço essa pesquisa de codigo de cliente onde digitando um codigo valido retorna .t. senão exibe uma outra janela.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná



