Relatório de Parcelas, como?

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Relatório de Parcelas, como?

Mensagem 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
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

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
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem 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
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Valeu Marcelo (Y)

Vou testar. Se eu tiver qq dificuldade, falo de novo.

Janio
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem 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!
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem 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
Responder