Página 1 de 3
problemas com DO WHILE e ALERT
Enviado: 06 Jun 2007 16:21
por Gelson
Olá pessoal do forum.
Tenho uma rotina que faz uma consulta e retorna se o limite cadastrado no campo da tabela clientes foi estourado, porém analisando o procedimento o correto seria a cada lançamento feito no programa aparecer uma caixa de alerta dizendo se o limite estourou, e em seguida quando for teclado ENTER o sistema continuar com os lançamentos na conta independente do estouro de limite.
1ª duvida ) na apostila que tenho e uso não achei muta coisa a repeito do alert , como faço para dizer em qual linha e coluna a caixa deve aparecer ?
2º duvida ) Tentei juntar os fontes para fazer o procedimento acima funcionar, depois de muitas e muitas tentativas cheguei em um ponto onde após o lançamento o sistema fica somando os valores a vida inteira. Não estou conseguindo ver onde meu DO WHILE está errado, ou se o problema é em outro lugar do fonte, seguindo a apostila que tenho parece que o mesmo foi finalizado certo.
Coloco abaixo o fonte, e desde já agradeço pela atenção.
Código: Selecionar todos
USE MOVIM INDEX IMOVIM,IMOVDOC,IMOVCON
SELECT 2
USE CLIENTES INDEX ICLIENTE
SELECT 3
USE HISTOR INDEX IHISTOR
mlimite = 0.00
mlinha = 7
msal_ini = 0.00
SELECT 2
msal_ini = SAL_INI
mdat_sal = DAT_INI
SELECT 1
DO WHILE mconta = CONTA .AND. DATA < mdata .AND. .NOT. EOF()
IF CT < 10
msal_ini = msal_ini - VALOR
ELSE
msal_ini = msal_ini + VALOR
ENDIF
mdat_sal = DATA
SKIP
ENDDO
DO WHILE .T.
SELECT 1
DO WHILE mconta = CONTA .AND. .NOT. EOF()
mdat_sal = DATA
mct = CT
SELECT 3
SEEK mct
IF EOF()
CLOSE ALL
RETURN
ENDIF
SELECT 1
IF CT < 10
msal_ini = msal_ini - VALOR
ELSE
msal_ini = msal_ini + VALOR
ENDIF
IF msal_ini < 0.00
@mlinha,55 SAY -msal_ini PICTURE '9,999,999,999.99D'
ELSE
@mlinha,55 SAY msal_ini PICTURE '9,999,999,999.99C'
ENDIF
ENDDO
ENDDO
ENDDO
SELECT 2
IF -msal_ini > LIMITE
ALERT (" LIMITE ESTOURADO !!! ")
ENDIF
CLEAR
CLOSE ALL
RETURN
***
Fonte inclusão de lançamentos
Código: Selecionar todos
CLEAR
mconta = SPACE(5)
mct = 0
mdoc = SPACE(10)
mdata = CTOD('01/01/00')
mdat_emi = CTOD(' / / ')
mvalor = 0.00
mresp = SPACE(1)
DO WHILE mdata # DATE()
@15,2 SAY 'DATA DO MOVIMENTO'
@15,24 GET mdata PICTURE ' / / '
READ
IF mdata # DATE()
@24,1 SAY 'DATA NAO CONFERE'
WAIT ', ENTER'
CLEAR
ENDIF
ENDDO
USE MOVIM INDEX IMOVIM,IMOVDOC,IMOVCON
SELECT 2
USE CLIENTES INDEX ICLIENTE
SELECT 3
USE HISTOR INDEX IHISTOR
SELECT 4
USE DATAS
GO BOTTOM
IF mdata > DATA_MOVIM
APPEND BLANK
REPLACE DATA_MOVIM WITH mdata
ENDIF
USE
DO CCCABP10
DO WHILE .T.
@7,0 CLEAR
@7,0 TO 22,79 DOUBLE
@6,10 SAY 'INCLUSAO DE MOVIMENTO'
@6,32 SAY 'DE '
@6,35 SAY mdata PICTURE ' / / '
@23,3 SAY 'INFORME 99999 NO CODIGO PARA ENCERRAR'
@9,2 SAY 'CODIGO DO CORRENTISTA'
@9,24 GET mconta
READ
IF mconta = '99999'
EXIT
ENDIF
IF mconta = '99998'
@24,1 SAY 'ESTA CONTA NAO ACEITA INCLUSAO'
WAIT ', ENTER PARA CONTINUAR'
CLEAR
DO CCCABP10
LOOP
ENDIF
SELECT 2
SEEK mconta
IF EOF()
@24,1 SAY 'CONTA NAO CADASTRADA'
WAIT ', ENTER'
CLEAR
DO CCCABP10
LOOP
ENDIF
IF DESATIVADA = 'S'
@24,1 SAY 'CONTA DESATIVADA'
WAIT 'ENTER'
CLEAR
DO CCCABP10
LOOP
ENDIF
mdat_atu = DAT_ATU
@9,36 SAY NOME
@11,2 SAY 'CODIGO DE TRANSACAO'
@11,24 GET mct PICTURE '99'
READ
IF mct = 21
LOOP
ENDIF
SELECT 3
SEEK mct
IF EOF()
@24,1 SAY 'CODIGO NAO CADASTRADO'
WAIT ', ENTER'
CLEAR
DO CCCABP10
LOOP
ENDIF
@11,36 SAY HISTORICO
@13,02 SAY 'DATA EMISSAO'
mdat_emi = mdata
@13,24 GET mdat_emi
@15,2 SAY 'DOCUMENTO'
@15,24 GET mdoc
READ
IF mdat_emi <= mdat_atu
@24,1 SAY 'JA EMITIMOS EXTRATO ALEM DESTA DATA'
WAIT ', ENTER'
CLEAR
DO CCCABP10
LOOP
ENDIF
@17,2 SAY 'VALOR'
@17,24 GET mvalor PICTURE '9,999,999,999.99'
READ
@21,3 SAY 'CONFIRME -> S'
@21,24 GET mresp
READ
IF mresp # 'S'
LOOP
ENDIF
SELECT 1
APPEND BLANK
REPLACE CONTA WITH mconta
REPLACE CT WITH mct
REPLACE DOC WITH mdoc
REPLACE DATA WITH mdat_emi
REPLACE DAT_LANC WITH mdata
REPLACE VALOR WITH mvalor
SELECT 2
IF mct < 11
REPLACE SAL_ATU2 WITH SAL_ATU2 - mvalor
ELSE
REPLACE SAL_ATU2 WITH SAL_ATU2 + mvalor
ENDIF
mct = 0
mdoc = SPACE(10)
mvalor = 0.00
@7,1 CLEAR
Enviado: 06 Jun 2007 20:41
por sygecom
Buenas...
Tenho uma rotina que faz uma consulta e retorna se o limite cadastrado no campo da tabela clientes foi estourado
Tche, não entendi nd....mas se for por causa de campo pequeno aumenta o Limite no campo....explica melhor como funciona isso ?
1ª duvida ) na apostila que tenho e uso não achei muta coisa a repeito do alert , como faço para dizer em qual linha e coluna a caixa deve aparecer ?
Tche, não entendi tb. bem o que vc quer fazer com o alert() mas ele é bem simples mesmo....e define o centro da tela para aparecer a mensagem...mais detalhes no link abaixo:
https://pctoledo.org/forum/viewto ... ight=alert
2º duvida ) Tentei juntar os fontes para fazer o procedimento acima funcionar, depois de muitas e muitas tentativas cheguei em um ponto onde após o lançamento o sistema fica somando os valores a vida inteira. Não estou conseguindo ver onde meu DO WHILE está errado, ou se o problema é em outro lugar do fonte, seguindo a apostila que tenho parece que o mesmo foi finalizado certo.
Tche, dah uma olhada no seu codigo abaixo e tente colocar um INKEY(0) com algumas mensagens na TELA antes do INKEY(0) para ver onde ele esta se perdendo....
Código: Selecionar todos
CLEAR
mconta = SPACE(5)
mct = 0
mdoc = SPACE(10)
mdata = CTOD('01/01/00')
mdat_emi = CTOD(' / / ')
mvalor = 0.00
mresp = SPACE(1)
DO WHILE mdata # DATE()
@15,2 SAY 'DATA DO MOVIMENTO'
@15,24 GET mdata PICTURE ' / / '
READ
IF mdata # DATE()
@24,1 SAY 'DATA NAO CONFERE'
WAIT ', ENTER'
CLEAR
ENDIF
ENDDO
SELECT 1
USE MOVIM INDEX IMOVIM,IMOVDOC,IMOVCON
SELECT 2
USE CLIENTES INDEX ICLIENTE
SELECT 3
USE HISTOR INDEX IHISTOR
SELECT 4
USE DATAS
GO BOTTOM
IF mdata > DATA_MOVIM
APPEND BLANK
REPLACE DATA_MOVIM WITH mdata
ENDIF
USE
DO CCCABP10
DO WHILE .T.
@7,0 CLEAR
@7,0 TO 22,79 DOUBLE
@6,10 SAY 'INCLUSAO DE MOVIMENTO'
@6,32 SAY 'DE '
@6,35 SAY mdata PICTURE ' / / '
@23,3 SAY 'INFORME 99999 NO CODIGO PARA ENCERRAR'
@9,2 SAY 'CODIGO DO CORRENTISTA'
@9,24 GET mconta
READ
IF mconta = '99999'
EXIT
ENDIF
IF mconta = '99998'
@24,1 SAY 'ESTA CONTA NAO ACEITA INCLUSAO'
WAIT ', ENTER PARA CONTINUAR'
CLEAR
DO CCCABP10 //CHAMA OUTRA FUNÇÃO
LOOP
ENDIF
SELECT 2
SEEK mconta
IF EOF()
@24,1 SAY 'CONTA NAO CADASTRADA'
WAIT ', ENTER'
CLEAR
DO CCCABP10 //CHAMA OUTRA FUNÇÃO
LOOP
ENDIF
IF DESATIVADA = 'S'
@24,1 SAY 'CONTA DESATIVADA'
WAIT 'ENTER'
CLEAR
DO CCCABP10 //CHAMA OUTRA FUNÇÃO
LOOP
ENDIF
mdat_atu = DAT_ATU
@9,36 SAY NOME
@11,2 SAY 'CODIGO DE TRANSACAO'
@11,24 GET mct PICTURE '99'
READ
IF mct = 21 // QUE ISSO QUE CONTA É ESSA ?
LOOP
ENDIF
SELECT 3
SEEK mct
IF EOF()
@24,1 SAY 'CODIGO NAO CADASTRADO'
WAIT ', ENTER'
CLEAR
DO CCCABP10 //CHAMA OUTRA FUNÇÃO
LOOP
ENDIF
@11,36 SAY HISTORICO
@13,02 SAY 'DATA EMISSAO'
mdat_emi = mdata
@13,24 GET mdat_emi
@15,2 SAY 'DOCUMENTO'
@15,24 GET mdoc
READ
IF mdat_emi <= mdat_atu
@24,1 SAY 'JA EMITIMOS EXTRATO ALEM DESTA DATA'
WAIT ', ENTER'
CLEAR
DO CCCABP10 //CHAMA OUTRA FUNÇÃO
LOOP
ENDIF
@17,2 SAY 'VALOR'
@17,24 GET mvalor PICTURE '9,999,999,999.99'
READ
@21,3 SAY 'CONFIRME -> S'
@21,24 GET mresp
READ
IF mresp # 'S'
LOOP
ENDIF
SELECT 1
APPEND BLANK
REPLACE CONTA WITH mconta
REPLACE CT WITH mct
REPLACE DOC WITH mdoc
REPLACE DATA WITH mdat_emi
REPLACE DAT_LANC WITH mdata
REPLACE VALOR WITH mvalor
SELECT 2
IF mct < 11
REPLACE SAL_ATU2 WITH SAL_ATU2 - mvalor
ELSE
REPLACE SAL_ATU2 WITH SAL_ATU2 + mvalor
ENDIF
mct = 0
mdoc = SPACE(10)
mvalor = 0.00
@7,1 CLEAR
*******
*** FONTE PARA VERIFICAÇÃO DE ESTOURO DE LIMITE ***
USE MOVIM INDEX IMOVIM,IMOVDOC,IMOVCON
SELECT 2
USE CLIENTES INDEX ICLIENTE
SELECT 3
USE HISTOR INDEX IHISTOR
mlimite = 0.00
mlinha = 7
msal_ini = 0.00
SELECT 2
msal_ini = SAL_INI
mdat_sal = DAT_INI
SELECT 1
DO WHILE mconta = CONTA .AND. DATA < mdata .AND. .NOT. EOF()
IF CT < 10
msal_ini = msal_ini - VALOR
ELSE
msal_ini = msal_ini + VALOR
ENDIF
mdat_sal = DATA
SKIP
ENDDO
DO WHILE .T.
SELECT 1
DO WHILE mconta = CONTA .AND. .NOT. EOF()
mdat_sal = DATA
mct = CT
SELECT 3
SEEK mct
IF EOF()
CLOSE ALL
RETURN
ENDIF
SELECT 1
IF CT < 10
msal_ini = msal_ini - VALOR
ELSE
msal_ini = msal_ini + VALOR
ENDIF
IF msal_ini < 0.00
@mlinha,55 SAY -msal_ini PICTURE '9,999,999,999.99D'
ELSE
@mlinha,55 SAY msal_ini PICTURE '9,999,999,999.99C'
ENDIF
ENDDO
ENDDO
EXIT
ENDDO
SELECT 2
IF -msal_ini > LIMITE
ALERT (" LIMITE ESTOURADO !!! ")
ENDIF
CLEAR
CLOSE ALL
RETURN
Obs: Observe que coloquei um EXIT no ultimo ENDDO...para ele sair, outra coisa procure colocar os Fontes dentro de Code[] aqui no Forum...
Abraços
Leonardo Machado
Enviado: 06 Jun 2007 21:07
por Gelson
Olá, sygecom . tudo bem ?
Quanto ao alert, pensei que tinha como determinar um lugar qualquer para ele, sem ser o meio da tela. Neste caso o que você me orienta a fazer ?
Meu dbf clientes possue um campo chamado limite, onde cadastro um valor qualquer, e a medida que vou fazendo lancamentos no sistema e vai gravando estes lançamento em outro dbf chamando movim. Estes lançamentos podem ser creditos ou debitos. Tenho uma opção de consulta de me retorna uma posição do saldo, e me diz que o mesmo está estourado ou não. Só que estou tentando colocar está opção para funcionar no meu de inclusão de lançamentos.
Assim toda vez que o toda vez que a inclusão for confirmada ele deveria pegar os lançamentos daquela conta e olhar o saldo até na aquela data e me dizer que o limite está estourado ou não e depois disto continuar com os lançamentos normalmente.
obrigado pela atenção,
Enviado: 06 Jun 2007 21:22
por Eolo
Gelson,
Faça 2 campos no clientes.dbf: LIMITE e USADO. Em LIMITE, vc registra até onde a coisa pode ir e, em USADO, vc vai debitando ou creditando o valor dos lançamentos do movimento, aí ele mostra o "SALDO".
Código: Selecionar todos
Limite=$100
Dia Lançamento USADO
1 D $20 $ 20 Ok
2 D $35 $ 55 Ok
3 C $10 $ 45 Ok
4 D $70 $115 Opa! Limite vai estourar...
Sem esse campo, imagina vc ter que vasculhar o movimento inteiro, a cada lançamento, pra achar o novo saldo?
Enviado: 06 Jun 2007 22:06
por sygecom
Gelson:
Quanto ao alert, pensei que tinha como determinar um lugar qualquer para ele, sem ser o meio da tela. Neste caso o que você me orienta a fazer ?
Tche, vc viu o link do Colega Marcelo.....onde ele mostra um alert personalizado....vai lah e confira...
Obs: O que o Nosso colega Eolo postou é a melhor solução pra vc !!! outra coisa testo a alteração que fiz no seu codigo ?
Abraços
Leonardo Machado
Enviado: 06 Jun 2007 23:10
por Gelson
Olá amigos,
O campo limite eu já tinha, criei o campo sal_limite, quando é lançando alguma despesas, ou seja, débito o sistema grava com um sinal de menos na frente do valor.
Coloquei o limite de 50,00 em um cadastro de qualquer e lancei uma despesa de 50,01 era para ter aparecido o alerta de estourado, mas o sistema analisa -50,00 como sendo menor que 50,00 por isso não considera como estourado o limite. Com isso aparece o alerta de limite bom. Tem como contornar isto ?
Quanto ao fonte testei mas deu a mesma coisa, coisa mais doida, limpei a tabela chamada movim, e ele continuou somando sem parar, mais de 10 minutos somando, tem algo muito errado com meu do while mesmo.
Mas fazer como você disse e seguir a orientação do Eolo, fico muito grato pela atenção de vocês dois.
meu fonte agora esta desta forma:
[CLEAR
mconta = SPACE(5)
mct = 0
mdoc = SPACE(10)
mdata = CTOD('01/01/00')
mdat_emi = CTOD(' / / ')
mvalor = 0.00
mresp = SPACE(1)
DO WHILE mdata # DATE()
@15,2 SAY 'DATA DO MOVIMENTO'
@15,24 GET mdata PICTURE ' / / '
READ
IF mdata # DATE()
@24,1 SAY 'DATA NAO CONFERE'
WAIT ', ENTER'
CLEAR
ENDIF
ENDDO
USE MOVIM INDEX IMOVIM,IMOVDOC,IMOVCON
SELECT 2
USE CLIENTES INDEX ICLIENTE
SELECT 3
USE HISTOR INDEX IHISTOR
SELECT 4
USE DATAS
GO BOTTOM
IF mdata > DATA_MOVIM
APPEND BLANK
REPLACE DATA_MOVIM WITH mdata
ENDIF
USE
DO CCCABP10
DO WHILE .T.
@7,0 CLEAR
@7,0 TO 22,79 DOUBLE
@6,10 SAY 'INCLUSAO DE MOVIMENTO'
@6,32 SAY 'DE '
@6,35 SAY mdata PICTURE ' / / '
@23,3 SAY 'INFORME 99999 NO CODIGO PARA ENCERRAR'
@9,2 SAY 'CODIGO DO CORRENTISTA'
@9,24 GET mconta
READ
IF mconta = '99999'
EXIT
ENDIF
IF mconta = '99998'
@24,1 SAY 'ESTA CONTA NAO ACEITA INCLUSAO'
WAIT ', ENTER PARA CONTINUAR'
CLEAR
DO CCCABP10
LOOP
ENDIF
SELECT 2
SEEK mconta
IF EOF()
@24,1 SAY 'CONTA NAO CADASTRADA'
WAIT ', ENTER'
CLEAR
DO CCCABP10
LOOP
ENDIF
IF DESATIVADA = 'S'
@24,1 SAY 'CONTA DESATIVADA'
WAIT 'ENTER'
CLEAR
DO CCCABP10
LOOP
ENDIF
mdat_atu = DAT_ATU
@9,36 SAY NOME
@11,2 SAY 'CODIGO DE TRANSACAO'
@11,24 GET mct PICTURE '99'
READ
IF mct = 21
LOOP
ENDIF
SELECT 3
SEEK mct
IF EOF()
@24,1 SAY 'CODIGO NAO CADASTRADO'
WAIT ', ENTER'
CLEAR
DO CCCABP10
LOOP
ENDIF
@11,36 SAY HISTORICO
@13,02 SAY 'DATA EMISSAO'
mdat_emi = mdata
@13,24 GET mdat_emi
@15,2 SAY 'DOCUMENTO'
@15,24 GET mdoc
READ
IF mdat_emi <= mdat_atu
@24,1 SAY 'JA EMITIMOS EXTRATO ALEM DESTA DATA'
WAIT ', ENTER'
CLEAR
DO CCCABP10
LOOP
ENDIF
@17,2 SAY 'VALOR'
@17,24 GET mvalor PICTURE '9,999,999,999.99'
READ
@21,3 SAY 'CONFIRME -> S'
@21,24 GET mresp
READ
IF mresp # 'S'
LOOP
ENDIF
SELECT 1
APPEND BLANK
REPLACE CONTA WITH mconta
REPLACE CT WITH mct
REPLACE DOC WITH mdoc
REPLACE DATA WITH mdat_emi
REPLACE DAT_LANC WITH mdata
REPLACE VALOR WITH mvalor
SELECT 2
IF mct < 11
REPLACE SAL_ATU2 WITH SAL_ATU2 - mvalor
ELSE
REPLACE SAL_ATU2 WITH SAL_ATU2 + mvalor
ENDIF
IF mct < 10
REPLACE SAL_LIMITE WITH SAL_LIMITE - mvalor
ELSE
REPLACE SAL_LIMITE WITH SAL_LIMITE + mvalor
ENDIF
mct = 0
mdoc = SPACE(10)
mvalor = 0.00
@7,1 CLEAR
ENDDO
*******
USE MOVIM INDEX IMOVIM,IMOVDOC,IMOVCON
SELECT 2
USE CLIENTES INDEX ICLIENTE
SELECT 3
USE HISTOR INDEX IHISTOR
mlimite = 0.00
mSAL_LIMITE = 0.00
SELECT 2
IF -mSAL_LIMITE > LIMITE
ALERT (" LIMITE ESTOURADO !!! ")
else
ALERT ( "### L I M I T E B O M ### ")
ENDIF
CLEAR
CLOSE ALL
RETURN
][/code]
Enviado: 07 Jun 2007 07:46
por Gelson
olá, amigos
quero apenas efetuar uma correção do meu post anterior.
de:
" Mas fazer como você disse e seguir a orientação do Eolo, fico muito grato pela atenção de vocês dois."
Para:
Mas realmente é melhor fazer como você disse e seguir a oientação do Eolo, é mais pratico rápido, pois evita a verificação de todos os lançamento"
Enviado: 07 Jun 2007 08:40
por Eolo
Coloquei o limite de 50,00 em um cadastro de qualquer e lancei uma despesa de 50,01 era para ter aparecido o alerta de estourado, mas o sistema analisa -50,00 como sendo menor que 50,00 por isso não considera como estourado o limite. Com isso aparece o alerta de limite bom. Tem como contornar isto ?
Gelson,
É só questão de usar o sinal certo. Olhe, a seguir, os desvios em 3 lançamentos: o primeiro, a débito, sem estouro do limite; o segundo, a crédito; o terceiro, a débito, com estouro do limite.
(ah: como o tamanho do campo USADO pode chegar a ser igual ao do LIMITE, faça-o maior em 1, para acomodar o sinal "-". Explicando: LIMITE=1000.00, tamanho 7/2. USADO=-1000.00, tamanho 8/2)
Código: Selecionar todos
* Lançamento 1
limite=50.00
usado=0,00
novo=-10.00 Débito (sinal negativo)
if novo<0 // Débito
if (abs(novo)>(limite+usado)) // (10.00 > (50.00+0.00)) = .F.
?"limite estourado"
else
* CAI AQUI *************************************
usado=usado+novo // usado = 0.00+-10.00 = -10.00
endi
else // Crédito
usado=usado+novo
endi
* Lançamento 2
limite=50.00
usado=-10,00
novo=5.00 Crédito (sinal positivo)
if novo<0
if (abs(novo)>(limite+usado))
?"limite estourado"
else
usado=usado+novo
endi
else
* CAI AQUI *************************************
usado=usado+novo // usado = -10,00+5.00 = -5.00
endi
* Lançamento 3
limite=50.00
usado=-5,00
novo=-45.01 Débito (sinal negativo)
if novo<0
if (abs(novo)>(limite+usado)) // (45.01 > (50.00+-5.00)) = .T.
* CAI AQUI *************************************
?"limite estourado"
else
usado=usado+novo
endi
else
usado=usado+novo
endi
Enviado: 07 Jun 2007 10:41
por Gelson
Eolo, obrigado por seu interesse em me ajudar.
Desde cedo quando vi seu post tenho tentado que muitas formas, lendo a apostila que tenho vi que o comando abs, serve para retornar um valor absoluto, e em cima do exemplo que você pôs tentei mudar as minhas linhas. Porém não sei se pelo fato de estar abrindo dois dbf, não tenho tido êxito.
O meu campo valor (que no seu ex: você chama de novo), fica em meu dbf chamado movim. Os meus campos limite e sal_limite fica em meu dbf chamado clientes. O Campo que a titulo de ex: você chama de usado, no meu dbf clientes chamo de sal_limite.
use movim index imovim, imovdoc, imovcon
select 2
use clientes index icliente
select 1
mvalor = 0.00
select 2
IF mvalor < 0.00 // tentei usando 0 (zero sem ponto e sem casas decimais
if (abs(mvalor) > (mlimite+msal_limite))
alert (" LIMITE ESTOURADO !!! ")
else
msal_limite=msal_limite+mvalor
endif
endif
enddo // para finalizar meu do while anterior
clear
close all
return
Desta forma o sistema não mostra nenhuma tela de alerta mesmo estourando o limite, tentei usando :
if (abs(mvalor) > (LIMITE+SAL_LIMITE)) e também não deu nada.
Enviado: 07 Jun 2007 12:21
por Eolo
Gelson, vamos voltar um pouco pra trás. Não adianta vc usar a função ABS() se vc ainda não sacou algumas outras coisas, importantes... Bão, vou parecer meio "chato", mas a intenção é boa. Vou ser meio "curto" neste primeiro post e aguardar uma resposta sua, certo? Aí vamos em frente.
select 1
use movim index imovim, imovdoc, imovcon
select 2
use clientes index icliente
Primeiro, vamos trocar isso aí pelo seguinte:
use movim index imovim, imovdoc, imovcon new
use clientes index icliente new
Por que? Pelo seguinte: a cláusula NEW ("nova", em inglês) vai abrir o DBF+NTX na próxima área de trabalho disponível, seja ela qual for, usando o nome como ALIAS (a não ser que outro seja definido). Com isso, vc não precisa esquentar em definir SELE 1, SELE 2 etc. Para se referir ao conteúdo de um campo em uma área de trabalho qualquer, basta fazer, por exemplo, "clientes->nome".
ALIAS? Área de trabalho? "->"?
Que p* é essa?
Diz aí se até aqui tá tranquilo. Aí vamos em frente.
Enviado: 07 Jun 2007 13:01
por Gelson
ok, Eolo .
Realmente tem muita coisa que não saquei ainda, fico grato pela paciência.
Fiz a mudança conforme seu post.
Enviado: 07 Jun 2007 14:00
por Eolo
Gelson,
Então, continuando. Se vc fez...
use movim index imovim, imovdoc, imovcon new
use clientes index icliente new
... então, de qualquer lugar, vc pode ver o conteúdo de um campo fazendo o seguinte:
movim->data // mostra o campo DATA do movim.dbf
clientes->nome // mostra o campo NOME do clientes.dbf
Certo? Tá claro?
Enviado: 07 Jun 2007 14:06
por Eolo
Sempre que vc ver algo do tipo "clientes->nome", vc pode entender como: "Clipper: vá na área de trabalho onde o arquivo CLIENTES.dbf está aberto e traga o conteúdo do campo NOME, onde o PONTEIRO estiver...".
Ponteiro? O que é o ponteiro? Eu num sei. Agora vc, Gelson, explica pra mim!... eh eh eh
Enviado: 07 Jun 2007 14:38
por Gelson
De acordo com minha apostila ponteiro logico serve para verificar o inicio ou fim de um registro. Realmente trás a ideia de algo que marca no banco um ponto incial ou final.
Enviado: 07 Jun 2007 14:47
por Gelson
Eolo,
Deixe-me lhe fazer uma pergunta.
IF sal_limite < 0
IF (abs(sal_limite)) > limite
ALERT (" LIMITE ESTOURADO !!! ")
endif
endif
ou seja, quando o valor no campo sal_limite for negativo, e pega o valor absoluto e compara com o limite.
-50,01, então ele deveria pegar 50,01 > 50,00 e acusar um estouro.
não seria isto ?
mas tentei assim também e não deu . Porque ?