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