Mas não resisti a mexer um pouco mais no fonte.
Já que seu relatório mostrava contas sem cadastro, o problema desta forma é não mostrar lançamentos sem conta.
E se realmente for pra mostrar uma única data, melhor criar um arquivo temporário com o que vai ser impresso.
Código: Selecionar todos
CLEAR
DO WHILE .T.
@ 10, 10 SAY 'INFORME DATA DO MOVIMENTO'
@ 10, 36 GET mdata PICTURE ' / / '
READ
IF mdata = CToD( ' / / ' )
@ 20, 1 SAY 'DATA EM BRANCO'
WAIT ', ENTER'
LOOP
ENDIF
EXIT
ENDDO
SELECT 0
USE CLIENTES
INDEX ON nome TO Temp1
SELECT 0
USE MOVIM
INDEX ON Conta + Dtos( Data ) TO Temp2
SELECT 0
USE HISTOR INDEX IHISTOR
SET PRINTER TO TESTE.TXT
SET DEVICE TO PRINT
@ 0, 0 SAY Chr( 27 ) + Chr( 15 )
mlinha = 66
mfolha = 1
mtotcre = 0.00
mtotdeb = 0.00
mtotvap = 0.00
mtotvales = 0.00
mtotodeb = 0.00
mtotrest = 0.00
mdata = CToD( ' / / ' )
mtotven = 0.00
SELECT clientes
GOTO TOP
DO WHILE .NOT. Eof() // clientes em ordem alfabética
SELECT movim
SET SOFTSEEK ON // pra encontrar data igual ou acima (apesar que parece usar data única)
SEEK clientes->Conta + Dtos( mData )
SET SOFTSEEK OFF
DO WHILE movim->Conta == clientes->Conta .AND. .NOT. Eof() // movimentos referentes ao cliente
// IF movim->Dat_Lanc < mData // Pra que isto, se o SEEK já pulou datas menores?
// SKIP
// LOOP
// ENDIF
IF movim->Dat_Lanc > mdata
EXIT
ENDIF
IF mlinha > 58
DO CCCABP20 WITH mfolha, mdata, mlinha
ENDIF
@ mlinha, 4 SAY clientes->Conta
@ mlinha, 10 SAY clientes->Nome
@ mlinha, 44 SAY clientes->Tipo
SELECT histor
SEEK movim->CT
IF Eof()
@ mlinha, 66 SAY '*******'
ELSE
@ mlinha, 66 SAY histor->Historico
ENDIF
SELECT movim
@ mlinha, 78 SAY movim->Doc
IF movim->CT < 10
mtotdeb += movim->Valor
DO CASE
CASE movim->CT = 01 ; mtotvap += movim->Valor
CASE movim->CT = 02 ; mtotvales += movim->Valor
CASE movim->CT = 06 ; mtotrest += movim->Valor
OTHERWISE ; mtotodeb += movim->Valor
ENDCASE
@ mlinha, 94 SAY movim->Valor PICTURE '9,999,999,999.99'
ELSE
mtotcre += movim->Valor
@ mlinha, 111 SAY movim->Valor PICTURE '9,999,999,999.99'
ENDIF
mlinha += 1
SKIP
ENDDO
SELECT clientes // retorna pra clientes, que é com o que este do while externo trabalha
SKIP
ENDDO
IF mlinha > 55
DO CCCABP20 WITH mfolha, mdata, mlinha
ENDIF
mlinha += 1
@ mlinha, 10 SAY 'TOTAL DE VENDAS A PRAZO = >'
@ mlinha, 94 SAY mtotvap PICTURE '9,999,999,999.99'
mlinha += 1
@ mlinha, 10 SAY 'TOTAL DE VALES ....... = >'
@ mlinha, 94 SAY mtotvales PICTURE '9,999,999,999.99'
mlinha += 1
@ mlinha, 10 SAY 'TOTAL DE RESTAURANTE = >'
@ mlinha, 94 SAY mtotrest PICTURE '9,999,999,999.99'
mlinha += 1
@ mlinha, 10 SAY 'TOTAL DE OUTROS DEBITOS = >'
@ mlinha, 94 SAY mtotodeb PICTURE '9,999,999,999.99'
mlinha += 1
@ mlinha, 35 SAY 'T O T A L = >'
@ mlinha, 94 SAY mtotdeb PICTURE '9,999,999,999.99'
@ mlinha, 111 SAY mtotcre PICTURE '9,999,999,999.99'
@ pRow() + 1, 0 SAY Chr( 27 ) + Chr( 15 )
EJECT
@ 0, 0 SAY Chr( 27 ) + '@'
SET DEVICE TO SCREEN
SET PRINTER TO
CLOSE ALL
fErase( "temp1.ntx" )
fErase( "temp2.ntx" )
CLEAR
RETURN


