falha na impressão
Enviado: 12 Jan 2006 14:08
Os campos do dbf são CRM, ATIVIDADE, CLINICA, MEDICO, PROF, DATA ...
use primeira shared new
...
// IMPRESSAO DE AGENDAS POR DATA
PROCEDURE IMPDATAA
SET CONFIRM ON // PARA DAR ENTER APOS PREENCHER UM GET
SET ESCAPE ON // PARA INTERRROMPER UM GET COM ESC
SAVE SCREEN TO IMPN
CLS
SET CONFIRM ON
IF LASTKEY() = 27
RETURN
ENDIF
DAT = CTOD(" / / ")
@ 02,20 SAY "IMPRESSAO DE AGENDAS POR DATA"
@ 05,03 TO 09,29
@ 07,05 SAY "DIGITE A DATA:" GET DAT
READ
IF LASTKEY() = 27
RETURN
ENDIF
CLS
@ 24,15 SAY " PRESSIONE QUALQUER TECLA PARA IMPRIMIR "
INKEY(0)
@ 24,15 SAY " IMPRIMINDO. AGUARDE... "
LIN=12
SET DEVICE TO PRINTER
IF .NOT. ISPRINTER()
@ 24,15 SAY "ERRO NA IMPRESSORA. PRESSIONE QUALQUER TECLA."
INKEY(0)
RETURN
ENDIF
C=0 // PARA PASSAR NO PRIMEIRO WHILE
CR=1 // ||
GO TOP
LOCATE FOR DATA = DAT .AND. PROF = "R"
IF FOUND()
REC = RECNO()
DO WHILE .NOT. EOF()
IF DAT = DATA .AND. C <> CRM
REC = RECNO() // pega a posição atual para voltar nela posteriormente
CR = MEDICO // cr recebe o nome do medico do apontador atual
@ 01,01 SAY REPLICATE('.',130)
@ 03,01 SAY "* U.S: 01.05.01 *" + " *" + " CRM *" + " NOME DO PROFISSIONAL *" + " ATIVIDADE *" + " CLINICA *" + " TURNO *"
@ 04,01 SAY "* HBDF *" + " AGENDA DE CONSULTAS *" + " *" + " *" + " *" + " *" + " *"
@ 05,01 SAY "* *" + " *" + " " + CRM + " *" + " " +MEDICO + " *" + " " + ATIVIDADE + " *" + " " + CLINICA + " *" + " " + TURNO + " *"
@ 07,01 SAY REPLICATE('.',130)
@ 10,05 SAY "PRONTUARIO:"
@ 10,20 SAY "PACIENTE:"
DO WHILE .NOT. EOF()
IF CR = CRM .AND. DAT = DATA .AND. PROF = "R" // procura-se os pacientes do médico tal
@ LIN,05 SAY PRONTUARIO
@ LIN,20 SAY PACIENTE
LIN = LIN + 2
SKIP
ENDIF
ENDDO
C = CR // recebe-se o CRM do apontador atual
EJECT
ENDIF
GO REC // volta-se a posição de pesquisa anterior, pois o 2o while saiu dela
SKIP // anda-se um registro a frente
REC = RECNO() // rec armazena esse próximo registro
ENDDO
ELSE
SET DEVICE TO SCREEN
@ 23,10 SAY "DATA INEXISTENTE <ENTER>"
@ 24,15 SAY " "
INKEY(0)
RETURN
ENDIF
SET DEVICE TO SCREEN
EJECT
RETURN
Apesar de no CRM e na ATIVIDADE se digitar somente número, o campo é string no dbf. Todos são, exceto, data.
A idéia é ir percorrendo o banco de dados e imprimir as agendas com suas respectivas consultas.
Para que não repita os médicos, criei a variavel CR para receber o CRM onde o apontador de registro parou. Mas, acho que não funcionou, pois a rotina imprime apenas a primeira agenda com os pacientes do primeiro médico e para. Não sai mais. Eu tenho que dar CTRL+BREAK para sair do programa. E me vem uma mensagem que o programa parou na linha onde está IF CR = CRM .AND. DAT = DATA .AND. PROF = "R".
O propósito é imprimir as agendas de uma determinada data, sendo que, em cada folha, saísse um médico de cada vez.
Obrigado pela cooperação.
Abraços