Passagem de Parâmetro para o programa
Moderador: Moderadores
- diego1504
- Usuário Nível 1

- Mensagens: 16
- Registrado em: 11 Jul 2007 23:34
- Localização: São Paulo - SP
Passagem de Parâmetro para o programa
Oi amigos clippeiros.
Queria saber se alguem já passou pela seguinte situação, pois estou nela agora.
Tenho um programa que gerar um relatório. a condição para os registros sairem no relatório é que vai ser informada um valor(quantidade de dias). Tudo que for inferior a esta quantidade de dias devera sair no relatorio.
Pois bem. o problema é que este valor de dias que o programa irá receber não pode ser por janela(read,get). Deve ser um valor externo vindo de um arquivo .bat
Pra quem conhece é mais ou menos igual ao´s PARMS do COBOL. Alguem sabe como fazer isso?
Imagino que fique assim no bat
executar programa, qtd_dias=360
Claro que não é assim. só para vocês terem uma ideia do que estou pensando, tenho que pegar um valor externo. Porque este programa será um batch. Portanto não pode haver janelas.
Alguem sabe como preparar o programa eo .bat para execução?
Obrigado
Queria saber se alguem já passou pela seguinte situação, pois estou nela agora.
Tenho um programa que gerar um relatório. a condição para os registros sairem no relatório é que vai ser informada um valor(quantidade de dias). Tudo que for inferior a esta quantidade de dias devera sair no relatorio.
Pois bem. o problema é que este valor de dias que o programa irá receber não pode ser por janela(read,get). Deve ser um valor externo vindo de um arquivo .bat
Pra quem conhece é mais ou menos igual ao´s PARMS do COBOL. Alguem sabe como fazer isso?
Imagino que fique assim no bat
executar programa, qtd_dias=360
Claro que não é assim. só para vocês terem uma ideia do que estou pensando, tenho que pegar um valor externo. Porque este programa será um batch. Portanto não pode haver janelas.
Alguem sabe como preparar o programa eo .bat para execução?
Obrigado
Diego Maciel
-----------
Clipper 5.3 + Blinker 6
COBOL + JCL + CICS + DB2 + VSAM
-----------
Clipper 5.3 + Blinker 6
COBOL + JCL + CICS + DB2 + VSAM
Re: Passagem de Parâmetro para o programa
Eu costumo fazer isso em alguns casos e é bem simples. Faça sua primeira função do programa receber argumentos, como se fosse uma função que a chamasse. Exemplo:
function First(cDias)
...
...
...
No batch, a execução é simples. Supondo que este seu programa se chama teste, sua execução no batch seria TESTE 30. Como First() é a primeira função do PRG principal, ela receberá esse argumento da linha de comando. Apenas lembre-se de que, vindo pela linha de comando, todos os argumentos serão sempre strings. Se precisar, converta.
function First(cDias)
...
...
...
No batch, a execução é simples. Supondo que este seu programa se chama teste, sua execução no batch seria TESTE 30. Como First() é a primeira função do PRG principal, ela receberá esse argumento da linha de comando. Apenas lembre-se de que, vindo pela linha de comando, todos os argumentos serão sempre strings. Se precisar, converta.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Re: Passagem de Parâmetro para o programa
Desculpem a minha intromissão, mas que valha para esclarecimento. Eu não entendí direito o que o colega expôs. As minhas dúvidas são:
1. O programa que faz relatórios, é externo ?. É dizer, precisa passar parâmetros (Nº dias) para imprimir ?. Por exemplo IMP_REL 365.
Se for isto, e precisa ainda que o seu programa Clipper chame esse relatório, seja rodando em arquivo .BAT. Então eu indicaria, você gerar o arquivo .BAT (com o nome que sempre teve) através de dentro do seu aplicativo Clipper:
2. Agora se o seu aplicativo que imprime é uma função interna do Clipper e precisa receber parâmetro desde a linha de comando. Assim cmo disse o Maligno, eu indicaria com outro exemplo:
// Nas primeiras linhas do seu programa principal escreva:
1. O programa que faz relatórios, é externo ?. É dizer, precisa passar parâmetros (Nº dias) para imprimir ?. Por exemplo IMP_REL 365.
Se for isto, e precisa ainda que o seu programa Clipper chame esse relatório, seja rodando em arquivo .BAT. Então eu indicaria, você gerar o arquivo .BAT (com o nome que sempre teve) através de dentro do seu aplicativo Clipper:
Código: Selecionar todos
MEMOWRIT("CHAMAREL.BAT","IMP_REL 365")// Nas primeiras linhas do seu programa principal escreva:
Código: Selecionar todos
PARAMETERS VQDIAS /* Este comando indica que estaria recebendo o parâmetro externo desde a linha de comando. O valor que será passado desde a linha de comando SEMPRE será tipo caracter, portanto se precisar passar esta varável à função que imprime o relatorio, então converta assim: VQDIAS:=VAL(VQDIAS) */
// Daí em mais continua seu aplicativo chamndo a função do relatório.
IMP_REL(VQDIAS)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.
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.
- Augusto
- Usuário Nível 3

