MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


4 participantes

    [Resolvido]Alteração de rotina

    avatar
    mendesof
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 118
    Registrado : 30/12/2010

    [Resolvido]Alteração de rotina Empty Alteração de rotina

    Mensagem  mendesof 22/10/2011, 23:47

    Boas noites a todo o forum.

    Desculpando-me os demais, dirijo-me em especial ao Alexandre Neves pois toda a base de dados é construida com base numa rotina de sua autoria.

    O que eu pretendia é o seguinte:

    A tabela Feriados tem para cada funcionario vários periodos de férias (Inicio1, Fim1 ...Inicio2, Fim2 ...), onde "inicio" é a data em que o funcionario inicia as férias e "Fim" a data em que ternina. A rotina em cada periodo desses deveria colocar no horario do funcionario um L (Licença) e os turnos que lhe tocavam deveria passar para o seguinte funcionario. E assim sucessivamente, entrando novamente na rotina, terminando cada periodo de férias.


    Coloco em anexo bd exêmplo


    Última edição por mendesof em 24/10/2011, 19:42, editado 1 vez(es)
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8449
    Registrado : 05/11/2009

    [Resolvido]Alteração de rotina Empty Re: [Resolvido]Alteração de rotina

    Mensagem  Alexandre Neves 23/10/2011, 11:04

    Bom dia, mendes

    A rotatividade está um pouco embricada. Quando um funcionário estiver de férias, todos os outros avançam? Como estabelecer o ciclo do turno? Fica sem a regra pré-estabelecida?

    Depois de muito batalhar, criei-lhe este código:

    'Autor Alexandre Neves
    Dim DiaMes As Integer, MesTurno As Date
    Dim Inicio As Date, Fim As Date
    Dim Rst1 As DAO.Recordset, Rst2 As DAO.Recordset, Rst3 As DAO.Recordset
    Dim AvancosPorFerias As Integer

    If MsgBox("Confirmar a Rotina ? ", vbYesNo + vbQuestion, "Gestão") = vbYes Then
    Inicio = Format(Me.Inicio, "mm-01-yyyy") ' Format(InputBox("Introduza a data inicial para a elaboração da escala."), "mm-01-yyyy")
    Fim = Format(Me.Fim, "mm-01-yyyy") 'Format(InputBox("Introduza a data final para a elaboração da escala."), "mm-01-yyyy")

    CurrentDb.Execute "DELETE * FROM HorarioInicial;"
    Set Rst1 = CurrentDb.OpenRecordset("SELECT FuncionarioID, NomeTrat, Horas FROM Funcionarios;")
    Set Rst2 = CurrentDb.OpenRecordset("SELECT Turno FROM Turnos;")
    Set Rst3 = CurrentDb.OpenRecordset("SELECT Turno FROM Turnos1;")

    Rst1.MoveLast: Rst1.MoveFirst
    Rst2.MoveLast: Rst2.MoveFirst
    Rst3.MoveLast: Rst3.MoveFirst

    Do While Not Rst1.EOF

    Rst2.MoveFirst
    Rst2.Move Rst1.AbsolutePosition Mod Rst2.RecordCount
    Rst3.MoveFirst
    Rst3.Move Rst1.AbsolutePosition Mod Rst3.RecordCount

    For MesTurno = Inicio To Fim
    If Day(Format(MesTurno, "mm-dd-yyyy")) = 1 Then
    For DiaMes = 1 To DateSerial(Year(Format(MesTurno, "mm-dd-yyyy")), Month(Format(MesTurno, "mm-dd-yyyy")) + 1, 1) - DateSerial(Year(Format(MesTurno, "mm-dd-yyyy")), Month(Format(MesTurno, "mm-dd-yyyy")), 1)
    AvancosPorFerias = 0
    If Rst2.EOF Then Rst2.MoveFirst
    If Rst3.EOF Then Rst3.MoveFirst
    If DiaMes = 1 Then
    AvancaFerias1:
    If DCount("*", "Ferias", "FuncionarioID=" & Rst1(0) & " and (#" & Format(DateSerial(Year(MesTurno), Month(Format(MesTurno, "mm-dd-yyyy")), DiaMes), "mm-dd-yyyy") & "# Between Inicio1 and Fim1 or #" & Format(DateSerial(Year(MesTurno), Month(Format(MesTurno, "mm-dd-yyyy")), DiaMes), "mm-dd-yyyy") & "# Between Inicio2 and Fim2 or #" & Format(DateSerial(Year(MesTurno), Month(Format(MesTurno, "mm-dd-yyyy")), DiaMes), "mm-dd-yyyy") & "# Between Inicio3 and Fim3 or #" & Format(DateSerial(Year(MesTurno), Month(Format(MesTurno, "mm-dd-yyyy")), DiaMes), "mm-dd-yyyy") & "# Between Inicio4 and Fim4)") > 0 Then
    CurrentDb.Execute "INSERT INTO HorarioInicial(FuncionarioID,NomeTrat,Horas,Mes,1) VALUES ('" & Rst1(0) & "','" & Rst1(1) & "','" & Rst1(2) & "',#" & MesTurno & "#,'F');"
    Rst1.MoveNext: AvancosPorFerias = AvancosPorFerias + 1
    GoTo AvancaFerias1
    End If
    If Rst1!Horas = 7 Then
    CurrentDb.Execute "INSERT INTO HorarioInicial(FuncionarioID,NomeTrat,Horas,Mes,1) VALUES ('" & Rst1(0) & "','" & Rst1(1) & "','" & Rst1(2) & " ',#" & MesTurno & "#,'" & Rst2(0) & "');"
    Rst2.MoveNext
    Else
    CurrentDb.Execute "INSERT INTO HorarioInicial(FuncionarioID,NomeTrat,Horas,Mes,1) VALUES ('" & Rst1(0) & "','" & Rst1(1) & "','" & Rst1(2) & " ',#" & MesTurno & "#,'" & Rst3(0) & "');"
    Rst3.MoveNext
    End If
    Else
    AvancaFerias2:
    If DCount("*", "Ferias", "FuncionarioID=" & Rst1(0) & " and (#" & Format(DateSerial(Year(MesTurno), Month(Format(MesTurno, "mm-dd-yyyy")), DiaMes), "mm-dd-yyyy") & "# Between Inicio1 and Fim1 or #" & Format(DateSerial(Year(MesTurno), Month(Format(MesTurno, "mm-dd-yyyy")), DiaMes), "mm-dd-yyyy") & "# Between Inicio2 and Fim2 or #" & Format(DateSerial(Year(MesTurno), Month(Format(MesTurno, "mm-dd-yyyy")), DiaMes), "mm-dd-yyyy") & "# Between Inicio3 and Fim3 or #" & Format(DateSerial(Year(MesTurno), Month(Format(MesTurno, "mm-dd-yyyy")), DiaMes), "mm-dd-yyyy") & "# Between Inicio4 and Fim4)") > 0 Then
    CurrentDb.Execute "UPDATE HorarioInicial SET " & DiaMes & "='F' WHERE NomeTrat='" & Rst1(1) & "' and Mes=#" & MesTurno & "#;"
    Rst1.MoveNext: AvancosPorFerias = AvancosPorFerias + 1
    GoTo AvancaFerias2
    End If
    If Rst1!Horas = 7 Then
    CurrentDb.Execute "UPDATE HorarioInicial SET " & DiaMes & "='" & Rst2(0) & "' WHERE NomeTrat='" & Rst1(1) & "' and Mes=#" & MesTurno & "#;"
    Rst2.MoveNext
    Else
    CurrentDb.Execute "UPDATE HorarioInicial SET " & DiaMes & "='" & Rst3(0) & "' WHERE NomeTrat='" & Rst1(1) & "' and Mes=#" & MesTurno & "#;"
    Rst3.MoveNext
    End If
    End If
    Rst1.Move -AvancosPorFerias
    Next
    End If
    Next
    Rst1.MoveNext
    Loop
    Set Rst1 = Nothing: Set Rst2 = Nothing: Set Rst3 = Nothing

    MsgBox " Rotina Terminada ", vbExclamation, "Gestão"
    Me.Requery
    Call Form_Load
    Else
    DoCmd.CancelEvent
    Exit Sub
    End If

    veja se é o que pretende e como o problema não é a codificação do programa mas o seu fluxo, deve fazer, pelo menos para os casos mais complicados, um fluxograma.
    avatar
    mendesof
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 118
    Registrado : 30/12/2010

    [Resolvido]Alteração de rotina Empty Re: [Resolvido]Alteração de rotina

    Mensagem  mendesof 23/10/2011, 13:45

    Bom dia Alexandre.

    Grande código, grande rotina, grande Mestre.

    Só tem um pequeno pêlo. Quando o funcionário inicia as férias no dia 1 de qualquer mês, nesse mês a rotina coloca o funcionãrio seguinte duas vezez no mesmo mês.

    No restante está 100%
    avatar
    mendesof
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 118
    Registrado : 30/12/2010

    [Resolvido]Alteração de rotina Empty Re: [Resolvido]Alteração de rotina

    Mensagem  mendesof 23/10/2011, 21:53

    Alexandre Neves.

    Terá a ver com:
    If Day(Format(MesTurno, "mm-dd-yyyy")) = 1 Then

    ou com:
    If DiaMes = 1 Then
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8449
    Registrado : 05/11/2009

    [Resolvido]Alteração de rotina Empty Re: [Resolvido]Alteração de rotina

    Mensagem  Alexandre Neves 23/10/2011, 22:18

    Boa noite, mendes

    Pode experimentar no código para ver o resultado que convém.
    Quanto à mecânica, faça um fluxograma. depois, é só codificar.
    avatar
    mendesof
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 118
    Registrado : 30/12/2010

    [Resolvido]Alteração de rotina Empty Re: [Resolvido]Alteração de rotina

    Mensagem  mendesof 23/10/2011, 22:45

    Olá Alexandre.

    A repetição do mês do funcionário só acontece se as férias iniciarem no dia 1, se iniciarem no dia 2 já se processa normalmente e não há repetição. Se tiver a amabilidade de verificar a tabela após a rotina, no funcionário que inicia férias no dia 1 intercala o funcionário seguinte, mas depois repete novamente o mesmo funcionário. Isto só acontece para quem inicia férias no dia 1 de qualquer mês. Se iniciar noutro dia qualquer isto não acontece.
    avatar
    mendesof
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 118
    Registrado : 30/12/2010

    [Resolvido]Alteração de rotina Empty Re: [Resolvido]Alteração de rotina

    Mensagem  mendesof 23/10/2011, 23:11

    Alexandre.

    A ideia será que quando um funcionário entrar de férias a rotina seja efectuada pelos restantes de forma a manter o mesmo numero de elementos no turno de "N", que será o minimo possível para o número de funcionários. Os outros turnos poderá variar. Como saõ três grupos de 6 (18 funcionários) dará 3 de N, que terá de ser compensado quando 1 entrar de férias.
    avatar
    mendesof
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 118
    Registrado : 30/12/2010

    [Resolvido]Alteração de rotina Empty Re: [Resolvido]Alteração de rotina

    Mensagem  mendesof 23/10/2011, 23:22

    Alexandre.

    Eu tenho isto desenvolvido em excel, só que não me dá as mesmas potencialidades que o access, nomeadamente no aspecto de guardar os dados anteriores e possibilidades de relatórios. Por isso é que estou a tentar fazê-lo em access. Se entender ser facilitador para a compreensão do projecto poderei enviar para o seu mail o ficheiro em excel.

    Obrigado e desculpe a insistência.
    Assis
    Assis
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4772
    Registrado : 06/11/2009

    [Resolvido]Alteração de rotina Empty Re: [Resolvido]Alteração de rotina

    Mensagem  Assis 27/10/2011, 23:25

    Boa noite

    MendesOf o amigo Alexandre já lhe respondeu sobre as féria a começar no dia 1 ?


    .................................................................................
    *** Só sei que nada sei ***
    vieirasoft
    vieirasoft
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7304
    Registrado : 11/05/2010

    [Resolvido]Alteração de rotina Empty Re: [Resolvido]Alteração de rotina

    Mensagem  vieirasoft 14/11/2011, 11:26

    Como não houve retorno, o tópico passa a resolvido. Qualquer coisa reabra, por favor.

    Conteúdo patrocinado


    [Resolvido]Alteração de rotina Empty Re: [Resolvido]Alteração de rotina

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 2/5/2024, 08:43