Problema com Get e comando VALID

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

pjtb
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 02 Ago 2004 12:08

Problema com Get e comando VALID

Mensagem por pjtb »

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

pjtb, veja assim se resolve pra você:

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.
Um clip-abraço :)Pos
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

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

É a minha idéia é como acostumo dizer... KAMIKAZE... hehehe :D

Essa manipulação que você se refere poderia ser no GETSYS ?
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

É a minha idéia é como acostumo dizer... KAMIKAZE... hehehe :D
Sem falar que usando o buffer do teclado pode dar uma encrespada, dependendo do que tiver sido digitado antes.
Essa manipulação que você se refere poderia ser no GETSYS ?
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.
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
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Poste aqui a sua função FUNPRAZO() .
"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}
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Gvc, de uma olhada com calma que vc acha o Pablo postou !!!

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 »

Mas pjtb, funcionou ou não funcionou ?
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

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. :P
"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}
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 »

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:

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.
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
pjtb
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 02 Ago 2004 12:08

Mensagem por pjtb »

Pessoal fico muito grato!!!! Funcionou blz Pablo

Agradeço a todos
pjtb
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 02 Ago 2004 12:08

Mensagem por pjtb »

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

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
pjtb
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 02 Ago 2004 12:08

Mensagem por pjtb »

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

Colega pjtb, você não poderia postar funclient(vcodigo) aqui (em forma de "CODE") para nós analisarmos e corregir seu fonte ?.

Mas por favor, utilize o recurso "Code" na hora de postar o seu código.
Responder