Página 1 de 1
Passagem de Parâmetro para o programa
Enviado: 18 Jul 2007 17:28
por diego1504
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
Re: Passagem de Parâmetro para o programa
Enviado: 18 Jul 2007 17:46
por Maligno
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.
Enviado: 18 Jul 2007 17:50
por diego1504
Ahhhhh tá!!
isso da linha de comando era o que eu queria!!!!não sabia que dava para fazer isso.
Maligno muito obrigado pela ajuda :{
Re: Passagem de Parâmetro para o programa
Enviado: 19 Jul 2007 06:09
por Pablo César
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:
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)
Enviado: 19 Jul 2007 10:09
por Augusto
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:
Código: Selecionar todos
public var_ext
param var_ext
// segue o prg normalmente usando a variável var_ext
Enviado: 19 Jul 2007 10:13
por Pablo César
Augusto escreveu:Código: Selecionar todos
public var_ext
param var_ext
// segue o prg normalmente usando a variável var_ext
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 ?
Enviado: 19 Jul 2007 11:03
por Maligno
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.
Enviado: 19 Jul 2007 11:29
por diego1504
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:
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
Enviado: 19 Jul 2007 11:47
por Maligno
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:
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.