- Mensagens: 473
- Registrado em: 26 Ago 2003 17:50
- Localização: Maricá/RJ
- Contato:
Tudo bem... eu sei que o que o Maligno sugeriu funciona... mais eu uso assim:
Usando o mesmo exemplo, digamos que o nome do programa EXE seja TESTE e o seu BAT se chame EXECUTA, no prompt do DOS eu faço:
EXECUTA 30 //onde 30 seria a sua variável externa (var_ext)
Dentro do BAT seria:
TESTE %1
e lá dentro do PRG principal eu faço:
Usando o mesmo exemplo, digamos que o nome do programa EXE seja TESTE e o seu BAT se chame EXECUTA, no prompt do DOS eu faço:
EXECUTA 30 //onde 30 seria a sua variável externa (var_ext)
Dentro do BAT seria:
TESTE %1
e lá dentro do PRG principal eu faço:
Código: Selecionar todos
public var_ext
param var_ext
// segue o prg normalmente usando a variável var_ext
Editado pela última vez por Augusto em 19 Jul 2007 10:13, em um total de 1 vez.
:xau Fui...
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Pois é, foi o mesmo que eu postei, mas não tem necessidade de declarar a variável como pública, Augusto. E eu não estou certo se é isso que o colega Diego precisa, pois ele menciona de uma BATCH, para quê seria então ?Augusto escreveu:Código: Selecionar todos
public var_ext param var_ext // segue o prg normalmente usando a variável var_ext
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.
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.
Acho que o colega não teve dúvida quanto ao uso de parâmetros num batch. O problema foi receber argumentos dentro do programa.
Agora, um detalhe: os parâmetros de uma função nunca poderão ser públicos. Podem ser locais (definidos entre os parênteses) ou privados (fora dos parênteses, com a ajuda da cláusula PARAMETERS). Se houver uma variável pública de mesmo nome, ela ficará desconhecida dentro da função.
Agora, um detalhe: os parâmetros de uma função nunca poderão ser públicos. Podem ser locais (definidos entre os parênteses) ou privados (fora dos parênteses, com a ajuda da cláusula PARAMETERS). Se houver uma variável pública de mesmo nome, ela ficará desconhecida dentro da função.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- diego1504
- Usuário Nível 1

- Mensagens: 16
- Registrado em: 11 Jul 2007 23:34
- Localização: São Paulo - SP
Pablo César, pelo seu jeito eu consegui receber o valor.
))
Maligno pela metodo de função que você indicou eu não consegui, a variavel da função estava recebendo NIL.
Olha como estava fazendo acho que fiz algo errado:
Obrigado a todos "mais uma vez" :)Pos
Maligno pela metodo de função que você indicou eu não consegui, a variavel da função estava recebendo NIL.
Olha como estava fazendo acho que fiz algo errado:
Código: Selecionar todos
getDias()
inkey(0)
function getDias(cDias)
private qtd_dias := val(cDias)
IF qtd_dias = 0
mensagem('Numero de parametro invalido. Por favor informe um numero maior que zero',0,0)
inkey(0)
ENDIF
mensagem('numero ecolhido:'+ qtd_dias + '',0,0)
RETURN(qtd_dias)Obrigado a todos "mais uma vez" :)Pos
Diego Maciel
-----------
Clipper 5.3 + Blinker 6
COBOL + JCL + CICS + DB2 + VSAM
-----------
Clipper 5.3 + Blinker 6
COBOL + JCL + CICS + DB2 + VSAM
A variável que receberá a string pela linha de comando deve ser um parâmetro (ou vários parâmetros, se for mais de um argumento) da primeira função do seu primeiro PRG. Exatamente por isso, você deverá compilar o programa com a opção /n do Clipper. Ao que me parece, pelo código que você apresentou, não é assim que você está fazendo. Veja que, antes da definição dessa primeira função, tenha ela o nome que tiver, nenhum código pode ser sequer mencionado.
Acho que você deve mudar para algo do tipo:
Acho que você deve mudar para algo do tipo:
Código: Selecionar todos
//-----------------------------------------------------
function First(cDias)
if !ValidaDias()
quit
end
...
quit
//-----------------------------------------------------
function ValidaDias(cDias)
local nDias := Val(cDias)
if nDias = 0
// Erro
return .F.
end
return .T.[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
