Ajuda com relatorio
Moderador: Moderadores
Ajuda com relatorio
Olá pessoal, saudações a todos, sou novo no forum, e novato em clipper, to com um problema, tenho um relatorio que precisa ser organizado pelo nome so que nao estou tendo exito, sera que alguem poderia me ajudar? vai abaixo o meu fonte. Agradeço a todos mesmo, obrigado.
O problema que acontece que o nome dos clientes sai em branco.
set date brit
set talk off
set echo off
clea
UNLOCK ALL
CLOSE DATA
*---------------- VARIAVEIS DE MEMORIA ---------------------------------*
VMACAO = " "
VMOPCA = " "
VMPAGI := VMLINH := VMEXIT := 0
VMSIST = "COBRANCA"
*---------------- DEFINICAO DE ARQUIVOS --------------------------------*
IF .NOT. NET_USE("DEVCAD",.F.,5,,.T.,.T.,"DBFNTX")
RETURN
ENDIF
VMDEVCAD := SELECT()
SET INDEX TO DEVCAD1
IF .NOT. NET_USE("CADDEV",.F.,5,,.T.,.T.,"DBFNTX")
RETURN
ENDIF
VMCADDEV := SELECT()
SET INDEX TO CADDEV1
IF .NOT. NET_USE("CADLCT",.F.,5,,.T.,.T.,"DBFNTX")
RETURN
ENDIF
VMCADLCT := SELECT()
SET INDEX TO CADLCT1
IF .NOT. NET_USE("CADCLI",.F.,5,,.T.,.T.,"DBFNTX")
RETURN
ENDIF
VMCADCLI := SELECT()
SET INDEX TO CADCLI1, CADCLI2
IF .NOT. NET_USE("DESMEM",.F.,5,,.T.,.T.,"DBFNTX")
RETURN
ENDIF
VMDESMEM := SELECT()
SET INDEX TO DESMEM5
IF .NOT. NET_USE("CADREC",.F.,5,,.T.,.T.,"DBFNTX")
RETURN
ENDIF
VMCADREC := SELECT()
SET INDEX TO CADREC2
*------------------ EXECUCAO DO PROGRAMA ---------------------------------
DO WHILE .T.
VMDTIN = CTOD(" / / ")
VMDTFI = DATE()
FRAME(07,04,11,31,"CD")
@ 08,06 SAY "Data Inicial.:" GET VMDTIN PICT "99/99/99"
@ 10,06 SAY "Data Final...:" GET VMDTFI PICT "99/99/99"
READ
IF VMDTFI < VMDTIN
CONSIS("Data Final Menor Que a Inicial. Tecle [ENTER]")
LOOP
ENDIF
IF LASTKEY() = 27
UNLOCK ALL
CLOSE DATA
EXIT
ENDIF
VMPERI = "PERIODO DE.: "+DTOC(VMDTIN)+" A "+DTOC(VMDTFI)
VMCLIE = "00000"
FRAME(12,05,14,70,"CD")
@ 13,07 SAY "Cliente..:" GET VMCLIE PICT "99999"
READ
SELECT(VMCADCLI)
IF EMPTY(VMCLIE)
PROCURA(VMCLIE,"SITU=' '",VMCADCLI,"CL_CLIE+' '+CL_FANT",09,12)
IF VMLASTK = 1
LOOP
ENDIF
VMCLIE = CL_CLIE
ENDIF
IF .NOT. DBSEEK(" "+VMCLIE)
CONSIS("Cliente Inexistente ou Incorreto. Tecle [ENTER]")
LOOP
ENDIF
@ 13,18 SAY CL_CLIE+"-"+TRIM(CL_FANT) COLOR "G+"
VMEMPR = "CLIENTE.: "+TRIM(CL_NOME)
VMEMP1 := TRIM(CL_FANT)
VMEMP = CL_FANT
VMTIPO = " "
@ 23,03 SAY "Pagamentos [L]oja ou [A]cc? [L/A].:" GET VMTIPO PICT "!" VALID VMTIPO$"LA"
READ
@ 23,03 SAY SPACE(75)
@ 23,03 SAY "Continua? [S/N]" GET VMOPCA PICT "!"
READ
IF VMOPCA # "S"
UNLOCK ALL
CLOSE DATA
EXIT
ENDIF
SELECT(VMDESMEM)
SET FILTER TO SITU = " " .AND. DE_DTBX >= VMDTIN .AND. DE_DTBX <= VMDTFI .AND. DE_CLIE = VMCLIE
GO TOP
IF EOF()
UNLOCK ALL
CLOSE DATA
EXIT
ENDIF
IF NOTPRINT()
SET CONSOLE OFF
SET PRINT ON
ENDIF
VMTOT1 := VMTOT2 := VMTOT3 := VMTOT4 := VMTOT5 := 0
VMTTL1 := VMTTL2 := VMTTL3 := VMTTL4 := VMTTL5 := 0
DO WHILE .NOT. EOF()
IF IMPRES()
VMEXIT = 1
EXIT
ENDIF
IF DE_SITU # "4" .AND. DE_SITU # "6"
SKIP
LOOP
ENDIF
IF DE_CAPI = 0
SKIP
LOOP
ENDIF
VMPROC = DE_PROC
VMDTPG = DTOC(DE_DTBX)
VMCAPI = TRANSF(DE_CAPI,"@E 99,999.99")
VMJURO = TRANSF(DE_JURO+DE_VACC,"@E 9,999.99")
VMTOTA = TRANSF(DE_CAPI+DE_JURO+DE_VACC,"@E 99,999.99")
VMCOMI = TRANSF(DE_VACC,"@E 9,999.99")
VMREPA = TRANSF(DE_CAPI+DE_JURO+DE_VACC-DE_VACC,"@E 9,999.99")
VMRECI = DE_RECI
VMLOCA = " "
VMCOBR = DE_COBR
IF DE_COBR = "0002" .AND. VMTIPO = "L"
VMLOCA = "-Lj"
VMREPA = TRANSF(0,"@E 9,999.99")
VMTTL1 += DE_CAPI
VMTTL2 += DE_JURO+DE_VACC
VMTTL3 += DE_CAPI+DE_JURO+DE_VACC
VMTTL4 += DE_VACC
VMTTL5 += DE_CAPI+DE_JURO+DE_VACC-DE_VACC
ELSEIF DE_COBR # "0002" .AND. VMTIPO = "A"
VMTOT1 += DE_CAPI
VMTOT2 += DE_JURO+DE_VACC
VMTOT3 += DE_CAPI+DE_JURO+DE_VACC
VMTOT4 += DE_VACC
VMTOT5 += DE_CAPI+DE_JURO+DE_VACC-DE_VACC
ELSE
SKIP
LOOP
ENDIF
IF DE_SITU = "4"
VMPOSI = "Pc"+VMLOCA
ELSE
VMPOSI = "Tt"+VMLOCA
ENDIF
SELECT(VMCADREC)
IF DBSEEK(VMRECI)
VMPLAN = RC_PLAN
VMDTVC = DTOC(RC_VCTO)
ELSE
SELECT(VMDESMEM)
VMPLAN = SUBS(DE_PLAN,1,2)
VMDTVC = DTOC(DE_VCTO)
ENDIF
SELECT(VMDEVCAD)
DBSEEK(" "+VMPROC)
VMDEVE = DV_DEVE
VMDOCU = DV_NUDO
VMPARC = SUBSTR(DV_PARC,3,4)
* VMPLAN = VMPARC
* VMPLAN = VMULTP
VMPRIM = VAL(SUBS(DV_PARC,1,2))-1
VMVALO = 0
SELECT(VMCADLCT)
IF DBSEEK(" "+VMPROC+"01")
IF LC_POSI = " "
VMPRIM++
ENDIF
VMVALO = LC_VALO
* VMDTVC = LC_DATA
DO WHILE SITU+LC_PROC = " "+VMPROC
IF LC_POSI = " "
EXIT
ENDIF
VMVALO = LC_VALO
* VMDTVC = DTOC(LC_DATA)
VMPRIM++
SKIP
ENDDO
ENDIF
* VMDTVC = DTOC(VMDTVC)
VMUNIT = TRANSF(VMVALO,"@E 99,999.99")
VMPRIM = STRZERO(VMPRIM,2)
* VMPLAN = VMPRIM+VMULTP
SELECT(VMCADDEV)
DBSEEK(" "+VMDEVE)
VMNOME = SUBS(DV_NOME,1,20)
IF VMLINH > 35 .OR. VMLINH = 0
VMLINH = 0
VMPAGI++
CABEC3("P20310",VMPAGI,DATE(),80,VMSIST,"BORDERO DE PRESTACAO DE CONTAS")
? CHR(14)+CHR(15)+PADC(VMEMPR,67)+CHR(18)+CHR(20)
? CHR(14)+CHR(15)+PADC(VMEMP1,67)+CHR(18)+CHR(20)
? CHR(14)+CHR(15)+PADC(VMPERI,67)+CHR(18)+CHR(20)
? REPLIC("=",79)
? CHR(15)+"DOCUMENTO CLIENTE PP/PL DT. VCTO VLR PARC. DT. PGTO CAPITAL JR+MULTA TOTAL PG COMISSAO REPASSE POSICAO"+CHR(18)
* xxxxxxxxxxxxxxxxxxxxxx xxxxxxxxx0xxxxxxxxx0 xx/xx xx/xx/xx xx.xxx.xx xx/xx/xx xx.xxx.xx x.xxx.xx xx.xxx.xx x.xxx.xx x.xxx.xx
? REPLIC("=",79)
ENDIF
VMLINH++
? CHR(15)+VMDOCU+" "+VMNOME+" "+SUBSTR(VMPLAN,1,2)+"/"+VMPARC+" "+VMDTVC+" "+VMUNIT+" "+VMDTPG+" "+VMCAPI+" "+VMJURO+" "+VMTOTA+" "+VMCOMI+" "+VMREPA+" "+VMPOSI+CHR(18)
SELECT(VMDESMEM)
SKIP
IF EOF() .AND. VMLINH < 35
VMSPAC = " "
DO WHILE VMLINH < 35
? VMSPAC+"##"
VMSPAC = VMSPAC+" "
VMLINH++
ENDDO
ENDIF
ENDDO
IF VMLINH < 35
VMSPAC = " "
DO WHILE VMLINH < 35
? VMSPAC+"##"
VMSPAC = VMSPAC+" "
VMLINH++
ENDDO
ENDIF
VMTL1 = TRANSF(VMTTL1,"@E 99,999.99")
VMTL2 = TRANSF(VMTTL2,"@E 9,999.99")
VMTL3 = TRANSF(VMTTL3,"@E 99,999.99")
VMTL4 = TRANSF(VMTTL4,"@E 9,999.99")
* VMTL5 = TRANSF(VMTTL5,"@E 9,999.99")
VMTL5 = TRANSF(0,"@E 9,999.99")
VMTT1 = TRANSF(VMTOT1,"@E 99,999.99")
VMTT2 = TRANSF(VMTOT2,"@E 9,999.99")
VMTT3 = TRANSF(VMTOT3,"@E 99,999.99")
VMTT4 = TRANSF(VMTOT4,"@E 9,999.99")
VMTT5 = TRANSF(VMTOT5,"@E 9,999.99")
VMTT = TRANSF(VMTOT5-VMTTL4,"@E 9,999.99")
?
IF VMTIPO = "L"
? CHR(15)+SPACE(61)+"Total LOJA..: "+VMTL1+" "+VMTL2+" "+VMTL3+" "+VMTL4+" "+VMTL5+CHR(18)
ELSE
? CHR(15)+SPACE(61)+"Total ACC...: "+VMTT1+" "+VMTT2+" "+VMTT3+" "+VMTT4+" "+VMTT5+CHR(18)
ENDIF
?
? CHR(15)+VMEMP+CHR(18)+SPACE(12)+""
?
FINAL()
IF VMEXIT = 1
? "**** RELATORIO INTERROMPIDO ****"
ELSE
? "**** FIM DE RELATORIO ****"
ENDIF
SET PRINT OFF
SET CONSOLE ON
UNLOCK ALL
CLOSE DATA
EXIT
ENDDO
RETURN
O problema que acontece que o nome dos clientes sai em branco.
set date brit
set talk off
set echo off
clea
UNLOCK ALL
CLOSE DATA
*---------------- VARIAVEIS DE MEMORIA ---------------------------------*
VMACAO = " "
VMOPCA = " "
VMPAGI := VMLINH := VMEXIT := 0
VMSIST = "COBRANCA"
*---------------- DEFINICAO DE ARQUIVOS --------------------------------*
IF .NOT. NET_USE("DEVCAD",.F.,5,,.T.,.T.,"DBFNTX")
RETURN
ENDIF
VMDEVCAD := SELECT()
SET INDEX TO DEVCAD1
IF .NOT. NET_USE("CADDEV",.F.,5,,.T.,.T.,"DBFNTX")
RETURN
ENDIF
VMCADDEV := SELECT()
SET INDEX TO CADDEV1
IF .NOT. NET_USE("CADLCT",.F.,5,,.T.,.T.,"DBFNTX")
RETURN
ENDIF
VMCADLCT := SELECT()
SET INDEX TO CADLCT1
IF .NOT. NET_USE("CADCLI",.F.,5,,.T.,.T.,"DBFNTX")
RETURN
ENDIF
VMCADCLI := SELECT()
SET INDEX TO CADCLI1, CADCLI2
IF .NOT. NET_USE("DESMEM",.F.,5,,.T.,.T.,"DBFNTX")
RETURN
ENDIF
VMDESMEM := SELECT()
SET INDEX TO DESMEM5
IF .NOT. NET_USE("CADREC",.F.,5,,.T.,.T.,"DBFNTX")
RETURN
ENDIF
VMCADREC := SELECT()
SET INDEX TO CADREC2
*------------------ EXECUCAO DO PROGRAMA ---------------------------------
DO WHILE .T.
VMDTIN = CTOD(" / / ")
VMDTFI = DATE()
FRAME(07,04,11,31,"CD")
@ 08,06 SAY "Data Inicial.:" GET VMDTIN PICT "99/99/99"
@ 10,06 SAY "Data Final...:" GET VMDTFI PICT "99/99/99"
READ
IF VMDTFI < VMDTIN
CONSIS("Data Final Menor Que a Inicial. Tecle [ENTER]")
LOOP
ENDIF
IF LASTKEY() = 27
UNLOCK ALL
CLOSE DATA
EXIT
ENDIF
VMPERI = "PERIODO DE.: "+DTOC(VMDTIN)+" A "+DTOC(VMDTFI)
VMCLIE = "00000"
FRAME(12,05,14,70,"CD")
@ 13,07 SAY "Cliente..:" GET VMCLIE PICT "99999"
READ
SELECT(VMCADCLI)
IF EMPTY(VMCLIE)
PROCURA(VMCLIE,"SITU=' '",VMCADCLI,"CL_CLIE+' '+CL_FANT",09,12)
IF VMLASTK = 1
LOOP
ENDIF
VMCLIE = CL_CLIE
ENDIF
IF .NOT. DBSEEK(" "+VMCLIE)
CONSIS("Cliente Inexistente ou Incorreto. Tecle [ENTER]")
LOOP
ENDIF
@ 13,18 SAY CL_CLIE+"-"+TRIM(CL_FANT) COLOR "G+"
VMEMPR = "CLIENTE.: "+TRIM(CL_NOME)
VMEMP1 := TRIM(CL_FANT)
VMEMP = CL_FANT
VMTIPO = " "
@ 23,03 SAY "Pagamentos [L]oja ou [A]cc? [L/A].:" GET VMTIPO PICT "!" VALID VMTIPO$"LA"
READ
@ 23,03 SAY SPACE(75)
@ 23,03 SAY "Continua? [S/N]" GET VMOPCA PICT "!"
READ
IF VMOPCA # "S"
UNLOCK ALL
CLOSE DATA
EXIT
ENDIF
SELECT(VMDESMEM)
SET FILTER TO SITU = " " .AND. DE_DTBX >= VMDTIN .AND. DE_DTBX <= VMDTFI .AND. DE_CLIE = VMCLIE
GO TOP
IF EOF()
UNLOCK ALL
CLOSE DATA
EXIT
ENDIF
IF NOTPRINT()
SET CONSOLE OFF
SET PRINT ON
ENDIF
VMTOT1 := VMTOT2 := VMTOT3 := VMTOT4 := VMTOT5 := 0
VMTTL1 := VMTTL2 := VMTTL3 := VMTTL4 := VMTTL5 := 0
DO WHILE .NOT. EOF()
IF IMPRES()
VMEXIT = 1
EXIT
ENDIF
IF DE_SITU # "4" .AND. DE_SITU # "6"
SKIP
LOOP
ENDIF
IF DE_CAPI = 0
SKIP
LOOP
ENDIF
VMPROC = DE_PROC
VMDTPG = DTOC(DE_DTBX)
VMCAPI = TRANSF(DE_CAPI,"@E 99,999.99")
VMJURO = TRANSF(DE_JURO+DE_VACC,"@E 9,999.99")
VMTOTA = TRANSF(DE_CAPI+DE_JURO+DE_VACC,"@E 99,999.99")
VMCOMI = TRANSF(DE_VACC,"@E 9,999.99")
VMREPA = TRANSF(DE_CAPI+DE_JURO+DE_VACC-DE_VACC,"@E 9,999.99")
VMRECI = DE_RECI
VMLOCA = " "
VMCOBR = DE_COBR
IF DE_COBR = "0002" .AND. VMTIPO = "L"
VMLOCA = "-Lj"
VMREPA = TRANSF(0,"@E 9,999.99")
VMTTL1 += DE_CAPI
VMTTL2 += DE_JURO+DE_VACC
VMTTL3 += DE_CAPI+DE_JURO+DE_VACC
VMTTL4 += DE_VACC
VMTTL5 += DE_CAPI+DE_JURO+DE_VACC-DE_VACC
ELSEIF DE_COBR # "0002" .AND. VMTIPO = "A"
VMTOT1 += DE_CAPI
VMTOT2 += DE_JURO+DE_VACC
VMTOT3 += DE_CAPI+DE_JURO+DE_VACC
VMTOT4 += DE_VACC
VMTOT5 += DE_CAPI+DE_JURO+DE_VACC-DE_VACC
ELSE
SKIP
LOOP
ENDIF
IF DE_SITU = "4"
VMPOSI = "Pc"+VMLOCA
ELSE
VMPOSI = "Tt"+VMLOCA
ENDIF
SELECT(VMCADREC)
IF DBSEEK(VMRECI)
VMPLAN = RC_PLAN
VMDTVC = DTOC(RC_VCTO)
ELSE
SELECT(VMDESMEM)
VMPLAN = SUBS(DE_PLAN,1,2)
VMDTVC = DTOC(DE_VCTO)
ENDIF
SELECT(VMDEVCAD)
DBSEEK(" "+VMPROC)
VMDEVE = DV_DEVE
VMDOCU = DV_NUDO
VMPARC = SUBSTR(DV_PARC,3,4)
* VMPLAN = VMPARC
* VMPLAN = VMULTP
VMPRIM = VAL(SUBS(DV_PARC,1,2))-1
VMVALO = 0
SELECT(VMCADLCT)
IF DBSEEK(" "+VMPROC+"01")
IF LC_POSI = " "
VMPRIM++
ENDIF
VMVALO = LC_VALO
* VMDTVC = LC_DATA
DO WHILE SITU+LC_PROC = " "+VMPROC
IF LC_POSI = " "
EXIT
ENDIF
VMVALO = LC_VALO
* VMDTVC = DTOC(LC_DATA)
VMPRIM++
SKIP
ENDDO
ENDIF
* VMDTVC = DTOC(VMDTVC)
VMUNIT = TRANSF(VMVALO,"@E 99,999.99")
VMPRIM = STRZERO(VMPRIM,2)
* VMPLAN = VMPRIM+VMULTP
SELECT(VMCADDEV)
DBSEEK(" "+VMDEVE)
VMNOME = SUBS(DV_NOME,1,20)
IF VMLINH > 35 .OR. VMLINH = 0
VMLINH = 0
VMPAGI++
CABEC3("P20310",VMPAGI,DATE(),80,VMSIST,"BORDERO DE PRESTACAO DE CONTAS")
? CHR(14)+CHR(15)+PADC(VMEMPR,67)+CHR(18)+CHR(20)
? CHR(14)+CHR(15)+PADC(VMEMP1,67)+CHR(18)+CHR(20)
? CHR(14)+CHR(15)+PADC(VMPERI,67)+CHR(18)+CHR(20)
? REPLIC("=",79)
? CHR(15)+"DOCUMENTO CLIENTE PP/PL DT. VCTO VLR PARC. DT. PGTO CAPITAL JR+MULTA TOTAL PG COMISSAO REPASSE POSICAO"+CHR(18)
* xxxxxxxxxxxxxxxxxxxxxx xxxxxxxxx0xxxxxxxxx0 xx/xx xx/xx/xx xx.xxx.xx xx/xx/xx xx.xxx.xx x.xxx.xx xx.xxx.xx x.xxx.xx x.xxx.xx
? REPLIC("=",79)
ENDIF
VMLINH++
? CHR(15)+VMDOCU+" "+VMNOME+" "+SUBSTR(VMPLAN,1,2)+"/"+VMPARC+" "+VMDTVC+" "+VMUNIT+" "+VMDTPG+" "+VMCAPI+" "+VMJURO+" "+VMTOTA+" "+VMCOMI+" "+VMREPA+" "+VMPOSI+CHR(18)
SELECT(VMDESMEM)
SKIP
IF EOF() .AND. VMLINH < 35
VMSPAC = " "
DO WHILE VMLINH < 35
? VMSPAC+"##"
VMSPAC = VMSPAC+" "
VMLINH++
ENDDO
ENDIF
ENDDO
IF VMLINH < 35
VMSPAC = " "
DO WHILE VMLINH < 35
? VMSPAC+"##"
VMSPAC = VMSPAC+" "
VMLINH++
ENDDO
ENDIF
VMTL1 = TRANSF(VMTTL1,"@E 99,999.99")
VMTL2 = TRANSF(VMTTL2,"@E 9,999.99")
VMTL3 = TRANSF(VMTTL3,"@E 99,999.99")
VMTL4 = TRANSF(VMTTL4,"@E 9,999.99")
* VMTL5 = TRANSF(VMTTL5,"@E 9,999.99")
VMTL5 = TRANSF(0,"@E 9,999.99")
VMTT1 = TRANSF(VMTOT1,"@E 99,999.99")
VMTT2 = TRANSF(VMTOT2,"@E 9,999.99")
VMTT3 = TRANSF(VMTOT3,"@E 99,999.99")
VMTT4 = TRANSF(VMTOT4,"@E 9,999.99")
VMTT5 = TRANSF(VMTOT5,"@E 9,999.99")
VMTT = TRANSF(VMTOT5-VMTTL4,"@E 9,999.99")
?
IF VMTIPO = "L"
? CHR(15)+SPACE(61)+"Total LOJA..: "+VMTL1+" "+VMTL2+" "+VMTL3+" "+VMTL4+" "+VMTL5+CHR(18)
ELSE
? CHR(15)+SPACE(61)+"Total ACC...: "+VMTT1+" "+VMTT2+" "+VMTT3+" "+VMTT4+" "+VMTT5+CHR(18)
ENDIF
?
? CHR(15)+VMEMP+CHR(18)+SPACE(12)+""
?
FINAL()
IF VMEXIT = 1
? "**** RELATORIO INTERROMPIDO ****"
ELSE
? "**** FIM DE RELATORIO ****"
ENDIF
SET PRINT OFF
SET CONSOLE ON
UNLOCK ALL
CLOSE DATA
EXIT
ENDDO
RETURN
Editado pela última vez por paulinho em 22 Jul 2005 11:09, em um total de 1 vez.
Cliente
caro daniel, ele encontra o cliente e passa pra frente, o relatorio chega a ser impresso, so que quando mudo o indexador pra index dv_nome to nome la no caddev, ele sai em branco, o relatorio funciona so nao funciona a ordem la
Caro daniel,
Salve sua ajuda, mas cara aonde coloco o go top, porque tipo agora parece que ele arrumou mas coloquei antes DOS selects s oque agora ele ta travando e reduplicando os registros, obrigado pela sua atencao
Problema
E pessoal ta dificil, nao obtive exito, ate reescrevi o relatorio, mas nao ta indo, o bendito indice nao funfa. 
Re: Problema
paulinho escreveu:E pessoal ta dificil, nao obtive exito, ate reescrevi o relatorio, mas nao ta indo, o bendito indice nao funfa.
Paulinho,
Coloque aqui, somente a parte da rotina que deveria encontrar o NOME.
Vou dar uma dica que uso e costuma funcionar: Vá tomar um café, ouvir música, dar uma volta na quadra, enfim se deligue um pouco do programa.
Qdo voltar, preste atenção se vc não trocou nenhuma variável
Posso até falar algumas asneiras aqui, mas talvez elas tirem vc do loop vicioso do pensamento:
- Vc tem CADdev e devCAD pode ter trocado variáveis;
- Vc usou SET FILTER: dê um GO TOP;
- Desligue o SET FILTER;
Outra dica valiosa: use o CLD.EXE para verificar o que seu prog está fazendo. Tem um tópico fixo aqui no fórum sobre o uso dele. O Envolver fez um roteiro muito bom, parabéns pela inicitiva!
Desejo que com isso vc consiga sair do loop...
Abraços
Paul
Coloque aqui, somente a parte da rotina que deveria encontrar o NOME.
Vou dar uma dica que uso e costuma funcionar: Vá tomar um café, ouvir música, dar uma volta na quadra, enfim se deligue um pouco do programa.
Qdo voltar, preste atenção se vc não trocou nenhuma variável
Posso até falar algumas asneiras aqui, mas talvez elas tirem vc do loop vicioso do pensamento:
- Vc tem CADdev e devCAD pode ter trocado variáveis;
- Vc usou SET FILTER: dê um GO TOP;
- Desligue o SET FILTER;
Outra dica valiosa: use o CLD.EXE para verificar o que seu prog está fazendo. Tem um tópico fixo aqui no fórum sobre o uso dele. O Envolver fez um roteiro muito bom, parabéns pela inicitiva!
Desejo que com isso vc consiga sair do loop...
Abraços
Paul
Ainda sobre o problema
Caro amigo valeu pela dica, mas como disse acima o relatorio funciona, nao tem variaveis erradas e nada mais, segui seu conselho me desliguei, e mesmo assim reescrevi o relatorio ele funciona que e uma beleza, so nao imprime indexa pelo nome, valeu ai pessoal, quem puder me dar uma força agradeço muito obrigado a todos
Oi Paulinho,
Permita-me fazer mais um comentário...
- A indexação do arquivo está correta?
- A chave para criar o respectivo índice está pelo nome?
- Se indexado por mais de um campo, estão todos tranformados p/ caracter?
Tempo atrás comi bola com isso... chamava o índice, visualizava o cliente no dbf, mas ao fazer o seek, o programa nao o encontrava... era um erro ao criar a indexação...
Quem sabe...
Boa sorte,
Paul
Permita-me fazer mais um comentário...
- A indexação do arquivo está correta?
- A chave para criar o respectivo índice está pelo nome?
- Se indexado por mais de um campo, estão todos tranformados p/ caracter?
Tempo atrás comi bola com isso... chamava o índice, visualizava o cliente no dbf, mas ao fazer o seek, o programa nao o encontrava... era um erro ao criar a indexação...
Quem sabe...
Boa sorte,
Paul
Ref indexação
caro amigo entao, ja fiz refiz, verifiquei, apaguei, recriei o indice e nada
entao cara
IF .NOT. NET_USE("CADDEV",.F.,5,,.T.,.T.,"DBFNTX")
RETURN
ENDIF
VMCADDEV := SELECT()
SET INDEX TO CADDEV1
este e o arquivo aonde devia ser indexado por nome
o arquivo caddev1 foi criado assim
index on dv_nome to caddev1
creio eu que esteja correto, da uma luz ai pessoal, valeuz
entao cara
IF .NOT. NET_USE("CADDEV",.F.,5,,.T.,.T.,"DBFNTX")
RETURN
ENDIF
VMCADDEV := SELECT()
SET INDEX TO CADDEV1
este e o arquivo aonde devia ser indexado por nome
o arquivo caddev1 foi criado assim
index on dv_nome to caddev1
creio eu que esteja correto, da uma luz ai pessoal, valeuz
Resolvi fazer uma hidentação na sua rotina p/ poder estudá-la com mais facilidade. Lá vão algumas observações:
- Achei um ENDIF "perdido" próximo do local onde vc procura o cliente, dê uma olhada e vê se está correto.
- Vc coloca um espaço na frente do nome p/ procurá-lo no DBF, porque? todos os nomes lá começam com um espaço?
- Qdo vc usa o dbseek, vc não testa se o registro foi encontrado, portanto ele assume onde o ponteiro parou. Fiz uma alteração e coloquei um IF FOUND()... dê uma olhada em como ficou, com isso vc vai poder saber se ele encontrou ou não.
(O Daniel usou o IF EOF(), mas se SET SOFTSEEK estiver ON, o DBSEEK não chegará ao fim do arquivo... )
Boa sorte!
Paul
- Achei um ENDIF "perdido" próximo do local onde vc procura o cliente, dê uma olhada e vê se está correto.
- Vc coloca um espaço na frente do nome p/ procurá-lo no DBF, porque? todos os nomes lá começam com um espaço?
- Qdo vc usa o dbseek, vc não testa se o registro foi encontrado, portanto ele assume onde o ponteiro parou. Fiz uma alteração e coloquei um IF FOUND()... dê uma olhada em como ficou, com isso vc vai poder saber se ele encontrou ou não.
(O Daniel usou o IF EOF(), mas se SET SOFTSEEK estiver ON, o DBSEEK não chegará ao fim do arquivo... )
Código: Selecionar todos
DO WHILE SITU+LC_PROC = " "+VMPROC
IF LC_POSI = " "
EXIT
ENDIF
VMVALO = LC_VALO
* VMDTVC = DTOC(LC_DATA)
VMPRIM++
SKIP
ENDDO
???--> ENDIF <--- de onde apareceu ???
* VMDTVC = DTOC(VMDTVC)
VMUNIT = TRANSF(VMVALO,"@E 99,999.99")
VMPRIM = STRZERO(VMPRIM,2)
* VMPLAN = VMPRIM+VMULTP
SELECT(VMCADDEV)
DBSEEK(" "+VMDEVE)
--> porque esse espaço " " na frente de VMDEVE?
altere daqui:
if found()
VMNOME = SUBS(DV_NOME,1,20)
else
VMNOME = "cliente nao encontrado"
endif
até aqui.
IF VMLINH > 35 .OR. VMLINH = 0
VMLINH = 0
VMPAGI++
ENDIF
Paul
ainda nada
pessoal nada ainda, queria salientar que o mesmo relatorio funciona normalmente, so que nao consigo fazer a indexação dos nomes nele impressos.


