MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    [Resolvido]Função Selmed com Limitador

    Compartilhe

    edjunho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 188
    Registrado : 24/12/2011

    [Resolvido]Função Selmed com Limitador

    Mensagem  edjunho em Qua 02 Ago 2017, 02:30

    Boa noite,

    Queria a valiosa ajuda de vcs mestres.
    tenho um cadastro de candidatos que pontual dependendo das condições conforme abaixo:

    Condição A) ano completo de experiência na atividade agropecuária desenvolvida no DF.

    Pontuação:
    2,0 pontos por ano comprovado
    Pontuação máxima: 30 pontos
    Limitado a 15 anos

    Condição B) ano completo de experiência na atividade agropecuária desenvolvida FORA do Distrito Federal

    Pontuação:
    1,5 pontos por ano comprovado
    Pontuação máxima: 15 pontos
    Limitado a 10 anos


    Tenho os seguintes campos da tabela Candidato:
    Nome
    CPF
    AnoExpDF = formato DATA
    AnoExpFORA = formato DATA

    Na consulta tentei fazer assim para saber se era do DF primeiramente e a diferença de anos para poder multiplicar por 2,0 na condição A.

    Usei a seguinte sintaxe na Consulta:

    TotalAno: SeImed([UF]="DF";(DifData("yyyy";[DataTempoExpDF];Agora();"")))

    Está dando: # Erro

    e em outro campo a fórmula:

    Calculo: [TotalAno]*2 está dando: # Erro

    E como que eu posso limitar à pontuação máxima e o limitador de 15 anos?
    Que coisa difícil?!

    edjunho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 188
    Registrado : 24/12/2011

    Re: [Resolvido]Função Selmed com Limitador

    Mensagem  edjunho em Qua 02 Ago 2017, 02:52

    Também tentei por VBA:

    Private Sub Comando40_Click()

    'se for no DF
    If Me.UF = "DF" Then
    DifData "yyyy", [DataTempoExpDF], Agora() * 2, 0

    'Limitador 15
    'Pontuação máxima 30


    'se for FORA do DF
    If Me.UF <> "DF" Then
    DifData "yyyy", [DataTempoExpFORADF], Agora() * 1, 5

    Else

    End If

    End Sub

    Também não conseguir ligar/unir todas as variáveis e transformá-las em código.
    avatar
    thiagomcosta
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 231
    Registrado : 23/01/2017

    Re: [Resolvido]Função Selmed com Limitador

    Mensagem  thiagomcosta em Qua 02 Ago 2017, 13:05

    Olá!

    A pontuação pode ser calculada da seguinte maneira:

    Pontuacao: SeImed([UF]="DF";seimed(DifData("yyyy";[DataTempoExp];Agora())>=15;30; DifData("yyyy";[DataTempoExp];Agora())*2); SeImed(DifData("yyyy";[DataTempoExp];Agora())>=10; 15; DifData("yyyy";[DataTempoExp];Agora())*1,5))

    O algoritmo é o seguinte:
    Código:
    Se UF for "DF" então
      Se Experiencia for maior ou igual que 15 anos então
         Resultado igual a 30
      Senão
         Resultado igual a anos de experiencia vezes 2
    Senão for "DF" então
      Se Experiencia for maior ou igual que 10 anos então
         Resultado igual a 15
      Senão
         Resultado igual a anos de experiencia vezes 1,5

    edjunho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 188
    Registrado : 24/12/2011

    Re: [Resolvido]Função Selmed com Limitador

    Mensagem  edjunho em Qui 03 Ago 2017, 02:14

    Oi metre obrigado pela fórmula. Passei para a consulta mais gerou um erro. Mas consegui quebrar a cabeça um pouquinho e resolvi a partir da sua.
    Para escolher a UF é através de uma Combox que está vinculada a uma outra tabela de UF então troquei o DF “...SeImed([UF]="DF"...” por “1” que é o primeiro registro da tabela de UF então ficou assim:
    ...SeImed([UF]= 1 (sem aspas) e conseguiu filtrar só o que era DF. É este o pensamento mesmo?

    Outra dúvida foi o campo “DataTempoExp” que na verdade não existe na tabela. Está escrito como “DataTempoExpDF” quando for DF e outro campo “DataTempoForaDF” quando não for do DF. Resumindo: Troquei tudo para o campo “DataTempoExpDF” é esta a intenção mesmo? Ou a partir do terceiro Selmed é para usar o campo “DataTempoForaDF”?

    A outra dúvida é a seguinte: O mesmo candidato pode apresentar vários documentos diferentes que comprovem a experiência no DF. Por exemplo: Apresentou uma certidão de 2 anos no DF e também apresentou uma certidão de 10 anos no DF e depois apresentou uma declaração de 3 anos do DF. Neste caso ele teria 3 documentos pontuando para o DF. No caso daria certo com esta mesma fórmula que o Senhor me passou?
    Obrigado mais uma vez. Aprendendo muito nesta questão. Estusiasmo.
    Anexos
    Sem título.bmp
    Você não tem permissão para fazer download dos arquivos anexados.
    (172 Kb) Baixado 2 vez(es)

    edjunho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 188
    Registrado : 24/12/2011

    Re: [Resolvido]Função Selmed com Limitador

    Mensagem  edjunho em Qui 03 Ago 2017, 02:22

    Jpeg da Tabela.
    Anexos
    Sem título2.jpg
    Você não tem permissão para fazer download dos arquivos anexados.
    (20 Kb) Baixado 1 vez(es)
    avatar
    thiagomcosta
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 231
    Registrado : 23/01/2017

    Re: [Resolvido]Função Selmed com Limitador

    Mensagem  thiagomcosta em Qui 03 Ago 2017, 13:04

    Opa!

    Tenta entender bem o algortimo do que vocÊ precisa. Se não conseguir definir ele, dificilmente conseguirá fazer a consulta.
    Eu achei que tinha apenas um campo para a "Tempo de Experiencia", por isso deixei tudo com o mesmo nome.

    Neste caso, acho que nem é necessário colocar o filtro por UF, já que a informação provem de campos diferentes.
    Eu criaria, só para facilitar a vida, um campo PontuacaoDF, por exemplo, somente com os pontos da experiência no DF. Seria algo do tipo:
    Código:
    =seimed(DifData("yyyy";[DataTempoExpDF];Agora())>=15;30; DifData("yyyy";[DataTempoExpDF];Agora())*2)
    E outro campo PontuacaoOutros, por exemplo, que teria a pontuação de experiência fora do DF.
    Código:
    =SeImed(DifData("yyyy";[DataTempoExpFORADF];Agora())>=10; 15; DifData("yyyy";[DataTempoExpFORADF];Agora())*1,5)

    E depois somaria as duas pontuações.
    Somente cuidado, pois do jeito que esta calculando, com a diferença da data em relação à hoje, o tempo de experiência é dinâmico. Se a pessoa teve experiência de 2 anos, mas não trabalha mais na área, deste jeito a consulta vai continuar adicionando tempo de experiência cada vez que você a executar. A solução pode ser ter um campo com a quantidade de anos de experiência. Ou então ter 2 campos, inicio da experiência e término da experiência, e desta maneira calcular o tempo.

    Consegui ser claro ou confundi mais as coisas? hehe

    edjunho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 188
    Registrado : 24/12/2011

    Re: [Resolvido]Função Selmed com Limitador

    Mensagem  edjunho em Qui 03 Ago 2017, 21:28

    Fantástico!!!! você realmente pegou o espírito da coisa!!!!
    Foi bastante claro.

    A ideia foi brilhante. Separar os campos para DF e FORA do DF com pontuação individual.
    Vou fazer a noite em casa e te retorno amigo.

    Quanto ao tempo dinâmico que falastes. Este DifData pega precisamente o ano fechado ou arredonda para ano?
    Por exemplo: Se a data inicial for 03/08/2016 e hoje fosse 02/08/2017. O campo não poderia calcular 01 ano ainda pois faltaria um dia para completar 01 ano e pontuar se fosse o caso. Esta fórmula é para este contexto mesmo?
    avatar
    thiagomcosta
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 231
    Registrado : 23/01/2017

    Re: [Resolvido]Função Selmed com Limitador

    Mensagem  thiagomcosta em Sex 04 Ago 2017, 13:06

    Opa!
    Quanto à função, acho que você vai ter o que deseja se utilizar o parâmetro "d" e dividir por 365.

    Veja o que diz no help do Office sobre a utilização do parametro "yyyy" na função Datediff:
    "Ao comparar 31 de dezembro com 1º de janeiro do ano imediatamente seguinte, DateDiff para Ano ("yyyy") retornará 1, mesmo que tenha se passado apenas um dia."

    edjunho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 188
    Registrado : 24/12/2011

    Re: [Resolvido]Função Selmed com Limitador

    Mensagem  edjunho em Ter 08 Ago 2017, 02:26

    Fiz assim:

    Uma coluna para DF:

    Pontos no DF: Soma(SeImed([UF]=1;SeImed(DifData("yyyy";[DataTempoExpDF];Agora())>=15;30;DifData("yyyy";[DataTempoExpDF];Agora())*2)))

    Outra para FORA do DF:

    PontosForaDF: Soma(SeImed([UF]<>1;SeImed(DifData("yyyy";[DataTempoExpFORADF];Data())>=10;15;DifData("yyyy";[DataTempoExpFORADF];Data())*1,5)))


    Como posso somar isso em um Subformulário para cada candidato?
    avatar
    thiagomcosta
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 231
    Registrado : 23/01/2017

    Re: [Resolvido]Função Selmed com Limitador

    Mensagem  thiagomcosta em Ter 08 Ago 2017, 13:50

    Só criar uma campo somando estes dois:
    PontosTotal: [PontosnoDF] + [PontosForaDF]

    edjunho
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 188
    Registrado : 24/12/2011

    Re: [Resolvido]Função Selmed com Limitador

    Mensagem  edjunho em Qui 10 Ago 2017, 01:59

    Valeu tiago!!!! Obrigado pela preciosa ajuda.

      Data/hora atual: Ter 21 Nov 2017, 19:11