Página 1 de 1

Criar Relatórios

Enviado: 26 Nov 2005 11:29
por ElvioCand
Amigos do Forum, estou tentando executar o exercício abaixo, porém o mesmo só fica no loop, código inicial, código final e confirma impressão.
Onde está o erro?
Grato
Elvio.

Este exercício está nas páginas 34, 35 e 36 da apostila copiada do site.
Os exercícios anteriores funcionaram corretamente.

CLEAR
SET DATE BRITISH
SET CENTURY ON
SET CONFIRM ON
BORDA=CHR(201)+CHR(205)+CHR(187)+CHR(186)+;
CHR(188)+CHR(205)+CHR(200)+CHR(186)+CHR(176)
SELECT 1
USE AGENDA
IF !FILE("INDIC1.NTX")
INDEX ON STR(CODIGO,3,0) TO INDIC1
ENDIF
SET INDEX TO INDIC1
SET COLOR TO "R/W"
@ 1,1,24,79 BOX BORDA
DO WHILE .T.
nCODIGOi = 0
nCODIGOf = 0
cIMP = "N"
SET COLOR TO "R/W"
@ 4,4 CLEAR TO 21,76
@ 4,4 TO 21,76 DOUBLE
@ 6,30 SAY "AGENDA DE ENDEREÇOS"
@ 8,8 SAY "CÓDIGO INICIAL: " GET nCODIGO PICT "999" VALID(nCODIGOi>0)
READ
IF LASTKEY() = 27
EXIT
ENDIF
GO TOP
SEEK STR(nCODIGOi,3,0)
IF !FOUND()
TONE(400,15)
@ 8,32 SAY "NÃO CADASTRADO"
INKEY(0)
LOOP
ENDIF
@ 8,32 SAY NOME
@ 9,8 SAY "CÓDIGO FINAL: " GET nCODIGOf PICT "999" VALID(nCODIGOf>=nCODIGOi)
READ
IF LASTKEY() = 27
EXIT
ENDIF
GO TOP
SEEK STR(nCODIGOf,3,0)
IF !FOUND()
TONE(400,15)
@ 9,32 SAY "NÃO CADASTRADO"
INKEY(0)
LOOP
ENDIF
@ 9,32 SAY NOME
@ 11,8 SAY "CONFIRMA IMPRESSÃO?" GET cIMP PICT "@!" VALID(cIMP$"SN")
READ
IF LASTKEY() = 27
IF cIMP = "S"
EXIT
ENDIF

DO WHILE .T.
IF !ISPRINTER()
TONE(400,15)
@ 13,8 SAY "PREPARE A IMPRESSORA - pressione qualauer tecla"
TEK = INKEY(0)
IF TEK = 27
EXIT
ENDIF
LOOP
ENDIF
SET PRINTER TO LPT1
SET DEVICE TO PRINTER
GO TOP
SEEK STR(nCODIGOi,3,0)
VCAB = .T.
DO WHILE !EOF()
IF CODIGO = nCODIGOf
EXIT
ENDIF
IF VCAB
@ 00,00 SAY "NOME DA SUA EMPRESA"
@ 01,00 SAY "AGENDA DE ENDEREÇOS"
@ 02,00 SAY REPLICATE("-",80)
VCAB = .F.
ENDIF
@ PROW()+1,02 SAY "CÓDIGO: "
.
.
.
.
.
.
@ PROW()+1,00 SAY REPLICATE("-",80)
IF PROW() > 50
VCAB .T.
ENDIF
SKIP
ENDDO
EJECT
SET DEVICE TO SCREEN
SET PRINTER TO
EXIT
ENDDO
ENDIF
ENDDO
CLOSE DATABASE
CLEAR
RETURN

Enviado: 26 Nov 2005 22:56
por janio
Amigo,

Fiz algumas alterações que achei necessárias.... veja se funciona

Código: Selecionar todos

