Execução infinita em estrutura de controle
Enviado: 02 Jul 2007 22:08
Olá, pessoal do forum
Estou com um problema na elaboração de um relatório, deveria estar abrindo o banco clientes e verificando se a conta é maior que 30000, e seguida deveria saltar os registros (sal_limite) quando forem exatamente igual a ZERO, ou maior que zero, ou seja, deveria pegar apenas as contas que tivessem o valor absoluto do campo SAL_LIMITE maior do que o valor campo Limite.
Estou usando a impressão em arquivo enquanto não descobro onde está o problema,
agora depois de mil e um testes está sendo impresso uma única conta [ a primeira conta da sequencia 30000 que possue o sal_lmite maior que limite ] de forma infinita (muitas linhas com a mesma coisa), o prn chegou a mais de 70mb, para ver o conteúdo estou tendo de finalizar na marra o sistema para que o arquivo não fique tão grande e possa se aberto pelo EDIT.
Mudando o enddo de lugar é gravado no prn a tela principal do programa.
Estou com um problema na elaboração de um relatório, deveria estar abrindo o banco clientes e verificando se a conta é maior que 30000, e seguida deveria saltar os registros (sal_limite) quando forem exatamente igual a ZERO, ou maior que zero, ou seja, deveria pegar apenas as contas que tivessem o valor absoluto do campo SAL_LIMITE maior do que o valor campo Limite.
Estou usando a impressão em arquivo enquanto não descobro onde está o problema,
agora depois de mil e um testes está sendo impresso uma única conta [ a primeira conta da sequencia 30000 que possue o sal_lmite maior que limite ] de forma infinita (muitas linhas com a mesma coisa), o prn chegou a mais de 70mb, para ver o conteúdo estou tendo de finalizar na marra o sistema para que o arquivo não fique tão grande e possa se aberto pelo EDIT.
Mudando o enddo de lugar é gravado no prn a tela principal do programa.
Código: Selecionar todos
CLEAR
mlinha = 66
mfolha = 1
mtotsal = 0.00
mdata = DATE()
mtipo = 0
USE CLIENTES INDEX ICLIENTE // indexado pelo nome
@10,01 SAY 'INFORME DATA LIMITE'
@10,21 GET mdata
@11,01 SAY 'INFORME TIPO'
@11,21 GET mtipo PICTURE '9'
@11,23 SAY '1 -> CARRETEIRO, 2 -> CLIENTES, 3 -> FUNCIONARIO'
READ
SET PRINTER TO SAL_TESTE
SET DEVICE TO PRINT
?? CHR(27) + CHR(15)
SEEK CLIENTES->CONTA
DO WHILE CLIENTES->CONTA = CONTA .AND. .NOT. EOF()
IF CONTA = '99998'
SKIP
LOOP
ENDIF
DO CASE
CASE mtipo = 1
IF VAL(CONTA) > 19999
SKIP
LOOP
ENDIF
CASE mtipo = 2
IF VAL(CONTA) > 30000 .OR. VAL(CONTA) < 20000
SKIP
LOOP
ENDIF
CASE mtipo = 3
IF VAL(CONTA) < 30000
SKIP
LOOP
ENDIF
CASE mtipo = 4
IF VAL(CONTA) < 1 .OR. VAL(CONTA) > 99998
SKIP
LOOP
ENDIF
ENDCASE
IF SAL_LIMITE == 0.00
SKIP
LOOP
ENDIF
IF SAL_LIMITE > 0.00
SKIP
LOOP
ENDIF
IF SAL_LIMITE < 0.00
IF (abs(SAL_LIMITE)) < LIMITE
SKIP
LOOP
ENDIF
ENDIF
IF mlinha > 50
@1,10 SAY '** RELATORIO ** '
@1,65 SAY 'FOLHA'
@1,69 SAY mfolha PICTURE '999'
@2,20 SAY 'RELACAO DE SALDO LIMITE ESTOURADO'
DO CASE
CASE mtipo = 1
@2,75 SAY 'CARRETEIROS'
CASE mtipo = 2
@2,75 SAY 'CLIENTES'
OTHERWISE
@2,75 SAY 'FUNCIONARIOS'
ENDCASE
@4,4 SAY 'CONTA'
@4,14 SAY 'NOME'
@4,50 SAY 'TIPO'
@4,86 SAY 'SALDO'
mfolha = mfolha + 1
mlinha = 5
ENDIF
@mlinha,4 SAY CONTA
@mlinha,10 SAY NOME
@mlinha,44 SAY TIPO
@mlinha,82 SAY -SAL_LIMITE PICTURE '9,999,999,999.99D'
mlinha = mlinha + 1
ENDDO
mtotsal = mtotsal + SAL_LIMITE
@mlinha,35 SAY 'T O T A L = >'
@mlinha,82 SAY -mtotsal PICTURE '9,999,999,999.99D'
SET PRINTER TO SAL_TESTE
SET DEVICE TO PRINT
?? CHR(27) + CHR(15)
USE
CLEAR
RETURN NIL