Quebra em relatorio

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Sergio_ASSilva
Usuário Nível 2
Usuário Nível 2
Mensagens: 92
Registrado em: 09 Mar 2006 10:58
Localização: Santo Estevão (Ba)

Quebra em relatorio

Mensagem por Sergio_ASSilva »

Saudacoes a todos,

Caros colegas, tenho um arquivo com os seguintes campos:

CODIGO C 6
NOME C 30
DOCUMENTO C 6
DATA D 8
VALOR N 12 2

Como faco para emitir por um determinado intervalo de data e a cada mu
de codigo possa fazer a quebra?



Ex:
PERIODO DE: 01/01/2007 A 04/01/2007


00002-1 SERGIO AUGUSTO SILVA
000001 01/01/2007 30,00
000002 02/01/2007 12,00

00003-2 PAULO JOSE
000001 03/01/2007 10,00
000002 04/01/2007 112,00

Grato,

Sérgio
Clipper 5.3a/Blinker 7/DBFNTX
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem por Clipper »

Prezado Colega existe várias formas de você fazer isso, porém como você usa NTX a mais fácil é usando um arquivo temporário.

Exemplo básico :

Código: Selecionar todos

DATAINI:= DATAFIN:=CTOD(SPACE(8))

@ 10,00 SAY "Data inicial : " GET DATAINI VALID DATAINI<>CTOD(SPACE(8))
@ 11,00 SAY "Data final : " GET DATAFIN VALID DATAFIM>=DATAINI
READ

SELE 1
USE DUPLICAT
COPY TO ARQTEMP FOR DATA>=DATAINI .AND. DATA<=DATAFIN
USE

USE ARQTEMP
INDEX ON CODIGO TO ARQTEMP ALIAS TEMP

SELE 2
USE CLIENTES INDEX CLIENTES ALIAS CLIENTES

MCOD=SPACE(6)
LN=0
SET DEVICE TO PRINT

DO WHIL .NOT. EOF()
   IF MCOD<>CODIGO
       KCOD=CODIGO 
       SELE CLIENTES
       DBSEEK(KCODIGO)  // Pega o nome do cliente no cadastro
       SELE TEMP
      LN++
      @ LN,00 SAY CODIGO PICT "@R 99999-9"
      @ LN,08 SAY NOMECLI
      LN++
   ENDIF
   @ LN,00 SAY DOCUMENTO
   @ LN,08 SAY DATA PICT "99/99/9999"
   @ LN,20 SAY VALOR PICT "@E 999,999.99"
   LN++
   SKIP
   MCOD=CODIGO
ENDDO

SET PRINTER TO
SET DEVICE TO SCREEN
Existe maneira mais prática mas creio que essa ficará mais fácil para seu aprendizado.

Até logo.

Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Buenas....vc pode usar o SET FILTER tb...claro que o desempenho dele dependendo da quantidade de registros no seu dbf pode se tornar uma solução de M****.....eu soh passei aqui pra dizer que existem varias opções...para sua duvida....abaixo segue um exemplo com o SET FILTER..

Conforme o exemplo do Marcelo é soh troque o...

Código: Selecionar todos

COPY TO DATA>=DATAINI .AND. DATA<=DATAFIN  //por
SET FILTER TO DATA>=DATAINI .AND. DATA<=DATAFIN

Abraços
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Sergio_ASSilva
Usuário Nível 2
Usuário Nível 2
Mensagens: 92
Registrado em: 09 Mar 2006 10:58
Localização: Santo Estevão (Ba)

Mensagem por Sergio_ASSilva »

Valeu pessoal,

Obrigado pelas informacoes! :))
Clipper 5.3a/Blinker 7/DBFNTX
Responder