[resolvido] Inserir valores alternados para cada linha

Moderador: Avelino Sampaio

Avatar do usuário
Damasceno Jr.
Mensagens: 456
Registrado em: 08 Jun 2015, 01:30
Localização: Medicilândia-Pará

[resolvido] Inserir valores alternados para cada linha

Mensagempor Damasceno Jr. » 15 Ago 2015, 18:18

Boa tarde pessoal...

Bom, minha questão é a seguinte:

Possuo uma tabela que contém marcações exportadas de um relógio de ponto, nesta tabela há um campo chamado [TIPO] que deixei para que a marcação seja classificada como entrada ou saída e um campo chamado [REL] de tipo númerico para que eu relacione uma entrada e uma saída. Até aqui tranquilo. Só que preciso de uma função que classifique os registros por funcionário e depois as marcações em ordem crescente, e venha inserindo no campo [TIPO], de forma alternada, "ENTRADA" e "SAÍDA" (nessa ordem) para cada funcionário, e no campo [REL] um número para a entrada e o mesmo número para sua saída, e assim sucessivamente. Eu até consigo pensar em algo, mas de forma muito complexa, e o pior, envolvendo as funções "D", o que não é nada viável se pensarmos na a quantidade de registros que esta tabela terá.

Consegui explicar direito? Alguém pode me dar uma luz? (risos)

Aguardo...
Você deve estar registrado e autenticado para ter acesso ao arquivo anexo.
Quanto mais o tempo passa, mais descubro e mais me apaixono por MS Access.

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.


Avatar do usuário
Avelino Sampaio
Mensagens: 1901
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Inserir valores alternados para cada linha

Mensagempor Avelino Sampaio » 15 Ago 2015, 19:02

Damasceno,

olhei a sua tabela mas não consegui entender o resultado que deseja chegar. Faça um lista aqui de como deveria sair a sequência para os dois primeiros funcionários.

Aguardamos
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

Avatar do usuário
Damasceno Jr.
Mensagens: 456
Registrado em: 08 Jun 2015, 01:30
Localização: Medicilândia-Pará

Re: Inserir valores alternados para cada linha

Mensagempor Damasceno Jr. » 15 Ago 2015, 20:52

No arquivo .txt que exporto do relógio de ponto vem apenas um identificador do funcionário (CPF por exemplo), e classificado pela marcação (data e hora).
Exemplo:

--------CPF-------|---------Marcação------ |--TIPO--|--REL--
111.111.111-11 | 14/08/2015 08:01:02 |---------|--------
222.222.222-22 | 14/08/2015 09:05:06 |---------|--------
222.222.222-22 | 14/08/2015 11:30:31 |---------|--------
111.111.111-11 | 14/08/2015 12:03:04 |---------|--------
222.222.222-22 | 14/08/2015 13:11:12 |---------|--------
111.111.111-11 | 14/08/2015 14:05:06 |---------|--------
111.111.111-11 | 14/08/2015 18:07:08 |---------|--------

Preciso que uma função interprete os dados classificados assim, primeiro por funcionário e só depois pela ordem da marcação:

--------CPF-------|---------Marcação------ |--TIPO--|--REL--
111.111.111-11 | 14/08/2015 08:01:02 |---------|--------
111.111.111-11 | 14/08/2015 12:03:04 |---------|--------
111.111.111-11 | 14/08/2015 14:05:06 |---------|--------
111.111.111-11 | 14/08/2015 18:07:08 |---------|--------
222.222.222-22 | 14/08/2015 09:05:06 |---------|--------
222.222.222-22 | 14/08/2015 11:30:31 |---------|--------
222.222.222-22 | 14/08/2015 13:11:12 |---------|--------

E que sejam atribuídos aos campos [TIPO] primeiro o valor entrada e depois saída, e ao campo [REL] um número que seja igual a sua entrada e sua saída, assim:

--------CPF-------|---------Marcação------ |--TIPO--|--REL--
111.111.111-11 | 14/08/2015 08:01:02 |Entrada|----1---
111.111.111-11 | 14/08/2015 12:03:04 |Saída---|----1---
111.111.111-11 | 14/08/2015 14:05:06 |Entrada|----2---
111.111.111-11 | 14/08/2015 18:07:08 |Saída---|----2---
222.222.222-22 | 14/08/2015 09:05:06 |Entrada|----1---
222.222.222-22 | 14/08/2015 11:30:31 |Saída---|----1---
222.222.222-22 | 14/08/2015 13:11:12 |Entrada|----2---

ou, a sequência do campo [REL] pode continuar, mas preciso que siga a mesma lógica (o número atribuído a sua entrada seja igual a sua saída):

--------CPF-------|---------Marcação------ |--TIPO--|--REL--
111.111.111-11 | 14/08/2015 08:01:02 |Entrada|----1---
111.111.111-11 | 14/08/2015 12:03:04 |Saída---|----1---
111.111.111-11 | 14/08/2015 14:05:06 |Entrada|----2---
111.111.111-11 | 14/08/2015 18:07:08 |Saída---|----2---
222.222.222-22 | 14/08/2015 09:05:06 |Entrada|----3---
222.222.222-22 | 14/08/2015 11:30:31 |Saída---|----3---
222.222.222-22 | 14/08/2015 13:11:12 |Entrada|----4---
Quanto mais o tempo passa, mais descubro e mais me apaixono por MS Access.

