Página 1 de 1
Relatório de Parcelas, como?
Enviado: 20 Set 2004 08:07
por janio
Olá a todos,
Estou tentando fazer uma relatório aki e não estou conseguindo.
O meu problema é que preciso, a partir da 6ª parcela, continuar exibindo o parcelamento ao lado. Para isto, após a 5ª parcela, tenho que voltar algumas linhas e não consegui fazer isso com o PROW(), SETPOS().
Até a 5ª parcela, blz. Da 6ª em diante é que o bicho pega.
Pc Vencto Valor | Pc Vencto Valor
01 20/09/04 20,00 | 06 20/02/05 20,00
02 20/10/04 20,00 | 07 20/03/05 20,00
03 20/11/04 20,00 | ....
04 20/02/04 20,00 |
05 20/01/05 20,00 |
A partir da 6ª parcela pular para o lado, como acima.
Janio
Enviado: 20 Set 2004 09:44
por Clipper
Prezado Colega
Você tem que gerar a linha com a 6ª parcela antes, exemplo :
LINHA1="01 "+VENCTO01+" "+VALOR01+" | "+"06 "+VENCTO06+" "+VALOR06
LINHA2="02 "+VENCTO02+" "+VALOR02+" | "+"07 "+VENCTO07+" "+VALOR07
...
Deu para entender ?
Na impressão você então usa :
@ prow(),pcol() say LINHA1
@ prow(),pcol() say LINHA2
...
Obviamente que para concatenar as váriaveis corretamente você deve transformalas usando DTOC() e STR() não usei no exemplo para não ficar muito grande e ficar mais fácil de entender.
Tipo :
"01 "+DTOC(VENCTO01)+" "+STR(VALOR01,9,2)+" | "+"06 "+DTOC(VENCTO06)+" "+STR(VALOR06,9,2)
Até logo.
Marcelo
Enviado: 20 Set 2004 10:20
por janio
Clipper,
Me parece que o seu exemplo não vai ser possível usá-lo porque no meu DBF não tenho VENC1 VALOR1, VENC2 VALOR2..., VENC6 VALOR6.
Tenho o DBF de parcelamento separado, onde gravo o número do Pedido, assim:
Pedido Pc Vencto Valor
00001 01 25/09/04 20,00
00001 02 25/10/04 20,00
00001 03 25/11/04 20,00
00002 01 20/09/04 40,00
00002 02 20/10/04 40,00
...
00100 01 15/09/04 60,00
...
Para imprimir localizo no DBF parcelamento o primeiro registro que é igual ao nº do pedido e depois utilizo DO WHILE FOUND() para imprimir enquanto o nº pedido for igual ao pedido no DBF parcelamento.
Entendeu?
Janio
Enviado: 20 Set 2004 11:20
por Clipper
Você pode fazer +/- assim :
Código: Selecionar todos
PRIVATE PC[12]
PRIVATE VC[12]
PRIVATE VL[12]
DBSEEK(MPEDIDO)
CONTA=0
DO WHILE PEDIDO=MPEDIDO
CONTA++
PC[CONTA]=PARCELA
VC[CONTA]=DTOC(VENCIMENTO)
VL[CONTA]=STR(VALOR,9,2)
SKIP
ENDDO
IF PC[6]<>NIL
LINHA1=PC[1]+" "+VC[1]+" "+VL[1]+" | "+PC[6]+" "+VC[6]+" "+VL[6]
ELSE
PC[1]+" "+VC[1]+" "+VL[1]
ENDIF
IF PC[7]<>NIL
LINHA1=PC[1]+" "+VC[1]+" "+VL[1]+" | "+PC[7]+" "+VC[7]+" "+VL[7]
ELSE
PC[2]+" "+VC[2]+" "+VL[2]
ENDIF
@ prow(), pcol() say LINHA1
@ prow(), pcol() say LINHA2
Deu para entender ?
Até logo.
Marcelo
Enviado: 20 Set 2004 11:30
por janio
Valeu Marcelo (Y)
Vou testar. Se eu tiver qq dificuldade, falo de novo.
Janio
Enviado: 21 Set 2004 08:25
por janio
Valeu Marcelo!
Com algumas adaptações, FUNCIONOU!
Segue como fiz e q deu certo.
Código: Selecionar todos
SELECT PARCELA
SET ORDER TO 1
LOCATE FOR vPEDIDO = CODPED
vQTDPAR = QTDPAR
PRIVATE PC[12]
PRIVATE VC[12]
PRIVATE VL[12]
CONTA=0
DO WHILE vPEDIDO=CODPED
CONTA++
PC[CONTA]=STRZERO(SEQPAR,2)
VC[CONTA]=DTOC(DATVEN)
VL[CONTA]=STR(VALPAR,8,2)
CONTINUE
ENDDO
IF PC[6]<>NIL
LINHA1 = PC[1]+" "+VC[1]+" "+VL[1]+" "+PC[6]+" "+VC[6]+" "+VL[6]
@ prow()+01, 02 say LINHA1
ELSE
LINHA1 = PC[1]+" "+VC[1]+" "+VL[1]
@ prow()+01, 02 say LINHA1
ENDIF
IF PC[7]<>NIL
LINHA2 = PC[2]+" "+VC[2]+" "+VL[2]+" "+PC[7]+" "+VC[7]+" "+VL[7]
@ prow()+01, 02 say LINHA2
ELSE
LINHA2 = PC[2]+" "+VC[2]+" "+VL[2]
@ prow()+01, 02 say LINHA2
ENDIF
IF PC[8]<>NIL
LINHA3 = PC[3]+" "+VC[3]+" "+VL[3]+" "+PC[8]+" "+VC[8]+" "+VL[8]
@ prow()+01, 02 say LINHA3
ELSE
LINHA3=PC[3]+" "+VC[3]+" "+VL[3]
@ prow()+01, 02 say LINHA3
ENDIF
IF PC[9]<>NIL
LINHA4 = PC[4]+" "+VC[4]+" "+VL[4]+" "+PC[9]+" "+VC[9]+" "+VL[9]
@ prow()+01, 02 say LINHA4
ELSE
LINHA4 = PC[4]+" "+VC[4]+" "+VL[4]
@ prow()+01, 02 say LINHA4
ENDIF
IF PC[10]<>NIL
LINHA5 = PC[5]+" "+VC[5]+" "+VL[5]+" "+PC[10]+" "+VC[10]+" "+VL[10]
@ prow()+01, 02 say LINHA5
ELSE
LINHA5=PC[5]+" "+VC[5]+" "+VL[5]
@ prow()+01, 02 say LINHA5
ENDIF
@ PROW()+02,00 SAY REPLICATE("-",79)
? ' '
Obrigadooooooooo!
Enviado: 21 Set 2004 08:34
por Clipper
Prezado Janio
Legal que tenha conseguido, precisando é só mandar que a turma aqui resolve, só uma consideração, seria mais interessante o uso SEEK (DBSEEK) ao invés do LOCATE+CONTINUE, fica mais rápido, depois com calma tente modificar e testar.
Até logo.
Marcelo
Enviado: 21 Set 2004 09:34
por janio
Clipper escreveu:
só uma consideração, seria mais interessante o uso SEEK (DBSEEK) ao invés do LOCATE+CONTINUE, fica mais rápido
Marcelo
Marcelo,
Tentei com o SEEK e não deu certo. O programa não encontrava os registros. O meu índice está indexado pelo código. Não sei se é eu q estou ficando louco ou fazendo alguma coisa errada, mas venho percebendo que em algumas situações o comando SEEK não faz aquilo que era pra ele fazer. Será q esse danado tem algum BUG?
Janio