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


+2
Alexandre Neves
dteixa
6 participantes

    [Resolvido]Escala de Serviço

    dteixa
    dteixa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 281
    Registrado : 15/01/2012

    [Resolvido]Escala de Serviço Empty [Resolvido]Escala de Serviço

    Mensagem  dteixa 15/12/2012, 02:27

    Boas
    Mais uma vez venho pedir ajuda a todos vós, mestres do access.
    quero fazer uma escala de serviço para 10 funcionarios, sistema rotativo (todos trabalham com todos)turnos de oito horas com dois funcionarios e no maximo 40 horas por semana
    a-manel
    b-zé
    c-tiago
    d-pedro
    e-maria
    f-....
    g-....
    h-....
    i-....
    j-....
    o esquema da escala é este mas pode ser outro qualquer:
    [Resolvido]Escala de Serviço EscalaVer imagem grande

    alguem me pode ajudar?


    Última edição por dteixa em 19/12/2012, 17:31, 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 : 8498
    Registrado : 05/11/2009

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Alexandre Neves 15/12/2012, 19:26

    Boa tarde, dteixa
    Crie tabela com funcionários e outra com turnos. Crie código para preencher os turnos a partir das combinaçõe, 2 a 2, dos funcionários.
    Tenha em consideração que existem férias, doença, licenças e outras ausências. Pense nos casos que tenha que alterar com o decorrer da execução dos turnos


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    dteixa
    dteixa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 281
    Registrado : 15/01/2012

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  dteixa 16/12/2012, 01:20

    Boas
    Alexandre, falas bem e bonito, lol, mas o problema é esse,
    entendes-te direitinho o esquema mas não sei nem por onde começar, já fiz as tabelas mas na hora de calcular os turnos nada acontece,
    ele deve calcular os turnos aleatoriamente mas tendo em atenção os períodos proibidos dos funcionários ( ferias, doença, outros) definidos por mim.
    agradeço qualquer ajuda, penso que este tema ira ajudar mais gente.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Alexandre Neves 16/12/2012, 10:22

    Bom dia,
    1º Disponibiliza as tabelas
    2º A escala é aleatória? ou pode ser organizada?


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    dteixa
    dteixa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 281
    Registrado : 15/01/2012

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  dteixa 16/12/2012, 16:28

    Boas
    a escala pode ser de qualquer maneira e feitio desde que respeite o seguinte,
    -8 horas por dia
    -em média 40horas por semana (podem ser menos, e é media anual)
    -no mínimo 2 dias de folga por semana
    -dois operadores por turno
    -tenha atenção as ausências.

    aki vai a BD
    Anexos
    [Resolvido]Escala de Serviço AttachmentEscala de Serviço.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (21 Kb) Baixado 383 vez(es)
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Alexandre Neves 16/12/2012, 18:00

    Boa tarde,
    Cole o código num módulo e execute o procedimento
    Option Compare Database
    Option Explicit
    'código criado por Alexandre Neves
    'em 2012-12-15
    'para dteixa
    'do fórum MaximoAccess

    Sub CriaTurnos()
    Dim RstOperadores As DAO.Recordset, RstTurnos As DAO.Recordset
    Dim dtData As Date, Inicio As Date, Fim As Date, Turno As Byte

    Set RstOperadores = CurrentDb.OpenRecordset("SELECT * FROM Operadores;")
    Set RstTurnos = CurrentDb.OpenRecordset("SELECT * FROM Turnos;")
    Inicio = #1/1/2013#
    Fim = #12/31/2013#

    For dtData = Inicio To Fim
    For Turno = 1 To 3
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica1:
    If Not Trabalha(RstOperadores("Nome"), dtData) Then
    RstOperadores.MoveNext
    GoTo Verifica1
    End If
    RstTurnos.AddNew
    RstTurnos(1) = dtData: RstTurnos(Turno + 1) = RstOperadores("Letra")
    RstOperadores.MoveNext
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica2:
    If Not Trabalha(RstOperadores("Nome"), dtData) Then
    RstOperadores.MoveNext
    GoTo Verifica2
    End If

    RstTurnos(Turno + 1) = RstTurnos(Turno + 1) & "," & RstOperadores("Letra")
    RstTurnos.Update
    RstOperadores.MoveNext
    Next
    Next
    End Sub

    Function Trabalha(Operador As String, dtData As Date) As Boolean
    If DCount("*", "Ausencias", "Operador='" & Operador & "' and #" & Format(dtData, "m-d-yyyy") & "# BETWEEN Inicio and Fim") = 0 Then
    Trabalha = True
    Else
    Trabalha = False
    End If
    End Function


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    dteixa
    dteixa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 281
    Registrado : 15/01/2012

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  dteixa 16/12/2012, 20:43

    Bravo Alexandre, muito bom mesmo.
    porem...
    há três coisas que eu pretendia se for possível,

    - os três turnos saírem na mesma linha do dia,
    - as parelhas estão a sair sempre as mesmas ao longo do ano e a ideia era mudar a cada semana ou a cada mês, (todos a trabalhar com todos),
    - nos dias de feriado os campos da tabela (formulário ou relatório) mudarem de cor.

    se puderes só mais este pequeno contributo fico muito agradecido.
    mais uma vez muitos parabéns.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Alexandre Neves 16/12/2012, 20:50

    Para registar na mesma linha
    Option Compare Database
    Option Explicit
    'código criado por Alexandre Neves
    'em 2012-12-15
    'para dteixa
    'do fórum MaximoAccess

    Sub CriaTurnos()
    Dim RstOperadores As DAO.Recordset, RstTurnos As DAO.Recordset
    Dim dtData As Date, Inicio As Date, Fim As Date, Turno As Byte

    Set RstOperadores = CurrentDb.OpenRecordset("SELECT * FROM Operadores;")
    Set RstTurnos = CurrentDb.OpenRecordset("SELECT * FROM Turnos;")
    Inicio = #1/1/2013#
    Fim = #12/31/2013#

    For dtData = Inicio To Fim
    RstTurnos.AddNew
    RstTurnos(1) = dtData
    For Turno = 1 To 3
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica1:
    If Not Trabalha(RstOperadores("Nome"), dtData) Then
    RstOperadores.MoveNext
    GoTo Verifica1
    End If
    RstTurnos(Turno + 1) = RstOperadores("Letra")
    RstOperadores.MoveNext
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica2:
    If Not Trabalha(RstOperadores("Nome"), dtData) Then
    RstOperadores.MoveNext
    GoTo Verifica2
    End If
    RstTurnos(Turno + 1) = RstTurnos(Turno + 1) & "," & RstOperadores("Letra")
    RstOperadores.MoveNext
    Next
    RstTurnos.Update
    Next
    End Sub

    Function Trabalha(Operador As String, dtData As Date) As Boolean
    If DCount("*", "Ausencias", "Operador='" & Operador & "' and #" & Format(dtData, "m-d-yyyy") & "# BETWEEN Inicio and Fim") = 0 Then Trabalha = True
    End Function

    Para a rotação dos operadores a cada semana, terás de dizer como deve ser efectuada
    Para a marcação da cor no campo da tabela, julgo não ser possível. A coloração deve ser feita no relatório ou formulário


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    dteixa
    dteixa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 281
    Registrado : 15/01/2012

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  dteixa 17/12/2012, 00:04

    Obrigado Alexandre, está a ficar ótimo,
    A rotação dos operadores pode ser de qualquer maneira, sem logica nenhuma, pode ser a cada 5 dias ou a seguir a uma semana ou 15 dias ou um mês.
    A ideia é que ao longo do ano todos os operadores tenham trabalhado com todos os restantes.

    Para terminar só mais uma coisa, se der,
    é possível num campo novo a seguir aos turnos mostrar a letra de quem esta "ausente" por cada dia?
    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]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Assis 17/12/2012, 14:29

    Teixa

    Tem uma tabela de feriados.
    Mas continua a marcar nos feriados.


    .................................................................................
    *** Só sei que nada sei ***
    dteixa
    dteixa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 281
    Registrado : 15/01/2012

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  dteixa 17/12/2012, 16:39

    Boas Assis
    è mesmo para marcar nos feriados, porque este serviço é feito 24horas por dia 365 dias por ano.
    a tabela feriados vai servir para assinalar no relatorio que esse dia é feriado, uma vez que são pagos a parte.
    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]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Assis 17/12/2012, 18:06

    DTeixa

    Veja o meu exemplo, só que para mim interessava que não marcasse os feriados:
    Só o Mestre Alexandre pode ajudar...


    Última edição por Assis em 19/12/2012, 18:12, editado 1 vez(es)


    .................................................................................
    *** Só sei que nada sei ***
    dteixa
    dteixa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 281
    Registrado : 15/01/2012

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  dteixa 17/12/2012, 18:34

    Assis,
    o teu exemplo não funciona,
    o FrmCalender fica em branco e bloqueia o access
    fora isso está muito bom
    parabens
    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]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Assis 17/12/2012, 18:46

    Teixa

    Qual a sua versão access?

    Aqui no meu versão 2007 funciona perfeito.

    Abro o formulário "Rotina"

    Escolho a data inicio e fim e ... perfeito


    .................................................................................
    *** Só sei que nada sei ***
    dteixa
    dteixa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 281
    Registrado : 15/01/2012

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  dteixa 17/12/2012, 18:48

    tenho access 2007
    meti a por as datas diretas nos campos inicio e fim a assim já dá
    esta muito bom
    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]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Assis 17/12/2012, 18:57

    Teixa
    Consegue abrir o frmcalendar direto ?


    .................................................................................
    *** Só sei que nada sei ***
    dteixa
    dteixa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 281
    Registrado : 15/01/2012

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  dteixa 17/12/2012, 19:11

    não,
    fica em branco e bloqueia o access
    tenho de recorrer ao gestor de tarefas para conseguir encerrar
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Alexandre Neves 17/12/2012, 19:19

    Boa tarde, dteixa
    Crie campo Descanso(texto)
    Option Compare Database
    Option Explicit
    'código criado por Alexandre Neves
    'em 2012-12-15
    'para dteixa
    'do fórum MaximoAccess

    Sub CriaTurnos()
    Dim RstOperadores As DAO.Recordset, RstTurnos As DAO.Recordset
    Dim dtData As Date, Inicio As Date, Fim As Date, Turno As Byte

    Set RstOperadores = CurrentDb.OpenRecordset("SELECT * FROM Operadores;")
    Set RstTurnos = CurrentDb.OpenRecordset("SELECT * FROM Turnos;")
    Inicio = #1/1/2013#
    Fim = #12/31/2013#

    For dtData = Inicio To Fim
    RstTurnos.AddNew
    RstTurnos(1) = dtData
    For Turno = 1 To 3
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica1:
    If Not Trabalha(RstOperadores("Nome"), dtData) Then
    RstOperadores.MoveNext
    GoTo Verifica1
    End If
    RstTurnos(Turno + 1) = RstOperadores("Letra")
    RstOperadores.MoveNext
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica2:
    If Not Trabalha(RstOperadores("Nome"), dtData) Then
    RstOperadores.MoveNext
    GoTo Verifica2
    End If
    RstTurnos(Turno + 1) = RstTurnos(Turno + 1) & "," & RstOperadores("Letra")
    RstOperadores.MoveNext
    Next
    RstTurnos.Update
    Next

    RstTurnos.MoveFirst
    Do While Not RstTurnos.EOF
    RstOperadores.MoveFirst
    RstTurnos.Edit
    Do While Not RstOperadores.EOF
    If InStr(1, RstTurnos(2) & RstTurnos(3) & RstTurnos(4), RstOperadores("Letra")) = 0 Then
    RstTurnos("Descanso") = RstTurnos("Descanso") & RstOperadores("Letra") & ","
    End If
    RstOperadores.MoveNext
    Loop
    RstTurnos("Descanso") = Mid(RstTurnos("Descanso"), 1, Len(RstTurnos("Descanso")) - 1)
    RstTurnos.Update
    RstTurnos.MoveNext
    Loop
    Set RstTurnos = Nothing: Set RstOperadores = Nothing
    End Sub

    Function Trabalha(Operador As String, dtData As Date) As Boolean
    If DCount("*", "Ausencias", "Operador='" & Operador & "' and #" & Format(dtData, "m-d-yyyy") & "# BETWEEN Inicio and Fim") = 0 Then Trabalha = True
    End Function


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Alexandre Neves 17/12/2012, 19:22

    Relativamente à rotação, eu sei o que quis dizer. Não estou a ver como implementar em termos lógicos. Para tal, descreva a lógica para transformar em código


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    dteixa
    dteixa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 281
    Registrado : 15/01/2012

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  dteixa 17/12/2012, 19:29

    Boas Alexandre,
    muito obrigado, estas a ser um amigão com a ajuda,

    este acrescento (descanso) tambem esta bom e pode ficar mas eu pretendia era que mostra-se quem esta ausente vindo da tabela AUSENCIAS.

    em relação a alternancia dos turnos, é possivel alguma coisa?
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Alexandre Neves 17/12/2012, 19:32

    Não percebi. Pretende que os operadores que já constem na tabela de ausências não sejam considerados durante esses períodos?
    Em relação à alternância dos turnos, é melhor indicar como faz manualmente para se transformar em código (tem de haver lógica)


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    dteixa
    dteixa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 281
    Registrado : 15/01/2012

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  dteixa 17/12/2012, 19:43

    Sim é isso mesmo, operadores na tabela de ausencias não devem entrar nos turnos, e ao mesmo tempo que calcula o turnos mostrar tambem num coluna a semelhança do "Descanso" quem esta "Ausente"

    em relação a rotatividade imagina,
    o Operador "A" trabalha 10 turnos com o "B", depois trabalha com o "C" mais 10 turnos, a seguir com o "D" mais 10.
    quando digo 10turnos podem ser outro nº de turnos qualquer, o que importa que

    o "A" trabalhe com o "B, C, D, F, G, H, J, K e L"
    o "B" trabalhe com o "A, C, D, F, G, H, J, K e L"
    o "C" trabalhe com o "A, B, D, F, G, H, J, K e L"
    Etc.

    Grato por tudo
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Alexandre Neves 17/12/2012, 22:44

    Não diga "não importa", diga concisamente como devem ser feitos os turnos.
    Faça-os à mão no primeiro ciclo até que se repita o processo


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    dteixa
    dteixa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 281
    Registrado : 15/01/2012

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  dteixa 17/12/2012, 22:46

    Very Happy
    Alexandre ve a foto que está no primeiro post deste topico la tem como funciona a escala atual
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Alexandre Neves 17/12/2012, 22:47

    Qual foi a lógica da construção?
    Sem lógica não é possível programar


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    dteixa
    dteixa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 281
    Registrado : 15/01/2012

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  dteixa 17/12/2012, 23:12

    entendo,
    porem ate aqui não havia logica nenhuma, por isso é que quero implementar este sistema, mas vamos imaginar que a rotatividade se faz a cada mês.


    outra coisa que vi agora a funcionar mal no teu código, é que se meter o ultima operador "L" de ferias da erro e para a macro.

    If Not Trabalha(RstOperadores("Nome"), dtData) Then
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Alexandre Neves 18/12/2012, 19:11

    Onde tem
    RstOperadores.MoveNext
    coloque
    if RstOperadores.eof then RstOperadores.Movefirst else RstOperadores.MoveNext


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    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]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Assis 18/12/2012, 19:18

    Alexandre
    Estou a acompanhar este tópico.

    Como por a não marcar nos feriados que estão na tabela feriados.

    Obrigado


    .................................................................................
    *** Só sei que nada sei ***
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Alexandre Neves 18/12/2012, 19:39

    Olá Assis,
    Não escalar os operadores nos feriados?


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    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]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Assis 18/12/2012, 19:43

    Ola Alexandre

    Sim


    .................................................................................
    *** Só sei que nada sei ***
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Alexandre Neves 18/12/2012, 19:50

    Não testei a formatação da data, mas deve funcionar
    Function Trabalha(Operador As String, dtData As Date) As Boolean
    If DCount("*", "Ausencias", "Operador='" & Operador & "' and #" & Format(dtData, "m-d-yyyy") & "# BETWEEN Inicio and Fim") = 0 _
    and DCount("*", "Feriados", "Feriados=#" & Format(dtData, "mm-dd-yyyy") & "#") = 0 Then
    Trabalha = True
    End If
    End Function


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    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]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Assis 18/12/2012, 20:09

    Fica tudo amarelo

    Function Trabalha(Operador As String, dtData As Date) As Boolean
    If DCount("*", "Ausencias", "Operador='" & Operador & "' and #" & Format(dtData, "m-d-yyyy") & "# BETWEEN Inicio and Fim") = 0 _
    and DCount("*", "Feriados", "Feriados=#" & Format(dtData, "mm-dd-yyyy") & "#") = 0 Then
    Trabalha = True

    End If
    End Function


    .................................................................................
    *** Só sei que nada sei ***
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Alexandre Neves 18/12/2012, 22:39

    Deve ser assim
    Option Compare Database
    Option Explicit
    'código criado por Alexandre Neves
    'em 2012-12-15
    'para dteixa
    'do fórum MaximoAccess

    Sub CriaTurnos()
    Dim RstOperadores As DAO.Recordset, RstTurnos As DAO.Recordset
    Dim dtData As Date, Inicio As Date, Fim As Date, Turno As Byte

    Set RstOperadores = CurrentDb.OpenRecordset("SELECT * FROM Operadores;")
    Set RstTurnos = CurrentDb.OpenRecordset("SELECT * FROM Turnos;")
    Inicio = #1/1/2013#
    Fim = #12/31/2013#

    For dtData = Inicio To Fim
    If DCount("*", "Feriados", "Feriados=#" & Format(dtData, "mm-dd-yyyy") & "#") = 0 Then
    RstTurnos.AddNew
    RstTurnos(1) = dtData
    For Turno = 1 To 3
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica1:
    If Not Trabalha(RstOperadores("Nome"), dtData) Then
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    GoTo Verifica1
    End If
    RstTurnos(Turno + 1) = RstOperadores("Letra")
    RstOperadores.MoveNext
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica2:
    If Not Trabalha(RstOperadores("Nome"), dtData) Then
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    GoTo Verifica2
    End If
    RstTurnos(Turno + 1) = RstTurnos(Turno + 1) & "," & RstOperadores("Letra")
    RstOperadores.MoveNext
    Next
    RstTurnos.Update
    End If
    Next

    RstTurnos.MoveFirst
    Do While Not RstTurnos.EOF
    RstOperadores.MoveFirst
    RstTurnos.Edit
    Do While Not RstOperadores.EOF
    If InStr(1, RstTurnos(2) & RstTurnos(3) & RstTurnos(4), RstOperadores("Letra")) = 0 Then
    RstTurnos("Descanso") = RstTurnos("Descanso") & RstOperadores("Letra") & ","
    End If
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    Loop
    RstTurnos("Descanso") = Mid(RstTurnos("Descanso"), 1, Len(RstTurnos("Descanso")) - 1)
    RstTurnos.Update
    RstTurnos.MoveNext
    Loop
    Set RstTurnos = Nothing: Set RstOperadores = Nothing
    End Sub

    Function Trabalha(Operador As String, dtData As Date) As Boolean
    If DCount("*", "Ausencias", "Operador='" & Operador & "' and #" & Format(dtData, "m-d-yyyy") & "# BETWEEN Inicio and Fim") = 0 Then Trabalha = True
    End Function


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    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]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Assis 18/12/2012, 23:01

    Obrigado Alexandre
    Só tive de mudar aqui o nome do campo da data do feriado.

    If DCount("*", "Feriados", "DataFeriado=#" & Format(dtData, "mm-dd-yyyy") & "#") = 0 Then

    Bom Natal


    .................................................................................
    *** Só sei que nada sei ***
    dteixa
    dteixa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 281
    Registrado : 15/01/2012

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  dteixa 19/12/2012, 01:01

    Boas
    obrigado a ambos, mas continua a não funcionar

    Alexandre
    continua a não dar certo quando o ultimo operador está de ferias, o código para no 1º dia de ferias desse operador

    Assis
    agora em casa ao abrir o teu exemplo diz (tabela ou consulta ANOS em falta)
    podes postar aqui de novo o teu ex.
    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]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Assis 19/12/2012, 10:33

    Teixa Bom dia

    O exemplo está na mensagem nª 12 e não dá erro, pois já fiz experiencia no PC de um amigo.

    Se alguem que fez o download aqui do forum, agradeço que me informe se bloqueia o PC, como diz o amigo Teixa na mensagem Nº 13 , e 17.

    Versão 2007

    Obrigado





    .................................................................................
    *** Só sei que nada sei ***
    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]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Assis 19/12/2012, 13:09

    Boa tarde Alexandre

    Estou a tentar também não marcar os sabados e domingos, juntamente com os feriados.

    Acrescentei o que está a vermelho, não dá erro, não marca os feriados, mas marca os sabados e domingos. Aonde estou a errar ?

    If DCount("*", "Feriados", "DataFeriado=#" & Format(dtData, "mm-dd-yyyy") & "#") = 0 _
    And (Weekday(dtData) = 1) = "#" & Format(dtData, "mm-dd-yyyy") & "#" = 0 Then


    Obrigado


    .................................................................................
    *** Só sei que nada sei ***
    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]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Assis 19/12/2012, 14:52

    Boa tarde

    Alexandre

    Cheguei lá

    For dtData = Inicio To Fim
    If DCount("*", "Feriados", "DataFeriado=#" & Format(dtData, "mm-dd-yyyy") & "#") = 0 _
    And Weekday(dtData) <> 1 And Weekday(dtData) <> 7 Then

    Não marca Sabados domingos e feriados.
    Mas também tem a opção de marcar todos os dias.

    Obrigado pelas lições


    .................................................................................
    *** Só sei que nada sei ***
    dteixa
    dteixa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 281
    Registrado : 15/01/2012

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  dteixa 19/12/2012, 17:34

    Boas
    em casa estou com o access 2010 e também não funciona dá um erro
    o erro ´este aqui:
    [Resolvido]Escala de Serviço ErrolhlVer imagem grande
    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]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Assis 19/12/2012, 18:13

    DTeixa
    Teste
    Faça agora o Download


    .................................................................................
    *** Só sei que nada sei ***
    dteixa
    dteixa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 281
    Registrado : 15/01/2012

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  dteixa 19/12/2012, 18:50

    Boas Assis
    isso que fizeste já eu tinha feito de apagar a linha do CAnos
    porem ao abrir o frmcalendar dá um novo erro e assinala no código esta linha:

    With Frm
    .Painting = False

    lngWidth = .Width * sngHorzFactor
    lngHeaderHeight = .Section(Access.acHeader).Height * sngVertFactor
    lngDetailHeight = .Section(Access.acDetail).Height * sngVertFactor
    lngFooterHeight = .Section(Access.acFooter).Height * sngVertFactor

    O erro é esse aqui:
    [Resolvido]Escala de Serviço Erro2Ver imagem grande
    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]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Assis 19/12/2012, 18:57

    Não tenho o 2010


    .................................................................................
    *** Só sei que nada sei ***
    dteixa
    dteixa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 281
    Registrado : 15/01/2012

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  dteixa 19/12/2012, 20:52

    Bom, pelo que pude aqui observar falta-me o calendar ActiveX.
    Alguém sabe como posso obtê-lo e como instalar este controle?
    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]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Assis 19/12/2012, 22:26

    Boa noite Alexandre

    A rotina por si criada seleciona 2 operadores por dia.
    Como fazer para selecionar 3 ou mais.

    Obrigado


    .................................................................................
    *** Só sei que nada sei ***
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Alexandre Neves 20/12/2012, 00:19

    Boa noite, Assis
    Sub CriaTurnos()
    Dim RstOperadores As DAO.Recordset, RstTurnos As DAO.Recordset
    Dim dtData As Date, Inicio As Date, Fim As Date, Turno As Byte

    Set RstOperadores = CurrentDb.OpenRecordset("SELECT * FROM Operadores;")
    Set RstTurnos = CurrentDb.OpenRecordset("SELECT * FROM Turnos;")
    Inicio = #1/1/2013#
    Fim = #12/31/2013#

    For dtData = Inicio To Fim
    If DCount("*", "Feriados", "Feriados=#" & Format(dtData, "mm-dd-yyyy") & "#") = 0 Then
    RstTurnos.AddNew
    RstTurnos(1) = dtData
    For Turno = 1 To 3
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica1:
    If Not Trabalha(RstOperadores("Nome"), dtData) Then
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    GoTo Verifica1
    End If
    RstTurnos(Turno + 1) = RstOperadores("Letra")
    RstOperadores.MoveNext
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica2:
    If Not Trabalha(RstOperadores("Nome"), dtData) Then
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    GoTo Verifica2
    End If
    RstTurnos(Turno + 1) = RstTurnos(Turno + 1) & "," & RstOperadores("Letra")
    RstOperadores.MoveNext
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica3:
    If Not Trabalha(RstOperadores("Nome"), dtData) Then
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    GoTo Verifica3
    End If
    RstTurnos(Turno + 1) = RstTurnos(Turno + 1) & "," & RstOperadores("Letra")
    RstOperadores.MoveNext
    Next
    RstTurnos.Update
    End If
    Next

    RstTurnos.MoveFirst
    Do While Not RstTurnos.EOF
    RstOperadores.MoveFirst
    RstTurnos.Edit
    Do While Not RstOperadores.EOF
    If InStr(1, RstTurnos(2) & RstTurnos(3) & RstTurnos(4), RstOperadores("Letra")) = 0 Then
    RstTurnos("Descanso") = RstTurnos("Descanso") & RstOperadores("Letra") & ","
    End If
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    Loop
    RstTurnos("Descanso") = Mid(RstTurnos("Descanso"), 1, Len(RstTurnos("Descanso")) - 1)
    RstTurnos.Update
    RstTurnos.MoveNext
    Loop
    Set RstTurnos = Nothing: Set RstOperadores = Nothing
    End Sub


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Alexandre Neves 20/12/2012, 00:43

    Para registar Ausencia, criar campo 'Ausencia' na tabela turnos
    Sub CriaTurnos()
    Dim RstOperadores As DAO.Recordset, RstTurnos As DAO.Recordset
    Dim dtData As Date, Inicio As Date, Fim As Date, Turno As Byte

    Set RstOperadores = CurrentDb.OpenRecordset("SELECT * FROM Operadores;")
    Set RstTurnos = CurrentDb.OpenRecordset("SELECT * FROM Turnos;")
    Inicio = #1/1/2013#
    Fim = #12/31/2013#

    ''''
    CurrentDb.Execute "DELETE * FROM Turnos"
    ''''
    For dtData = Inicio To Fim
    If DCount("*", "Feriados", "Feriados=#" & Format(dtData, "mm-dd-yyyy") & "#") = 0 Then
    RstTurnos.AddNew
    RstTurnos(1) = dtData
    For Turno = 1 To 3
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica1:
    If Not Trabalha(RstOperadores("Nome"), dtData) Then
    RstTurnos("Ausencia") = RstTurnos("Ausencia") & RstOperadores("Letra") & ","
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    GoTo Verifica1
    End If
    RstTurnos(Turno + 1) = RstOperadores("Letra")
    RstOperadores.MoveNext
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica2:
    If Not Trabalha(RstOperadores("Nome"), dtData) Then
    RstTurnos("Ausencia") = RstTurnos("Ausencia") & RstOperadores("Letra") & ","
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    GoTo Verifica2
    End If
    RstTurnos(Turno + 1) = RstTurnos(Turno + 1) & "," & RstOperadores("Letra")
    RstOperadores.MoveNext
    If RstOperadores.EOF Then RstOperadores.MoveFirst
    Verifica3:
    If Not Trabalha(RstOperadores("Nome"), dtData) Then
    RstTurnos("Ausencia") = RstTurnos("Ausencia") & RstOperadores("Letra") & ","
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    GoTo Verifica3
    End If
    RstTurnos(Turno + 1) = RstTurnos(Turno + 1) & "," & RstOperadores("Letra")
    'MsgBox Mid(RstTurnos("Ausencia"), 1, Len(RstTurnos("Ausencia")) - 1)
    If Len(RstTurnos("Ausencia")) > 0 And Right(RstTurnos("Ausencia"), 1) = "," Then RstTurnos("Ausencia") = Mid(RstTurnos("Ausencia"), 1, Len(RstTurnos("Ausencia")) - 1)
    RstOperadores.MoveNext
    Next
    RstTurnos.Update
    End If
    Next

    RstTurnos.MoveFirst
    Do While Not RstTurnos.EOF
    RstOperadores.MoveFirst
    RstTurnos.Edit
    Do While Not RstOperadores.EOF
    If InStr(1, RstTurnos(2) & RstTurnos(3) & RstTurnos(4) & RstTurnos("Ausencia"), RstOperadores("Letra")) = 0 Then
    RstTurnos("Descanso") = RstTurnos("Descanso") & RstOperadores("Letra") & ","
    End If
    If RstOperadores.EOF Then RstOperadores.MoveFirst Else RstOperadores.MoveNext
    Loop
    RstTurnos("Descanso") = Mid(RstTurnos("Descanso"), 1, Len(RstTurnos("Descanso")) - 1)
    RstTurnos.Update
    RstTurnos.MoveNext
    Loop
    Set RstTurnos = Nothing: Set RstOperadores = Nothing
    MsgBox Date
    End Sub


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    dteixa
    dteixa
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 281
    Registrado : 15/01/2012

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  dteixa 20/12/2012, 02:32

    Boas Alexandre
    já testei aqui o teu codigo funcina direitinho, no entanto mantem os dois problemas já descritos por mim anteriormente MAIS UM NOVO QUE SURGIU AGORA

    1º Quando um operador esta de ferias "ausente", a escala não roda nos turnos, (os mesmos operadores trabalham sempre no mesmo turno, enquando durar a ausencia)

    2º quando há 2 operadores ou mais, ao mesmo tempo de ferias mantem o problema de cima e só mete um na coluna "ausencias"

    3º se o ultimo operador da lista estiver "ausente" o codigo para no 1º dia da ausencia

    4º falta a alternacia ou a rotatividade entre operadores nos turnos

    Desculpa a maçada mas é importante
    muito obrigado

    Ve o problema dos pontos 1 e 2 nesta imagem
    o operador B está de ferias de 01/02/2013 até 20/02/2013
    o operador C está de ferias de 15/02/2013 até 19/02/2013
    [Resolvido]Escala de Serviço Erro3Ver imagem grande
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Alexandre Neves 20/12/2012, 08:51

    Bom dia,
    1º Este problema surge porque
    a) os operadores disponíveis dão turnos certos (6 disponíveis=2+2+2)
    2º não tive oportunidade de confirmar, mas a deficiência do teste dos dados advirá dos dados disponíveis não serem significativos
    3º idem
    4º Já sabes qual a lógica da rotatividade?

    Faça um fluxograma do programa.


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    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]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Assis 20/12/2012, 12:44

    Bom dia Alexandre

    Com 3 operadores por turno e 1 operador ausente a partir do di 20 até dia 31.

    Pôe o primeiro dia de ausencia no descanso e os outros nos dias corretos

    Obrigado


    .................................................................................
    *** Só sei que nada sei ***
    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]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Assis 20/12/2012, 12:46

    Bom dia Alexandre

    Com 4 operadores por turno e 1 operador ausente a partir do dia 20 até dia 31.

    Pôe no primeiro dia de ausencia duas letras AA de 4 em 4 dias

    Obrigado


    .................................................................................
    *** Só sei que nada sei ***

    Conteúdo patrocinado


    [Resolvido]Escala de Serviço Empty Re: [Resolvido]Escala de Serviço

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 21/11/2024, 23:32