Avatar do usuário
Damasceno Jr.
Mensagens: 456
Registrado em: 08 Jun 2015, 01:30
Localização: Medicilândia-Pará

Re: Inserir valores alternados para cada linha

Mensagempor Damasceno Jr. » 16 Ago 2015, 06:31

Ufa... esbocei algo (me baseei em outro tópico) e consegui o resultado desejado , mas acho que dá pra ser melhorado o que fiz (e muito) para ganho de desempenho.
Troquei o nome do campo [TIPO] por [Entrada/Saida], e o campo [REL] por [Ponto].

Poderia analisar, Avelino? Grato

Código:
Dim rs As DAO.Recordset
Dim strsql As String
Dim intMinIDFunc As Integer
Dim j As Integer

intMinIDFunc = Nz(DMin("[IDFunc]", "tblPonto"), 0)

If intMinIDFunc = 0 Then Exit Function

Screen.MousePointer = 11

CurrentDb.Execute "UPDATE tblPonto SET tblPonto.[Entrada/Saída] = Null WHERE ((Not (tblPonto.[Entrada/Saída]) Is Null));"
CurrentDb.Execute "UPDATE tblPonto SET tblPonto.Ponto = Null WHERE ((Not (tblPonto.Ponto) Is Null));"

Do While intMinIDFunc <> 0

strsql = "SELECT tblPonto.IDFunc, tblPonto.[Hora Alterada], tblPonto.Hora, tblPonto.Ponto, tblPonto.[Entrada/Saída], tblPonto.Código " & _
"FROM tblPonto WHERE (((tblPonto.IDFunc)= " & intMinIDFunc & ")) " & _
"ORDER BY tblPonto.IDFunc, tblPonto.[Hora Alterada], tblPonto.Hora;"

Set rs = CurrentDb.OpenRecordset(strsql, 8)
Do While Not rs.EOF
For j = 1 To DCount("[idfunc]", "tblponto", "[idfunc]=" & intMinIDFunc)
strsql = "UPDATE tblPonto SET tblPonto.Ponto = " & IIf(j Mod 2 <> 0, j, j - 1) & ", tblPonto.[Entrada/Saída] = '" & IIf(j Mod 2 <> 0, "1-ENTRADA", "2-SAÍDA") & "' " & _
"WHERE (((tblPonto.Código)= " & rs![Código] & "));"
CurrentDb.Execute strsql
rs.MoveNext
Next j
Loop
rs.Close
intMinIDFunc = Nz(DMin("[IDFunc]", "tblPonto", "[IDFunc] > " & intMinIDFunc), 0)
Loop
Set rs = Nothing
Screen.MousePointer = 0
MsgBox "Marcações Organizadas", vbInformation, "Aviso"
Você deve estar registrado e autenticado para ter acesso ao arquivo anexo.
Quanto mais o tempo passa, mais descubro e mais me apaixono por MS Access.

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.


Avatar do usuário
Avelino Sampaio
Mensagens: 1901
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Inserir valores alternados para cada linha

Mensagempor Avelino Sampaio » 16 Ago 2015, 10:11

Damasceno,

teste com este código e veja se atende:

Código:
Public Sub fncOrganizaPonto()
Dim rs As DAO.Recordset
Dim id_anterior&
Dim strSql$
Dim p%, j%

strSql = "SELECT * FROM tblPonto ORDER BY idFunc,Hora;"
'carrega tabela ordenada por idFunc e hora
Set rs = CurrentDb.OpenRecordset(strSql)
Do While Not rs.EOF
' verifica se trocou de funcionário
If rs!idFunc <> id_anterior Then
p = 1: j = 1
rs.Edit
rs("Entrada/saída") = "1-Entrada": rs!ponto = p
rs.Update
id_anterior = rs!idFunc
Else
If (j Mod 2) = 0 Then
rs.Edit
rs("Entrada/saída") = "2-Saida": rs!ponto = p
rs.Update
p = p + 1
Else
rs.Edit
rs("Entrada/saída") = "2- Entrada": rs!ponto = p
rs.Update
End If
End If
j = j + 1
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
MsgBox "Marcações Organizadas", vbInformation, "Aviso"
End Sub


Aguardamos
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

Avatar do usuário
Damasceno Jr.
Mensagens: 456
Registrado em: 08 Jun 2015, 01:30
Localização: Medicilândia-Pará

Re: Inserir valores alternados para cada linha

Mensagempor Damasceno Jr. » 16 Ago 2015, 14:59

Mestre, no quesito desempenho há nem comparação. rsrs
Obrigado pela ajuda, vou cuidar de estudar Recordset.
Problema resolvido. Grato.
Quanto mais o tempo passa, mais descubro e mais me apaixono por MS Access.

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.



Voltar para “Tabelas”

Quem está online

Usuários neste fórum: Nenhum usuário registrado e 2 visitantes