Coloco abaixo a estrutura de impressão de relatorios de facil entendimento por todos e na precisão basta fazer as alterações necessárias para o uso, pois muitas vezes os report engines do Clipper não são tão flexiveis.
USE CONTAS NEW
INDEX ON dtos(DATA) TO CONTA001
SET INDEX TO CONTA001
GOTO TOP
SET DEVI TO PRINT
M->LI_NHA := 1
M->PAG := 1
M->TOT_0001 := 0
M->QUEBRAR := .F.
M->RESUMIR := .F.
/* USAR COM QUEBRA */
IF M->QUEBRAR
M->QUEBRA_1 := dtos(DATA) fara a quebra por data
M->TO1_0001 := 0 // Totalizar esta quebra
ENDIF
DO WHILE .NOT. EOF()
IF INKEY()=27
// QUESTIONA A SAIDA
ENDIF
IF M->LI_NHA=1
@ 00,001 SAY CHR(18)
@ 01,001 SAY "CABECALHO 1"
@ 01,059 SAY "Pagina: "+STRZERO(M->PAG,3)
@ 02,001 SAY "CABECALHO 2"
@ 02,059 SAY "Data: "+DTOC(DATE())
@ 04,001 SAY REPL("-", 72)
@ 05,001 SAY "ARECEBER"
@ 05,010 SAY "DESCRICAO"
@ 05,056 SAY "VALOR"
@ 06,001 SAY REPL("-", 72)
M->PAG := M->PAG + 1
M->LI_NHA := 07
ENDIF
/* USAR COM RESUMO */
IF M->RESUMIR
M->QUEBRA_1=dtos(DATA)
M->SUM_0001=0
DO WHILE M->QUEBRA_1=dtos(DATA) // Faz enquanto nao QUEBRA
M->SUM_0001=M->SUM_0001+VALOR
SKIP
ENDDO
SKIP -1
ENDIF
@ M->LI_NHA,001 SAY dtos(DATA)
@ M->LI_NHA,010 SAY DESCRICAO
@ M->LI_NHA,056 SAY VALOR PICTURE "@ZE 99,999,999,999.99"
M->TOT_0001 := M->TOT_0001+VALOR
/* USAR COM RESUMO */
IF M->RESUMIR
M->TO1_0001=M->TO1_0001+M->SUM_0001
ENDIF
M->LI_NHA := M->LI_NHA+1
/* USAR COM QUEBRA */
IF M->QUEBRAR
M->TO1_0001 := M->TO1_0001 + VALOR
ENDIF
SKIP
/* USAR COM QUEBRA */
IF M->QUEBRAR
IF M->QUEBRA_1<>dtos(DATA)
@ M->LI_NHA+0,01 SAY REPL("-", 72)
@ M->LI_NHA+1,001 SAY "SUBTOTAL"
@ M->LI_NHA+1,053 SAY M->TO1_0001 PICTURE "@ZE 9,999,999,999,999.99"
M->LI_NHA=M->LI_NHA+2
M->TO1_0001=0
M->QUEBRA_1=ARECEBER
M->LI_NHA=M->LI_NHA+1
ENDIF
ENDIF
IF M->LI_NHA>58 .OR. EOF()
@ M->LI_NHA+0,01 SAY REPL("-", 72)
@ M->LI_NHA+1,001 SAY "SUBTOTAL"
@ M->LI_NHA+1,053 SAY M->TOT_0001 PICTURE "@ZE 9,999,999,999,999.99"
M->LI_NHA := 1
ENDIF
ENDDO
M->LI_NHA := 59
@ M->LI_NHA+0,01 SAY REPL("-", 72)
@ M->LI_NHA+1,001 SAY "TOTAL"
@ M->LI_NHA+1,053 SAY M->TOT_0001 PICTURE "@ZE 9,999,999,999,999.99"
@ M->LI_NHA+2,01 SAY REPL("-", 72)
EJECT
Com o uso das flags RESUMIR e QUEBRAR voce pode acrescentar aos seus relatorios os tipos de saida, RESUMIDOS ou não ANALITICOS ou SINTÉTICOS.
@braços :?)