Funcao PRONAME() não retorna o esperado

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Funcao PRONAME() não retorna o esperado

Mensagem por rubens »

Olá.. pessoal...

Eu uso em um sistema a seguinte funcao na linha final dos relatorios..

RODAPE( PROCNAME() ) ---- para enviar o nome do relatorio para a funcao rodape...


function rodae( PROCNAME )

// Verifica se a váriavel existe, se não existe cria a váriavel com vazio
If Type("PROCNAME") == "U"
PROCNAME = " "
Endif

@ 60,00 say "---> "+PROCNAME+" ---> "+cSISTEMA
EJECT

RETURN NIL

No programa que coloquei tava tudo funcionando blz.. fui colocar no resto dos meus programas e apareceu um espacço em branco no relatório.. daí fui debugar com o cld e para minha surpresa tá ocorrendo o seguinte:

Quando verifico
? Type( "PROCNAME" ) --- o CLD mostra como "C" - ok...
mas na execução do programa ele entra no loop do If..
daí verifiquei
? Type(PROCNAME) --- o CLD mostra como "U", por isso que está entrando no loop do IF.. mas eu nao estou verificando PROCNAME, sem aspas no programa...
Daí para resolver por enquanto tirei a condição... mas como eu estou implementando isso nos meus programas se ficar algum relatorio sem enviar o comando - rodape(procname()) vai dar um erro porque a variavel nao vai existir...
Mas ta funcionando no primeiro sistema... será que é um erro do clipper.. .??? já apaguei todos os obj e recompilei o sistema inteiro... mas continua dando o mesmo erro...
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

FUNCAO PROCNAME() NÃO RETORNA O ESPERADO

Mensagem por Pablo César »

Olá Rubens.

Notei que você utilizou a mesma nomenclatura de variável que o próprio nome da função, isto não estaria sendo interpretado como "Reserved words" (palavras reservas) ?. Tentou mudar o nome da variável ?. Se essa função é apenas para mostrar o nome do módulo no próprio relatório, por quê você não utiliza uma variável do tipo CONSTANTE ?

Se persistir o erro, sem saber como está estruturado o seu sistema, você poderia utilizar-se de uma outra forma de identificar o seu módulo, substituindo PROCNAME() por EXENAME() da CT.lib ?
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Re: FUNCAO PROCNAME() NÃO RETORNA O ESPERADO

Mensagem por rubens »

Eu fiz um teste usando no nome da variavel no lugar de procname mudei para nomerel e dá o mesmo erro... daclareia a variavel tb como nomerel no primeiro programa para ser reconhecida dentro de todo o programa mas mesmo assim dá o erro porque nao reconhece a variavel como publica mesmo trocando o nome. não sei por que não funciona.. se tenho um sistema compilado funcionando... amanhã vou no cliente tirar um relatorio pra ver ser realmente tá funcionando... compilei os fontes que tenho aqui e ocorre o mesmo problema...
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

FUNCAO PROCNAME() NÃO RETORNA O ESPERADO

Mensagem por Pablo César »

E se você criar a variável fora do cahamado da função ? Assim:

Código: Selecionar todos

nomerel:=PROCNAME()
RODAPE( nomerel ) ---- para enviar o nome do relatorio para a funcao rodape...


function rodape( nomerel )
..//..
Talvez essa função não funcione adequadamente em forma aninhada. A outra saída seria você utilizar uma variável constante:

Código: Selecionar todos

nomerel:="Relatorio_01"
RODAPE( nomerel ) ---- para enviar o nome do relatorio para a funcao rodape...


function rodape( nomerel )
..//..
Não entendendo como poderia estar dando erro ??
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Re: FUNCAO PROCNAME() NÃO RETORNA O ESPERADO

Mensagem por rubens »

Eh..
realmente estranho..

Quando manda

rodape(procname())

a funcao recebe o parametro...
mas não faz a comparacao...

vou arrumar outro compilador para ver....
talvez o meu já esteja bichado.. eu coloco o resultado aqui...

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

FUNCAO PROCNAME() NÃO RETORNA O ESPERADO

Mensagem por Pablo César »

Fiz este exemplo e ele retorna corretamente o conteúdo do nomerel. Uma coisa a ser observada é que eu repassei a variável quando é chamada desde uma outra função (veja no meu exemplo abaixo em OUTRAFUN(nomerel) onde você percebe que estou repassando a variável e desta forma não preciso declará-la como PUBLIC):

Código: Selecionar todos

nomerel:=PROCNAME()
? nomerel
RODAPE( nomerel )
RODAPE( "Relatorio_01" )
RODAPE( PROCNAME() )
? "--"
outrafun(nomerel)

FUNCTION OUTRAFUN(nomerel)
? nomerel
RODAPE( nomerel )
RODAPE( "Relatorio_01" )
RODAPE( PROCNAME() )


function rodape( nomerel )
? nomerel
Compilei em 5.2e e RTLINK também com 5.3 e BLINKER 5.01
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Re: FUNCAO PROCNAME() NÃO RETORNA O ESPERADO

Mensagem por rubens »

Pablo..

Por gentileza , compile e teste este código...

TESTAR()

FUNCTION TESTAR()
VAR := PROCNAME()
RODAPE( VAR )
RETURN NIL

FUNCTION RODAPE( VAR )
? TYPE("VAR")
IF TYPE( "VAR" ) = "C"
? "OK... ESTA TUDO CERTO"
ENDIF
RETURN NIL
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

FUNCAO PROCNAME() NÃO RETORNA O ESPERADO

Mensagem por Pablo César »

Compilei e deu:

C
OK... ESTA TUDO CERTO

Deve o Clipper ou o linkador seu.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Re: FUNCAO PROCNAME() NÃO RETORNA O ESPERADO

Mensagem por rubens »

Eh.. então blz.. o código está certo.. deve ser o meu compilador, linkador mesmo...

Vou pegar outra copia para ver... e posto o resultado. .aqui..

Obrigado
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: FUNCAO PROCNAME() NÃO RETORNA O ESPERADO

Mensagem por rochinha »

Amiguinho

Verifique em seu .LNK, provavelmente voce esta acrescentando alguma .LIB ou OBJ que tenha esta funcao re-codificada para dar resultado vazio.

Linke com as .LIBs originais e teste e depois acrescente outras .LIBs.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder