GD Access    GD Access    Grupo de Discussão  Ir para Categorias  Grupos técnicos  Ir para Fóruns  Access    Calculo apartir do registro anterior.
Go
Novo
Procurar
Notificar
Ferramentas
Responder
  
-star Rating Vote!  Login/Cadastrar 
Programador Júnior

postado
Olá pessoal, gostaria de uma sugestão de como fazer em um controle de RH, a inclusão de férias de um funcionário. Tipo eu tenho um form onde tem o cadastro do funcionário tudo Ok. E gostaria de uma sugestão para fazer as férias. Um exemplo seria assim, um form q tivesse a matricula(já preenchida) data de admissao(já preenchida), periodo aq. incial das férias, periodo aq. final das férias (aqui q está o problema, gostaria que o periodo aq. inicial pegasse a data do periodo aq. final com um "dia" a mais e o periodo aq. final ficasse logo após com um "ano" a mais).
Deixa eu exemplificar q acho q fica melhor.
Campos:
matricula(12356), admissao(02/03/01), paqinicial(02/03/01), paqfinal(01/03/02), inicioferias(01/01/02), fimferias(15/01/02), dias(14), saldo(16).
Após outra inclusao, gostaria que os campos já viessem preenchidos menos os campos inicioferias e fimferias (q é onde o usuario informa a data q o funcionario tira ferias).
matricula(12356), admissao(02/03/01), paqinicial(02/03/02), paqfinal(01/03/03), inicioferias(00/00/00), fimferias(00/00/00), dias(0), saldo(0).
Fazer os calculos com as datas eu até sei, só nao sei fazer quando o usuário fazer inclusao de uma nova data, fazer com q os os campos peguem os valores do registro anterior.
Se alguém puder me dar uma sugestão...
Ou alguma outra idéia de como fazer.
Obrigado
Rafael
rafinus@pop.com.br

[ 12.03.2003, 08:45: Mensagem editada por: Sampaio lima ]
 
Postagens: 98 | Registrado: 17 January 2003Reply With QuoteReport This Post
Programador Sênior

postado Hide Post
"...só nao sei fazer quando o usuário fazer inclusao de uma nova data, fazer com q os os campos peguem os valores do registro anterior."

Veja este artigo:

http://support.microsoft.com/support/kb/articles/q101/0/81.asp
 
Postagens: 448 | Localização: São Paulo | Registrado: 04 April 2002Reply With QuoteReport This Post
Programador Júnior

postado Hide Post
Até ai blz...tudo certo só que tem um porém, eu gostaria de ao invés de ele só me dar o valor ;(que ele pegou do registro anterior); no formulário eu gostaria que ele tb gravasse na tabela.
Alguma dica..???
Microsoft
Obrigado
Rafael
rafinus@pop.com.br
 
Postagens: 98 | Registrado: 17 January 2003Reply With QuoteReport This Post
Programador Sênior

postado Hide Post
Depende do seu contexto, se voce está em um formulário onde uma caixa de texto (txtTeste) está acoplada ao campo da tabela onde deve ser gravado o valor retornado, é só colocar
ControlSource: =PrevRecVal(...)
Ops!
... é só colocar
txtTeste = PrevRecVal(...) em local apropriado.

[ 12.03.2003, 18:34: Mensagem editada por: Jorge Myslinski Filho ]
 
Postagens: 448 | Localização: São Paulo | Registrado: 04 April 2002Reply With QuoteReport This Post
Programador Júnior

postado Hide Post
Coloquei no evento após atualizar da minha cx de texto com a data de admissao, para atualizar a cx de texto txtPAqInicial que está acoplada na tabela Ferias.
txtPAqInicial = PrevRecVal([Formulário];"FMatricula";[FMatricula];"Admissao")
E dai ele me dá um erro de sintese...
Nao sei se estou fazendo certo q quando coloco na caixa de texto do PAqInicial
=PrevRecVal([Formulário];"FMatricula";[FMatricula];"Admissao")
ele funciona direito, pega os dados do registro anterior do campo Admissao.
Mas só q eu queria q ele pegasse os dados do registro anterior e gravasse na tabela...
Alguma sugestão..??
 
Postagens: 98 | Registrado: 17 January 2003Reply With QuoteReport This Post
Programador Sênior

postado Hide Post
Há uma diferença de sintaxe no Access quando passa-se parâmetros para uma função e ela é chamada diretamente das propriedades de um contrôle ou do código VBA da propriedade do contrôle. O separador dos parâmetros ora é ";", ora é ",". Assim:

Diretamente na propriedade:
ControlSource: =PrevRecVal([Formulário];"FMatricula";[FMatricula];"Admissao")

No código VBA:
txtPAqInicial = PrevRecVal([Formulário],"FMatricula",[FMatricula],"Admissao")

Espero que esta seja a única causa do erro.
 
Postagens: 448 | Localização: São Paulo | Registrado: 04 April 2002Reply With QuoteReport This Post
Programador Júnior

postado Hide Post
Jorge to com um problema q nao consigo resolver,
tenho o seguinte.
Tenho um cadastro de funcionarios, com várias tabelas, dentre elas uma tabela funcionarios e uma tabela ferias.
Criei um form para fazer o cadastro dos funcionarios com vários campos e guias, e numa dessas guias criei um subformulário para cadastrar as férias do funcionário.

A tabela do funcionário contém os seguintes campos
FMatricula - Relacionado com o mesmo campo da tabela funcionarios
Admissao - Relacionado com o mesmo campo da tabela funcionarios
PAqInicial
PAqFinal
Inicio
Fim
Dias
Saldo

Até ai blz, quando vou cadastrar as férias ele pega a matricula e a data de admissao automaticamente.
E no campo de admissao coloquei no evento ao sair os codigos para pegar os registros anteriores para q no proximo campo das férias ele já deixe as datas certas.

txtPAqInicial = DLookup("[PAqFinal]", "Ferias", "[FMatricula]=Forms![frmCadFunc]![SubFerias].Form![FMatricula]-1") + 1
txtPAqFinal = DLookup("[PAqFinal]", "Ferias", "[FMatricula]=Forms![frmCadFunc]![SubFerias].Form![Codigo]-1") + 365

Formulário do cadastro de funcionários é o CadFunc e o subformulario de ferias é o SubFerias.
Só q ele nao consegue pegar os campos anteriores.
Talvez seja pq nao tenho nenhum campo primario nessa tabela pois o campo FMatricula é o primario da tabela Funcioários, e eu só relacionei.
Só q quando eu crio um outro campo qualquer para ser o campo chave primaria e substituo no codigo ao trocar de funcionário ele vai puxar a data do registro anterior q é de outro funcionário.

Conseguiu entender..??
Será q tem como resolver...
Ou se tiver alguma ideia para eu criar um formulario para cadastrar as ferias dos funcionarios, mas tipo um negocio bem automatizado sem botoes, tipo o usuário só coloca o periodo de inicio e fim das ferias, e já sai os dias, saldo,e quando for cadastrar no outro ano as ferias novamente ele já puxe as datas corretas dos periodos aquisitivos para aquele ano.

Se puder me ajudar fico grato.

Rafael
rafinus@pop.com.br

[ 13.03.2003, 16:27: Mensagem editada por: Rafael Strapazzon ]
 
Postagens: 98 | Registrado: 17 January 2003Reply With QuoteReport This Post
Programador Sênior

postado Hide Post
Atenção para este trecho:

Using DLookup()
NOTE: This technique assumes you have a table with an ID field of a Number data type, and the ID values are not missing any number in sequential order. If your table does not meet these criteria, then you should use the "Using Code" method described later in this article.

Então DLookup não serve para o seu caso.

A função PrevRecVal() requer os parâmetros:

PARAMETERS:
' F - The form from which to get the previous value.
' KeyName - The name of the form's unique key field.
' KeyValue - The current record's key value.
' FieldNameToGet - The name of the field in the previous
' record from which to retrieve the value.

Então poderíamos usar:

txtPAqInicial = PrevRecVal(Me,"FMatricula",[FMatricula],"PAqInicial")

txtPAqFinal = PrevRecVal(Me,"FMatricula",[FMatricula],"PAqFinal")

Só que na tabela Ferias, FMatricula não pode ser um indice único já que a sua relação Funcionarios X Ferias certamente é 1 para muitos e portanto FMatricula repete-se n vezes.
Se você criar um campo que seja sequencial para cada FMatricula como no exemplo abaixo:

FMatricula..23 23 75 75 112 112 ....
Seq......... 1 2 1 2 1 2 ....

onde Seq pode ser o ano de referência da férias ou um sequêncial mesmo (1,2,3,...), então você poderia criar um indice FMatricula-Seq que seria único. Com isso acho que poderíamos usar:

txtPAqInicial = revRecVal(Me,"FMatrSeq",[FMatrSeq],"PAqInicial")

txtPAqFinal = PrevRecVal(Me,"FMatrSeq",[FMatrSeq],"PAqFinal")

Para obter o valor de Seq poderíamos usar algo como:
DMax("[Seq]";"Ferias";"[FMatricula]='" & txtFMatricula & "'") + 1

Restaria apenas a necessidade de um tratamento para quando fosse ser lançado o primeiro registro de férias do funcionário já que os valores PAqIninial e PAqFinal seriam de outro funcionário.

Concorda com o raciocínio? Bem, o que está escrito não foi depurado, pode haver aí algum erro estúpido então... faça suas críticas.
 
Postagens: 448 | Localização: São Paulo | Registrado: 04 April 2002Reply With QuoteReport This Post
Programador Sênior

postado Hide Post
Na mensagem anterior mantive a linha de solução que vinha sendo adotada. Outra forma de focar seria usar:
DLast("[PAqInicial]", "Ferias", "[FMatricula]=" & txtFMatricula) e
DLast("[PAqFinal]", "Ferias", "[FMatricula]=" & txtFMatricula)
Pense nisso!
 
Postagens: 448 | Localização: São Paulo | Registrado: 04 April 2002Reply With QuoteReport This Post
Programador Júnior

postado Hide Post
Jorge, tipo fiz vários testes mas nao está dando muito certo...
Estava pensando, será q nao seria mais fácil, fazer o seguinte.
Ter por base a data de admissao do funcionário e fazer calculos a partir dessa data...??
por ex.
A data de admissao de um funcionário foi
03/09/99.
Entao para cada registro de férias do funcionário ele fosse aumentando os anos

Primeira ferias:
PAqInicial seria 03/09/99
PAqFinal seria 02/09/00

Segunda:
PAqInicial seria 03/09/00
PAqFinal seria 02/09/01

e assim consecutivamente....
teria como bolar algo assim...???
Tipo eu tentei fazer, mas nao sei como fazer para ele ir aumentanto gradativamente, tipo primeiras ferias, aumenta 1 no digito ano, nas segundas aumenta +1 ou 2 nao sei...

Se vc puder me dar mais umas dicas fico muito grato.
Rafael
rafinus@pop.com.br
 
Postagens: 98 | Registrado: 17 January 2003Reply With QuoteReport This Post
Programador Sênior

postado Hide Post
Experimentou DLast()?
Para incrementar n anos a uma data:
dtFim = DateAdd("yyyy", n, dtInicio)
 
Postagens: 448 | Localização: São Paulo | Registrado: 04 April 2002Reply With QuoteReport This Post
Programador Júnior

postado Hide Post
Jorge consegui fazer funcionar ;usando o dlast; mais ou menos...
Agora só para eu implementar uma data q nao sei como fazer, tipo, para cada novo registro inserido aumentar 1 ano, no campo paqinicial, paqfinal...
Tem como...???
Rafael
 
Postagens: 98 | Registrado: 17 January 2003Reply With QuoteReport This Post
Programador Sênior

postado Hide Post
Está em minha mensagem anterior.

Para incrementar n anos a uma data:
dtFim = DateAdd("yyyy", n, dtInicio)

Portanto, uma vez obtida a data à qual vai ser adicionado 1 ano (registro anterior, tema da discussão) é só usar o DateAdd.
 
Postagens: 448 | Localização: São Paulo | Registrado: 04 April 2002Reply With QuoteReport This Post
  Powered by Social Strata  
 

GD Access    GD Access    Grupo de Discussão  Ir para Categorias  Grupos técnicos  Ir para Fóruns  Access    Calculo apartir do registro anterior.

©