CLEAR 
SET DATE BRITISH 
SET CENTURY ON 
SET CONFIRM ON 
BORDA=CHR(201)+CHR(205)+CHR(187)+CHR(186)+; 
CHR(188)+CHR(205)+CHR(200)+CHR(186)+CHR(176) 

SELECT 1 
USE AGENDA 
IF !FILE("INDIC1.NTX") 
   INDEX ON STR(CODIGO,3,0) TO INDIC1 
ENDIF 

SET INDEX TO INDIC1 

SET COLOR TO "R/W" 
@ 1,1,24,79 BOX BORDA 

DO WHILE .T. 
   nCODIGOi = 0 
   nCODIGOf = 0 
   cIMP     = "N" 

   SET COLOR TO "R/W" 
   @ 4,4 CLEAR TO 21,76 
   @ 4,4 TO 21,76 DOUBLE 
   @ 6,30 SAY "AGENDA DE ENDEREÇOS" 
   @ 8,8 SAY "CÓDIGO INICIAL: " GET nCODIGOi PICT "999" VALID(nCODIGOi>0) 
   READ 
 
      IF LASTKEY() = 27 
         RETURN .T.
      ENDIF  

   GO TOP 
   SEEK STR(nCODIGOi,3,0) 
   IF !FOUND() 
      TONE(400,15) 
      @ 8,32 SAY "NÃO CADASTRADO" 
      INKEY(0) 
      LOOP 
   ENDIF 

   @ 8,32 SAY NOME 
   @ 9,8 SAY "CÓDIGO FINAL: " GET nCODIGOf PICT "999" VALID(nCODIGOf>=nCODIGOi) 
   READ 
 
      IF LASTKEY() = 27 
         EXIT 
      ENDIF  

   GO TOP 
   SEEK STR(nCODIGOf,3,0) 
   IF !FOUND() 
      TONE(400,15) 
      @ 9,32 SAY "NÃO CADASTRADO" 
      INKEY(0) 
      LOOP 
   ENDIF 

   @ 9,32 SAY NOME 
   @ 11,8 SAY "CONFIRMA IMPRESSÃO?" GET cIMP PICT "@!" VALID(cIMP$"SN") 
   READ 

   IF LASTKEY() = 27 .OR. cIMP = "N"
      LOOP
   ENDIF 

   IF cIMP = "S" 
      DO WHILE .T. 
         IF !ISPRINTER() 
            TONE(400,15) 
            @ 13,8 SAY "PREPARE A IMPRESSORA - pressione qualauer tecla" 
            TEK = INKEY(0) 

            IF TEK = 27 
               EXIT 
            ENDIF  
            LOOP 

         ENDIF 

         SET PRINTER TO LPT1 
         SET DEVICE TO PRINTER 

         GO TOP 
         SEEK STR(nCODIGOi,3,0) 

         VCAB = .T. 
         DO WHILE !EOF() 

            IF CODIGO > nCODIGOf 
               EXIT 
            ENDIF 

            IF VCAB = .T.
               @ 00,00 SAY "NOME DA SUA EMPRESA" 
               @ 01,00 SAY "AGENDA DE ENDEREÇOS" 
               @ 02,00 SAY REPLICATE("-",80) 
               VCAB = .F. 
            ENDIF 
           
           @ PROW()+1,02 SAY "CÓDIGO: " 
           . 
           . 
           . 
           . 
           . 
           . 

           @ PROW()+1,00 SAY REPLICATE("-",80) 
           IF PROW() > 50 
              VCAB = .T. 
           ENDIF 
           DBSKIP()
         ENDDO 

         EJECT 
         SET DEVICE TO SCREEN 
         SET PRINTER TO 
      ENDDO 
   ENDIF 
ENDDO 
CLOSE DATABASE 
CLEAR 
Janio

Criar Relatórios

Enviado: 30 Nov 2005 08:42
por ElvioCand
Amigo Janio, fiz as alterações, porém o programa continua no mesmo loop. O Clipper que utilizo é o 5.3.
Grato
Elvio

Enviado: 30 Nov 2005 16:16
por janio
Pode fazer agora que funciona.... dessa vez eu testei!

Código: Selecionar todos

CLEAR 
SET DATE BRITISH 
SET CENTURY ON 
SET CONFIRM ON 
BORDA=CHR(201)+CHR(205)+CHR(187)+CHR(186)+; 
CHR(188)+CHR(205)+CHR(200)+CHR(186)+CHR(176) 

SELECT 1 
USE AGENDA 
IF !FILE("INDIC1.NTX") 
   INDEX ON STR(CODIGO,3,0) TO INDIC1 
ENDIF 

SET INDEX TO INDIC1 

SET COLOR TO "R/W" 
@ 1,1,24,79 BOX BORDA 

DO WHILE .T. 
   nCODIGOi = 0 
   nCODIGOf = 0 
   cIMP     = "N" 

   SET COLOR TO "R/W" 
   @ 4,4 CLEAR TO 21,76 
   @ 4,4 TO 21,76 DOUBLE 
   @ 6,30 SAY "AGENDA DE ENDEREÇOS" 
   @ 8,8 SAY "CÓDIGO INICIAL: " GET nCODIGOi PICT "999" VALID(nCODIGOi>0) 
   READ 
 
      IF LASTKEY() = 27 
         RETURN .T.
      ENDIF  

   GO TOP 
   SEEK STR(nCODIGOi,3,0) 
   IF !FOUND() 
      TONE(400,15) 
      @ 8,32 SAY "NÃO CADASTRADO" 
      INKEY(0) 
      LOOP 
   ENDIF 

   @ 8,32 SAY NOME 
   @ 9,8 SAY "CÓDIGO FINAL: " GET nCODIGOf PICT "999" VALID(nCODIGOf>=nCODIGOi) 
   READ 
 
      IF LASTKEY() = 27 
         EXIT 
      ENDIF  

   GO TOP 
   SEEK STR(nCODIGOf,3,0) 
   IF !FOUND() 
      TONE(400,15) 
      @ 9,32 SAY "NÃO CADASTRADO" 
      INKEY(0) 
      LOOP 
   ENDIF 

   @ 9,32 SAY NOME 
   @ 11,8 SAY "CONFIRMA IMPRESSÃO?" GET cIMP PICT "@!" VALID(cIMP$"SN") 
   READ 

   IF LASTKEY() = 27 .OR. cIMP = "N"
      LOOP
   ENDIF 

   IF cIMP = "S" 
      DO WHILE .T. 
         IF !ISPRINTER() 
            TONE(400,15) 
            @ 13,8 SAY "PREPARE A IMPRESSORA - pressione qualauer tecla" 
            TEK = INKEY(0) 

            IF TEK = 27 
               EXIT 
            ENDIF  
            LOOP 

         ENDIF 

         SET PRINT ON 
         SET PRINTER TO LPT1
         SET DEVICE TO PRINTER 
         SET CONSOLE OFF

         vCAB = .T. 

         GO TOP 
         DBSEEK( STR(nCODIGOi,3,0) )
         DO WHILE !EOF() 

            IF CODIGO > nCODIGOf 
               EXIT 
            ENDIF 

            IF vCAB = .T.
               @ 00,00 SAY "NOME DA SUA EMPRESA" 
               @ 01,00 SAY "AGENDA DE ENDERECOS" 
               @ 02,00 SAY REPLICATE("-",80) 
               VCAB = .F. 
            ENDIF 
           
           @ PROW()+1,02 SAY "CODIGO: " 

           @ PROW()+1,00 SAY REPLICATE("-",80) 
           DBSKIP()
           
           IF PROW() > 50 
              vCAB = .T. 
           ENDIF 
           
         ENDDO 

         SET CONSOLE ON
         SET PRINTER OFF
         SET PRINTER TO
         SET DEVICE TO SCREEN 

         EJECT
         EXIT
         
      ENDDO 
   ENDIF 
ENDDO 
CLEAR 
Janio